From 76edd87f7dd0b795f0bcb7042c9ca038f0625fbc Mon Sep 17 00:00:00 2001 From: Sander Mertens Date: Tue, 10 Jul 2018 22:32:31 -0700 Subject: [PATCH] #341 support cortoscript notation in string ser and deser --- src/store/object.c | 33 +++++++++------ src/store/string_deser.c | 7 +++- src/store/string_ser.c | 33 ++++++++------- test/store/src/Fullname.c | 16 ++++---- test/store/src/StringSerializer.c | 68 +++++++++++++++---------------- 5 files changed, 85 insertions(+), 72 deletions(-) diff --git a/src/store/object.c b/src/store/object.c index f8e0dc0e..10feba87 100644 --- a/src/store/object.c +++ b/src/store/object.c @@ -243,7 +243,7 @@ corto_equalityKind corto_compareLookupIntern( char ch1, ch2; ch2 = *ptr2; - while((ch1 = *ptr1) && ch2 && (ch2 != '/') && (ch2 != '{') && (ch2 != '.')) { + while((ch1 = *ptr1) && ch2 && (ch2 != '/') && (ch2 != '{') && (ch2 != '[') && (ch2 != '.')) { if (ch1 == ch2) { ptr1++; ptr2++; ch2 = *ptr2; @@ -271,7 +271,7 @@ corto_equalityKind corto_compareLookupIntern( } } - if (ch2 == '{') { + if (ch2 == '{' || ch2 == '[') { if (!ch1) { goto match; } else { @@ -3378,13 +3378,13 @@ corto_object corto_lookup_intern( ptr ++; } - if (!ptr[0] || ptr[0] == '{') { + if (!ptr[0] || ptr[0] == '{' || ptr[0] == '[') { break; } bool containsArgs = false; dot_separator = false; /* reset dot_operator */ - for (next = ptr; (ch = *next) && ch != '/' && ch != '{'; next ++) { + for (next = ptr; (ch = *next) && ch != '/' && ch != '{' && ch != '['; next ++) { if (ch == '(') { containsArgs = true; for (next ++; (ch = *next) && (ch != ')'); next ++); @@ -3512,13 +3512,18 @@ corto_object corto_lookup_intern( } if (!o && resume && parent != corto_lang_o) { - /* Make sure that id passed to resume doesn't contain {} */ + /* Make sure that id passed to resume doesn't contain {} or [] */ corto_id buffer; const char *id = ptr, *value_start; if ((value_start = strchr(id, '{'))) { strcpy(buffer, id); buffer[value_start - id] = '\0'; id = buffer; + } else + if ((value_start = strchr(id, '['))) { + strcpy(buffer, id); + buffer[value_start - id] = '\0'; + id = buffer; } if (corto_resume(prev, id, &o)) { @@ -3529,7 +3534,7 @@ corto_object corto_lookup_intern( /* If object was found and search string ends in '{', create an * anonymous object */ - if (o && ptr[0] == '{') { + if (o && (ptr[0] == '{' || ptr[0] == '[')) { corto_object out = NULL; do { ptr = corto_create_anonymous(orig_parent, o, ptr, &out); @@ -3908,10 +3913,6 @@ int16_t corto_update_begin_intern( corto_throw(NULL); goto error; } - } else { - corto_warning( - "updateBegin: calling updateBegin for non-writable '%s' is useless", - corto_fullpath(NULL, o)); } } corto_log_pop_dbg(); @@ -4145,14 +4146,16 @@ int32_t corto_sig_paramCount( } ptr++; - if (ch == '{') { + if (ch == '{' || ch == '[') { uint32_t nesting = 1; while((ch = *ptr) && nesting) { ptr++; switch(ch) { + case '[': case '{': nesting++; break; + case ']': case '}': nesting--; break; @@ -4238,7 +4241,7 @@ int32_t corto_sig_param_type( } srcptr++; - if (ch == '{') { + if (ch == '{' || ch == '[') { uint32_t count=1; while((ch = *srcptr) && count) { if (i == id) { @@ -4247,9 +4250,11 @@ int32_t corto_sig_param_type( } srcptr++; switch(ch) { + case '[': case '{': count++; break; + case ']': case '}': count--; break; @@ -4335,14 +4340,16 @@ int32_t corto_sig_param_name( } srcptr++; - if (ch == '{') { + if (ch == '{' || ch == '[') { uint32_t count=1; while((ch = *srcptr) && count) { srcptr++; switch(ch) { + case '[': case '{': count++; break; + case ']': case '}': count--; break; diff --git a/src/store/string_deser.c b/src/store/string_deser.c index e51d9e93..8c47b537 100644 --- a/src/store/string_deser.c +++ b/src/store/string_deser.c @@ -791,6 +791,7 @@ const char* corto_string_deserParse( * has finished processing the current value. */ while(ptr && (ch = *ptr) && proceed) { switch(ch) { + case ':': case '=': /* Explicit member assignment */ excess = FALSE; if (buffer == bptr) { @@ -808,6 +809,7 @@ const char* corto_string_deserParse( break; } + case '[': case '{': /* Scope open */ if (bptr == buffer) { if (!(ptr = corto_string_deserParseScope( @@ -829,6 +831,7 @@ const char* corto_string_deserParse( } break; + case ']': case '}': /* Scope close and end of value */ if (buffer != bptr) { *nonWs = '\0'; @@ -964,7 +967,7 @@ const char* corto_string_deser( /* Parse typename that potentially precedes string */ bptr = buffer; ptr = str; - while((ch = *ptr) && (ch != '{')) { + while((ch = *ptr) && (ch != '{') && (ch != '[')) { if (!((ch == ' ') || (ch == '\n') || (ch == '\t'))) { *bptr = ch; bptr++; @@ -974,7 +977,7 @@ const char* corto_string_deser( *bptr = '\0'; /* If no type is found, reset ptr */ - if ((ch != '{') || (ptr == str)) { + if (((ch != '{') && (ch != '[')) || (ptr == str)) { ptr = str; } else { corto_object type; diff --git a/src/store/string_ser.c b/src/store/string_ser.c index 96242d13..73089410 100644 --- a/src/store/string_ser.c +++ b/src/store/string_ser.c @@ -230,13 +230,11 @@ static corto_int16 corto_ser_reference(corto_walk_opt* s, corto_value* v, void* /* For composite and collection objects */ static corto_int16 corto_ser_scope(corto_walk_opt* s, corto_value* v, void* userData) { - corto_int16 result; - corto_string_ser_t *data, privateData; - corto_type t; - - data = userData; - t = corto_value_typeof(v); - result = 0; + corto_int16 result = 0; + corto_string_ser_t *data = userData, privateData; + corto_type t = corto_value_typeof(v); + bool is_composite = t->kind == CORTO_COMPOSITE; + bool is_collection = t->kind == CORTO_COLLECTION; /* Nested data has private itemCount, which prevents superfluous ',' to be added to the result. */ privateData.ptr = data->ptr; @@ -248,11 +246,11 @@ static corto_int16 corto_ser_scope(corto_walk_opt* s, corto_value* v, void* user /* Serialize composite members */ if (!corto_ser_appendColor(&privateData, CORTO_BOLD)) goto finished; - if (!corto_buffer_append(&privateData.buffer, "{")) { + if (!corto_buffer_append(&privateData.buffer, is_composite ? "{" : "[")) { goto finished; } if (!corto_ser_appendColor(&privateData, CORTO_NORMAL)) goto finished; - if (t->kind == CORTO_COMPOSITE) { + if (is_composite) { if (corto_interface(t)->kind == CORTO_UNION) { void *ptr = corto_value_ptrof(v); char *d; @@ -269,14 +267,14 @@ static corto_int16 corto_ser_scope(corto_walk_opt* s, corto_value* v, void* user privateData.itemCount = 1; } result = corto_walk_members(s, v, &privateData); - } else if (t->kind == CORTO_COLLECTION){ + } else if (is_collection){ result = corto_walk_elements(s, v, &privateData); } else { corto_assert(0, "corto_ser_scope: invalid typekind for function."); } if (!result) { if (!corto_ser_appendColor(&privateData, CORTO_BOLD)) goto finished; - if (!corto_buffer_append(&privateData.buffer, "}")) { + if (!corto_buffer_append(&privateData.buffer, is_composite ? "}" : "]")) { goto finished; } if (!corto_ser_appendColor(&privateData, CORTO_NORMAL)) goto finished; @@ -307,7 +305,7 @@ static corto_int16 corto_ser_item(corto_walk_opt* s, corto_value* v, void* userD /* Append ',' if this is not the first item */ if (data->itemCount) { if (!data->compactNotation) { - if (!corto_buffer_append(&data->buffer, " ")) { + if (!corto_buffer_append(&data->buffer, ", ")) { goto finished; } } else { @@ -322,7 +320,7 @@ static corto_int16 corto_ser_item(corto_walk_opt* s, corto_value* v, void* userD if (!corto_ser_appendColor(data, MEMBER)) goto finished; if (!corto_buffer_append(&data->buffer, "%s", corto_idof(v->is.member.member))) goto finished; if (!corto_ser_appendColor(data, CORTO_BOLD)) goto finished; - if (!corto_buffer_append(&data->buffer, "=")) goto finished; + if (!corto_buffer_append(&data->buffer, ":")) goto finished; if (!corto_ser_appendColor(data, CORTO_NORMAL)) goto finished; } } @@ -380,7 +378,12 @@ static corto_int16 corto_ser_object(corto_walk_opt* s, corto_value* v, void* use if (corto_typeof(o)->kind != CORTO_PRIMITIVE) { if (str) { - result = corto_alloc(strlen(str) + strlen(typeId) + 1); + uint32_t len = strlen(str); + result = corto_alloc(len + strlen(typeId) + 1); + if (str[0] == '{') { + str[0] = '['; + str[len - 1] = ']'; + } sprintf(result, "%s%s", typeId, str); } else { result = corto_strdup(typeId); @@ -388,7 +391,7 @@ static corto_int16 corto_ser_object(corto_walk_opt* s, corto_value* v, void* use } else { if (str) { result = corto_alloc(strlen(str) + strlen(typeId) + 2 + 1); - sprintf(result, "%s{%s}", typeId, str); + sprintf(result, "%s[%s]", typeId, str); } else { corto_critical("failed to serialize value to string"); } diff --git a/test/store/src/Fullname.c b/test/store/src/Fullname.c index 2e8b2237..8eeb8e9f 100644 --- a/test/store/src/Fullname.c +++ b/test/store/src/Fullname.c @@ -5,13 +5,13 @@ void test_Fullname_tc_anonymousAnonymous( test_Fullname this) { - corto_object o = corto_resolve(NULL, "list{int32}{10, 20, 30}"); + corto_object o = corto_resolve(NULL, "list[int32][10, 20, 30]"); test_assert(o != NULL); test_assert(corto_typeof(o)->kind == CORTO_COLLECTION); corto_ll *l = o; test_assertint(corto_ll_count(*l), 3); - test_assertstr(corto_fullpath(NULL, o), "list{int32,0}{10,20,30}"); + test_assertstr(corto_fullpath(NULL, o), "list[int32,0][10,20,30]"); corto_int16 ret = corto_delete(o); test_assert(ret == 0); @@ -20,13 +20,13 @@ void test_Fullname_tc_anonymousAnonymous( void test_Fullname_tc_anonymousCollection( test_Fullname this) { - corto_object o = corto_resolve(NULL, "test/IntList{10, 20, 30}"); + corto_object o = corto_resolve(NULL, "test/IntList[10, 20, 30]"); test_assert(o != NULL); test_assert(corto_typeof(o) == corto_type(test_IntList_o)); test_IntList *l = test_IntList(o); test_assertint(corto_ll_count(*l), 3); - test_assertstr(corto_fullpath(NULL, o), "/test/IntList{10,20,30}"); + test_assertstr(corto_fullpath(NULL, o), "/test/IntList[10,20,30]"); corto_int16 ret = corto_delete(o); test_assert(ret == 0); @@ -35,14 +35,14 @@ void test_Fullname_tc_anonymousCollection( void test_Fullname_tc_anonymousComposite( test_Fullname this) { - corto_object o = corto_resolve(NULL, "test/Point{10, 20}"); + corto_object o = corto_resolve(NULL, "test/Point[10, 20]"); test_assert(o != NULL); test_assert(corto_typeof(o) == corto_type(test_Point_o)); test_Point *p = test_Point(o); test_assertint(p->x, 10); test_assertint(p->y, 20); - test_assertstr(corto_fullpath(NULL, o), "/test/Point{10,20}"); + test_assertstr(corto_fullpath(NULL, o), "/test/Point[10,20]"); corto_int16 ret = corto_delete(o); test_assert(ret == 0); @@ -51,13 +51,13 @@ void test_Fullname_tc_anonymousComposite( void test_Fullname_tc_anonymousPrimitive( test_Fullname this) { - corto_object o = corto_resolve(NULL, "int32{10}"); + corto_object o = corto_resolve(NULL, "int32[10]"); test_assert(o != NULL); test_assert(corto_typeof(o) == corto_type(corto_int32_o)); corto_int32 *p = o; test_assertint(*p, 10); - test_assertstr(corto_fullpath(NULL, o), "int32{10}"); + test_assertstr(corto_fullpath(NULL, o), "int32[10]"); corto_int16 ret = corto_delete(o); test_assert(ret == 0); diff --git a/test/store/src/StringSerializer.c b/test/store/src/StringSerializer.c index cde9d63f..9bd17d2a 100644 --- a/test/store/src/StringSerializer.c +++ b/test/store/src/StringSerializer.c @@ -13,7 +13,7 @@ void test_StringSerializer_tc_serAnonymous( corto_string str = corto_serialize_value(o, "text/corto"); test_assert(str != NULL); - test_assertstr(str, "{{<1>int32{10}}}"); + test_assertstr(str, "{[<1>int32[10]]}"); corto_delete(o); corto_dealloc(str); @@ -35,7 +35,7 @@ void test_StringSerializer_tc_serAnonymousComplex( corto_string str = corto_serialize_value(o, "text/corto"); test_assert(str != NULL); - test_assertstr(str, "{{<1>/test/Point{10,20}}}"); + test_assertstr(str, "{[<1>/test/Point[10,20]]}"); corto_delete(o); corto_dealloc(str); @@ -59,7 +59,7 @@ void test_StringSerializer_tc_serAnonymousComplexString( corto_string str = corto_serialize_value(o, "text/corto"); test_assert(str != NULL); - test_assertstr(str, "{{<1>/test/CompositeWithString{10,\"Hello\",\"World\",20}}}"); + test_assertstr(str, "{[<1>/test/CompositeWithString[10,\"Hello\",\"World\",20]]}"); corto_delete(o); corto_dealloc(str); @@ -83,7 +83,7 @@ void test_StringSerializer_tc_serAnonymousComplexStringEsc( corto_string str = corto_serialize_value(o, "text/corto"); test_assert(str != NULL); - test_assertstr(str, "{{<1>/test/CompositeWithString{10,\"\\\"Hello\\\"\",\"\\\"World\\\"\",20}}}"); + test_assertstr(str, "{[<1>/test/CompositeWithString[10,\"\\\"Hello\\\"\",\"\\\"World\\\"\",20]]}"); corto_delete(o); corto_dealloc(str); @@ -102,7 +102,7 @@ void test_StringSerializer_tc_serArray( result = corto_ptr_str(&v, t, 0); test_assert(result != NULL); - test_assert(!strcmp(result, "{10,20,30}")); + test_assert(!strcmp(result, "[10,20,30]")); corto_dealloc(result); corto_delete(t); @@ -120,7 +120,7 @@ void test_StringSerializer_tc_serArrayComplex( result = corto_ptr_str(&v, t, 0); test_assert(result != NULL); - test_assert(!strcmp(result, "{{10,20},{30,40},{50,60}}")); + test_assertstr(result, "[{10,20},{30,40},{50,60}]"); corto_dealloc(result); corto_delete(t); @@ -382,7 +382,7 @@ void test_StringSerializer_tc_serList( result = corto_ptr_str(&v, t, 0); test_assert(result != NULL); - test_assert(!strcmp(result, "{10,20,30}")); + test_assert(!strcmp(result, "[10,20,30]")); corto_dealloc(result); corto_ll_free(v); @@ -404,7 +404,7 @@ void test_StringSerializer_tc_serListComplex( result = corto_ptr_str(&v, t, 0); test_assert(result != NULL); - test_assert(!strcmp(result, "{{10,20},{30,40},{50,60}}")); + test_assert(!strcmp(result, "[{10,20},{30,40},{50,60}]")); corto_dealloc(result); corto_ll_free(v); @@ -426,7 +426,7 @@ void test_StringSerializer_tc_serLongAnonymous( corto_string str = corto_serialize_value(o, "text/corto"); test_assert(str != NULL); - test_assertstr(str, "{{<1>int32{10},<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>}}"); + test_assertstr(str, "{[<1>int32[10],<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>,<1>]}"); corto_delete(o); corto_dealloc(str); @@ -445,7 +445,7 @@ void test_StringSerializer_tc_serSameAnonymous( corto_string str = corto_serialize_value(o, "text/corto"); test_assert(str != NULL); - test_assertstr(str, "{{<1>int32{10},<1>}}"); + test_assertstr(str, "{[<1>int32[10],<1>]}"); corto_delete(o); corto_dealloc(str); @@ -464,7 +464,7 @@ void test_StringSerializer_tc_serSequence( result = corto_ptr_str(&v, t, 0); test_assert(result != NULL); - test_assert(!strcmp(result, "{10,20,30}")); + test_assert(!strcmp(result, "[10,20,30]")); corto_dealloc(result); corto_release(t); @@ -482,7 +482,7 @@ void test_StringSerializer_tc_serSequenceComplex( result = corto_ptr_str(&v, t, 0); test_assert(result != NULL); - test_assert(!strcmp(result, "{{10,20},{30,40},{50,60}}")); + test_assert(!strcmp(result, "[{10,20},{30,40},{50,60}]")); corto_dealloc(result); corto_release(t); @@ -552,7 +552,7 @@ void test_StringSerializer_tc_serStructArrayInt( char *str = corto_ptr_str(&v, test_struct_arrayInt_o, 0); test_assert(str != NULL); - test_assertstr(str, "{{10,20,30}}"); + test_assertstr(str, "{[10,20,30]}"); corto_dealloc(str); } @@ -564,7 +564,7 @@ void test_StringSerializer_tc_serStructArrayReference( char *str = corto_ptr_str(&v, test_struct_arrayReference_o, 0); test_assert(str != NULL); - test_assertstr(str, "{{/corto,/corto/lang,class}}"); + test_assertstr(str, "{[/corto,/corto/lang,class]}"); corto_dealloc(str); } @@ -576,7 +576,7 @@ void test_StringSerializer_tc_serStructArrayString( char *str = corto_ptr_str(&v, test_struct_arrayString_o, 0); test_assert(str != NULL); - test_assertstr(str, "{{\"Hello\",\"World\",\"Foo\"}}"); + test_assertstr(str, "{[\"Hello\",\"World\",\"Foo\"]}"); corto_dealloc(str); } @@ -588,7 +588,7 @@ void test_StringSerializer_tc_serStructArrayStruct( char *str = corto_ptr_str(&v, test_struct_arrayStruct_o, 0); test_assert(str != NULL); - test_assertstr(str, "{{{10,20},{30,40},{50,60}}}"); + test_assertstr(str, "{[{10,20},{30,40},{50,60}]}"); corto_dealloc(str); } @@ -617,7 +617,7 @@ void test_StringSerializer_tc_serStructListInt( char *str = corto_ptr_str(&v, test_struct_listInt_o, 0); test_assert(str != NULL); - test_assertstr(str, "{{10,20,30}}"); + test_assertstr(str, "{[10,20,30]}"); corto_dealloc(str); corto_ptr_deinit(&v, test_struct_listInt_o); @@ -636,7 +636,7 @@ void test_StringSerializer_tc_serStructListReference( char *str = corto_ptr_str(&v, test_struct_listReference_o, 0); test_assert(str != NULL); - test_assertstr(str, "{{/corto,/corto/lang,class}}"); + test_assertstr(str, "{[/corto,/corto/lang,class]}"); corto_dealloc(str); corto_ptr_deinit(&v, test_struct_listReference_o); @@ -655,7 +655,7 @@ void test_StringSerializer_tc_serStructListString( char *str = corto_ptr_str(&v, test_struct_listString_o, 0); test_assert(str != NULL); - test_assertstr(str, "{{\"Hello\",\"World\",\"Foo\"}}"); + test_assertstr(str, "{[\"Hello\",\"World\",\"Foo\"]}"); corto_dealloc(str); corto_ptr_deinit(&v, test_struct_listString_o); @@ -678,7 +678,7 @@ void test_StringSerializer_tc_serStructListStruct( char *str = corto_ptr_str(&v, test_struct_listStruct_o, 0); test_assert(str != NULL); - test_assertstr(str, "{{{10,20},{30,40},{50,60}}}"); + test_assertstr(str, "{[{10,20},{30,40},{50,60}]}"); corto_dealloc(str); corto_ptr_deinit(&v, test_struct_listStruct_o); @@ -698,7 +698,7 @@ void test_StringSerializer_tc_serStructObservableArray( char *str = corto_ptr_str(&v, test_struct_observableArray_o, 0); test_assert(str != NULL); - test_assertstr(str, "{{10,20,30,40}}"); + test_assertstr(str, "{[10,20,30,40]}"); corto_dealloc(str); corto_ptr_deinit(&v, test_struct_observableArray_o); @@ -733,7 +733,7 @@ void test_StringSerializer_tc_serStructObservableList( char *str = corto_ptr_str(&v, test_struct_observableList_o, 0); test_assert(str != NULL); - test_assertstr(str, "{{10,20,30}}"); + test_assertstr(str, "{[10,20,30]}"); corto_dealloc(str); corto_ptr_deinit(&v, test_struct_observableList_o); @@ -770,7 +770,7 @@ void test_StringSerializer_tc_serStructObservableSequence( char *str = corto_ptr_str(&v, test_struct_observableSequence_o, 0); test_assert(str != NULL); - test_assertstr(str, "{{10,20,30}}"); + test_assertstr(str, "{[10,20,30]}"); corto_dealloc(str); corto_ptr_deinit(&v, test_struct_observableSequence_o); @@ -824,7 +824,7 @@ void test_StringSerializer_tc_serStructOptionalArray( char *str = corto_ptr_str(&v, test_struct_optionalArray_o, 0); test_assert(str != NULL); - test_assertstr(str, "{{10,20,30,40}}"); + test_assertstr(str, "{[10,20,30,40]}"); corto_dealloc(str); test_IntArray__unset(v.m); @@ -875,7 +875,7 @@ void test_StringSerializer_tc_serStructOptionalList( char *str = corto_ptr_str(&v, test_struct_optionalList_o, 0); test_assert(str != NULL); - test_assertstr(str, "{{10,20,30,40}}"); + test_assertstr(str, "{[10,20,30,40]}"); corto_dealloc(str); test_IntArray__unset(v.m); @@ -928,7 +928,7 @@ void test_StringSerializer_tc_serStructOptionalSequence( char *str = corto_ptr_str(&v, test_struct_optionalSequence_o, 0); test_assert(str != NULL); - test_assertstr(str, "{{10,20,30,40}}"); + test_assertstr(str, "{[10,20,30,40]}"); corto_dealloc(str); test_IntArray__unset(v.m); @@ -1025,7 +1025,7 @@ void test_StringSerializer_tc_serStructSequenceInt( char *str = corto_ptr_str(&v, test_struct_sequenceInt_o, 0); test_assert(str != NULL); - test_assertstr(str, "{{10,20,30}}"); + test_assertstr(str, "{[10,20,30]}"); corto_dealloc(str); corto_ptr_deinit(&v, test_struct_sequenceInt_o); @@ -1046,7 +1046,7 @@ void test_StringSerializer_tc_serStructSequenceReference( char *str = corto_ptr_str(&v, test_struct_sequenceReference_o, 0); test_assert(str != NULL); - test_assertstr(str, "{{/corto,/corto/lang,class}}"); + test_assertstr(str, "{[/corto,/corto/lang,class]}"); corto_dealloc(str); corto_ptr_deinit(&v, test_struct_sequenceReference_o); @@ -1067,7 +1067,7 @@ void test_StringSerializer_tc_serStructSequenceString( char *str = corto_ptr_str(&v, test_struct_sequenceString_o, 0); test_assert(str != NULL); - test_assertstr(str, "{{\"Hello\",\"World\",\"Foo\"}}"); + test_assertstr(str, "{[\"Hello\",\"World\",\"Foo\"]}"); corto_dealloc(str); corto_ptr_deinit(&v, test_struct_sequenceString_o); @@ -1088,7 +1088,7 @@ void test_StringSerializer_tc_serStructSequenceStruct( char *str = corto_ptr_str(&v, test_struct_sequenceStruct_o, 0); test_assert(str != NULL); - test_assertstr(str, "{{{10,20},{30,40},{50,60}}}"); + test_assertstr(str, "{[{10,20},{30,40},{50,60}]}"); corto_dealloc(str); corto_ptr_deinit(&v, test_struct_sequenceStruct_o); @@ -1135,7 +1135,7 @@ void test_StringSerializer_tc_serStructTargetArray( char *str = corto_ptr_str(&v, test_struct_targetArray_o, 0); test_assert(str != NULL); - test_assertstr(str, "{{{10,20,30,40},{50,60,70,80},{90,100,110,120}}}"); + test_assertstr(str, "{{[10,20,30,40],[50,60,70,80],[90,100,110,120]}}"); corto_dealloc(str); corto_ptr_deinit(&v, test_struct_targetArray_o); @@ -1184,7 +1184,7 @@ void test_StringSerializer_tc_serStructTargetList( char *str = corto_ptr_str(&v, test_struct_targetList_o, 0); test_assert(str != NULL); - test_assertstr(str, "{{{10,20,30,40},{50,60,70,80},{90,100,110,120}}}"); + test_assertstr(str, "{{[10,20,30,40],[50,60,70,80],[90,100,110,120]}}"); corto_dealloc(str); corto_ptr_deinit(&v, test_struct_targetList_o); @@ -1238,7 +1238,7 @@ void test_StringSerializer_tc_serStructTargetSequence( char *str = corto_ptr_str(&v, test_struct_targetSequence_o, 0); test_assert(str != NULL); - test_assertstr(str, "{{{10,20,30,40},{50,60,70,80},{90,100,110,120}}}"); + test_assertstr(str, "{{[10,20,30,40],[50,60,70,80],[90,100,110,120]}}"); corto_dealloc(str); corto_ptr_deinit(&v, test_struct_targetSequence_o); @@ -1298,7 +1298,7 @@ void test_StringSerializer_tc_serTwoAnonymous( corto_string str = corto_serialize_value(o, "text/corto"); test_assert(str != NULL); - test_assertstr(str, "{{<1>int32{10},<2>int32{20}}}"); + test_assertstr(str, "{[<1>int32[10],<2>int32[20]]}"); corto_delete(o); corto_dealloc(str);