/* * Copyright (c) Contributors to the Open 3D Engine Project. * For complete copyright and license terms please see the LICENSE at the root of this distribution. * * SPDX-License-Identifier: Apache-2.0 OR MIT * */ #include #include using namespace AWSCoreTestingUtils; using OBJECT_TYPE = TestObject; using ARRAY_TYPE = AZStd::vector; using ARRAY_OF_ARRAY_TYPE = AZStd::vector>; using ARRAY_OF_OBJECT_TYPE = AZStd::vector>; using JsonReaderTest = AWSCoreFixture; template void TestJsonReaderSuccess(const ValueType& expectedValue, const char* valueString) { Aws::StringStream stringStream{TestObjectJson(valueString).c_str()}; AWSCore::JsonInputStream jsonStream{stringStream}; TestObject object; AZStd::string errorMessage; bool ok = AWSCore::JsonReader::ReadObject(jsonStream, object, errorMessage); ValueType& actualValue = object.value; ASSERT_TRUE(ok); ASSERT_TRUE(errorMessage.empty()); ASSERT_EQ(actualValue, expectedValue); } template void TestJsonReaderFailure(const char* valueString) { Aws::StringStream stringStream{TestObjectJson(valueString).c_str()}; AWSCore::JsonInputStream jsonStream{stringStream}; TestObject object; AZStd::string errorMessage; bool ok = AWSCore::JsonReader::ReadObject(jsonStream, object, errorMessage); ASSERT_FALSE(ok); ASSERT_FALSE(errorMessage.empty()); puts(errorMessage.c_str()); } TEST_F(JsonReaderTest, ReadObject_ReadAsStringType_GetExpectedResult) { TestJsonReaderSuccess(STRING_VALUE, STRING_VALUE_JSON); TestJsonReaderFailure(INT_VALUE_STRING); } TEST_F(JsonReaderTest, ReadObject_ReadAsBooleanType_GetExpectedResult) { TestJsonReaderSuccess(BOOL_VALUE, BOOL_VALUE_STRING); TestJsonReaderFailure(STRING_VALUE_JSON); } TEST_F(JsonReaderTest, ReadObject_ReadAsIntType_GetExpectedResult) { TestJsonReaderSuccess(INT_VALUE, INT_VALUE_STRING); TestJsonReaderSuccess(UINT_VALUE, UINT_VALUE_STRING); TestJsonReaderFailure(UINT_VALUE_MAX_STRING); TestJsonReaderFailure(INT64_VALUE_STRING); TestJsonReaderFailure(UINT64_VALUE_STRING); TestJsonReaderFailure(DOUBLE_VALUE_STRING); TestJsonReaderFailure(STRING_VALUE_JSON); } TEST_F(JsonReaderTest, ReadObject_ReadAsUnsignedIntType_GetExpectedResult) { TestJsonReaderFailure(INT_VALUE_STRING); TestJsonReaderSuccess(UINT_VALUE, UINT_VALUE_STRING); TestJsonReaderFailure(INT64_VALUE_STRING); TestJsonReaderFailure(UINT64_VALUE_STRING); TestJsonReaderFailure(DOUBLE_VALUE_STRING); TestJsonReaderFailure(STRING_VALUE_JSON); } TEST_F(JsonReaderTest, ReadObject_ReadAsInt64Type_GetExpectedResult) { TestJsonReaderSuccess(INT_VALUE, INT_VALUE_STRING); TestJsonReaderSuccess(UINT_VALUE, UINT_VALUE_STRING); TestJsonReaderSuccess(INT64_VALUE, INT64_VALUE_STRING); TestJsonReaderSuccess(UINT64_VALUE, UINT64_VALUE_STRING); TestJsonReaderFailure(UINT64_VALUE_MAX_STRING); TestJsonReaderFailure(DOUBLE_VALUE_STRING); TestJsonReaderFailure(STRING_VALUE_JSON); } TEST_F(JsonReaderTest, ReadObject_ReadAsUnsignedInt64Type_GetExpectedResult) { TestJsonReaderFailure(INT_VALUE_STRING); TestJsonReaderSuccess(UINT_VALUE, UINT_VALUE_STRING); TestJsonReaderFailure(INT64_VALUE_STRING); TestJsonReaderSuccess(UINT64_VALUE, UINT64_VALUE_STRING); TestJsonReaderFailure(DOUBLE_VALUE_STRING); TestJsonReaderFailure(STRING_VALUE_JSON); } TEST_F(JsonReaderTest, ReadObject_ReadAsDoubleType_GetExpectedResult) { TestJsonReaderSuccess(INT_VALUE, INT_VALUE_STRING); TestJsonReaderSuccess(UINT_VALUE, UINT_VALUE_STRING); TestJsonReaderSuccess(INT64_VALUE, INT64_VALUE_STRING); TestJsonReaderSuccess(UINT64_VALUE, UINT64_VALUE_STRING); TestJsonReaderSuccess(DOUBLE_VALUE, DOUBLE_VALUE_STRING); TestJsonReaderFailure(STRING_VALUE_JSON); } TEST_F(JsonReaderTest, ReadObject_ReadAsObjectType_GetExpectedResult) { const OBJECT_TYPE OBJECT_VALUE{"s"}; TestJsonReaderSuccess(OBJECT_VALUE, OBJECT_VALUE_JSON); TestJsonReaderFailure(STRING_VALUE_JSON); TestJsonReaderFailure(ARRAY_VALUE_JSON); } TEST_F(JsonReaderTest, ReadObject_ReadAsArrayType_GetExpectedResult) { TestJsonReaderFailure(OBJECT_VALUE_JSON); TestJsonReaderFailure(STRING_VALUE_JSON); const ARRAY_TYPE ARRAY_VALUE{"a", "b", "c"}; TestJsonReaderSuccess(ARRAY_VALUE, ARRAY_VALUE_JSON); } TEST_F(JsonReaderTest, ReadObject_ReadAsNestedArrayType_GetExpectedResult) { const ARRAY_OF_ARRAY_TYPE ARRAY_OF_ARRAY_VALUE{{"a1", "b1", "c1"}, {"a2", "b2", "c2"}}; TestJsonReaderSuccess(ARRAY_OF_ARRAY_VALUE, ARRAY_OF_ARRAY_VALUE_JSON); const ARRAY_OF_OBJECT_TYPE ARRAY_OF_OBJECT_VALUE{{"s1"}, {"s2"}}; TestJsonReaderSuccess(ARRAY_OF_OBJECT_VALUE, ARRAY_OF_OBJECT_VALUE_JSON); }