| 892 CxJsonWriter writer = cxJsonWriterCompact(); |
892 CxJsonWriter writer = cxJsonWriterCompact(); |
| 893 CxBuffer buf; |
893 CxBuffer buf; |
| 894 cxBufferInit(&buf, NULL, 32, NULL, 0); |
894 cxBufferInit(&buf, NULL, 32, NULL, 0); |
| 895 CX_TEST_DO { |
895 CX_TEST_DO { |
| 896 // test default settings (6 digits) |
896 // test default settings (6 digits) |
| 897 cxJsonWrite(&buf,num, cxBufferWriteFunc, &writer); |
897 cxJsonWrite(&buf, num, cxBufferWriteFunc, &writer); |
| 898 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), CX_STR("3.141592"))); |
898 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), CX_STR("3.141592"))); |
| 899 |
899 |
| 900 // test too many digits |
900 // test too many digits |
| 901 cxBufferReset(&buf); |
901 cxBufferReset(&buf); |
| 902 writer.frac_max_digits = 200; |
902 writer.frac_max_digits = 200; |
| 935 cxJsonWrite(&buf, num, cxBufferWriteFunc, &writer); |
935 cxJsonWrite(&buf, num, cxBufferWriteFunc, &writer); |
| 936 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), CX_STR("5.1122e+23"))); |
936 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), CX_STR("5.1122e+23"))); |
| 937 } |
937 } |
| 938 cxBufferDestroy(&buf); |
938 cxBufferDestroy(&buf); |
| 939 cxJsonValueFree(num); |
939 cxJsonValueFree(num); |
| |
940 } |
| |
941 |
| |
942 CX_TEST(test_json_write_string_escape) { |
| |
943 /** |
| |
944 * According to RFC-8259 we have to test the following characters: |
| |
945 * " quotation mark |
| |
946 * \ reverse solidus |
| |
947 * / solidus |
| |
948 * b backspace |
| |
949 * f form feed |
| |
950 * n line feed |
| |
951 * r carriage return |
| |
952 * t tab |
| |
953 * And all other control characters must be encoded uXXXX - in our example the bell character. |
| |
954 * Also, all unicode characters are encoded that way - in our example the 'ö'. |
| |
955 */ |
| |
956 CxJsonValue* str = cxJsonCreateString(NULL, |
| |
957 "hello\twörld\r\nthis/is\\a \"string\"\b in \a string\f"); |
| |
958 CxJsonWriter writer = cxJsonWriterCompact(); |
| |
959 CxBuffer buf; |
| |
960 cxBufferInit(&buf, NULL, 128, NULL, 0); |
| |
961 CX_TEST_DO { |
| |
962 cxJsonWrite(&buf, str, cxBufferWriteFunc, &writer); |
| |
963 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), |
| |
964 CX_STR("\"hello\\tw\\u00c3\\u00b6rld\\r\\nthis\\/is\\\\a \\\"string\\\"\\b in \\u0007 string\\f\""))); |
| |
965 } |
| |
966 cxBufferDestroy(&buf); |
| |
967 cxJsonValueFree(str); |
| |
968 } |
| |
969 |
| |
970 CX_TEST(test_json_write_name_escape) { |
| |
971 CxJsonValue* obj = cxJsonCreateObj(NULL); |
| |
972 cxJsonObjPutLiteral(obj, |
| |
973 CX_STR("hello\twörld\r\nthis/is\\a \"string\"\b in \a string\f"), CX_JSON_TRUE); |
| |
974 CxJsonWriter writer = cxJsonWriterCompact(); |
| |
975 CxBuffer buf; |
| |
976 cxBufferInit(&buf, NULL, 128, NULL, 0); |
| |
977 CX_TEST_DO { |
| |
978 cxJsonWrite(&buf, obj, cxBufferWriteFunc, &writer); |
| |
979 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), |
| |
980 CX_STR("{\"hello\\tw\\u00c3\\u00b6rld\\r\\nthis\\/is\\\\a \\\"string\\\"\\b in \\u0007 string\\f\":true}"))); |
| |
981 } |
| |
982 cxBufferDestroy(&buf); |
| |
983 cxJsonValueFree(obj); |
| 940 } |
984 } |
| 941 |
985 |
| 942 CxTestSuite *cx_test_suite_json(void) { |
986 CxTestSuite *cx_test_suite_json(void) { |
| 943 CxTestSuite *suite = cx_test_suite_new("json"); |
987 CxTestSuite *suite = cx_test_suite_new("json"); |
| 944 |
988 |
| 960 cx_test_register(suite, test_json_write_default_format); |
1004 cx_test_register(suite, test_json_write_default_format); |
| 961 cx_test_register(suite, test_json_write_pretty_default_spaces); |
1005 cx_test_register(suite, test_json_write_pretty_default_spaces); |
| 962 cx_test_register(suite, test_json_write_pretty_default_tabs); |
1006 cx_test_register(suite, test_json_write_pretty_default_tabs); |
| 963 cx_test_register(suite, test_json_write_pretty_preserve_order); |
1007 cx_test_register(suite, test_json_write_pretty_preserve_order); |
| 964 cx_test_register(suite, test_json_write_frac_max_digits); |
1008 cx_test_register(suite, test_json_write_frac_max_digits); |
| |
1009 cx_test_register(suite, test_json_write_string_escape); |
| |
1010 cx_test_register(suite, test_json_write_name_escape); |
| 965 |
1011 |
| 966 return suite; |
1012 return suite; |
| 967 } |
1013 } |
| 968 |
1014 |