Sync with 5.4.2
[deliverable/titan.core.git] / regression_test / negativeTest / NegTest_JSON.ttcn
CommitLineData
3f84031e 1/******************************************************************************
2 * Copyright (c) 2000-2015 Ericsson Telecom AB
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
7 ******************************************************************************/
8
9// This module tests the 'negative testing' feature of the JSON encoder.
10module NegTest_JSON {
11
12/****************** Types ******************/
13type record of integer IntList;
14
15type record of IntList IntListList;
16
17type record Rec {
18 integer num,
19 charstring str optional
20}
21
22type set Set {
23 IntList list,
24 Rec rec optional,
25 boolean b
26}
27
28type union Uni {
29 integer i,
30 octetstring os,
31 IntList list
32}
33
34type union Uni2 {
35 integer i,
36 octetstring os,
37 IntList list
38}
39with {
40 variant "JSON: as value";
41}
42
43type component CT {}
44
45/************ Encoding functions ************/
46external function f_enc_il(in IntList x) return octetstring
47 with { extension "prototype(convert) encode(JSON)" }
48
49external function f_enc_ill(in IntListList x) return octetstring
50 with { extension "prototype(convert) encode(JSON)" }
51
52external function f_enc_r(in Rec x) return octetstring
53 with { extension "prototype(convert) encode(JSON)" }
54
55external function f_enc_s(in Set x) return octetstring
56 with { extension "prototype(convert) encode(JSON)" }
57
58external function f_enc_u(in Uni x) return octetstring
59 with { extension "prototype(convert) encode(JSON)" }
60
61external function f_enc_u2(in Uni2 x) return octetstring
62 with { extension "prototype(convert) encode(JSON)" }
63
64/************* Erroneous values *************/
65const IntList il1 := { 0, 1, 2, 3 } with { erroneous([2]) "before := omit all" };
66const IntList il2 := { 0, 1, 2, 3 } with { erroneous([2]) "after := omit all" };
67const IntList il3 := { 4, 5, 6 } with { erroneous([1]) "before := boolean:false" };
68const IntList il4 := { 4, 5, 6 } with { erroneous([1]) "after := boolean:false" };
69const IntList il5 := { 4, 5, 6 } with { erroneous([1]) "value := boolean:false" };
70const IntList il6 := { 7, 8, 9 } with { erroneous([0]) "before(raw) := '616263'O" };
71const IntList il7 := { 7, 8, 9 } with { erroneous([0]) "after(raw) := '616263'O" };
72const IntList il8 := { 7, 8, 9 } with { erroneous([0]) "value(raw) := '616263'O" };
73
74const IntListList ill1 := { il1, il3, il5, il7 };
75const IntListList ill2 := { { 1, 2, 3 }, { 4, 5 }, { 6, 7, 8 } } with { erroneous([1]) "before := float:3.5"; erroneous([2][2]) "before := omit all" };
76
77const Rec r1 := { num := 10, str := "hello" } with { erroneous(num) "before := true" };
78const Rec r2 := { num := 10, str := "hello" } with { erroneous(num) "after := true" };
79const Rec r3 := { num := 10, str := "hello" } with { erroneous(num) "value := true" };
80const Rec r4 := { num := 10, str := "hello" } with { erroneous(str) "value := omit" };
81const Rec r5 := { num := 10, str := "hello" } with { erroneous(num) "before(raw) := \"abc\"" };
82const Rec r6 := { num := 10, str := "hello" } with { erroneous(num) "after(raw) := \"abc\"" };
83const Rec r7 := { num := 10, str := "hello" } with { erroneous(num) "value(raw) := \"abc\"" };
84
85const Set s1 := { list := il4, rec := r2, b := false } with { erroneous(rec) "before := omit all" };
86const Set s2 := { list := il4, rec := r2, b := false } with { erroneous(rec) "after := omit all" };
87const Set s3 := { list := { 1, 3, 5, 7 }, rec := { num := 2, str := "abc" }, b := true } with { erroneous(list[2]) "after := charstring:""str"""; erroneous(rec.str) "value(raw) := \"abc\"" };
88
89const Uni u1 := { i := -6 } with { erroneous(i) "value := \"-6\"" };
90const Uni u2 := { i := -6 } with { erroneous(i) "value := omit" };
91const Uni u3 := { i := -6 } with { erroneous(i) "value(raw) := universal charstring:\"abc\"" };
92const Uni u4 := { os := '1234'O } with { erroneous(i) "value := \"-6\"" }; // non-selected field is erroneous
93const Uni u5 := { list := { 0, 3, 6 } } with { erroneous(list[2]) "value := \"6\"" };
94
95const Uni2 u6 := { i := -6 } with { erroneous(i) "value := \"-6\"" };
96const Uni2 u7 := { i := -6 } with { erroneous(i) "value := omit" };
97const Uni2 u8 := { i := -6 } with { erroneous(i) "value(raw) := \"abc\" & char(0,0,1,117)" };
98const Uni2 u9 := { list := { 0, 3, 6 } } with { erroneous(list[2]) "value := \"6\"" };
99
100/******** Test cases for record-ofs ********/
101testcase tc_record_of_omit_before() runs on CT {
102 var octetstring res := f_enc_il(il1);
103 if (char2oct("[2,3]") == res) { setverdict(pass); }
104 else { setverdict(fail, res); }
105}
106
107testcase tc_record_of_omit_after() runs on CT {
108 var octetstring res := f_enc_il(il2);
109 if (char2oct("[0,1,2]") == res) { setverdict(pass); }
110 else { setverdict(fail, res); }
111}
112
113testcase tc_record_of_extra_before() runs on CT {
114 var octetstring res := f_enc_il(il3);
115 if (char2oct("[4,false,5,6]") == res) { setverdict(pass); }
116 else { setverdict(fail, res); }
117}
118
119testcase tc_record_of_extra_after() runs on CT {
120 var octetstring res := f_enc_il(il4);
121 if (char2oct("[4,5,false,6]") == res) { setverdict(pass); }
122 else { setverdict(fail, res); }
123}
124
125testcase tc_record_of_other_value() runs on CT {
126 var octetstring res := f_enc_il(il5);
127 if (char2oct("[4,false,6]") == res) { setverdict(pass); }
128 else { setverdict(fail, res); }
129}
130
131testcase tc_record_of_raw_before() runs on CT {
132 var octetstring res := f_enc_il(il6);
133 if (char2oct("[abc7,8,9]") == res) { setverdict(pass); }
134 else { setverdict(fail, res); }
135}
136
137testcase tc_record_of_raw_after() runs on CT {
138 var octetstring res := f_enc_il(il7);
139 if (char2oct("[7abc,8,9]") == res) { setverdict(pass); }
140 else { setverdict(fail, res); }
141}
142
143testcase tc_record_of_raw_value() runs on CT {
144 var octetstring res := f_enc_il(il8);
145 if (char2oct("[abc8,9]") == res) { setverdict(pass); }
146 else { setverdict(fail, res); }
147}
148
149testcase tc_record_of_embedded_values() runs on CT {
150 var octetstring res := f_enc_ill(ill1);
151 if (char2oct("[[2,3],[4,false,5,6],[4,false,6],[7abc,8,9]]") == res) { setverdict(pass); }
152 else { setverdict(fail, res); }
153}
154
155testcase tc_record_of_erroneous_in_elements() runs on CT {
156 var octetstring res := f_enc_ill(ill2);
157 if (char2oct("[[1,2,3],3.500000,[4,5],[8]]") == res) { setverdict(pass); }
158 else { setverdict(fail, res); }
159}
160
161/***** Test cases for records and sets *****/
162testcase tc_record_extra_before() runs on CT {
163 var octetstring res := f_enc_r(r1);
164 if (char2oct("{\"BOOLEAN\":true,\"num\":10,\"str\":\"hello\"}") == res) { setverdict(pass); }
165 else { setverdict(fail, res); }
166}
167
168testcase tc_record_extra_after() runs on CT {
169 var octetstring res := f_enc_r(r2);
170 if (char2oct("{\"num\":10,\"BOOLEAN\":true,\"str\":\"hello\"}") == res) { setverdict(pass); }
171 else { setverdict(fail, res); }
172}
173
174testcase tc_record_other_value() runs on CT {
175 var octetstring res := f_enc_r(r3);
176 if (char2oct("{\"num\":true,\"str\":\"hello\"}") == res) { setverdict(pass); }
177 else { setverdict(fail, res); }
178}
179
180testcase tc_record_omit_value() runs on CT {
181 var octetstring res := f_enc_r(r4);
182 if (char2oct("{\"num\":10}") == res) { setverdict(pass); }
183 else { setverdict(fail, res); }
184}
185
186testcase tc_record_raw_before() runs on CT {
187 var octetstring res := f_enc_r(r5);
188 if (char2oct("{abc\"num\":10,\"str\":\"hello\"}") == res) { setverdict(pass); }
189 else { setverdict(fail, res); }
190}
191
192testcase tc_record_raw_after() runs on CT {
193 var octetstring res := f_enc_r(r6);
194 if (char2oct("{\"num\":10abc,\"str\":\"hello\"}") == res) { setverdict(pass); }
195 else { setverdict(fail, res); }
196}
197
198testcase tc_record_raw_value() runs on CT {
199 var octetstring res := f_enc_r(r7);
200 if (char2oct("{abc\"str\":\"hello\"}") == res) { setverdict(pass); }
201 else { setverdict(fail, res); }
202}
203
204testcase tc_set_embedded_values_omit_before() runs on CT {
205 var octetstring res := f_enc_s(s1);
206 if (char2oct("{\"rec\":{\"num\":10,\"BOOLEAN\":true,\"str\":\"hello\"},\"b\":false}") == res) { setverdict(pass); }
207 else { setverdict(fail, res); }
208}
209
210testcase tc_set_embedded_values_omit_after() runs on CT {
211 var octetstring res := f_enc_s(s2);
212 if (char2oct("{\"list\":[4,5,false,6],\"rec\":{\"num\":10,\"BOOLEAN\":true,\"str\":\"hello\"}}") == res) { setverdict(pass); }
213 else { setverdict(fail, res); }
214}
215
216testcase tc_set_erroneous_in_fields() runs on CT {
217 var octetstring res := f_enc_s(s3);
218 if (char2oct("{\"list\":[1,3,5,\"str\",7],\"rec\":{\"num\":2abc},\"b\":true}") == res) { setverdict(pass); }
219 else { setverdict(fail, res); }
220}
221
222/********** Test cases for unions **********/
223testcase tc_union_regular_other_value() runs on CT {
224 var octetstring res := f_enc_u(u1);
225 if (char2oct("{\"i\":\"-6\"}") == res) { setverdict(pass); }
226 else { setverdict(fail, res); }
227}
228
229testcase tc_union_regular_omit_value() runs on CT {
230 var octetstring res := f_enc_u(u2);
231 if (char2oct("{}") == res) { setverdict(pass); }
232 else { setverdict(fail, res); }
233}
234
235testcase tc_union_regular_raw_value() runs on CT {
236 var octetstring res := f_enc_u(u3);
237 if (char2oct("{abc}") == res) { setverdict(pass); }
238 else { setverdict(fail, res); }
239}
240
241testcase tc_union_regular_wrong_alternative() runs on CT {
242 var octetstring res := f_enc_u(u4);
243 if (char2oct("{\"os\":\"1234\"}") == res) { setverdict(pass); }
244 else { setverdict(fail, res); }
245}
246
247testcase tc_union_regular_alternative_is_erroneous() runs on CT {
248 var octetstring res := f_enc_u(u5);
249 if (char2oct("{\"list\":[0,3,\"6\"]}") == res) { setverdict(pass); }
250 else { setverdict(fail, res); }
251}
252
253testcase tc_union_as_value_other_value() runs on CT {
254 var octetstring res := f_enc_u2(u6);
255 if (char2oct("\"-6\"") == res) { setverdict(pass); }
256 else { setverdict(fail, res); }
257}
258
259testcase tc_union_as_value_omit_value() runs on CT {
260 var octetstring res := f_enc_u2(u7);
261 if (char2oct("") == res) { setverdict(pass); }
262 else { setverdict(fail, res); }
263}
264
265testcase tc_union_as_value_raw_value() runs on CT {
266 var octetstring res := f_enc_u2(u8);
267 if (unichar2oct("abc" & char(0,0,1,117), "UTF-8") == res) { setverdict(pass); }
268 else { setverdict(fail, res); }
269}
270
271testcase tc_union_as_value_alternative_is_erroneous() runs on CT {
272 var octetstring res := f_enc_u2(u9);
273 if (char2oct("[0,3,\"6\"]") == res) { setverdict(pass); }
274 else { setverdict(fail, res); }
275}
276
277/*************** Control part ***************/
278control {
279 execute(tc_record_of_omit_before());
280 execute(tc_record_of_omit_after());
281 execute(tc_record_of_extra_before());
282 execute(tc_record_of_extra_after());
283 execute(tc_record_of_other_value());
284 execute(tc_record_of_raw_before());
285 execute(tc_record_of_raw_after());
286 execute(tc_record_of_raw_value());
287 execute(tc_record_of_embedded_values());
288 execute(tc_record_of_erroneous_in_elements());
289 execute(tc_record_extra_before());
290 execute(tc_record_extra_after());
291 execute(tc_record_other_value());
292 execute(tc_record_omit_value());
293 execute(tc_record_raw_before());
294 execute(tc_record_raw_after());
295 execute(tc_record_raw_value());
296 execute(tc_set_embedded_values_omit_before());
297 execute(tc_set_embedded_values_omit_after());
298 execute(tc_set_erroneous_in_fields());
299 execute(tc_union_regular_other_value());
300 execute(tc_union_regular_omit_value());
301 execute(tc_union_regular_raw_value());
302 execute(tc_union_regular_wrong_alternative());
303 execute(tc_union_regular_alternative_is_erroneous());
304 execute(tc_union_as_value_other_value());
305 execute(tc_union_as_value_omit_value());
306 execute(tc_union_as_value_raw_value());
307 execute(tc_union_as_value_alternative_is_erroneous());
308}
309
310}
311with {
312 encode "JSON";
313}
This page took 0.036147 seconds and 5 git commands to generate.