qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 3/3] Add test suite for json marshalling


From: Anthony Liguori
Subject: [Qemu-devel] [PATCH 3/3] Add test suite for json marshalling
Date: Wed, 11 Nov 2009 13:24:38 -0600

By reusing the qjson test suite.  After checking that we can demarshal, marshal
again and compared to the expected decoded value.  This doesn't work so well
for floats because they cannot be accurately represented in decimal but we
try our best.

Signed-off-by: Anthony Liguori <address@hidden>
---
 check-qjson.c |   80 +++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 75 insertions(+), 5 deletions(-)

diff --git a/check-qjson.c b/check-qjson.c
index f763de6..4b591a5 100644
--- a/check-qjson.c
+++ b/check-qjson.c
@@ -27,12 +27,13 @@ START_TEST(escaped_string)
     struct {
         const char *encoded;
         const char *decoded;
+        int skip;
     } test_cases[] = {
         { "\"\\\"\"", "\"" },
         { "\"hello world \\\"embedded string\\\"\"",
           "hello world \"embedded string\"" },
         { "\"hello world\\nwith new line\"", "hello world\nwith new line" },
-        { "\"single byte utf-8 \\u0020\"", "single byte utf-8  " },
+        { "\"single byte utf-8 \\u0020\"", "single byte utf-8  ", .skip = 1 },
         { "\"double byte utf-8 \\u00A2\"", "double byte utf-8 \xc2\xa2" },
         { "\"triple byte utf-8 \\u20AC\"", "triple byte utf-8 \xe2\x82\xac" },
         {}
@@ -50,6 +51,13 @@ START_TEST(escaped_string)
         str = qobject_to_qstring(obj);
         fail_unless(strcmp(qstring_get_str(str), test_cases[i].decoded) == 0);
 
+        if (test_cases[i].skip == 0) {
+            str = qobject_to_json(obj);
+            fail_unless(strcmp(qstring_get_str(str), test_cases[i].encoded) == 
0);
+
+            qobject_decref(obj);
+        }
+
         QDECREF(str);
     }
 }
@@ -80,6 +88,11 @@ START_TEST(simple_string)
         str = qobject_to_qstring(obj);
         fail_unless(strcmp(qstring_get_str(str), test_cases[i].decoded) == 0);
 
+        str = qobject_to_json(obj);
+        fail_unless(strcmp(qstring_get_str(str), test_cases[i].encoded) == 0);
+
+        qobject_decref(obj);
+        
         QDECREF(str);
     }
 }
@@ -149,12 +162,13 @@ START_TEST(simple_number)
     struct {
         const char *encoded;
         int64_t decoded;
+        int skip;
     } test_cases[] = {
         { "0", 0 },
         { "1234", 1234 },
         { "1", 1 },
         { "-32", -32 },
-        { "-0", 0 },
+        { "-0", 0, .skip = 1 },
         { },
     };
 
@@ -168,6 +182,13 @@ START_TEST(simple_number)
 
         qint = qobject_to_qint(obj);
         fail_unless(qint_get_int(qint) == test_cases[i].decoded);
+        if (test_cases[i].skip == 0) {
+            QString *str;
+
+            str = qobject_to_json(obj);
+            fail_unless(strcmp(qstring_get_str(str), test_cases[i].encoded) == 
0);
+            QDECREF(str);
+        }
 
         QDECREF(qint);
     }
@@ -180,11 +201,12 @@ START_TEST(float_number)
     struct {
         const char *encoded;
         double decoded;
+        int skip;
     } test_cases[] = {
         { "32.43", 32.43 },
         { "0.222", 0.222 },
         { "-32.12313", -32.12313 },
-        { "-32.20e-10", -32.20e-10 },
+        { "-32.20e-10", -32.20e-10, .skip = 1 },
         { },
     };
 
@@ -199,6 +221,14 @@ START_TEST(float_number)
         qfloat = qobject_to_qfloat(obj);
         fail_unless(qfloat_get_double(qfloat) == test_cases[i].decoded);
 
+        if (test_cases[i].skip == 0) {
+            QString *str;
+
+            str = qobject_to_json(obj);
+            fail_unless(strcmp(qstring_get_str(str), test_cases[i].encoded) == 
0);
+            QDECREF(str);
+        }
+
         QDECREF(qfloat);
     }
 }
@@ -246,6 +276,7 @@ START_TEST(keyword_literal)
 {
     QObject *obj;
     QBool *qbool;
+    QString *str;
 
     obj = qobject_from_json("true");
     fail_unless(obj != NULL);
@@ -254,6 +285,10 @@ START_TEST(keyword_literal)
     qbool = qobject_to_qbool(obj);
     fail_unless(qbool_get_int(qbool) != 0);
 
+    str = qobject_to_json(obj);
+    fail_unless(strcmp(qstring_get_str(str), "true") == 0);
+    QDECREF(str);
+
     QDECREF(qbool);
 
     obj = qobject_from_json("false");
@@ -263,6 +298,10 @@ START_TEST(keyword_literal)
     qbool = qobject_to_qbool(obj);
     fail_unless(qbool_get_int(qbool) == 0);
 
+    str = qobject_to_json(obj);
+    fail_unless(strcmp(qstring_get_str(str), "false") == 0);
+    QDECREF(str);
+
     QDECREF(qbool);
 
     obj = qobject_from_jsonf("%i", false);
@@ -385,7 +424,7 @@ START_TEST(simple_dict)
         LiteralQObject decoded;
     } test_cases[] = {
         {
-            .encoded = "{\"foo\":42,\"bar\":\"hello world\"}",
+            .encoded = "{\"foo\": 42, \"bar\": \"hello world\"}",
             .decoded = QLIT_QDICT(((LiteralQDictEntry[]){
                         { "foo", QLIT_QINT(42) },
                         { "bar", QLIT_QSTR("hello world") },
@@ -397,7 +436,7 @@ START_TEST(simple_dict)
                         { }
                     })),
         }, {
-            .encoded = "{\"foo\":43}",
+            .encoded = "{\"foo\": 43}",
             .decoded = QLIT_QDICT(((LiteralQDictEntry[]){
                         { "foo", QLIT_QINT(43) },
                         { }
@@ -408,6 +447,7 @@ START_TEST(simple_dict)
 
     for (i = 0; test_cases[i].encoded; i++) {
         QObject *obj;
+        QString *str;
 
         obj = qobject_from_json(test_cases[i].encoded);
         fail_unless(obj != NULL);
@@ -415,7 +455,16 @@ START_TEST(simple_dict)
 
         fail_unless(compare_litqobj_to_qobj(&test_cases[i].decoded, obj) == 1);
 
+        str = qobject_to_json(obj);
+        qobject_decref(obj);
+
+        obj = qobject_from_json(qstring_get_str(str));
+        fail_unless(obj != NULL);
+        fail_unless(qobject_type(obj) == QTYPE_QDICT);
+
+        fail_unless(compare_litqobj_to_qobj(&test_cases[i].decoded, obj) == 1);
         qobject_decref(obj);
+        QDECREF(str);
     }
 }
 END_TEST
@@ -453,6 +502,7 @@ START_TEST(simple_list)
 
     for (i = 0; test_cases[i].encoded; i++) {
         QObject *obj;
+        QString *str;
 
         obj = qobject_from_json(test_cases[i].encoded);
         fail_unless(obj != NULL);
@@ -460,7 +510,16 @@ START_TEST(simple_list)
 
         fail_unless(compare_litqobj_to_qobj(&test_cases[i].decoded, obj) == 1);
 
+        str = qobject_to_json(obj);
+        qobject_decref(obj);
+
+        obj = qobject_from_json(qstring_get_str(str));
+        fail_unless(obj != NULL);
+        fail_unless(qobject_type(obj) == QTYPE_QLIST);
+
+        fail_unless(compare_litqobj_to_qobj(&test_cases[i].decoded, obj) == 1);
         qobject_decref(obj);
+        QDECREF(str);
     }
 }
 END_TEST
@@ -512,6 +571,7 @@ START_TEST(simple_whitespace)
 
     for (i = 0; test_cases[i].encoded; i++) {
         QObject *obj;
+        QString *str;
 
         obj = qobject_from_json(test_cases[i].encoded);
         fail_unless(obj != NULL);
@@ -519,7 +579,17 @@ START_TEST(simple_whitespace)
 
         fail_unless(compare_litqobj_to_qobj(&test_cases[i].decoded, obj) == 1);
 
+        str = qobject_to_json(obj);
         qobject_decref(obj);
+
+        obj = qobject_from_json(qstring_get_str(str));
+        fail_unless(obj != NULL);
+        fail_unless(qobject_type(obj) == QTYPE_QLIST);
+
+        fail_unless(compare_litqobj_to_qobj(&test_cases[i].decoded, obj) == 1);
+
+        qobject_decref(obj);
+        QDECREF(str);
     }
 }
 END_TEST
-- 
1.6.2.5





reply via email to

[Prev in Thread] Current Thread [Next in Thread]