From 56a0f7a6e7d0ccf3f365ad433cd6119dd87dce5e Mon Sep 17 00:00:00 2001
From: balaskoa <Jeno.Balasko@ericsson.com>
Date: Thu, 2 Apr 2020 19:50:19 +0200
Subject: [PATCH] New attribute testcases in JsonBasicAttributeTest.ttcn

Signed-off-by: balaskoa <Jeno.Balasko@ericsson.com>
Change-Id: Iaa1f7f4be49323898f82fe3660eaa94dfa326822
---
 .../JsonBasicTest/JsonBasicAttributeTest.ttcn | 221 +++++++++++++++---
 1 file changed, 191 insertions(+), 30 deletions(-)

diff --git a/regression_test/EncodeDecode/JSON/JsonBasicTest/JsonBasicAttributeTest.ttcn b/regression_test/EncodeDecode/JSON/JsonBasicTest/JsonBasicAttributeTest.ttcn
index 624f2dc01..78f463424 100644
--- a/regression_test/EncodeDecode/JSON/JsonBasicTest/JsonBasicAttributeTest.ttcn
+++ b/regression_test/EncodeDecode/JSON/JsonBasicTest/JsonBasicAttributeTest.ttcn
@@ -9,8 +9,8 @@
 *   Balasko, Jeno
 *
 ******************************************************************************/
-//cpp: 12 pass
-//java:
+//cpp: 16 pass
+//java:10 pass
 module JsonBasicAttributeTest {
 
 type component CT {}
@@ -29,7 +29,7 @@ function f_compare_bitstring(in bitstring pl_val, in bitstring pl_expected) {
 
 type enumerated E { e1,e2,e3 }
 
-type enumerated Etext { One, Two, Three} 
+type enumerated Etext { One, Two, Three}
 with {
   variant "text 'One' as '1'"
   variant "text 'Two' as '2'"
@@ -38,28 +38,8 @@ with {
 
 
 //======= Record with one field =========
-//no other attr than JSON
-type record R0_json {
-  integer i optional
-} with { encode "JSON" }
-
-type record R1_json {
-  integer i optional
-} with { encode "JSON"; variant(i) "JSON: omit as null"; }
-
-type record R2_json {
-  integer i optional
-} with { encode "JSON"; variant(i) "JSON: name as Integer"; }
-
-type record R3_json {
-  integer i optional
-} with { encode "JSON"; variant(i) "JSON: name as Integer"; variant(i) "JSON: omit as null";}
-
-type record R4_json {
-  integer i
-} with { encode "JSON"; variant "JSON: as value";}
-
-//======= Record with more field =========
+//moved down
+//======= Record with more fields =========
 
 //type record R10_json {
 //  integer i optional,
@@ -90,23 +70,43 @@ type record R4_json {
 //=== Enum ====
 
 testcase tc_attr_enum_no_attr() runs on CT {
-  var E x := e2;
+  var E x := e2, z;
   var bitstring expected := oct2bit(char2oct("\"e2\""));
   var bitstring encoded := encvalue(x);
   log(x);
   log(bit2oct(encoded));
   f_compare_bitstring(expected,encoded);
+
+  var integer r := decvalue(expected, z);
+  if (r==0 and x==z){
+    setverdict(pass);
+  } else {
+    setverdict(fail);
+  }
 }
 
+//Status: fail in java
 testcase tc_attr_enum_text_attr() runs on CT {
-  var Etext x := One;
+  var Etext x := One, z;
   var bitstring expected := oct2bit(char2oct("\"1\""));
   var bitstring encoded := encvalue(x);
   log(x);
   log(bit2oct(encoded));
   f_compare_bitstring(expected,encoded);
+
+  var integer r := decvalue(expected, z);
+  if (r==0 and x==z){
+    setverdict(pass);
+  } else {
+    setverdict(fail);
+  }
 }
-//No attribute
+
+//========= no other attr than JSON =======
+type record R0_json {
+  integer i optional
+} with { encode "JSON" }
+
 testcase tc_rec_attr_no_attr_omit() runs on CT {
   var R0_json x := { i:=omit }
   var bitstring expected := oct2bit(char2oct("{}"));
@@ -125,6 +125,13 @@ testcase tc_rec_attr_no_attr_int() runs on CT {
   f_compare_bitstring(expected,encoded);
 }
 
+
+//======== omit as null ======
+
+type record R1_json {
+  integer i optional
+} with { encode "JSON"; variant(i) "JSON: omit as null"; }
+
 //Attribute: omit as null
 testcase tc_rec_attr_omit_as_null_omitvalue() runs on CT {
   var R1_json x := { i:=omit }
@@ -144,7 +151,11 @@ testcase tc_rec_attr_omit_as_null_intvalue() runs on CT {
   f_compare_bitstring(expected,encoded);
 }
 
-//Attribute: name as
+//========= Attribute: name as ======
+type record R2_json {
+  integer i optional
+} with { encode "JSON"; variant(i) "JSON: name as Integer"; }
+
 testcase tc_rec_attr_name_as_omitvalue() runs on CT {
   var R2_json x := { i:=omit }
   var bitstring expected := oct2bit(char2oct("{}"));
@@ -163,7 +174,23 @@ testcase tc_rec_attr_name_as_intvalue() runs on CT {
   f_compare_bitstring(expected,encoded);
 }
 
+testcase tc_rec_attr_name_as_uninit_value() runs on CT {
+  var R2_json x;
+  var bitstring expected := oct2bit(char2oct("{\"Integer\":1}"));
+  log(x);
+  @try {
+    var bitstring encoded := encvalue(x);
+    setverdict(fail, "DTE expected")
+  } @catch(e){
+    setverdict(pass)
+  }
+}
+
 //Attribute: name as & omit as null
+type record R3_json {
+  integer i optional
+} with { encode "JSON"; variant(i) "JSON: name as Integer"; variant(i) "JSON: omit as null";}
+
 testcase tc_rec_attr_name_as_and_omit_as_null_omitvalue() runs on CT {
   var R3_json x := { i:=omit }
   var bitstring expected := oct2bit(char2oct("{\"Integer\":null}")); 
@@ -182,6 +209,11 @@ testcase tc_rec_attr_name_as_and_omit_as_null_intvalue() runs on CT {
   f_compare_bitstring(expected,encoded);
 }
 
+//============= as value =====
+type record R4_json {
+  integer i
+} with { encode "JSON"; variant "JSON: as value";}
+
 testcase tc_rec_attr_as_value_intvalue() runs on CT {
   var R4_json x := { i:= 1 }
   var bitstring expected := oct2bit(char2oct("1"));
@@ -191,18 +223,147 @@ testcase tc_rec_attr_as_value_intvalue() runs on CT {
   f_compare_bitstring(expected,encoded);
 }
 
+// TODO: much more tests for "as value" !
+
+//============= default =====================
+type record R5_json {
+  integer i,
+  charstring cs
+} with { encode "JSON";
+  variant(i) "JSON: default (127)"
+  variant(cs) "JSON: default (Abba)"
+}
+
+testcase tc_rec_attr_default_values() runs on CT {
+  var R5_json x := { i:=1, cs := "Covid-19"},z;
+  var bitstring expected := oct2bit(char2oct("{\"i\":1,\"cs\":\"Covid-19\"}"));
+  var bitstring encoded := encvalue(x);
+  log(x);
+  log(bit2oct(encoded));
+  f_compare_bitstring(expected,encoded);
+
+  //decode
+  var integer r := decvalue(expected, z);
+  if (r==0 and x==z){
+    setverdict(pass);
+  } else {
+    setverdict(fail);
+  }
+}
+
+testcase tc_rec_attr_default_novalues() runs on CT {
+  var R5_json x := { i:=127, cs := "Abba"}, z; //default values
+  var bitstring expected := oct2bit(char2oct("{\"i\":127,\"cs\":\"Abba\"}"));
+  var bitstring encoded := encvalue(x);
+  log(x);
+  log(bit2oct(encoded));
+  f_compare_bitstring(expected,encoded);
+
+  //decode: missing i field
+  var bitstring d := oct2bit(char2oct("{\"cs\":\"Abba\"}"));
+  var integer r := decvalue(d, z);
+  if (r==0 and x==z){
+    setverdict(pass);
+  } else {
+    setverdict(fail);
+  }
+  //cs is missing
+  d := oct2bit(char2oct("{\"i\":127}"));
+  r := decvalue(d, z);
+  if (r==0 and x==z){
+    setverdict(pass);
+  } else {
+    setverdict(fail);
+  }
+
+  //both missing
+  d := oct2bit(char2oct("{}"));
+  r := decvalue(expected, z);
+  if (r==0 and x==z){
+    setverdict(pass);
+  } else {
+    setverdict(fail);
+  }
+}
+
+//========= Attribute: extend =======
+
+// The specification of this attribute is unclear and there is no example
+// TODO: clarify it!
+
+//========= Attribute: metainfo for unbound=======
+type record R6_json {
+  integer i,
+  charstring cs
+} with { encode "JSON";
+  variant(i) "JSON: metainfo for unbound";
+}
+
+testcase tc_rec_attr_metainfo_int() runs on CT {
+  var R6_json x := { cs := "Covid-19"}, z;
+  var bitstring expected := oct2bit(char2oct("{\"i\":null,\"metainfo i\":\"unbound\",\"cs\":\"Covid-19\"}"));
+  var bitstring encoded := encvalue(x);
+  log(x);
+  log(bit2oct(encoded));
+  f_compare_bitstring(expected,encoded);
+
+  //decode
+  var integer r := decvalue(expected, z);
+  log(z);
+  if (r==0 and log2str(x)==log2str(z)){
+    setverdict(pass);
+  } else {
+    setverdict(fail);
+  }
+}
+//====
+type record R7_json {
+  integer i,
+  charstring cs,
+  octetstring os
+} with { encode "JSON";
+  variant(i) "JSON: metainfo for unbound";
+  variant(i) "JSON: name as Int";
+  variant(os) "JSON: metainfo for unbound";
+}
+
+testcase tc_rec_attr_metainfo_nameas() runs on CT {
+  var R7_json x := { cs := "Covid-19"}, z;
+  var bitstring expected := oct2bit(char2oct("{\"Int\":null,\"metainfo Int\":\"unbound\",\"cs\":\"Covid-19\",\"os\":null,\"metainfo os\":\"unbound\"}"));
+  var bitstring encoded := encvalue(x);
+  log(x);
+  log(bit2oct(encoded));
+  f_compare_bitstring(expected,encoded);
+
+  //decode
+  var integer r := decvalue(expected, z);
+  if (r==0 and log2str(x)==log2str(z)){
+    setverdict(pass);
+  } else {
+    setverdict(fail);
+  }
+}
+
+//========= As number =========
+
+//========= control part ============
 control {
   execute(tc_attr_enum_no_attr());
-  execute(tc_attr_enum_text_attr());
+  execute(tc_attr_enum_text_attr()); //fails in java
   execute(tc_rec_attr_no_attr_omit());
   execute(tc_rec_attr_no_attr_int());
   execute(tc_rec_attr_omit_as_null_omitvalue());
   execute(tc_rec_attr_omit_as_null_intvalue());
   execute(tc_rec_attr_name_as_omitvalue());
   execute(tc_rec_attr_name_as_intvalue());
+  execute(tc_rec_attr_name_as_uninit_value());
   execute(tc_rec_attr_name_as_and_omit_as_null_omitvalue());
   execute(tc_rec_attr_name_as_and_omit_as_null_intvalue());
   execute(tc_rec_attr_as_value_intvalue());
+  execute( tc_rec_attr_default_values() );
+  execute( tc_rec_attr_default_novalues() );
+  execute(tc_rec_attr_metainfo_int());
+  execute(tc_rec_attr_metainfo_nameas());
 }
 
 } with {
-- 
GitLab