@ -42,6 +42,11 @@ static void test_toks(const struct json *j, ...)
va_list ( ap ) ;
va_start ( ap , j ) ;
while ( ( value = va_arg ( ap , char * ) ) ! = NULL ) {
if ( tok - > type = = JSMN_OBJECT )
assert ( streq ( value , " { " ) ) ;
else if ( tok - > type = = JSMN_ARRAY )
assert ( streq ( value , " [ " ) ) ;
else
assert ( json_tok_streq ( j - > buffer , tok , value ) ) ;
tok + + ;
}
@ -50,14 +55,14 @@ static void test_toks(const struct json *j, ...)
static void sanity ( void )
{
struct json * j = json_parse ( tmpctx , " [] " ) ;
json_tok_remove ( & j - > toks , j - > toks , 0 ) ;
json_tok_remove ( & j - > toks , j - > toks , j - > toks , 0 ) ;
assert ( j ) ;
}
static void remove_one ( void )
{
struct json * j = json_parse ( tmpctx , " ['invoice'] " ) ;
json_tok_remove ( & j - > toks , j - > toks + 1 , 1 ) ;
json_tok_remove ( & j - > toks , j - > toks , j - > toks + 1 , 1 ) ;
assert ( j ) ;
}
@ -65,7 +70,7 @@ static void remove_first(void)
{
struct json * j = json_parse ( tmpctx , " ['one', 'two', 'three'] " ) ;
assert ( j ) ;
json_tok_remove ( & j - > toks , j - > toks + 1 , 1 ) ;
json_tok_remove ( & j - > toks , j - > toks , j - > toks + 1 , 1 ) ;
assert ( j - > toks ) ;
test_toks ( j , " two " , " three " , NULL ) ;
@ -74,13 +79,13 @@ static void remove_first(void)
j = json_parse ( tmpctx , " {'1':'one', '2':'two', '3':'three'} " ) ;
assert ( j ) ;
json_tok_remove ( & j - > toks , j - > toks + 1 , 1 ) ;
json_tok_remove ( & j - > toks , j - > toks , j - > toks + 1 , 1 ) ;
assert ( j ) ;
test_toks ( j , " 2 " , " two " , " 3 " , " three " , NULL ) ;
assert ( tal_count ( j - > toks ) = = 5 ) ;
j = json_parse ( tmpctx , " {'1':'one', '2':'two', '3':'three'} " ) ;
json_tok_remove ( & j - > toks , j - > toks + 1 , 1 ) ;
json_tok_remove ( & j - > toks , j - > toks , j - > toks + 1 , 1 ) ;
assert ( j ) ;
test_toks ( j , " 2 " , " two " , " 3 " , " three " , NULL ) ;
assert ( tal_count ( j - > toks ) = = 5 ) ;
@ -90,12 +95,12 @@ static void remove_first(void)
static void remove_last ( void )
{
struct json * j = json_parse ( tmpctx , " ['one', 'two', 'three'] " ) ;
json_tok_remove ( & j - > toks , j - > toks + 3 , 1 ) ;
json_tok_remove ( & j - > toks , j - > toks , j - > toks + 3 , 1 ) ;
test_toks ( j , " one " , " two " , NULL ) ;
assert ( tal_count ( j - > toks ) = = 3 ) ;
j = json_parse ( tmpctx , " {'1':'one', '2':'two', '3':'three'} " ) ;
json_tok_remove ( & j - > toks , j - > toks + 5 , 1 ) ;
json_tok_remove ( & j - > toks , j - > toks , j - > toks + 5 , 1 ) ;
assert ( j ) ;
test_toks ( j , " 1 " , " one " , " 2 " , " two " , NULL ) ;
assert ( tal_count ( j - > toks ) = = 5 ) ;
@ -104,15 +109,15 @@ static void remove_last(void)
static void remove_multiple ( void )
{
struct json * j = json_parse ( tmpctx , " ['a', 'b', 'c', 'd', 'e'] " ) ;
json_tok_remove ( & j - > toks , j - > toks + 1 , 2 ) ;
json_tok_remove ( & j - > toks , j - > toks , j - > toks + 1 , 2 ) ;
test_toks ( j , " c " , " d " , " e " , NULL ) ;
j = json_parse ( tmpctx , " ['a', 'b', 'c', 'd', 'e'] " ) ;
json_tok_remove ( & j - > toks , j - > toks + 2 , 2 ) ;
json_tok_remove ( & j - > toks , j - > toks , j - > toks + 2 , 2 ) ;
test_toks ( j , " a " , " d " , " e " , NULL ) ;
j = json_parse ( tmpctx , " {'1':'one', '2':'two', '3':'three', '4':'four'} " ) ;
json_tok_remove ( & j - > toks , j - > toks + 3 , 2 ) ;
json_tok_remove ( & j - > toks , j - > toks , j - > toks + 3 , 2 ) ;
assert ( j ) ;
test_toks ( j , " 1 " , " one " , " 4 " , " four " , NULL ) ;
assert ( tal_count ( j - > toks ) = = 5 ) ;
@ -121,11 +126,11 @@ static void remove_multiple(void)
static void remove_all ( void )
{
struct json * j = json_parse ( tmpctx , " ['a', 'b', 'c', 'd', 'e'] " ) ;
json_tok_remove ( & j - > toks , j - > toks + 1 , 5 ) ;
json_tok_remove ( & j - > toks , j - > toks , j - > toks + 1 , 5 ) ;
assert ( tal_count ( j - > toks ) = = 1 ) ;
j = json_parse ( tmpctx , " {'1':'one', '2':'two', '3':'three', '4':'four'} " ) ;
json_tok_remove ( & j - > toks , j - > toks + 1 , 4 ) ;
json_tok_remove ( & j - > toks , j - > toks , j - > toks + 1 , 4 ) ;
assert ( tal_count ( j - > toks ) = = 1 ) ;
}
@ -137,10 +142,24 @@ static void remove_complex(void)
" '4': { '4.1': 'a', '4.2':'b', '4.3':'c' }, "
" '5':'five'} " ) ;
json_tok_remove ( & j - > toks , j - > toks + 5 , 2 ) ;
json_tok_remove ( & j - > toks , j - > toks , j - > toks + 5 , 2 ) ;
test_toks ( j , " 1 " , " one " , " 2 " , " two " , " 5 " , " five " , NULL ) ;
}
static void remove_inside_obj ( void )
{
jsmntok_t * tok ;
struct json * j = json_parse ( tmpctx ,
" {'1':'one', '2':'two', "
" '3': { '3.1': 'a', '3.2':'b', '3.3':'c' }, "
" '4':'four'} " ) ;
tok = ( jsmntok_t * ) json_get_member ( j - > buffer , j - > toks , " 3 " ) ;
json_tok_remove ( & j - > toks , tok , tok + 1 , 1 ) ;
test_toks ( j , " 1 " , " one " , " 2 " , " two " , " 3 " , " { " , " 3.2 " , " b " , " 3.3 " , " c " ,
" 4 " , " four " , NULL ) ;
}
int main ( void )
{
setup_locale ( ) ;
@ -153,6 +172,7 @@ int main(void)
remove_multiple ( ) ;
remove_all ( ) ;
remove_complex ( ) ;
remove_inside_obj ( ) ;
tal_free ( tmpctx ) ;
printf ( " run-json_remove ok \n " ) ;