Make sure that JSON strings can contain characters which need to be
escaped (double quotes, backslashes, tabs, etc.) and that JSON objects
formatted into strings can be nested into strings.
---
tests/virjsontest.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 66 insertions(+)
diff --git a/tests/virjsontest.c b/tests/virjsontest.c
index a6e158179..30457d118 100644
--- a/tests/virjsontest.c
+++ b/tests/virjsontest.c
@@ -365,7 +365,67 @@ testJSONDeflatten(const void *data)
VIR_FREE(actual);
return ret;
+}
+
+
+static int
+testJSONEscapeObj(const void *data ATTRIBUTE_UNUSED)
+{
+ virJSONValuePtr json = NULL;
+ virJSONValuePtr nestjson = NULL;
+ virJSONValuePtr parsejson = NULL;
+ char *neststr = NULL;
+ char *result = NULL;
+ const char *parsednestedstr;
+ int ret = -1;
+
+ if (virJSONValueObjectCreate(&nestjson,
+ "s:stringkey", "stringvalue",
+ "i:numberkey", 1234,
+ "b:booleankey", false, NULL) < 0) {
+ VIR_TEST_VERBOSE("failed to create nested json object");
+ goto cleanup;
+ }
+
+ if (!(neststr = virJSONValueToString(nestjson, false))) {
+ VIR_TEST_VERBOSE("failed to format nested json object");
+ goto cleanup;
+ }
+
+ if (virJSONValueObjectCreate(&json, "s:test", neststr, NULL) < 0) {
+ VIR_TEST_VERBOSE("Failed to create json object");
+ goto cleanup;
+ }
+
+ if (!(result = virJSONValueToString(json, false))) {
+ VIR_TEST_VERBOSE("Failed to format json object");
+ goto cleanup;
+ }
+
+ if (!(parsejson = virJSONValueFromString(result))) {
+ VIR_TEST_VERBOSE("Failed to parse JSON with nested JSON in string");
+ goto cleanup;
+ }
+ if (!(parsednestedstr = virJSONValueObjectGetString(parsejson, "test"))) {
+ VIR_TEST_VERBOSE("Failed to retrieve string containing nested json");
+ goto cleanup;
+ }
+
+ if (STRNEQ(parsednestedstr, neststr)) {
+ virTestDifference(stderr, neststr, parsednestedstr);
+ goto cleanup;
+ }
+
+ ret = 0;
+
+ cleanup:
+ VIR_FREE(neststr);
+ VIR_FREE(result);
+ virJSONValueFree(json);
+ virJSONValueFree(nestjson);
+ virJSONValueFree(parsejson);
+ return ret;
}
@@ -490,6 +550,10 @@ mymain(void)
DO_TEST_PARSE("integer", "1", NULL);
DO_TEST_PARSE("boolean", "true", NULL);
DO_TEST_PARSE("null", "null", NULL);
+
+ DO_TEST_PARSE("escaping symbols",
"[\"\\\"\\t\\n\\\\\"]", NULL);
+ DO_TEST_PARSE("escaped strings",
"[\"{\\\"blurb\\\":\\\"test\\\"}\"]", NULL);
+
DO_TEST_PARSE_FAIL("incomplete keyword", "tr");
DO_TEST_PARSE_FAIL("overdone keyword", "[ truest ]");
DO_TEST_PARSE_FAIL("unknown keyword", "huh");
@@ -522,6 +586,8 @@ mymain(void)
DO_TEST_FULL("lookup with correct type", Lookup,
"{ \"a\": {}, \"b\": 1, \"c\":
\"str\", \"d\": [] }",
NULL, true);
+ DO_TEST_FULL("create object with nested json in attribute", EscapeObj,
+ NULL, NULL, true);
#define DO_TEST_DEFLATTEN(name, pass) \
DO_TEST_FULL(name, Deflatten, name, NULL, pass)
--
2.12.2