From c763bce638c8933a60592a67cd0555d952cb8c86 Mon Sep 17 00:00:00 2001 From: balaskoa <Jeno.Balasko@ericsson.com> Date: Wed, 11 Nov 2020 16:50:54 +0100 Subject: [PATCH] Synchronized with java side - JsonTypes.ttcn is split into 2 pieces Signed-off-by: balaskoa <Jeno.Balasko@ericsson.com> Change-Id: I42fe0648908bd5bfc14b11ca14886c64a4184408 --- .../JsonComplexTest/AttributeTestcases.ttcn | 66 +++--- .../JSON/JsonComplexTest/JsonFunctions.ttcn | 7 +- .../JSON/JsonComplexTest/JsonTestcases.ttcn | 12 +- .../{JsonTypes.ttcn => JsonTypes0.ttcn} | 198 +--------------- .../JSON/JsonComplexTest/JsonTypes1.ttcn | 212 ++++++++++++++++++ .../JSON/JsonComplexTest/Makefile | 2 +- 6 files changed, 258 insertions(+), 239 deletions(-) rename regression_test/EncodeDecode/JSON/JsonComplexTest/{JsonTypes.ttcn => JsonTypes0.ttcn} (53%) create mode 100644 regression_test/EncodeDecode/JSON/JsonComplexTest/JsonTypes1.ttcn diff --git a/regression_test/EncodeDecode/JSON/JsonComplexTest/AttributeTestcases.ttcn b/regression_test/EncodeDecode/JSON/JsonComplexTest/AttributeTestcases.ttcn index 895bcc9eb..1a06ccfa3 100644 --- a/regression_test/EncodeDecode/JSON/JsonComplexTest/AttributeTestcases.ttcn +++ b/regression_test/EncodeDecode/JSON/JsonComplexTest/AttributeTestcases.ttcn @@ -13,15 +13,16 @@ module AttributeTestcases { import from JsonFunctions all; -import from JsonTypes all; - +import from JsonTypes1 all; +import from JsonTypes0 all; +type component CT {} //tests in case of no attributes: //if omit fields do not appear in the encoded text //if all not omitted field appear in the encoded text //if all not omitted field value appear in the correct form -testcase tc_NoAttributeOnUpperLevel() runs on MTC { +testcase tc_NoAttributeOnUpperLevel() runs on CT { var Profile0 p := { name := "Bob", phone_no := { 6, 1, 3377760 }, @@ -37,7 +38,7 @@ testcase tc_NoAttributeOnUpperLevel() runs on MTC { //tests in case of selecting attributes: //if omit fields appear in the encoded //if all not omitted field value appear in the correct form -testcase tc_name_as_omit_as_null() runs on MTC { +testcase tc_name_as_omit_as_null() runs on CT { var Profile p := { name := "Bob", phone_no := { 6, 1, 3377760 }, @@ -50,7 +51,7 @@ testcase tc_name_as_omit_as_null() runs on MTC { f_bool2verdict( match(f_dec_profile(f_enc_profile(p)), p) ); } -testcase tc_name_as() runs on MTC { +testcase tc_name_as() runs on CT { var Profile p := { name := "Bob", phone_no := { 6, 1, 3377760 }, @@ -64,7 +65,7 @@ testcase tc_name_as() runs on MTC { } // testing attribute "name as ..." when the aliases are keywords of the JSON variant syntax -testcase tc_name_as_with_keywords() runs on MTC { +testcase tc_name_as_with_keywords() runs on CT { var KeywordFields p := { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; var octetstring os := char2oct("{\"omit\":1,\"as\":2,\"null\":3,\"name\":4,\"value\":5,\"default\":6,\"extend\":7,\"metainfo\":8,\"for\":9,\"unbound\":10,\"JSON\":11}"); f_check_encoding(encoded := f_enc_kw_fld(p), expected := os); @@ -74,7 +75,7 @@ testcase tc_name_as_with_keywords() runs on MTC { //tests in case of selecting attributes: //if omit fields appear in the encoded //if all not omitted field value appear in the correct form -testcase tc_attribute_compactprint1() runs on MTC { +testcase tc_attribute_compactprint1() runs on CT { var Profile p := { name := "Bob", phone_no := { 6, 1, 3377760 }, @@ -87,7 +88,7 @@ testcase tc_attribute_compactprint1() runs on MTC { f_bool2verdict( match(f_dec_profile(f_enc_profile_compact(p)), p) ); } -testcase tc_attribute_compactprint2() runs on MTC { +testcase tc_attribute_compactprint2() runs on CT { var Profile p := { name := "Bob", phone_no := { 6, 1, 3377760 }, @@ -100,7 +101,7 @@ testcase tc_attribute_compactprint2() runs on MTC { f_bool2verdict( match(f_dec_profile(f_enc_profile_compact(p)), p) ); } -testcase tc_attribute_compactprintp() runs on MTC { +testcase tc_attribute_compactprintp() runs on CT { var Profile p := { name := "Bob", phone_no := { 6, 1, 3377760 }, @@ -118,7 +119,7 @@ testcase tc_attribute_compactprintp() runs on MTC { //if omit fields appear in the encoded //if all not omitted field value appear in the correct form //pretty printing -testcase tc_attribute_prettyprint1() runs on MTC { +testcase tc_attribute_prettyprint1() runs on CT { var Profile p := { name := "Bob", phone_no := { 6, 1, 3377760 }, @@ -132,7 +133,7 @@ testcase tc_attribute_prettyprint1() runs on MTC { } //pretty printing -testcase tc_attribute_prettyprint2() runs on MTC { +testcase tc_attribute_prettyprint2() runs on CT { var Profile p := { name := "Bob", phone_no := { 6, 1, 3377760 }, @@ -147,7 +148,7 @@ testcase tc_attribute_prettyprint2() runs on MTC { -testcase tc_attribute_union() runs on MTC { +testcase tc_attribute_union() runs on CT { var CBA c:= { f_val:= 1.75 } @@ -174,17 +175,18 @@ testcase tc_attribute_union() runs on MTC { // Encoding unions as JSON values (without the braces and the field name) // The decoder will attempt to decode each field and the first to successfully decode the value // will be the selected one (thus the order of the fields is important) -testcase tc_attribute_as_value() runs on MTC { +testcase tc_attribute_as_value() runs on CT { var Stuff stuff := { { ival := 18 }, { osval := '1D66FE'O }, { csval := "almafa" }, { bval := true }, { fval := 1.8e-20}, { ucsval := "almácska" }, { bsval := '1101101'B }, { prodval := { name := "Shoe", price := 79.99, code := 'A4C'H } }, { roival := { 1, 3, 3, 7 } }, { prod2val := { "Car", 14000.0, omit } }, { sizeval := Large }, { unival := { hsval := 'EE0'H } }, { unival := { rocsval := { "one", "two", "ten" } } } }; var octetstring os := unichar2oct("[18,\"1D66FE\",\"almafa\",true,1.800000e-20,\"almácska\",\"1101101\",{\"name\":\"Shoe\",\"price\":79.990000,\"code\":\"A4C\"},[1,3,3,7],{\"name\":\"Car\",\"price\":14000.000000},\"Large\",\"EE0\",[\"one\",\"two\",\"ten\"]]", "UTF-8"); f_check_encoding(encoded:= f_enc_stuff(stuff) , expected := os); f_bool2verdict( match(f_dec_stuff(f_enc_stuff(stuff)), stuff) ); + //log(match(f_dec_stuff(f_enc_stuff(stuff)), stuff)); setverdict(pass); } // Testing default values for record fields (decoding only) -testcase tc_attribute_default() runs on MTC { +testcase tc_attribute_default() runs on CT { var octetstring os := char2oct("{}"); var RecDef d := { i := -19, f := 1000000.000000, b := false, bs := '101'B, hs := 'DEAD'H, os := '1DE7'O, cs := "empty", ucs := "üres", size := Tiny, vt := fail }; f_bool2verdict( match(f_dec_def(os), d) ); @@ -196,7 +198,7 @@ testcase tc_attribute_default() runs on MTC { // Encoding a few values of ASN.1 types with the coding instruction "as value" // Results are the same as with the TTCN-3 types -testcase tc_attribute_as_value_asn() runs on MTC { +testcase tc_attribute_as_value_asn() runs on CT { var AsnStuff stuff := { { nval := NULL }, { ival := -10 }, { anyval := 'DCBA'O }, { vsval := "something" }, { pardval := { id := 0, priority := low, val := { iNTEGER := -10 } } } }; var octetstring os := char2oct("[null,-10,\"DCBA\",\"something\",{\"id\":0,\"priority\":\"low\",\"val\":{\"iNTEGER\":-10}}]"); f_check_encoding(encoded := f_enc_asn_stuff(stuff), expected := os); @@ -210,7 +212,7 @@ testcase tc_attribute_as_value_asn() runs on MTC { // field instead of omitting the union. // The other union ('uniTtcn') cannot decode the JSON value 'null', thus decoding 'null' omits // the union. -testcase tc_attribute_optional_as_value() runs on MTC { +testcase tc_attribute_optional_as_value() runs on CT { var OptionalUnions val1 := { dummy := "nothing", uniTtcn := omit, uniAsn := omit }; var OptionalUnions val2 := { dummy := "nothing", uniTtcn := omit, uniAsn := { nval := NULL } }; var octetstring os := char2oct("{\"dummy\":\"nothing\",\"uniTtcn\":null,\"uniAsn\":null}"); @@ -222,7 +224,7 @@ testcase tc_attribute_optional_as_value() runs on MTC { // Encoding records and sets with unbound fields with meta info (attribute 'metainfo for unbound') // The unbound fields will have the 'null' value and an extra (meta info) field will be inserted // into the JSON document (after the current field) to specify that the field is unbound. -testcase tc_attribute_metainfo_for_unbound() runs on MTC { +testcase tc_attribute_metainfo_for_unbound() runs on CT { // regular encoding and decoding tests var MetainfoRecord r := { num := 6 }; var octetstring os := char2oct("{\"num\":6,\"str\":null,\"metainfo str\":\"unbound\"}"); @@ -244,7 +246,7 @@ testcase tc_attribute_metainfo_for_unbound() runs on MTC { } // Negative tests for decoding with the unbound meta info attribute -testcase tc_attribute_metainfo_for_unbound_negtest() runs on MTC { +testcase tc_attribute_metainfo_for_unbound_negtest() runs on CT { var octetstring os := char2oct("{ \"metainfo num\" : \"unbound\", \"num\" : 6, \"str\" : \"qwe\" }"); var MetainfoRecord dummyRec; @try { @@ -317,7 +319,7 @@ testcase tc_attribute_metainfo_for_unbound_negtest() runs on MTC { // Decoding test for the 'metainfo for unbound' attribute, where all fields of an embedded record are // set to unbound by meta info. The decoded embedded record should be unbound. -testcase tc_attribute_metainfo_for_unbound_empty_rec() runs on MTC { +testcase tc_attribute_metainfo_for_unbound_empty_rec() runs on CT { var charstring dec_str := "{\"mynum\":99,\"mystr\":\"aa\", \"myRec\": {\"num\":null,\"metainfo num\":\"unbound\",\"str\":null,\"metainfo str\":\"unbound\" } }"; var MetainfoOuterRecord dec_val := f_dec_meta_outer_rec(char2oct(dec_str)); if (isbound(dec_val.myRec)) { @@ -332,7 +334,7 @@ testcase tc_attribute_metainfo_for_unbound_empty_rec() runs on MTC { // Encoding array types with unbound elements with meta info (attribute 'metainfo for unbound') // A JSON object with one key-value pair (containing the meta info) specifies that an element is unbound. -testcase tc_attribute_metainfo_for_unbound_arrays() runs on MTC { +testcase tc_attribute_metainfo_for_unbound_arrays() runs on CT { // test 1: pre-generated array type (record of integer) var MetainfoRecOf recof := { 1, 2, -, 4 }; var octetstring os := char2oct("[1,2,{\"metainfo []\":\"unbound\"},4]"); @@ -354,7 +356,7 @@ testcase tc_attribute_metainfo_for_unbound_arrays() runs on MTC { // Encoding a record with one field without field names (attribute 'as value') // The record value's encoding in this case is equal to the field's encoding -testcase tc_attribute_as_value_rec() runs on MTC { +testcase tc_attribute_as_value_rec() runs on CT { var RecAsValue val := { field := 10 }; var bitstring enc_exp := oct2bit(char2oct("10")); var bitstring enc := encvalue(val); @@ -382,7 +384,7 @@ testcase tc_attribute_as_value_rec() runs on MTC { // Encoding a record with one field without any variant attributes // (The code generated in this case is different, because of the possibility of // adding the 'as value' attribute for a subtype) -testcase tc_attribute_not_as_value_rec() runs on MTC { +testcase tc_attribute_not_as_value_rec() runs on CT { var RecNotAsValue val := { field := { 1.0, 2.0 } }; var bitstring enc_exp := oct2bit(char2oct("{\"field\":[1.000000,2.000000]}")); var bitstring enc := encvalue(val); @@ -411,7 +413,7 @@ testcase tc_attribute_not_as_value_rec() runs on MTC { // The base types of the fields do not have the 'as value' attribute set, only when they are used as // fields of this set (one of the fields is an anytype, which cannot have this attribute otherwise). // The set itself is encoded with field names, but its fields are encoded as values. -testcase tc_attribute_as_value_fields() runs on MTC { +testcase tc_attribute_as_value_fields() runs on CT { var SetWithAsValueFields val := { uni := { i := -3 }, rec := { field := { 1.0, 2.0 } }, @@ -446,7 +448,7 @@ testcase tc_attribute_as_value_fields() runs on MTC { } } -testcase tc_attribute_as_number() runs on MTC { +testcase tc_attribute_as_number() runs on CT { var RecWithAsNumber val := { lengths := { Short, Medium, Long }, days := { Monday, Saturday, Thursday } @@ -474,7 +476,7 @@ testcase tc_attribute_as_number() runs on MTC { } } -testcase tc_attribute_as_number_negtest() runs on MTC { +testcase tc_attribute_as_number_negtest() runs on CT { var RecWithAsNumber.lengths[-] val; var bitstring stream := oct2bit(char2oct("\"Short\"")); // name form instead of number form var integer res := decvalue(stream, val); @@ -505,7 +507,7 @@ testcase tc_attribute_as_number_negtest() runs on MTC { } // Testing the attribute 'default' on structures -testcase tc_attribute_default_struct() runs on MTC { +testcase tc_attribute_default_struct() runs on CT { var DefaultEmptyStructs val; var DefaultEmptyStructs exp_val := { {}, {}, {}, {} }; var universal charstring data := "{}"; @@ -522,7 +524,7 @@ testcase tc_attribute_default_struct() runs on MTC { } // Testing the attribute 'chosen' -testcase tc_attribute_chosen() runs on MTC { +testcase tc_attribute_chosen() runs on CT { // one test for each chosen field var PduWithIdList val := { { protocolId := 11, field1 := { type1 := { num := 1, str := "abc" } }, field2 := { type2 := { num := 2, str := "xyz" } } }, @@ -568,7 +570,7 @@ testcase tc_attribute_chosen() runs on MTC { // Testing JSON decoding when field selections of optional fields conflict with // the settings in attribute 'chosen' -testcase tc_attribute_chosen_negtest() runs on MTC { +testcase tc_attribute_chosen_negtest() runs on CT { // Test #1: protocolId indicates 'omit' (for field1), but the field is not omitted @try { var octetstring buff := char2oct("{\"protocolId\":3,\"field1\":{\"num\":1,\"str\":\"abc\"},\"field2\":{\"num\":2,\"str\":\"xyz\"}}"); @@ -629,7 +631,7 @@ testcase tc_attribute_chosen_negtest() runs on MTC { // Testing JSON decoding with attributes 'chosen' and 'default'. // (The conditions in the attribute 'chosen' depend on fields that have default values.) -testcase tc_attribute_chosen_default() runs on MTC { +testcase tc_attribute_chosen_default() runs on CT { // Test #1: both fields use their default values var octetstring buff := char2oct("{\"field\":{\"num\":1,\"str\":\"abc\"}}"); var PduWithId2 dec_exp := { protocolId1 := 1, protocolId2 := 0, field := { type1 := { num := 1, str := "abc" } } }; @@ -676,7 +678,7 @@ testcase tc_attribute_chosen_default() runs on MTC { } // Testing the attribute 'as map' -testcase tc_attribute_as_map() runs on MTC { +testcase tc_attribute_as_map() runs on CT { var Map x := { { "one", 1 }, { "two", 2 }, { "three", 3 }, { "zero", omit } }; var octetstring enc_exp := char2oct("{\"one\":1,\"two\":2,\"three\":3,\"zero\":null}"); var octetstring enc := f_enc_map(x); @@ -691,7 +693,7 @@ testcase tc_attribute_as_map() runs on MTC { } // Testing the attribute 'as map' in a union with the attribute 'as value' -testcase tc_attribute_as_map_in_union() runs on MTC { +testcase tc_attribute_as_map_in_union() runs on CT { var JsonValue x := { JsonObject := { { @@ -717,7 +719,7 @@ testcase tc_attribute_as_map_in_union() runs on MTC { } // Testing the attribute 'text ... as ...' -testcase tc_attribute_text_as() runs on MTC { +testcase tc_attribute_text_as() runs on CT { var EnumNumberList x := { One, Two, Three }; var octetstring enc_exp := char2oct("[\"1\",\"2\",\"3\"]"); var octetstring enc := f_enc_enum_list(x); diff --git a/regression_test/EncodeDecode/JSON/JsonComplexTest/JsonFunctions.ttcn b/regression_test/EncodeDecode/JSON/JsonComplexTest/JsonFunctions.ttcn index 8657df5e7..57c0dcb02 100644 --- a/regression_test/EncodeDecode/JSON/JsonComplexTest/JsonFunctions.ttcn +++ b/regression_test/EncodeDecode/JSON/JsonComplexTest/JsonFunctions.ttcn @@ -13,7 +13,8 @@ module JsonFunctions { -import from JsonTypes all; +import from JsonTypes0 all; +import from JsonTypes1 all; import from JsonData language "ASN.1" all; import from OtherTypes all; @@ -454,7 +455,7 @@ external function f_dec_pduwithid2(in octetstring x) return PduWithId2 //============== Internal Functions ==================== function f_check_encoding(in octetstring encoded, in octetstring expected) { - log("encoded: ",encoded," expected: ",expected) + //log("encoded: ",encoded," expected: ",expected) if(encoded == expected) { setverdict(pass); } else { @@ -463,7 +464,7 @@ function f_check_encoding(in octetstring encoded, in octetstring expected) { } with { extension "transparent"} function f_check_encoding_bit(in bitstring encoded, in bitstring expected) { - log("encoded: ",encoded," expected: ",expected) + //log("encoded: ",encoded," expected: ",expected) if(encoded == expected) { setverdict(pass); } else { diff --git a/regression_test/EncodeDecode/JSON/JsonComplexTest/JsonTestcases.ttcn b/regression_test/EncodeDecode/JSON/JsonComplexTest/JsonTestcases.ttcn index 9a276a5a4..c7b4203c5 100644 --- a/regression_test/EncodeDecode/JSON/JsonComplexTest/JsonTestcases.ttcn +++ b/regression_test/EncodeDecode/JSON/JsonComplexTest/JsonTestcases.ttcn @@ -13,10 +13,13 @@ module JsonTestcases { import from JsonFunctions all; -import from JsonTypes all; +import from JsonTypes0 all; +import from JsonTypes1 all; import from JsonData language "ASN.1" all; import from OtherTypes all; +type component MTC {} + modulepar R tsp_r := { i:= 1, cs:="two", @@ -26,9 +29,6 @@ modulepar R tsp_r := { modulepar charstring tsp_cs_long := "123456789123456789123456789 abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz ;""'\\/\n\r\t\f\b.,<>?|:][{}=-+!@#$%^&*()"; - - - const octetstring c_BOM_UTF8 :='EFBBBF'O; const integer c_i :=18 @@ -168,6 +168,7 @@ testcase tc_charstring_ascii_basic_escapes() runs on MTC{ testcase tc_charstring_ascii_extended1() runs on MTC{ var charstring cs := "Vire au Vert l"&char(0,0,0,224)&"!"; var octetstring os:= f_enc_cs( cs ) + log(os); f_check_encoding(encoded:= os, expected := char2oct(qm & cs & qm)); @try{ f_bool2verdict(cs==f_dec_cs(os)); @@ -176,7 +177,6 @@ testcase tc_charstring_ascii_extended1() runs on MTC{ @catch(err_msg) { setverdict(pass,"expected error, ok") } - } testcase tc_ucharstring_ascii_extended1_xer() runs on MTC{ @@ -357,7 +357,6 @@ testcase tc_float() runs on MTC{ } - //============ enum ====================== testcase tc_enum() runs on MTC{ @@ -931,7 +930,6 @@ control { execute(tc_asn_choice()); execute(tc_asn_strings()); execute(tc_asn_complex()); - execute(tc_asn_open_type_and_null()); execute(tc_asn_objid_and_any()); execute(tc_asn_optional_null()); diff --git a/regression_test/EncodeDecode/JSON/JsonComplexTest/JsonTypes.ttcn b/regression_test/EncodeDecode/JSON/JsonComplexTest/JsonTypes0.ttcn similarity index 53% rename from regression_test/EncodeDecode/JSON/JsonComplexTest/JsonTypes.ttcn rename to regression_test/EncodeDecode/JSON/JsonComplexTest/JsonTypes0.ttcn index 2b8f6a06c..010841d9e 100644 --- a/regression_test/EncodeDecode/JSON/JsonComplexTest/JsonTypes.ttcn +++ b/regression_test/EncodeDecode/JSON/JsonComplexTest/JsonTypes0.ttcn @@ -10,203 +10,9 @@ * Baranyi, Botond * ******************************************************************************/ -module JsonTypes { +module JsonTypes0 { -import from JsonData all; - -const integer c_imported_i :=11; - -type component MTC {} - -type enumerated Days { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }; - -type record R { - integer i, - charstring cs, - boolean b, - Days d -} - -type record R2 { - R r, - float f -} - -type record EmptyRec { } - -type union A { - R r, - integer i, - boolean b, - float f -} - -type record of universal charstring RoUCS; -type record of charstring RoCS; -type record of octetstring RoOS; -type record of integer RoI; - -type record of verdicttype RoV; -type record of float RoF; - -type integer IntArr[3]; -type float FloatArr[3]; -type universal charstring StrArr[4]; - -type record Date { - charstring month, - integer day_idx, - Days day_name -} - -type record of Date Dates; - -type record PhoneNumber { - integer country_prefix, - integer network_prefix, - integer local_number -} with { - variant(country_prefix) "JSON: name as CountryPrefix"; - variant(network_prefix) "JSON: name as NetworkPrefix"; - variant(local_number) "JSON : name as LocalNumber" -} - - -type record Profile0 { - charstring name, - PhoneNumber phone_no, - charstring email_addr optional, - Dates meetings optional -} - -type record Profile { - charstring name, - PhoneNumber phone_no, - charstring email_addr optional, - Dates meetings optional -} with { - //variant(email_addr) "JSON : omit as null"; - variant(meetings) "JSON:omit as null"; - variant(phone_no) "JSON: name as phone"; - variant(email_addr) "JSON: name as email"; -} - -type union CBA { - integer i_val, - Date date_val, - float f_val, - charstring cs_val -} with { - variant(date_val) "JSON:name as date"; - variant(i_val) "JSON:name as int"; - variant(f_val) "JSON:name as float"; - variant(cs_val) "JSON:name as string"; -} - -type set Product { - charstring name, - float price optional, - hexstring code -} with { - variant(price) "JSON:omit as null" -} - -type record KeywordFields { - integer a1, - integer a2, - integer a3, - integer a4, - integer a5, - integer a6, - integer a7, - integer a8, - integer a9, - integer a10, - integer a11 -} -with { - variant(a1) "JSON: name as omit"; - variant(a2) "JSON: name as as"; - variant(a3) "JSON: name as null"; - variant(a4) "JSON: name as name"; - variant(a5) "JSON: name as value"; - variant(a6) "JSON: name as default"; - variant(a7) "JSON: name as extend"; - variant(a8) "JSON: name as metainfo"; - variant(a9) "JSON: name as for"; - variant(a10) "JSON: name as unbound"; - variant(a11) "JSON: name as JSON"; -} - -type union Thing { - integer ival, - float fval, - boolean bval, - enumerated { Tiny, Small, Average, Large, Huge } sizeval, - bitstring bsval, - octetstring osval, - union { - hexstring hsval, - record of charstring rocsval - } unival, - charstring csval, - universal charstring ucsval, - Product prodval, - record of integer roival, - record { - charstring name, - float price, - hexstring productID optional - } prod2val -} with { - variant "JSON:as value"; - variant (prod2val.productID) "name as 'code'"; - variant(unival) "JSON:as value"; -} - -type record of Thing Stuff; - -type record RecDef { - integer i, - float f, - boolean b optional, - bitstring bs, - hexstring hs, - octetstring os, - charstring cs, - universal charstring ucs, - enumerated { Tiny, Small, Medium, Large, Huge } size, - verdicttype vt -} with { - variant(cs) "JSON : default(empty)"; - variant(i) "JSON:default(-19)"; - variant(f) "JSON:default(1.0e6)"; - variant(size) "JSON:default(Tiny)"; - variant(os) "JSON : default(1DE7)"; - variant(ucs) "JSON:default(üres)"; - variant(bs) "JSON:default (101)"; - variant(hs) "JSON:default(DEAD)"; - variant(vt) "JSON:default(fail)"; - variant(b) "JSON:default(false)"; -} - -type record HasPardType { - ProtocolElem_Field1 pard, - boolean buul, - Price price -} - -type union AsnThing { - AsnNull nval, - AsnInt ival, - AsnAny anyval, - AsnVisibleString vsval, - ProtocolElem_Field1 pardval -} with { - variant "JSON: as value"; -} - -type record of AsnThing AsnStuff; +import from JsonTypes1 all; type record OptionalUnions { charstring dummy, diff --git a/regression_test/EncodeDecode/JSON/JsonComplexTest/JsonTypes1.ttcn b/regression_test/EncodeDecode/JSON/JsonComplexTest/JsonTypes1.ttcn new file mode 100644 index 000000000..58227341e --- /dev/null +++ b/regression_test/EncodeDecode/JSON/JsonComplexTest/JsonTypes1.ttcn @@ -0,0 +1,212 @@ +/****************************************************************************** + * Copyright (c) 2000-2020 Ericsson Telecom AB + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html + * + * Contributors: + * Balasko, Jeno + * Baranyi, Botond + * + ******************************************************************************/ +module JsonTypes1 { + +import from JsonData all; + +const integer c_imported_i :=11; + +type enumerated Days { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }; + +type record R { + integer i, + charstring cs, + boolean b, + Days d +} + +type record R2 { + R r, + float f +} + +type record EmptyRec { } + +type union A { + R r, + integer i, + boolean b, + float f +} + +type record of universal charstring RoUCS; +type record of charstring RoCS; +type record of octetstring RoOS; +type record of integer RoI; + +type record of verdicttype RoV; +type record of float RoF; + +type integer IntArr[3]; +type float FloatArr[3]; +type universal charstring StrArr[4]; + +type record Date { + charstring month, + integer day_idx, + Days day_name +} + +type record of Date Dates; + +type record PhoneNumber { + integer country_prefix, + integer network_prefix, + integer local_number +} with { + variant(country_prefix) "JSON: name as CountryPrefix"; + variant(network_prefix) "JSON: name as NetworkPrefix"; + variant(local_number) "JSON : name as LocalNumber" +} + + +type record Profile0 { + charstring name, + PhoneNumber phone_no, + charstring email_addr optional, + Dates meetings optional +} + +type record Profile { + charstring name, + PhoneNumber phone_no, + charstring email_addr optional, + Dates meetings optional +} with { + //variant(email_addr) "JSON : omit as null"; + variant(meetings) "JSON:omit as null"; + variant(phone_no) "JSON: name as phone"; + variant(email_addr) "JSON: name as email"; +} + +type union CBA { + integer i_val, + Date date_val, + float f_val, + charstring cs_val +} with { + variant(date_val) "JSON:name as date"; + variant(i_val) "JSON:name as int"; + variant(f_val) "JSON:name as float"; + variant(cs_val) "JSON:name as string"; +} + +type set Product { + charstring name, + float price optional, + hexstring code +} with { + variant(price) "JSON:omit as null" +} + +type record KeywordFields { + integer a1, + integer a2, + integer a3, + integer a4, + integer a5, + integer a6, + integer a7, + integer a8, + integer a9, + integer a10, + integer a11 +} +with { + variant(a1) "JSON: name as omit"; + variant(a2) "JSON: name as as"; + variant(a3) "JSON: name as null"; + variant(a4) "JSON: name as name"; + variant(a5) "JSON: name as value"; + variant(a6) "JSON: name as default"; + variant(a7) "JSON: name as extend"; + variant(a8) "JSON: name as metainfo"; + variant(a9) "JSON: name as for"; + variant(a10) "JSON: name as unbound"; + variant(a11) "JSON: name as JSON"; +} + +type union Thing { + integer ival, + float fval, + boolean bval, + enumerated { Tiny, Small, Average, Large, Huge } sizeval, + bitstring bsval, + octetstring osval, + union { + hexstring hsval, + record of charstring rocsval + } unival, + charstring csval, + universal charstring ucsval, + Product prodval, + record of integer roival, + record { + charstring name, + float price, + hexstring productID optional + } prod2val +} with { + variant "JSON:as value"; + variant (prod2val.productID) "name as 'code'"; + variant(unival) "JSON:as value"; +} + +type record of Thing Stuff; + +type record RecDef { + integer i, + float f, + boolean b optional, + bitstring bs, + hexstring hs, + octetstring os, + charstring cs, + universal charstring ucs, + enumerated { Tiny, Small, Medium, Large, Huge } size, + verdicttype vt +} with { + variant(cs) "JSON : default(empty)"; + variant(i) "JSON:default(-19)"; + variant(f) "JSON:default(1.0e6)"; + variant(size) "JSON:default(Tiny)"; + variant(os) "JSON : default(1DE7)"; + variant(ucs) "JSON:default(üres)"; + variant(bs) "JSON:default (101)"; + variant(hs) "JSON:default(DEAD)"; + variant(vt) "JSON:default(fail)"; + variant(b) "JSON:default(false)"; +} + +type record HasPardType { + ProtocolElem_Field1 pard, + boolean buul, + Price price +} + +type union AsnThing { + AsnNull nval, + AsnInt ival, + AsnAny anyval, + AsnVisibleString vsval, + ProtocolElem_Field1 pardval +} with { + variant "JSON: as value"; +} + +type record of AsnThing AsnStuff; + + +} with { + encode "JSON"; +} diff --git a/regression_test/EncodeDecode/JSON/JsonComplexTest/Makefile b/regression_test/EncodeDecode/JSON/JsonComplexTest/Makefile index 7accfd67a..097c0bb0f 100644 --- a/regression_test/EncodeDecode/JSON/JsonComplexTest/Makefile +++ b/regression_test/EncodeDecode/JSON/JsonComplexTest/Makefile @@ -19,7 +19,7 @@ include $(TOPDIR)/Makefile.regression TTCN3_LIB = ttcn3$(RT2_SUFFIX)$(DYNAMIC_SUFFIX) -TTCN3_MODULES = JsonTypes.ttcn JsonFunctions.ttcn AttributeTestcases.ttcn JsonTestcases.ttcn OtherTypes.ttcn SemanticCheck.ttcn Cbor.ttcn Bson.ttcn +TTCN3_MODULES = JsonTypes0.ttcn JsonTypes1.ttcn JsonFunctions.ttcn AttributeTestcases.ttcn JsonTestcases.ttcn OtherTypes.ttcn SemanticCheck.ttcn Cbor.ttcn Bson.ttcn ifdef LEGACY_CODEC_HANDLING TTCN3_MODULES += SemanticCheck2.ttcn -- GitLab