616 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
616 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
617 } |
617 } |
618 cx_testing_allocator_destroy(&talloc); |
618 cx_testing_allocator_destroy(&talloc); |
619 } |
619 } |
620 |
620 |
|
621 CX_TEST(test_json_create_value) { |
|
622 CxTestingAllocator talloc; |
|
623 cx_testing_allocator_init(&talloc); |
|
624 CxAllocator *allocator = &talloc.base; |
|
625 CX_TEST_DO { |
|
626 /* |
|
627 * This is the value we want to create in this test: |
|
628 * |
|
629 * { |
|
630 * "bool": false, |
|
631 * "int": 47, |
|
632 * "strings": [ "hello", "world" ], |
|
633 * "nested": { |
|
634 * "string": "test", |
|
635 * "floats": [ 3.1415, 47.11, 8.15 ], |
|
636 * "ints": [ 4, 8, 15, 16, 23, 42 ], |
|
637 * "literals": [ true, null, false ] |
|
638 * } |
|
639 * } |
|
640 */ |
|
641 |
|
642 |
|
643 // create the object |
|
644 CxJsonValue *obj = cxJsonCreateObj(allocator); |
|
645 CX_TEST_ASSERT(obj != NULL); |
|
646 CX_TEST_ASSERT(cxJsonIsObject(obj)); |
|
647 CX_TEST_ASSERT(obj->allocator == allocator); |
|
648 |
|
649 // add the members |
|
650 { |
|
651 cxJsonObjPutLiteral(obj, CX_STR("bool"), CX_JSON_FALSE); |
|
652 cxJsonObjPutInteger(obj, CX_STR("int"), 47); |
|
653 CxJsonValue *strings = cxJsonObjPutArr(obj, CX_STR("strings")); |
|
654 CX_TEST_ASSERT(strings != NULL); |
|
655 CX_TEST_ASSERT(cxJsonIsArray(strings)); |
|
656 const char* str[] = {"hello", "world"}; |
|
657 CX_TEST_ASSERT(0 == cxJsonArrAddStrings(strings, str, 2)); |
|
658 |
|
659 CxJsonValue *nested = cxJsonObjPutObj(obj, CX_STR("nested")); |
|
660 CX_TEST_ASSERT(nested != NULL); |
|
661 CX_TEST_ASSERT(cxJsonIsObject(nested)); |
|
662 cxJsonObjPutCxString(nested, CX_STR("string"), CX_STR("test")); |
|
663 |
|
664 cxJsonArrAddNumbers(cxJsonObjPutArr(nested, CX_STR("floats")), |
|
665 (double[]){3.1415, 47.11, 8.15}, 3); |
|
666 cxJsonArrAddIntegers(cxJsonObjPutArr(nested, CX_STR("ints")), |
|
667 (int64_t[]){4, 8, 15, 16, 23, 42}, 6); |
|
668 cxJsonArrAddLiterals(cxJsonObjPutArr(nested, CX_STR("literals")), |
|
669 (CxJsonLiteral[]){CX_JSON_TRUE, CX_JSON_NULL, CX_JSON_FALSE}, 3); |
|
670 } |
|
671 |
|
672 // verify the contents |
|
673 { |
|
674 CX_TEST_ASSERT(cxJsonIsFalse(cxJsonObjGet(obj, "bool"))); |
|
675 CX_TEST_ASSERT(47 == cxJsonAsInteger(cxJsonObjGet(obj, "int"))); |
|
676 CxJsonValue *strings = cxJsonObjGet(obj, "strings"); |
|
677 CX_TEST_ASSERT(cxJsonIsArray(strings)); |
|
678 CX_TEST_ASSERT(2 == cxJsonArrSize(strings)); |
|
679 CX_TEST_ASSERT(0 == cx_strcmp(CX_STR("hello"), cxJsonAsCxString(cxJsonArrGet(strings, 0)))); |
|
680 CX_TEST_ASSERT(0 == cx_strcmp(CX_STR("world"), cxJsonAsCxString(cxJsonArrGet(strings, 1)))); |
|
681 |
|
682 CxJsonValue *nested = cxJsonObjGet(obj, "nested"); |
|
683 CX_TEST_ASSERT(cxJsonIsObject(nested)); |
|
684 CX_TEST_ASSERT(0 == strcmp("test", cxJsonAsString(cxJsonObjGet(nested, "string")))); |
|
685 CxJsonValue *floats = cxJsonObjGet(nested, "floats"); |
|
686 CX_TEST_ASSERT(cxJsonIsArray(floats)); |
|
687 CX_TEST_ASSERT(3 == cxJsonArrSize(floats)); |
|
688 CX_TEST_ASSERT(3.1415 == cxJsonAsDouble(cxJsonArrGet(floats, 0))); |
|
689 CX_TEST_ASSERT(47.11 == cxJsonAsDouble(cxJsonArrGet(floats, 1))); |
|
690 CX_TEST_ASSERT(8.15 == cxJsonAsDouble(cxJsonArrGet(floats, 2))); |
|
691 CxJsonValue *ints = cxJsonObjGet(nested, "ints"); |
|
692 CX_TEST_ASSERT(cxJsonIsArray(ints)); |
|
693 CX_TEST_ASSERT(6 == cxJsonArrSize(ints)); |
|
694 CX_TEST_ASSERT(4 == cxJsonAsInteger(cxJsonArrGet(ints, 0))); |
|
695 CX_TEST_ASSERT(8 == cxJsonAsInteger(cxJsonArrGet(ints, 1))); |
|
696 CX_TEST_ASSERT(15 == cxJsonAsInteger(cxJsonArrGet(ints, 2))); |
|
697 CX_TEST_ASSERT(16 == cxJsonAsInteger(cxJsonArrGet(ints, 3))); |
|
698 CX_TEST_ASSERT(23 == cxJsonAsInteger(cxJsonArrGet(ints, 4))); |
|
699 CX_TEST_ASSERT(42 == cxJsonAsInteger(cxJsonArrGet(ints, 5))); |
|
700 CxJsonValue *literals = cxJsonObjGet(nested, "literals"); |
|
701 CX_TEST_ASSERT(cxJsonIsArray(literals)); |
|
702 CX_TEST_ASSERT(3 == cxJsonArrSize(literals)); |
|
703 CX_TEST_ASSERT(cxJsonIsTrue(cxJsonArrGet(literals, 0))); |
|
704 CX_TEST_ASSERT(cxJsonIsNull(cxJsonArrGet(literals, 1))); |
|
705 CX_TEST_ASSERT(cxJsonIsFalse(cxJsonArrGet(literals, 2))); |
|
706 } |
|
707 |
|
708 // destroy the value and verify the allocations |
|
709 cxJsonValueFree(obj); |
|
710 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
|
711 } |
|
712 cx_testing_allocator_destroy(&talloc); |
|
713 } |
|
714 |
621 CxTestSuite *cx_test_suite_json(void) { |
715 CxTestSuite *cx_test_suite_json(void) { |
622 CxTestSuite *suite = cx_test_suite_new("json"); |
716 CxTestSuite *suite = cx_test_suite_new("json"); |
623 |
717 |
624 cx_test_register(suite, test_json_init_default); |
718 cx_test_register(suite, test_json_init_default); |
625 cx_test_register(suite, test_json_simple_object); |
719 cx_test_register(suite, test_json_simple_object); |