tests: json: test JSON_OBJ_DESCR_*_NAMED

Add tests for new macro helpers that allow JSON field names to differ
from their corresponding C struct field names. These pass.

Signed-off-by: Marti Bolivar <marti.bolivar@linaro.org>
This commit is contained in:
Marti Bolivar 2017-05-31 12:40:30 -04:00 committed by Anas Nashif
parent 44499768a8
commit 7a7bc707d1

View File

@ -22,6 +22,11 @@ struct test_struct {
struct test_nested some_nested_struct;
int some_array[16];
size_t some_array_len;
bool another_bxxl; /* JSON field: "another_b!@l" */
bool if_; /* JSON: "if" */
int another_array[10]; /* JSON: "another-array" */
size_t another_array_len;
struct test_nested xnother_nexx; /* JSON: "4nother_ne$+" */
};
static const struct json_obj_descr nested_descr[] = {
@ -39,6 +44,15 @@ static const struct json_obj_descr test_descr[] = {
nested_descr),
JSON_OBJ_DESCR_ARRAY(struct test_struct, some_array,
16, some_array_len, JSON_TOK_NUMBER),
JSON_OBJ_DESCR_PRIM_NAMED(struct test_struct, "another_b!@l",
another_bxxl, JSON_TOK_TRUE),
JSON_OBJ_DESCR_PRIM_NAMED(struct test_struct, "if",
if_, JSON_TOK_TRUE),
JSON_OBJ_DESCR_ARRAY_NAMED(struct test_struct, "another-array",
another_array, 10, another_array_len,
JSON_TOK_NUMBER),
JSON_OBJ_DESCR_OBJECT_NAMED(struct test_struct, "4nother_ne$+",
xnother_nexx, nested_descr),
};
static void test_json_encoding(void)
@ -57,14 +71,33 @@ static void test_json_encoding(void)
.some_array[2] = 8,
.some_array[3] = 16,
.some_array[4] = 32,
.some_array_len = 5
.some_array_len = 5,
.another_bxxl = true,
.if_ = false,
.another_array[0] = 2,
.another_array[1] = 3,
.another_array[2] = 5,
.another_array[3] = 7,
.another_array_len = 4,
.xnother_nexx = {
.nested_int = 1234,
.nested_bool = true,
.nested_string = "no escape necessary",
},
};
char encoded[] = "{\"some_string\":\"zephyr 123\","
"\"some_int\":42,\"some_bool\":true,"
"\"some_nested_struct\":{\"nested_int\":-1234,"
"\"nested_bool\":false,\"nested_string\":"
"\"this should be escaped: \\t\"},"
"\"some_array\":[1,4,8,16,32]}";
"\"some_array\":[1,4,8,16,32],"
"\"another_b!@l\":true,"
"\"if\":false,"
"\"another-array\":[2,3,5,7],"
"\"4nother_ne$+\":{\"nested_int\":1234,"
"\"nested_bool\":true,"
"\"nested_string\":\"no escape necessary\"}"
"}";
char buffer[sizeof(encoded)];
int ret;
@ -89,8 +122,15 @@ static void test_json_decoding(void)
"\"nested_bool\":false,\t"
"\"nested_string\":\"this should be escaped: \\t\"},"
"\"some_array\":[11,22, 33,\t45,\n299]"
"\"another_b!@l\":true,"
"\"if\":false,"
"\"another-array\":[2,3,5,7],"
"\"4nother_ne$+\":{\"nested_int\":1234,"
"\"nested_bool\":true,"
"\"nested_string\":\"no escape necessary\"}"
"}";
const int expected_array[] = { 11, 22, 33, 45, 299 };
const int expected_other_array[] = { 2, 3, 5, 7 };
int ret;
ret = json_obj_parse(encoded, sizeof(encoded) - 1, test_descr,
@ -114,6 +154,22 @@ static void test_json_decoding(void)
zassert_true(!memcmp(ts.some_array, expected_array,
sizeof(expected_array)),
"Array decoded with expected values");
zassert_true(ts.another_bxxl,
"Named boolean (special chars) decoded correctly");
zassert_false(ts.if_,
"Named boolean (reserved word) decoded correctly");
zassert_equal(ts.another_array_len, 4,
"Named array has correct number of items");
zassert_true(!memcmp(ts.another_array, expected_other_array,
sizeof(expected_other_array)),
"Decoded named array with expected values");
zassert_equal(ts.xnother_nexx.nested_int, 1234,
"Named nested integer decoded correctly");
zassert_equal(ts.xnother_nexx.nested_bool, true,
"Named nested boolean decoded correctly");
zassert_true(!strcmp(ts.xnother_nexx.nested_string,
"no escape necessary"),
"Named nested string decoded correctly");
}
static void test_json_invalid_unicode(void)