ExpressionEngineTests.cpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include <AzCore/UnitTest/TestTypes.h>
  9. #include <gtest/gtest-param-test.h>
  10. #include <ExpressionEvaluation/ExpressionEngine.h>
  11. #include <Tests/ExpressionEngineTestFixture.h>
  12. #include <ExpressionEngine/ExpressionPrimitive.h>
  13. #include <ExpressionEngine/ExpressionVariable.h>
  14. #include <ExpressionEngine/InternalTypes.h>
  15. namespace ExpressionEvaluation
  16. {
  17. using namespace UnitTest;
  18. TEST_F(ExpressionEngineTestFixture, ExpressionEngine_CoreTest_TestFixture)
  19. {
  20. ExpressionResult treeResult;
  21. ConfirmFailure(treeResult);
  22. treeResult = 2.0;
  23. ConfirmResult<double>(treeResult, 2.0);
  24. AZStd::string resultString("MyTestString");
  25. treeResult = resultString;
  26. ConfirmResult<AZStd::string>(treeResult, resultString);
  27. }
  28. TEST_F(ExpressionEngineTestFixture, ExpressionEngine_CoreTest_NumericPrimitiveParser)
  29. {
  30. NumericPrimitiveParser numericParser;
  31. {
  32. ExpressionElementParser::ParseResult result = numericParser.ParseElement("123", 0);
  33. EXPECT_EQ(result.m_charactersConsumed, 3);
  34. EXPECT_EQ(result.m_element.m_id, InternalTypes::Primitive);
  35. if (result.m_element.m_id == InternalTypes::Primitive)
  36. {
  37. EXPECT_TRUE(result.m_element.m_extraStore.is<double>());
  38. EXPECT_DOUBLE_EQ(Utils::GetAnyValue<double>(result.m_element.m_extraStore), 123.0);
  39. }
  40. }
  41. {
  42. ExpressionElementParser::ParseResult result = numericParser.ParseElement("0.12", 0);
  43. EXPECT_EQ(result.m_charactersConsumed, 4);
  44. EXPECT_EQ(result.m_element.m_id, InternalTypes::Primitive);
  45. if (result.m_element.m_id == InternalTypes::Primitive)
  46. {
  47. EXPECT_TRUE(result.m_element.m_extraStore.is<double>());
  48. EXPECT_DOUBLE_EQ(Utils::GetAnyValue<double>(result.m_element.m_extraStore), 0.12);
  49. }
  50. }
  51. {
  52. ExpressionElementParser::ParseResult result = numericParser.ParseElement("Cats", 0);
  53. EXPECT_EQ(result.m_charactersConsumed, 0);
  54. EXPECT_EQ(result.m_element.m_id, -1);
  55. }
  56. }
  57. TEST_F(ExpressionEngineTestFixture, ExpressionEngine_CoreTest_BooleanCaseSensitiveCheck)
  58. {
  59. BooleanPrimitiveParser booleanParser;
  60. for (auto trueString : { "true", "tRuE", "TRUE" })
  61. {
  62. auto elementResult = booleanParser.ParseElement(trueString, 0);
  63. EXPECT_EQ(elementResult.m_charactersConsumed, 4);
  64. EXPECT_EQ(elementResult.m_element.m_id, InternalTypes::Primitive);
  65. if (elementResult.m_element.m_id == InternalTypes::Primitive)
  66. {
  67. EXPECT_TRUE(elementResult.m_element.m_extraStore.is<bool>());
  68. EXPECT_TRUE(Utils::GetAnyValue<bool>(elementResult.m_element.m_extraStore));
  69. }
  70. }
  71. for (auto trueString : { "false","FaLsE", "FALSE" })
  72. {
  73. auto elementResult = booleanParser.ParseElement(trueString, 0);
  74. EXPECT_EQ(elementResult.m_charactersConsumed, 5);
  75. EXPECT_EQ(elementResult.m_element.m_id, InternalTypes::Primitive);
  76. if (elementResult.m_element.m_id == InternalTypes::Primitive)
  77. {
  78. EXPECT_TRUE(elementResult.m_element.m_extraStore.is<bool>());
  79. EXPECT_FALSE(Utils::GetAnyValue<bool>(elementResult.m_element.m_extraStore));
  80. }
  81. }
  82. }
  83. TEST_F(ExpressionEngineTestFixture, ExpressionEngine_CoreTest_VariableParser)
  84. {
  85. VariableParser variableParser;
  86. ExpressionElementParser::ParseResult parseResult = variableParser.ParseElement("{Cats}*{Dogs}", 0);
  87. EXPECT_EQ(parseResult.m_charactersConsumed, 6);
  88. EXPECT_EQ(parseResult.m_element.m_id, InternalTypes::Variable);
  89. if (parseResult.m_element.m_id == InternalTypes::Variable)
  90. {
  91. VariableDescriptor descriptor = Utils::GetAnyValue<VariableDescriptor>(parseResult.m_element.m_extraStore);
  92. EXPECT_EQ(descriptor.m_displayName, AZStd::string("Cats"));
  93. EXPECT_EQ(descriptor.m_nameHash, AZ_CRC_CE("Cats"));
  94. }
  95. }
  96. }