Files
y_project/yjson_t/test/is_good.c
T

523 lines
17 KiB
C

#include "ftest/ftest.h"
#include "fmock/fmock.h"
#include "json_t/json_t.h"
TEST(string_val){
char *val = "\"Hello! it's a string\"";
struct js_value *js = create_js_value_string(val, NULL);
LOG("js type = %d\n",js->code_type);
LOG("js len = %ld\n",js->length);
LOG(" js val = %s\n", js->type.string);
free_js_value(js);
}
TEST(number){
char *val = "3.14";
struct js_value *js = create_js_value_number(val, NULL);
LOG("js type = %d\n",js->code_type);
LOG("js len = %ld\n",js->length);
LOG(" js val = %Lf\n", js->type.number);
free_js_value(js);
}
TEST(object_val){
char *val = "{ \"message\" : \"Hello! it's a string\" , \"age\" : 48 , \"speaker\" : \" the president \" }";
struct js_value *js = create_js_value_object(val, NULL);
LOG("key : %s\n lenKey: %ld \n",js->type.object.key, js->type.object.key_length);
/*
LOG("value : %s\n",js->type.object.value->type.string);
LOG("value : %Lf\n",js->type.object.next_object->type.object.value->type.number);
LOG("value : %s\n",js->type.object.next_object->type.object.next_object->type.object.value->type.string);
*/
print_js_value(js);
char *rrjson = original_string_js_value(js);
printf("original :%s\n",rrjson);
char *rrjson1 = original_string_js_value(js->type.object.next_object);
printf("original 1 :%s\n",rrjson1);
free_js_value(js);
free(rrjson);
free(rrjson1);
LOG("line %d\n",__LINE__);
}
TEST(array_val){
char *val = "[ \"message\" , \"Hello! it's a string\" , { \"age\" : 48 , \"speaker\" : \" the president \" }, 45 , true ]";
//char *val = "[ \"message\" , \"Hello! it's a string\" , { \"age\" : 48 } , {\"speaker\" : \" the president \" } , 25, \"tttt\" ]";
struct js_value *js = create_js_value_array(val, NULL);
// LOG("key : %s\n lenKey: %ld \n",js->type.object.key, js->type.object.key_length);
/*
LOG("value : %s\n",js->type.object.value->type.string);
LOG("value : %Lf\n",js->type.object.next_object->type.object.value->type.number);
LOG("value : %s\n",js->type.object.next_object->type.object.next_object->type.object.value->type.string);
*/
print_js_value(js);
/*
char *rrjson = original_string_js_value(js);
printf("original :%s\n",rrjson);
char *rrjson1 = original_string_js_value(js->type.array.next_element);
printf("original 1 :%s\n",rrjson1);
*/
free_js_value(js);
// free(rrjson);
// free(rrjson1);
//LOG("%s\n",__LINE__);
LOG("line %d\n",__LINE__);
}
TEST(general_val){
char *val = "{ \"array\" : [ \"message\" , \"Hello! it's a string\" , { \"age\" : 48 , \"speaker\" : \" the president \" }, 45 , true ] }";
//char *val = "[ \"message\" , \"Hello! it's a string\" , { \"age\" : 48 } , {\"speaker\" : \" the president \" } , 25, \"tttt\" ]";
struct js_value *js = create_js_value(val, NULL);
// LOG("key : %s\n lenKey: %ld \n",js->type.object.key, js->type.object.key_length);
/*
LOG("value : %s\n",js->type.object.value->type.string);
LOG("value : %Lf\n",js->type.object.next_object->type.object.value->type.number);
LOG("value : %s\n",js->type.object.next_object->type.object.next_object->type.object.value->type.string);
*/
print_js_value(js);
/*
char *rrjson = original_string_js_value(js);
printf("original :%s\n",rrjson);
char *rrjson1 = original_string_js_value(js->type.array.next_element);
printf("original 1 :%s\n",rrjson1);
*/
free_js_value(js);
// free(rrjson);
// free(rrjson1);
LOG("line %d\n",__LINE__);
}
TEST(general_val2){
char *val = "{ \"array\" : [ \"message\" , \"Hello! it's a string\" , [{},{},[ [ ] ] ] , { \"age\" : 48 , \"speaker\" : \" the president \" } , 45 , true ] , \"second\" : 324.1 , \"person\" : { \"name\" : \"Fana\" , \"age\" : 37 , \"genre\" : \"male\" , \"married\" : false , \"note\" : [2.1,4.45,4,10, { \"math\" : 17.1, \"malagasy\" : 12, \"eps\" : [ 5, 6 , 4 ] }] } , \"nul\" : { } }";
//char *val = "{ \"array\" : [ \"message\", \"Hello! it's a string\", { \"age\" : 48, \"speaker\" : \" the president \" }, 45, true ], \"second\" : [ 324.1, 1 , { \"math\" : 17.1 } ] }";
//char *val = "[ \"message\" , \"Hello! it's a string\" , { \"age\" : 48 } , {\"speaker\" : \" the president \" } , 25, \"tttt\" ]";
struct js_value *js = create_js_value(val, NULL);
// LOG("key : %s\n lenKey: %ld \n",js->type.object.key, js->type.object.key_length);
/*
LOG("value : %s\n",js->type.object.value->type.string);
LOG("value : %Lf\n",js->type.object.next_object->type.object.value->type.number);
LOG("value : %s\n",js->type.object.next_object->type.object.next_object->type.object.value->type.string);
*/
print_js_value(js);
/*
char *rrjson = original_string_js_value(js);
printf("original :%s\n",rrjson);
char *rrjson1 = original_string_js_value(js->type.array.next_element);
printf("original 1 :%s\n",rrjson1);
*/
free_js_value(js);
LOG("line %d\n",__LINE__);
// free(rrjson);
// free(rrjson1);
}
TEST(add_val){
char *val = "{ \"array\" : [ \"message\" , \"Hello! it's a string\" , [{},{},[ [ ] ] ] , { \"age\" : 48 , \"speaker\" : \" the president \" } , 45 , true ] , \"second\" : 324.1 , \"person\" : { \"name\" : \"Fana\" , \"age\" : 37 , \"genre\" : \"male\" , \"married\" : false , \"note\" : [2.1,4.45,4,10, { \"math\" : 17.1, \"malagasy\" : 12, \"eps\" : [ 5, 6 , 4 ] }] } , \"nul\" : { } }";
//char *val = "{ \"array\" : [ \"message\", \"Hello! it's a string\", { \"age\" : 48, \"speaker\" : \" the president \" }, 45, true ], \"second\" : [ 324.1, 1 , { \"math\" : 17.1 } ] }";
//char *val = "[ \"message\" , \"Hello! it's a string\" , { \"age\" : 48 } , {\"speaker\" : \" the president \" } , 25, \"tttt\" ]";
struct js_value *js = create_js_value(val, NULL);
char *add ="{ \"add0\" : 0.0 , \"addname\" : \"Fanasina\" }";
struct js_value *js_add = create_js_value(add, NULL);
print_js_value(js);
add_js_value_index(10, js_add, &js);
print_js_value(js);
free_js_value(js);
LOG("line %d\n",__LINE__);
// free(rrjson);
// free(rrjson1);
}
TEST(append_val){
char *val = "{ \"array\" : [ \"message\" , \"Hello! it's a string\" , [{},{},[ [ ] ] ] , { \"age\" : 48 , \"speaker\" : \" the president \" } , 45 , true ] , \"second\" : 324.1 , \"person\" : { \"name\" : \"Fana\" , \"age\" : 37 , \"genre\" : \"male\" , \"married\" : false , \"note\" : [2.1,4.45,4,10, { \"math\" : 17.1, \"malagasy\" : 12, \"eps\" : [ 5, 6 , 4 ] }] } , \"nul\" : { } }";
//char *val = "{ \"array\" : [ \"message\", \"Hello! it's a string\", { \"age\" : 48, \"speaker\" : \" the president \" }, 45, true ], \"second\" : [ 324.1, 1 , { \"math\" : 17.1 } ] }";
//char *val = "[ \"message\" , \"Hello! it's a string\" , { \"age\" : 48 } , {\"speaker\" : \" the president \" } , 25, \"tttt\" ]";
struct js_value *js = create_js_value(val, NULL);
//char *add ="{ \"add0\" : 0.0 }";
char *add ="{ \"add0\" : 0.0 }";
// struct js_value *js_add = create_js_value(add, NULL);
print_js_value(js);
// add_js_value_index(10, js_add, &js);
append_js_value(js,add);
print_js_value(js);
char *add_arr ="{ \"array\" : [ 0.0 ] }";
append_js_value(js,add_arr);
print_js_value(js);
free_js_value(js);
LOG("\nline %d\n",__LINE__);
}
TEST(delete_index){
//char *val = "{ \"array\" : [ \"message\" , \"Hello! it's a string\" , [{},{},[ [ ] ] ] , { \"age\" : 48 , \"speaker\" : \" the president \" } , 45 , true ] , \"second\" : 324.1 , \"person\" : { \"name\" : \"Fana\" , \"age\" : 37 , \"genre\" : \"male\" , \"married\" : false , \"note\" : [2.1,4.45,4,10, { \"math\" : 17.1, \"malagasy\" : 12, \"eps\" : [ 5, 6 , 4 ] }] } , \"nul\" : { } }";
char *val = "{ \"array\" : [ \"message\" , \"Hello! it's a string\" , [{},{},[ [ ] ] ] , { \"age\" : 48 , \"speaker\" : \" the president \" } , 45 , true ] , \"second\" : 324.1 , \"person\" : { \"name\" : \"Fana\" , \"age\" : 37 , \"genre\" : \"male\" , \"married\" : false } , \"nul\" : { } }";
struct js_value *js = create_js_value(val, NULL);
print_js_value(js);
delete_index_js_value(2, &js);
print_js_value(js);
free_js_value(js);
LOG("line %d\n",__LINE__);
}
TEST(delete_key){
char *val = "{ \"array\" : [ \"message\" , \"Hello! it's a string\" , [{},{},[ [ ] ] ] , { \"age\" : 48 , \"speaker\" : \" the president \" } , 45 , true ] , \"second\" : 324.1 , \"person\" : { \"name\" : \"Fana\" , \"age\" : 37 , \"genre\" : \"male\" , \"married\" : false , \"note\" : [2.1,4.45,4,10, { \"math\" : 17.1, \"malagasy\" : 12, \"eps\" : [ 5, 6 , 4 ] }] } , \"nul\" : { } }";
struct js_value *js = create_js_value(val, NULL);
print_js_value(js);
delete_key_js_value("second", &js);
print_js_value(js);
free_js_value(js);
LOG("line %d\n",__LINE__);
}
TEST(delete_key_format_in){
char *val =
" { "
" \"array\" : "
" [ "
" \"message\", "
" \"Hello! it's a string\", "
" [ "
" { "
" \"\" : null"
" } , "
" { "
" \"\" : null"
" } , "
" [ "
" [ "
" null"
" ] "
" ] "
" ] , "
" { "
" \"age\" : 48.000000, "
" \"speaker\" : \" the president \""
" } , "
" 45.000000, "
" true"
" ] , "
" \"person\" : "
" { "
" \"name\" : \"Fana\", "
" \"age\" : 37.000000, "
" \"genre\" : \"male\", "
" \"married\" : false, "
" \"note\" : "
" [ "
" 2.100000, "
" 4.450000, "
" 4.000000, "
" 10.000000, "
" { "
" \"math\" : 17.100000, "
" \"malagasy\" : 12.000000, "
" \"eps\" : "
" [ "
" 5.000000, "
" 6.000000, "
" 4.000000"
" ] "
" } "
" ] "
" } , "
" \"nul\" : "
" { "
" \"\" : null"
" } "
" }";
// "{ \"array\" : [ \"message\" , \"Hello! it's a string\" , [{},{},[ [ ] ] ] , { \"age\" : 48 , \"speaker\" : \" the president \" } , 45 , true ] , \"second\" : 324.1 , \"person\" : { \"name\" : \"Fana\" , \"age\" : 37 , \"genre\" : \"male\" , \"married\" : false , \"note\" : [2.1,4.45,4,10, { \"math\" : 17.1, \"malagasy\" : 12, \"eps\" : [ 5, 6 , 4 ] }] } , \"nul\" : { } }";
struct js_value *js = create_js_value(val, NULL);
print_js_value(js);
delete_key_js_value("person", &js);
//delete_key_js_value("nul", &js);
print_js_value(js);
free_js_value(js);
LOG("line %d\n",__LINE__);
}
TEST(delete_key_format_in2){
char *val= " { \"person\": \"Hee\" , \"second\" : 3.22 } ";
#if 0
" {"
" \"array\" :"
" ["
" \"message\","
" \"Hello! it's a string\","
" ["
" {"
" \"\" : null"
" } ,"
" {"
" \"\" : null"
" } ,"
" ["
" ["
" null"
" ]"
" ]"
" ] ,"
" {"
" \"age\" : 48.000000,"
" \"speaker\" : \" the president \""
" } ,"
" 45.000000,"
" true"
" ] ,"
" \"second\" : 324.100000,"
" \"person\" :"
" {"
" \"name\" : \"Fana\","
" \"age\" : 37.000000,"
" \"genre\" : \"male\","
" \"married\" : false,"
" \"note\" :"
" ["
" 2.100000,"
" 4.450000,"
" 4.000000,"
" 10.000000,"
" {"
" \"math\" : 17.100000,"
" \"malagasy\" : 12.000000,"
" \"eps\" :"
" ["
" 5.000000,"
" 6.000000,"
" 4.000000"
" ]"
" }"
" ]"
" } ,"
" \"nul\" :"
" {"
" \"\" : null"
" }"
" } ";
#endif
#if 0
"{ \"array\" : [ \"message\" , \"Hello! it's a string\" , [{},{},[ [ ] ] ] , { \"age\" : 48 , \"speaker\" : \" the president \" } , 45 , true ] , \"second\" : 324.1 , \"person\" : { \"name\" : \"Fana\" , \"age\" : 37 , \"genre\" : \"male\" , \"married\" : false , \"note\" : [2.1,4.45,4,10, { \"math\" : 17.1, \"malagasy\" : 12, \"eps\" : [ 5, 6 , 4 ] }] } , \"nul\" : { } }";
#endif
#if 0
char *val =" { "
" \"person\" : "
" { "
" \"name\" : \"Fana\", "
" \"age\" : 37.000000, "
" \"genre\" : \"male\", "
" \"married\" : false, "
" \"note\" : "
" [ "
" 2.100000, "
" 4.450000, "
" 4.000000, "
" 10.000000, "
" { "
" \"math\" : 17.100000, "
" \"malagasy\" : 12.000000, "
" \"eps\" : "
" [ "
" 5.000000, "
" 6.000000, "
" 4.000000"
" ] "
" } "
" ] "
" } , "
" \"nul\" : "
" { "
" \"\" : null"
" } "
" }";
#endif
// "{ \"array\" : [ \"message\" , \"Hello! it's a string\" , [{},{},[ [ ] ] ] , { \"age\" : 48 , \"speaker\" : \" the president \" } , 45 , true ] , \"second\" : 324.1 , \"person\" : { \"name\" : \"Fana\" , \"age\" : 37 , \"genre\" : \"male\" , \"married\" : false , \"note\" : [2.1,4.45,4,10, { \"math\" : 17.1, \"malagasy\" : 12, \"eps\" : [ 5, 6 , 4 ] }] } , \"nul\" : { } }";
struct js_value *tmp, *js = create_js_value(val, NULL);
print_js_value(js);
tmp = js;
delete_key_js_value("person", &js);
EXPECT_EQ(0, (js == tmp));
print_js_value(js);
free_js_value(js);
LOG("line %d\n",__LINE__);
}
TEST(general_val_with_extra_value){
char *val = "{ \"header\" : [ \"message\" , \"Hello! it's a string\" , [{},{},[ [ ] ] ] , { \"age\" : 48 , \"speaker\" : \" the president \" } , 45 , true ] , \"second\" : 324.1 , \"person\" : { \"name\" : \"Fana\" , \"age\" : 37 , \"genre\" : \"male\" , \"married\" : false , \"note\" : [2.1,4.45,4,10, { \"math\" : 17.1, \"malagasy\" : 12, \"eps\" : [ 5, 6 , 4 ] }] } , \"nul\" : { } } here extra string";
struct js_value *js = create_js_value(val, NULL);
print_js_value(js);
LOG("\ndebug: strlen(val)=%ld\n",strlen(val));
LOG("debug: js->length=%ld\n",js->length);
LOG("extra value : %s\n",val+js_org_str_length(js));
free_js_value(js);
LOG("line %d\n",__LINE__);
}
TEST(string_general_val_with_extra_value){
char *val = " \"header\" : [ \"message\" , \"Hello! it's a string\" , [{},{},[ [ ] ] ] , { \"age\" : 48 , \"speaker\" : \" the president \" } , 45 , true ] , \"second\" : 324.1 , \"person\" : { \"name\" : \"Fana\" , \"age\" : 37 , \"genre\" : \"male\" , \"married\" : false , \"note\" : [2.1,4.45,4,10, { \"math\" : 17.1, \"malagasy\" : 12, \"eps\" : [ 5, 6 , 4 ] }] } , \"nul\" : { } here extra string";
struct js_value *js = create_js_value(val, NULL);
print_js_value(js);
LOG("\ndebug: strlen(val)=%ld\n",strlen(val));
LOG("debug: js->=str_value(%s)\n",js->str_value);
LOG("debug: js->length=%ld\n",js->length);
LOG("debug: js->code_type=%d\n",js->code_type);
LOG("extra value : (%s)\n",val+js_org_str_length(js)); // if string add 1
free_js_value(js);
LOG("line %d\n",__LINE__);
}
TEST(general_val_string_with_extra_value){
char *val = "-1 header : [ \"message\" , \"Hello! it's a string\" , [{},{},[ [ ] ] ] , { \"age\" : 48 , \"speaker\" : \" the president \" } , 45 , true ] , \"second\" : 324.1 , \"person\" : { \"name\" : \"Fana\" , \"age\" : 37 , \"genre\" : \"male\" , \"married\" : false , \"note\" : [2.1,4.45,4,10, { \"math\" : 17.1, \"malagasy\" : 12, \"eps\" : [ 5, 6 , 4 ] }] } , \"nul\" : { } here extra string";
struct js_value *js = create_js_value(val, NULL);
print_js_value(js);
LOG("\ndebug: strlen(val)=%ld\n",strlen(val));
LOG("debug: js->=str_value(%s)\n",js->str_value);
LOG("debug: js->length=%ld\n",js->length);
LOG("debug: js->code_type=%d\n",js->code_type);
LOG("extra value : (%s)\n",val+js_org_str_length(js)); // if string add 1
free_js_value(js);
LOG("line %d\n",__LINE__);
}
TEST(sprint_js_value__){
char *val = "{ \"-1 header\" : [ \"message\" , \"Hello! it's a string\" , [{},{},[ [ ] ] ] , { \"age\" : 48 , \"speaker\" : \" the president \" } , 45 , true ] , \"second\" : 324.1 , \"person\" : { \"name\" : \"Fana\" , \"age\" : 37 , \"genre\" : \"male\" , \"married\" : false , \"note\" : [2.1,4.45,4,10, { \"math\" : 17.1, \"malagasy\" : 12, \"eps\" : [ 5, 6 , 4 ] }] } , \"nul\" : { }} here extra string ";
struct js_value *js = create_js_value(val, NULL);
printf("\n##############################################\n");
print_js_value(js);
printf("\n##############################################\n");
char *buf = NULL;
long int ret = sprint_one_line_js_value(&buf, js);
printf("\nret = %ld,\nbuf:\n%s\n",ret, buf);
printf("\n##############################################\n");
free(buf);
buf=NULL;
ret = sprint_js_value(&buf, js,'\n',8);
printf("\nret = %ld,\nbuf:\n%s\n",ret, buf);
free_js_value(js);
if(buf) free(buf);
}
TEST(errorFormat){
char *val1="{ \"hey\" }";
struct js_value *js = create_js_value(val1, NULL);
EXPECT_EQ(js==NULL,1);
char *val2="{ \"hey }";
js = create_js_value(val2, NULL);
EXPECT_EQ(js==NULL,1);
char *val3="{ 123 }";
js = create_js_value(val3, NULL);
EXPECT_EQ(js==NULL,1);
}
int main(int argc, char **argv){
run_all_tests_args(argc, argv);
return 0;
}