1 #include "fct.h"
2
3 #include "AmSipHeaders.h"
4 #include "AmSipMsg.h"
5 #include "jsonArg.h"
6
7
FCTMF_SUITE_BGN(test_jsonarg)8 FCTMF_SUITE_BGN(test_jsonarg) {
9
10 FCT_TEST_BGN(json_parse_escaped) {
11 string s = "{\"jsonrpc\": \"2.0\", \"id\": \"11\", \"error\": {\"message\": \"(1062, \\\"Duplicate entry '5447' for key 'PRIMARY'\\\")\", \"code\": -32603}},";
12 // DBG("s='%s'\n",s.c_str());
13
14 AmArg rpc_params;
15 fct_chk(json2arg(s.c_str(), rpc_params));
16 } FCT_TEST_END();
17
18 FCT_TEST_BGN(json_empty_struct_parse) {
19 // string s = "{\"jsonrpc\": \"2.0\", \"result\": {\"timestamp\": 62, \"analysis\": {}}, \"id\": \"11\"}";
20 string s = "{\"result\": {}}";
21 AmArg rpc_params;
22 fct_chk(json2arg(s.c_str(), rpc_params));
23 fct_chk(isArgStruct(rpc_params["result"]));
24 } FCT_TEST_END();
25
26 FCT_TEST_BGN(json_empty_array_parse) {
27 string s = "{\"result\": []}";
28 AmArg rpc_params;
29 fct_chk(json2arg(s.c_str(), rpc_params));
30 fct_chk(isArgArray(rpc_params["result"]));
31 } FCT_TEST_END();
32
33 FCT_TEST_BGN(json_error_array_parse) {
34 string s = "{\"result\": [ :1]}";
35 AmArg rpc_params;
36 fct_chk(!json2arg(s.c_str(), rpc_params));
37 } FCT_TEST_END();
38
39 FCT_TEST_BGN(json_error_object_parse) {
40 string s = "{\"result\": { :1}}";
41 AmArg rpc_params;
42 fct_chk(!json2arg(s.c_str(), rpc_params));
43 } FCT_TEST_END();
44
45 FCT_TEST_BGN(json_empty_string_key_parse) {
46 string s = "{\"result\": {\"\" :1}}";
47 AmArg rpc_params;
48 fct_chk(json2arg(s.c_str(), rpc_params));
49 fct_chk(rpc_params["result"][""].asInt()==1);
50 } FCT_TEST_END();
51
52 FCT_TEST_BGN(json_number_e_parse) {
53 string s = "{\"result\": 0E1}";
54 // DBG("s.c_str() %s\n", s.c_str() );
55 AmArg rpc_params;
56 fct_chk(json2arg(s.c_str(), rpc_params));
57 fct_chk(isArgInt(rpc_params["result"]));
58 fct_chk(rpc_params["result"].asInt() == 0);
59 } FCT_TEST_END();
60
61 FCT_TEST_BGN(json_number_e_pow) {
62 string s = "{\"result\": 1E1}";
63 // DBG("s.c_str() %s\n", s.c_str() );
64 AmArg rpc_params;
65 fct_chk(json2arg(s.c_str(), rpc_params));
66 fct_chk(isArgInt(rpc_params["result"]) && rpc_params["result"].asInt() == 10);
67 } FCT_TEST_END();
68
69 FCT_TEST_BGN(json_number_e_pow2) {
70 string s = "{\"result\": 5e0}";
71 // DBG("s.c_str() %s\n", s.c_str() );
72 AmArg rpc_params;
73 fct_chk(json2arg(s.c_str(), rpc_params));
74 fct_chk(isArgInt(rpc_params["result"]) && rpc_params["result"].asInt() == 5);
75 } FCT_TEST_END();
76
77 FCT_TEST_BGN(json_number_e_wrong) {
78 string s = "{\"result\": 1E}";
79 // DBG("s.c_str() %s\n", s.c_str() );
80 AmArg rpc_params;
81 fct_chk(!json2arg(s.c_str(), rpc_params));
82 } FCT_TEST_END();
83
84 FCT_TEST_BGN(json_number_e_powneg1) {
85 string s = "{\"result\": 1E-1}";
86 // DBG("s.c_str() %s\n", s.c_str() );
87 AmArg rpc_params;
88 fct_chk(json2arg(s.c_str(), rpc_params));
89 // DBG("res: %s, type %d\n", AmArg::print(rpc_params["result"]).c_str(), rpc_params["result"].getType());
90
91 fct_chk(isArgDouble(rpc_params["result"]));
92 fct_chk(isArgDouble(rpc_params["result"]) && rpc_params["result"].asDouble() == 0.1);
93 } FCT_TEST_END();
94
95 FCT_TEST_BGN(json_number_float_parse) {
96 string s = "{\"result\": 1.21}";
97 // DBG("s.c_str() %s\n", s.c_str() );
98 AmArg rpc_params;
99 fct_chk(json2arg(s.c_str(), rpc_params));
100 // DBG("res: %s, type %d\n", AmArg::print(rpc_params["result"]).c_str(), rpc_params["result"].getType());
101
102 fct_chk(isArgDouble(rpc_params["result"]));
103 fct_chk(isArgDouble(rpc_params["result"]) && rpc_params["result"].asDouble() == 1.21);
104 } FCT_TEST_END();
105
106 FCT_TEST_BGN(json_tofro_equality) {
107 AmArg a1;
108 a1["test"]=1;
109 a1["test2"].push("asdf");
110 a1["test2"].push(1);
111
112 string s = arg2json(a1);
113 AmArg a2;
114 bool back_conversion_result = json2arg(s, a2);
115 fct_chk(back_conversion_result);
116 // fct_chk(a1==a2);
117 // DBG("a1 = '%s', a2 = '%s', \n", AmArg::print(a1).c_str(), AmArg::print(a2).c_str());
118 } FCT_TEST_END();
119
120 } FCTMF_SUITE_END();
121