JsonObjectHandlerTest.cpp 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  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 <aws/core/utils/memory/stl/AWSStringStream.h>
  9. #include <TestFramework/AWSCoreFixture.h>
  10. using namespace AWSCoreTestingUtils;
  11. using OBJECT_TYPE = TestObject<AZStd::string>;
  12. using ARRAY_TYPE = AZStd::vector<AZStd::string>;
  13. using ARRAY_OF_ARRAY_TYPE = AZStd::vector<AZStd::vector<AZStd::string>>;
  14. using ARRAY_OF_OBJECT_TYPE = AZStd::vector<TestObject<AZStd::string>>;
  15. using JsonReaderTest = AWSCoreFixture;
  16. template<class ValueType>
  17. void TestJsonReaderSuccess(const ValueType& expectedValue, const char* valueString)
  18. {
  19. Aws::StringStream stringStream{TestObjectJson(valueString).c_str()};
  20. AWSCore::JsonInputStream jsonStream{stringStream};
  21. TestObject<ValueType> object;
  22. AZStd::string errorMessage;
  23. bool ok = AWSCore::JsonReader::ReadObject(jsonStream, object, errorMessage);
  24. ValueType& actualValue = object.value;
  25. ASSERT_TRUE(ok);
  26. ASSERT_TRUE(errorMessage.empty());
  27. ASSERT_EQ(actualValue, expectedValue);
  28. }
  29. template<class ValueType>
  30. void TestJsonReaderFailure(const char* valueString)
  31. {
  32. Aws::StringStream stringStream{TestObjectJson(valueString).c_str()};
  33. AWSCore::JsonInputStream jsonStream{stringStream};
  34. TestObject<ValueType> object;
  35. AZStd::string errorMessage;
  36. bool ok = AWSCore::JsonReader::ReadObject(jsonStream, object, errorMessage);
  37. ASSERT_FALSE(ok);
  38. ASSERT_FALSE(errorMessage.empty());
  39. puts(errorMessage.c_str());
  40. }
  41. TEST_F(JsonReaderTest, ReadObject_ReadAsStringType_GetExpectedResult)
  42. {
  43. TestJsonReaderSuccess<AZStd::string>(STRING_VALUE, STRING_VALUE_JSON);
  44. TestJsonReaderFailure<AZStd::string>(INT_VALUE_STRING);
  45. }
  46. TEST_F(JsonReaderTest, ReadObject_ReadAsBooleanType_GetExpectedResult)
  47. {
  48. TestJsonReaderSuccess<bool>(BOOL_VALUE, BOOL_VALUE_STRING);
  49. TestJsonReaderFailure<bool>(STRING_VALUE_JSON);
  50. }
  51. TEST_F(JsonReaderTest, ReadObject_ReadAsIntType_GetExpectedResult)
  52. {
  53. TestJsonReaderSuccess<int>(INT_VALUE, INT_VALUE_STRING);
  54. TestJsonReaderSuccess<int>(UINT_VALUE, UINT_VALUE_STRING);
  55. TestJsonReaderFailure<int>(UINT_VALUE_MAX_STRING);
  56. TestJsonReaderFailure<int>(INT64_VALUE_STRING);
  57. TestJsonReaderFailure<int>(UINT64_VALUE_STRING);
  58. TestJsonReaderFailure<int>(DOUBLE_VALUE_STRING);
  59. TestJsonReaderFailure<int>(STRING_VALUE_JSON);
  60. }
  61. TEST_F(JsonReaderTest, ReadObject_ReadAsUnsignedIntType_GetExpectedResult)
  62. {
  63. TestJsonReaderFailure<unsigned>(INT_VALUE_STRING);
  64. TestJsonReaderSuccess<unsigned>(UINT_VALUE, UINT_VALUE_STRING);
  65. TestJsonReaderFailure<unsigned>(INT64_VALUE_STRING);
  66. TestJsonReaderFailure<unsigned>(UINT64_VALUE_STRING);
  67. TestJsonReaderFailure<unsigned>(DOUBLE_VALUE_STRING);
  68. TestJsonReaderFailure<unsigned>(STRING_VALUE_JSON);
  69. }
  70. TEST_F(JsonReaderTest, ReadObject_ReadAsInt64Type_GetExpectedResult)
  71. {
  72. TestJsonReaderSuccess<int64_t>(INT_VALUE, INT_VALUE_STRING);
  73. TestJsonReaderSuccess<int64_t>(UINT_VALUE, UINT_VALUE_STRING);
  74. TestJsonReaderSuccess<int64_t>(INT64_VALUE, INT64_VALUE_STRING);
  75. TestJsonReaderSuccess<int64_t>(UINT64_VALUE, UINT64_VALUE_STRING);
  76. TestJsonReaderFailure<int64_t>(UINT64_VALUE_MAX_STRING);
  77. TestJsonReaderFailure<int64_t>(DOUBLE_VALUE_STRING);
  78. TestJsonReaderFailure<int64_t>(STRING_VALUE_JSON);
  79. }
  80. TEST_F(JsonReaderTest, ReadObject_ReadAsUnsignedInt64Type_GetExpectedResult)
  81. {
  82. TestJsonReaderFailure<uint64_t>(INT_VALUE_STRING);
  83. TestJsonReaderSuccess<uint64_t>(UINT_VALUE, UINT_VALUE_STRING);
  84. TestJsonReaderFailure<uint64_t>(INT64_VALUE_STRING);
  85. TestJsonReaderSuccess<uint64_t>(UINT64_VALUE, UINT64_VALUE_STRING);
  86. TestJsonReaderFailure<uint64_t>(DOUBLE_VALUE_STRING);
  87. TestJsonReaderFailure<uint64_t>(STRING_VALUE_JSON);
  88. }
  89. TEST_F(JsonReaderTest, ReadObject_ReadAsDoubleType_GetExpectedResult)
  90. {
  91. TestJsonReaderSuccess<double>(INT_VALUE, INT_VALUE_STRING);
  92. TestJsonReaderSuccess<double>(UINT_VALUE, UINT_VALUE_STRING);
  93. TestJsonReaderSuccess<double>(INT64_VALUE, INT64_VALUE_STRING);
  94. TestJsonReaderSuccess<double>(UINT64_VALUE, UINT64_VALUE_STRING);
  95. TestJsonReaderSuccess<double>(DOUBLE_VALUE, DOUBLE_VALUE_STRING);
  96. TestJsonReaderFailure<double>(STRING_VALUE_JSON);
  97. }
  98. TEST_F(JsonReaderTest, ReadObject_ReadAsObjectType_GetExpectedResult)
  99. {
  100. const OBJECT_TYPE OBJECT_VALUE{"s"};
  101. TestJsonReaderSuccess<OBJECT_TYPE>(OBJECT_VALUE, OBJECT_VALUE_JSON);
  102. TestJsonReaderFailure<OBJECT_TYPE>(STRING_VALUE_JSON);
  103. TestJsonReaderFailure<OBJECT_TYPE>(ARRAY_VALUE_JSON);
  104. }
  105. TEST_F(JsonReaderTest, ReadObject_ReadAsArrayType_GetExpectedResult)
  106. {
  107. TestJsonReaderFailure<ARRAY_TYPE>(OBJECT_VALUE_JSON);
  108. TestJsonReaderFailure<ARRAY_TYPE>(STRING_VALUE_JSON);
  109. const ARRAY_TYPE ARRAY_VALUE{"a", "b", "c"};
  110. TestJsonReaderSuccess<ARRAY_TYPE>(ARRAY_VALUE, ARRAY_VALUE_JSON);
  111. }
  112. TEST_F(JsonReaderTest, ReadObject_ReadAsNestedArrayType_GetExpectedResult)
  113. {
  114. const ARRAY_OF_ARRAY_TYPE ARRAY_OF_ARRAY_VALUE{{"a1", "b1", "c1"}, {"a2", "b2", "c2"}};
  115. TestJsonReaderSuccess<ARRAY_OF_ARRAY_TYPE>(ARRAY_OF_ARRAY_VALUE, ARRAY_OF_ARRAY_VALUE_JSON);
  116. const ARRAY_OF_OBJECT_TYPE ARRAY_OF_OBJECT_VALUE{{"s1"}, {"s2"}};
  117. TestJsonReaderSuccess<ARRAY_OF_OBJECT_TYPE>(ARRAY_OF_OBJECT_VALUE, ARRAY_OF_OBJECT_VALUE_JSON);
  118. }