summaryrefslogtreecommitdiff
path: root/tools/slang-unit-test/unit-test-json.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/slang-unit-test/unit-test-json.cpp')
-rw-r--r--tools/slang-unit-test/unit-test-json.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/tools/slang-unit-test/unit-test-json.cpp b/tools/slang-unit-test/unit-test-json.cpp
index 2d2874cc8..b861465c8 100644
--- a/tools/slang-unit-test/unit-test-json.cpp
+++ b/tools/slang-unit-test/unit-test-json.cpp
@@ -316,5 +316,45 @@ SLANG_UNIT_TEST(json)
SLANG_CHECK(container->areEqual(a, c));
}
+
+ {
+ RefPtr<JSONContainer> container = new JSONContainer(&sourceManager);
+ const char aText[] = "{ \"a\" : \"Hi!\", \"b\" : 20.0, \"c\" : \"Hello\", \"d\" : 30, \"e\": null, \"f\": true }";
+
+ JSONBuilder builder(container);
+ SLANG_CHECK(SLANG_SUCCEEDED(_parse(aText, &sink, &builder)));
+ const JSONValue rootValue = builder.getRootValue();
+
+ List<PersistentJSONValue> values;
+
+ for (char c = 'a'; c <= 'f'; c++)
+ {
+ const char name[] = { c, 0 };
+ JSONKey key = container->getKey(UnownedStringSlice(name, 1));
+ auto value = container->findObjectValue(rootValue, key);
+
+ SLANG_CHECK(value.type != JSONValue::Type::Invalid);
+
+ PersistentJSONValue persistentValue(value, container);
+ values.add(persistentValue);
+
+ PersistentJSONValue copyValue(persistentValue);
+ PersistentJSONValue assignValue;
+ assignValue = persistentValue;
+
+ SLANG_CHECK(copyValue == persistentValue);
+ SLANG_CHECK(assignValue == persistentValue);
+ }
+
+ // Destroy the container
+ container.setNull();
+
+ SLANG_CHECK(values[0].getSlice() == "Hi!");
+ SLANG_CHECK(values[1].asFloat() == 20.0f);
+ SLANG_CHECK(values[2].getSlice() == "Hello");
+ SLANG_CHECK(values[3].asInteger() == 30);
+ SLANG_CHECK(values[4].type == JSONValue::Type::Null);
+ SLANG_CHECK(values[5].asBool() == true);
+ }
}