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