1 .******************************************************************************
2 .* Copyright (c) 2000-2014 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 .******************************************************************************/
11 :docname.Test Description
18 :appr.ETH/RZ (Gyula Koos)
21 :title.Test description of the TTCN-3 Semantic Analyzer: IsBound, Ispresent, AllFrom, Embedded functions
23 .*---------------------------------------------------------------------*
24 :h1.PREREQUISITES AND PREPARATIONS
25 .*---------------------------------------------------------------------*
26 .*---------------------------------------------------------------------*
27 :h2.Scope of the Test Object
28 .*---------------------------------------------------------------------*
30 This TD contains unified test cases related to TTCN3 Executor's "isbound", "ispresent" and "all from" function.
31 DON'T YOU DARE TO WRITE AN INSPECTION RECORD ABOUT THIS FILE
35 :p.:us.Revision Information:eus.
40 REV DATE PREPARED CHANGE
41 === ========== ======== ======
42 PA2 2012-12-11 ETHBAAT embedded functions
43 PA3 2013-01-11 ETHBAAT structured macro
44 PA4 2013-01-16 ETHBAAT structured macro moved into Config_Parser/PreprocessingCfgFiles_TD.script
47 .*---------------------------------------------------------------------*
49 .*---------------------------------------------------------------------*
50 :p.:us.Software Tools:eus.
57 .*---------------------------------------------------------------------*
58 :h1.REQUIREMENT-BASED TESTS
59 .*---------------------------------------------------------------------*
60 .*---------------------------------------------------------------------*
61 :h2.Testing Isbound feature
62 .*---------------------------------------------------------------------*
64 .*---------------------------------------------------------------------*
65 :h3. Aggregated isbound testcases - Positive tests
66 .*---------------------------------------------------------------------*
69 <TC - Aggregated isbound testcases - Positive tests >
73 <MODULE TTCN IsBound_Test IsBound_Test.ttcn>
76 type port MyChrMessage_PT message {
78 } with { extension "internal"}
80 type component MTC_CT {
81 port MyChrMessage_PT my_PCO;
82 var integer v_counter1 :=0;
85 //===== SIMPLE, NOT TOO DEEP =====
86 type record of charstring ROC;
87 type record of integer ROI;
88 type record MyRecord {
94 type record of ROI ROROI;
103 const MyUnion1 c_myunion1:= { roc:= { "1aa", "2bb", "3cc"}}
104 const MyUnion1 c_myunion2:= { i:= 5}
107 //====== DEEP 3===============
115 type record of MyRec2 MyRecOf
118 ROROI roroi optional,
122 const MyRec2 c_myrec2_1:={
125 u:={r:={ i:=1, x:=1.0, c:="one"}},
126 r:={ i:=1, x:=1.0, c:="one"}
128 const MyRec2 c_myrec2_2:={
131 u:={r:={ i:=1, x:=1.0, c:="one"}},
132 r:={ i:=1, x:=1.0, c:="one"}
136 //partially initialized record:
137 const MyRec2 c_myrec2_part:={
140 u:={ r:={ /*i:=1,*/ x:=1.0, c:="one"}},
141 r:={ i:=1, x:=1.0, c:="one"}
143 const MyRec3 c_myrec3_1 := {
144 roroi:= { {1,2,3,4,5,6,7,8,9},{10} },
148 const MyRec3 c_myrec3_2 := {
149 roroi:= { {1,2,3,4,5,6,7,8,9},{10} },
158 const MyRec3 c_myrec3_innerOmits := {
159 roroi:= { {1,2,3,4,5,6,7,8,9},{10} },
169 //==== Templates =====
172 //===== SIMPLE TYPES =====
173 testcase tc_simple_charstring() runs on MTC_CT {
174 var charstring vl_ch;
175 if(isbound(vl_ch)){setverdict(fail)} else {setverdict(pass)}
177 if(isbound(vl_ch)) {setverdict(pass)} else {setverdict(fail)}
180 testcase tc_simple_charstring_template() runs on MTC_CT {
181 var template charstring vlt_ch;
182 if(isbound(vlt_ch)){setverdict(fail)} else {setverdict(pass)}
184 if(isbound(vlt_ch)) {setverdict(pass)} else {setverdict(fail)}
187 testcase tc_simple_charstring_template_pattern() runs on MTC_CT {
188 var template charstring vlt_ch;
189 if(isbound(vlt_ch)){setverdict(fail)} else {setverdict(pass)}
190 vlt_ch:= pattern "AB?D"
191 if(isbound(vlt_ch)) {setverdict(pass)} else {setverdict(fail)}
194 testcase tc_simple_integer() runs on MTC_CT {
196 if(isbound(vl_i)){setverdict(fail)} else {setverdict(pass)}
198 if(isbound(vl_i)) {setverdict(pass)} else {setverdict(fail)}
200 var template integer vtl_i :=*;
201 if(isbound( vtl_i )) {setverdict(pass)}else {setverdict(fail)};
203 if(isbound( vtl_i )) {setverdict(pass)}else {setverdict(fail)};
206 testcase tc_simple_octetstring() runs on MTC_CT {
207 var octetstring vl_o;
208 if(isbound(vl_o)){setverdict(fail)} else {setverdict(pass)}
210 if(isbound(vl_o)) {setverdict(pass)} else {setverdict(fail)}
213 //======= SPECIAL TYPES ======
215 altstep as_empty() runs on MTC_CT {
219 function f_empty() runs on MTC_CT {
220 log("f_empty called");
223 testcase tc_special_default_value() runs on MTC_CT {
224 var default vl_default;
225 if(isbound(vl_default)){setverdict(fail)}else {setverdict(pass)};
228 if(isbound(vl_default)) {setverdict(pass)} else {setverdict(fail)}
230 vl_default := activate(as_empty());
231 //log("default altstep after activate:", vl_default);
232 if(isbound(vl_default)){setverdict(pass)}else {setverdict(fail)};
234 deactivate(vl_default);
235 //log("default altstep after deactivate:", vl_default);
236 if(isbound(vl_default)){setverdict(pass)}else {setverdict(fail)};
239 testcase tc_special_compref() runs on MTC_CT {
240 var MTC_CT vc_myComp;
241 log("vc_myComp before create:", vc_myComp);
242 if(isbound(vc_myComp)){setverdict(fail)}else {setverdict(pass)};
244 vc_myComp:= MTC_CT.create("hali");
245 log("vc_myComp after create:", vc_myComp);
246 if(isbound(vc_myComp)){setverdict(pass)}else {setverdict(fail)};
248 vc_myComp.start(f_empty());
249 if(isbound(vc_myComp)){setverdict(pass)}else {setverdict(fail)};
252 if(isbound(vc_myComp)){setverdict(pass)}else {setverdict(fail)};
255 //========= Compound =====
256 testcase tc_unionOfRecordOfs1() runs on MTC_CT {
257 var MyUnion1 vl_u:= c_myunion1;
258 if(isbound(vl_u)) {setverdict(pass)} else {setverdict(fail)}
259 if(isbound(vl_u.roc)){setverdict(pass)} else {setverdict(fail)}
260 if(isbound(vl_u.roc[0])){setverdict(pass)}else {setverdict(fail)}
261 if(isbound(vl_u.roc[1])){setverdict(pass)}else {setverdict(fail)}
262 if(isbound(vl_u.roc[2])){setverdict(pass)}else {setverdict(fail)}
263 if(isbound(vl_u.roc[3])){setverdict(fail)}else {setverdict(pass)}
264 if(isbound(vl_u.roc[99])){setverdict(fail)}else {setverdict(pass)}
265 if(isbound(vl_u.i)){setverdict(fail)}else {setverdict(pass)}
266 if(isbound(vl_u.roi)){setverdict(fail)}else {setverdict(pass)}
267 if(isbound(vl_u.roi[0])){setverdict(fail)}else {setverdict(pass)}
268 if(isbound(vl_u.roi[1])){setverdict(fail)} else {setverdict(pass)}
272 testcase tc_unionOfRecordOfs2() runs on MTC_CT {
273 var MyUnion1 vl_u:= c_myunion2;
274 if(isbound(vl_u)) {setverdict(pass)} else {setverdict(fail)}
275 if(isbound(vl_u.roc)){setverdict(fail)} else {setverdict(pass)}
276 if(isbound(vl_u.roc[0])){setverdict(fail)} else {setverdict(pass)}
277 if(isbound(vl_u.roc[1])){setverdict(fail)} else {setverdict(pass)}
278 if(isbound(vl_u.roc[2])){setverdict(fail)} else {setverdict(pass)}
279 if(isbound(vl_u.roc[3])){setverdict(fail)} else {setverdict(pass)}
280 if(isbound(vl_u.roc[99])){setverdict(fail)} else {setverdict(pass)}
281 if(isbound(vl_u.r)){setverdict(fail)} else {setverdict(pass)};
282 if(isbound(vl_u.r.i)){setverdict(fail)} else {setverdict(pass)};
283 if(isbound(vl_u.r.x)){setverdict(fail)} else {setverdict(pass)};
284 if(isbound(vl_u.r.c)){setverdict(fail)} else {setverdict(pass)};
285 //checks if the selected item remained the same
286 if(isbound(vl_u.i)){setverdict(pass)}else {setverdict(fail)}
287 if(isbound(vl_u.roi)){setverdict(fail)} else {setverdict(pass)}
288 if(isbound(vl_u.roi[0])){setverdict(fail)}else {setverdict(pass)}
289 if(isbound(vl_u.roi[1])){setverdict(fail)} else {setverdict(pass)}
293 testcase tc_compilationerror1() runs on MTC_CT {
294 var MyUnion1 vl_u:= c_myunion2;
295 if(isbound(vl_u)) {setverdict(pass)} else {setverdict(fail)}
296 if(isbound(vl_u.roc)){setverdict(fail)} else {setverdict(pass)}
297 if(isbound(vl_u.roc[0])){setverdict(fail)}else {setverdict(pass)}
298 if(isbound(vl_u.r.x)){setverdict(fail)}else {setverdict(pass)}
299 if(isbound(vl_u.roc[99])){setverdict(fail)} else {setverdict(pass)}
304 testcase tc_union_modify() runs on MTC_CT {
305 var MyUnion1 vl_u:= c_myunion2;
306 if(isbound(vl_u)) {setverdict(pass)} else {setverdict(fail)}
307 if(isbound(vl_u.roc)){setverdict(fail)} else {setverdict(pass)}
308 if(isbound(vl_u.roi)){setverdict(fail)} else {setverdict(pass)}
311 if(isbound(vl_u)) {setverdict(pass)} else {setverdict(fail)}
312 if(isbound(vl_u.roc)){setverdict(pass)} else {setverdict(fail)}
313 if(isbound(vl_u.roc[0])){setverdict(pass)}else {setverdict(fail)}
314 if(isbound(vl_u.roc[1])){setverdict(pass)}else {setverdict(fail)}
315 if(isbound(vl_u.roc[2])){setverdict(pass)}else {setverdict(fail)}
316 if(isbound(vl_u.roc[3])){setverdict(fail)}
317 if(isbound(vl_u.roc[99])){setverdict(fail)}
318 if(isbound(vl_u.i)){setverdict(fail)}
319 if(isbound(vl_u.roi)){setverdict(fail)}
320 if(isbound(vl_u.roi[0])){setverdict(fail)}
321 if(isbound(vl_u.roi[1])){setverdict(fail)} else {setverdict(pass)}
325 testcase tc_sideeffect1() runs on MTC_CT {
326 var MyUnion1 vl_u:= c_myunion1; // { roc:= { "1aa", "2bb", "3cc"}}
327 if(isbound(vl_u.roc[3])){setverdict(fail)}else {setverdict(pass)}
328 if(ispresent(vl_u.roc[3])){setverdict(fail)}else {setverdict(pass)}
332 testcase tc_sideeffect2() runs on MTC_CT {
333 var MyUnion1 vl_u:= c_myunion1; // { roc:= { "1aa", "2bb", "3cc"}}
334 var integer vl_oldsize:=0, vl_newsize:=0;
335 vl_oldsize:=sizeof(vl_u.roc);
337 if(isbound(vl_u.i)){setverdict(fail)}else {setverdict(pass)}
339 if(isbound(vl_u.roc)) {setverdict(pass)}else {setverdict(fail)}
341 //checks if size is unchenged
342 if(isbound(vl_u.roc[4])) {setverdict(fail)}else {setverdict(pass)}
343 vl_newsize:=sizeof(vl_u.roc);
344 if(vl_newsize == vl_oldsize) {setverdict(pass)}else {setverdict(fail)}
348 //====== DEEP 2-3 ===============
349 testcase tc_recordOf_omit1() runs on MTC_CT {
350 var MyRec2 vl_r:=c_myrec2_1;
351 if(isbound(vl_r.roc)){setverdict(pass)}else {setverdict(fail)};
354 testcase tc_recordOf_omit2() runs on MTC_CT {
355 var MyRec2 vl_r:=c_myrec2_1;
356 if(isbound(vl_r.roc[0])){setverdict(fail)}else {setverdict(pass)};
359 testcase tc_recordOf_emptyRoi1() runs on MTC_CT {
360 var MyRec2 vl_r:=c_myrec2_1;
361 if(isbound(vl_r.roi)){setverdict(pass)}else {setverdict(fail)};
364 testcase tc_recordOf_emptyRoi2() runs on MTC_CT {
365 var MyRec2 vl_r:=c_myrec2_1;
366 if(isbound(vl_r.roi[0])){setverdict(fail)}else {setverdict(pass)};
369 testcase tc_recordOf_emptyRoi3() runs on MTC_CT {
370 var MyRec2 vl_r:=c_myrec2_1;
371 if(isbound(vl_r.roi[90])){setverdict(fail)}else {setverdict(pass)};
374 testcase tc_record_completlyInit() runs on MTC_CT {
375 var MyRec2 vl_r:=c_myrec2_1;
376 if(isbound(vl_r)){setverdict(pass)}else {setverdict(fail)};
379 testcase tc_record_partiallyInit1() runs on MTC_CT {
380 var MyRec2 vl_r:=c_myrec2_part;
381 if(isbound(vl_r)){setverdict(pass)}else {setverdict(fail)};
385 testcase tc_record_partiallyInit3() runs on MTC_CT {
386 var MyRec2 vl_r:=c_myrec2_part;
387 if(isbound(vl_r.roc)){setverdict(pass)}else {setverdict(fail)};
390 testcase tc_record_partiallyInit4() runs on MTC_CT {
391 var MyRec2 vl_r:=c_myrec2_part;
392 if(isbound(vl_r.roi)){setverdict(pass)}else {setverdict(fail)};
395 testcase tc_record_partiallyInit5() runs on MTC_CT {
396 var MyRec2 vl_r:=c_myrec2_part;
397 if(isbound(vl_r.u)){setverdict(pass)}else {setverdict(fail)};
400 testcase tc_record_partiallyInit6() runs on MTC_CT {
401 var MyRec2 vl_r:=c_myrec2_part;
402 if(isbound(vl_r.u.r)){setverdict(pass)}else {setverdict(fail)};
405 testcase tc_record_partiallyInit7() runs on MTC_CT {
406 var MyRec2 vl_r:=c_myrec2_part;
407 if(isbound(vl_r.u.r.i)){setverdict(fail)}else {setverdict(pass)};
410 testcase tc_record_partiallyInit8() runs on MTC_CT {
411 var MyRec2 vl_r:=c_myrec2_part;
412 if(isbound(vl_r.u.r.x)){setverdict(pass)}else {setverdict(fail)};
415 testcase tc_record_partiallyInit9() runs on MTC_CT {
416 var MyRec2 vl_r:=c_myrec2_part;
417 if(isbound(vl_r.u.r.c)){setverdict(pass)}else {setverdict(fail)};
420 testcase tc_record_partiallyInit10() runs on MTC_CT {
421 var MyRec2 vl_r:=c_myrec2_part;
422 if(isbound(vl_r.u.i)){setverdict(fail)}else {setverdict(pass)};
426 testcase tc_record_partiallyInit11() runs on MTC_CT {
427 var MyRec2 vl_r:={ r:={}}
428 if(isbound(vl_r.r)){setverdict(fail)}else {setverdict(pass)};
431 testcase tc_record_partiallyInit12() runs on MTC_CT {
432 var MyRec2 vl_r:={ r:={i:=5}}
433 if(isbound(vl_r.r)){setverdict(pass)}else {setverdict(fail)};
434 if(isbound(vl_r.r.i)){setverdict(pass)}else {setverdict(fail)};
437 testcase tc_record_partiallyInit13() runs on MTC_CT {
438 var MyRec2 vl_r:={ r:={i:=5,x:=-,c:= -}}
439 if(isbound(vl_r)){setverdict(pass)}else {setverdict(fail)};
440 if(isbound(vl_r.r)){setverdict(pass)}else {setverdict(fail)};
441 if(isbound(vl_r.r.i)){setverdict(pass)}else {setverdict(fail)};
444 testcase tc_recordOf_union() runs on MTC_CT {
445 var MyRec2 vl_r:=c_myrec2_1;
446 if(isbound(vl_r.u)){setverdict(pass)}else {setverdict(fail)};
447 if(isbound(vl_r.u.r)){setverdict(pass)}else {setverdict(fail)};
448 if(isbound(vl_r.u.r.i)){setverdict(pass)}else {setverdict(fail)};
449 if(isbound(vl_r.u.r.x)){setverdict(pass)}else {setverdict(fail)};
450 if(isbound(vl_r.u.r.c)){setverdict(pass)}else {setverdict(fail)};
451 if(isbound(vl_r.u.roi)){setverdict(fail)}else {setverdict(pass)};
452 if(isbound(vl_r.u.roi[3])){setverdict(fail)}else {setverdict(pass)};
453 if(isbound(vl_r.u.i)){setverdict(fail)}else {setverdict(pass)};
454 if(isbound(vl_r.u.roc)){setverdict(fail)}else {setverdict(pass)};
455 if(isbound(vl_r.u.roc[0])){setverdict(fail)}else {setverdict(pass)};
458 testcase tc_recordOf_recordOfRecordOfInt() runs on MTC_CT {
459 var MyRec3 vl_r:=c_myrec3_1;
460 if(isbound(vl_r.roroi)){setverdict(pass)}else {setverdict(fail)};
461 if(isbound(vl_r.roroi[0])){setverdict(pass)}else {setverdict(fail)};
462 if(isbound(vl_r.roroi[1])){setverdict(pass)}else {setverdict(fail)};
463 if(isbound(vl_r.roroi[2])){setverdict(fail)}else {setverdict(pass)};
464 if(isbound(vl_r.roroi[200])){setverdict(fail)}else {setverdict(pass)};
465 if(isbound(vl_r.roroi[0][0])){setverdict(pass)}else {setverdict(fail)};
466 if(isbound(vl_r.roroi[0][8])){setverdict(pass)}else {setverdict(fail)};
467 if(isbound(vl_r.roroi[0][9])){setverdict(fail)}else {setverdict(pass)};
468 if(isbound(vl_r.roroi[1][0])){setverdict(pass)}else {setverdict(fail)};
469 if(isbound(vl_r.roroi[1][1])){setverdict(fail)}else {setverdict(pass)};
470 if(isbound(vl_r.roroi[2][0])){setverdict(fail)}else {setverdict(pass)};
473 testcase tc_recordOf_recordInRecord() runs on MTC_CT {
474 var MyRec3 vl_r:=c_myrec3_2;
475 if(isbound(vl_r.r)) {setverdict(pass)}else {setverdict(fail)};
476 if(isbound(vl_r.r.roc)) {setverdict(pass)}else {setverdict(fail)};
477 if(isbound(vl_r.r.roi)) {setverdict(pass)}else {setverdict(fail)};
478 if(isbound(vl_r.r.u)) {setverdict(pass)}else {setverdict(fail)};
479 if(isbound(vl_r.r.u)) {setverdict(pass)}else {setverdict(fail)};
480 if(isbound(vl_r.r.u.i)) {setverdict(pass)}else {setverdict(fail)};
481 if(isbound(vl_r.r.r)) {setverdict(pass)}else {setverdict(fail)}; //fails!
484 testcase tc_recordOf_recordInRecord_innerOmits() runs on MTC_CT {
485 var MyRec3 vl_r:=c_myrec3_innerOmits;
486 if(isbound(vl_r.roroi)) {setverdict(pass)}else {setverdict(fail)};
487 if(isbound(vl_r.r)) {setverdict(pass)}else {setverdict(fail)};
488 if(isbound(vl_r.r.roc)) {setverdict(pass)}else {setverdict(fail)};
489 if(isbound(vl_r.r.roi)) {setverdict(pass)}else {setverdict(fail)};
490 if(isbound(vl_r.r.u)) {setverdict(pass)}else {setverdict(fail)};
491 if(isbound(vl_r.r.r)){setverdict(pass)}else {setverdict(fail)};
495 template MyRecOf t_recOf1 := (
496 { [0]:= { roc:=omit }, [1]:= {roc:=omit} },
497 { [0]:= { roc:=omit }, [1]:= {roc:={"one", "two"}} },
498 { [0]:= { roc:=omit }, [2]:= {u:={i:=5}} }
501 testcase tc_recordOf_template1() runs on MTC_CT {
502 var template MyRecOf vtl_recOf:= t_recOf1;
503 if(isbound( vtl_recOf )) {setverdict(pass)}else {setverdict(fail)};
504 if(isbound( t_recOf1 )) {setverdict(pass)}else {setverdict(fail)};
507 testcase tc_recordOf_template2() runs on MTC_CT {
508 var template MyRecOf vtl_recOf:= t_recOf1;
509 if(isbound( vtl_recOf[0] )) {setverdict(fail)}else {setverdict(pass)};
510 if(isbound( vtl_recOf[1] )) {setverdict(fail)}else {setverdict(pass)};
511 if(isbound( vtl_recOf[2] )) {setverdict(fail)}else {setverdict(pass)};
514 //========== JOKER in templates====================
516 testcase tc_record_withJoker1() runs on MTC_CT {
517 var template MyRec2 vtl_rec2_j;
518 if(isbound(vtl_rec2_j)) {setverdict(fail)}else {setverdict(pass)};
522 if(isbound(vtl_rec2_j)) {setverdict(pass)}else {setverdict(fail)};
523 if(isbound(vtl_rec2_j.roc)) {setverdict(pass)}else {setverdict(fail)};
524 if(isbound(vtl_rec2_j.roc[0])) {setverdict(fail)}else {setverdict(pass)};
526 testcase tc_record_withJoker2() runs on MTC_CT {
527 var template MyRec2 vtl_rec2_j;
531 if(isbound(vtl_rec2_j)) {setverdict(pass)}else {setverdict(fail)};
532 if(isbound(vtl_rec2_j.roc)) {setverdict(pass)}else {setverdict(fail)};
533 if(isbound(vtl_rec2_j.roc[0])){setverdict(pass)}else {setverdict(fail)};
534 if(isbound(vtl_rec2_j.roc[1])){setverdict(pass)}else {setverdict(fail)};
535 if(isbound(vtl_rec2_j.roc[10])){setverdict(fail)}else {setverdict(pass)};
536 if(isbound(vtl_rec2_j.roi)){setverdict(fail)}else {setverdict(pass)};
537 if(isbound(vtl_rec2_j.u)){setverdict(fail)}else {setverdict(pass)};
538 if(isbound(vtl_rec2_j.r)){setverdict(fail)}else {setverdict(pass)};
541 testcase tc_record_withJoker3() runs on MTC_CT {
542 var template MyRec2 vtl_rec2_j;
546 if(isbound(vtl_rec2_j)) {setverdict(pass)}else {setverdict(fail)};
547 if(isbound(vtl_rec2_j.roc)){setverdict(fail)}else {setverdict(pass)};
548 if(isbound(vtl_rec2_j.roi)){setverdict(fail)}else {setverdict(pass)};
549 if(isbound(vtl_rec2_j.u)){setverdict(pass)}else {setverdict(fail)};
550 if(isbound(vtl_rec2_j.u.i)){setverdict(fail)}else {setverdict(pass)};
553 testcase tc_record_withJoker4() runs on MTC_CT {
554 var template MyRec2 vtl_rec2_j;
559 if(isbound(vtl_rec2_j)) {setverdict(pass)}else {setverdict(fail)};
560 if(isbound(vtl_rec2_j.roc)){setverdict(pass)}else {setverdict(fail)};
561 if(isbound(vtl_rec2_j.roi)){setverdict(fail)}else {setverdict(pass)};
562 if(isbound(vtl_rec2_j.u)){setverdict(pass)}else {setverdict(fail)};
563 if(isbound(vtl_rec2_j.u.i)){setverdict(pass)}else {setverdict(fail)};
566 testcase tc_record_withJoker5() runs on MTC_CT {
567 var template MyRec2 vtl_rec2_j;
571 if(isbound(vtl_rec2_j)) {setverdict(pass)}else {setverdict(fail)};
572 if(isbound(vtl_rec2_j.roc)){setverdict(fail)}else {setverdict(pass)};
573 if(isbound(vtl_rec2_j.roi)){setverdict(fail)}else {setverdict(pass)};
574 if(isbound(vtl_rec2_j.u)){setverdict(fail)}else {setverdict(pass)};
575 if(isbound(vtl_rec2_j.u.i)){setverdict(fail)}else {setverdict(pass)};
576 if(isbound(vtl_rec2_j.r)) {setverdict(pass)}else {setverdict(fail)};
577 if(isbound(vtl_rec2_j.r.i)) {setverdict(pass)}else {setverdict(fail)};
578 if(isbound(vtl_rec2_j.r.x)) {setverdict(pass)}else {setverdict(fail)};
579 if(isbound(vtl_rec2_j.r.c)) {setverdict(pass)}else {setverdict(fail)};
582 testcase tc_record_withJoker6() runs on MTC_CT {
583 var template MyRec2 vtl_rec2_j;
587 if(isbound(vtl_rec2_j)) {setverdict(pass)}else {setverdict(fail)};
588 if(isbound(vtl_rec2_j.roc)){setverdict(fail)}else {setverdict(pass)};
589 if(isbound(vtl_rec2_j.roi)){setverdict(fail)}else {setverdict(pass)};
590 if(isbound(vtl_rec2_j.u)){setverdict(fail)}else {setverdict(pass)};
591 if(isbound(vtl_rec2_j.u.i)){setverdict(fail)}else {setverdict(pass)};
592 if(isbound(vtl_rec2_j.r)) {setverdict(pass)}else {setverdict(fail)};
593 if(isbound(vtl_rec2_j.r.i)) {setverdict(fail)}else {setverdict(pass)};
594 if(isbound(vtl_rec2_j.r.x)) {setverdict(fail)}else {setverdict(pass)};
595 if(isbound(vtl_rec2_j.r.c)) {setverdict(fail)}else {setverdict(pass)};
599 type record MyRecord_HO72812
602 boolean innerField1 optional,
603 integer innerField2 optional
607 testcase tc_record_TR_HO72813() runs on MTC_CT {
608 var MyRecord_HO72812 vl_MyRecord := { field1 := {}, field2 := 5 };
609 if(isbound(vl_MyRecord)) {setverdict(pass)} else {setverdict(fail)}
610 if(isbound(vl_MyRecord.field1)) {setverdict(fail)} else {setverdict(pass)}
611 if(isbound(vl_MyRecord.field2)) {setverdict(pass)} else {setverdict(fail)}
612 vl_MyRecord.field1 := omit
613 if(isbound(vl_MyRecord.field1)) {setverdict(pass)} else {setverdict(fail)}
614 if(isbound(vl_MyRecord.field1.innerField1)) {setverdict(fail)} else {setverdict(pass)}
615 if(isbound(vl_MyRecord.field1.innerField1)) {setverdict(fail)} else {setverdict(pass)}
616 if(ispresent(vl_MyRecord.field1)) {setverdict(fail)} else {setverdict(pass)}
618 vl_MyRecord := { field1 := {innerField1:=true, innerField2:=1 } }
619 if(isbound(vl_MyRecord.field1)) {setverdict(pass)} else {setverdict(fail)}
620 if(isbound(vl_MyRecord.field1.innerField1)) {setverdict(pass)} else {setverdict(fail)}
621 if(isbound(vl_MyRecord.field1.innerField2)) {setverdict(pass)} else {setverdict(fail)}
626 template integer t_i(integer i, integer j) :=i+j;
628 testcase tc_runtimeExprEval() runs on MTC_CT {
629 var template integer vt_i:= t_i(1,2);
630 var integer vl_i:=1, vl_j:=0;
631 if(isbound(vt_i)) {setverdict(pass)} else {setverdict(fail)};
632 if(isbound(t_i(1,2))) {setverdict(pass)} else {setverdict(fail)};
633 if(isbound(t_i(1,2*vl_i))) {setverdict(pass)} else {setverdict(fail)};
634 //if(isbound(t_i(1,2/vl_j))) {setverdict(pass)} else {setverdict(fail)}; //DTE
640 execute(tc_simple_charstring());
641 execute(tc_simple_charstring_template());
642 execute(tc_simple_charstring_template_pattern());
644 execute(tc_simple_integer());
645 execute(tc_simple_octetstring());
646 execute(tc_special_default_value());
647 execute(tc_special_compref());
649 execute(tc_unionOfRecordOfs1());
650 execute(tc_unionOfRecordOfs2());
651 execute(tc_compilationerror1());
652 execute(tc_union_modify());
653 execute(tc_sideeffect1());
654 execute(tc_sideeffect2());
655 execute(tc_recordOf_omit1());//failed, corrected
656 execute(tc_recordOf_omit2());
657 execute(tc_recordOf_emptyRoi1());
658 execute(tc_recordOf_emptyRoi2());
659 execute(tc_recordOf_emptyRoi3());
660 execute(tc_record_completlyInit());
661 execute(tc_record_partiallyInit1());
662 execute(tc_record_partiallyInit3());
663 execute(tc_record_partiallyInit4());
664 execute(tc_record_partiallyInit5());
665 execute(tc_record_partiallyInit6());
666 execute(tc_record_partiallyInit7());
667 execute(tc_record_partiallyInit8());
668 execute(tc_record_partiallyInit9());
669 execute(tc_record_partiallyInit10());
670 execute(tc_record_partiallyInit11()); //<=======IT CAUSED COMPILATION ERROR
671 execute(tc_record_partiallyInit12());
672 execute(tc_record_partiallyInit13());
673 execute(tc_recordOf_union());
674 execute(tc_recordOf_recordOfRecordOfInt());
675 execute(tc_recordOf_recordInRecord());
676 execute(tc_recordOf_recordInRecord_innerOmits());
677 execute(tc_recordOf_template1());
678 execute(tc_recordOf_template2());
679 execute(tc_record_withJoker1());
680 execute(tc_record_withJoker2());
681 execute(tc_record_withJoker3());
682 execute(tc_record_withJoker4());
683 execute(tc_record_withJoker5());
684 execute(tc_record_withJoker6());
685 execute(tc_record_TR_HO72813());
686 //execute(tc_runtimeDivisionByZero()); //DTE !!!
687 execute(tc_runtimeExprEval());
695 <RESULT IF_PASS POSITIVE 45>
703 .*---------------------------------------------------------------------*
704 :h3. Aggregated isbound testcases - Negative tests
705 .*---------------------------------------------------------------------*
708 <TC - Aggregated isbound testcases - Negative tests >
714 <MODULE TTCN IsBound_Test IsBound_Test.ttcn>
716 module IsBound_Test {
717 type port MyChrMessage_PT message {
719 } with { extension "internal"}
721 type component MTC_CT {
722 port MyChrMessage_PT my_PCO;
723 var integer v_counter1 :=0;
726 //===== SIMPLE, NOT TOO DEEP =====
727 type record of charstring ROC;
728 type record of integer ROI;
729 type record MyRecord {
735 type record of ROI ROROI;
736 type union MyUnion1 {
743 const MyUnion1 c_myunion1:= { roc:= { "1aa", "2bb", "3cc"}}
744 const MyUnion1 c_myunion2:= { i:= 5}
746 testcase tc_runtimeDivisionByZero() runs on MTC_CT {
747 var MyUnion1 vl_u:= c_myunion2;
748 if(isbound(vl_u)) {setverdict(pass)} else {setverdict(fail)}
749 if(isbound(vl_u.i)){setverdict(pass)}else {setverdict(fail)}
750 if(isbound(vl_u.i/2)){setverdict(pass)}else {setverdict(fail)}
751 if(isbound(vl_u.i*0)){setverdict(pass)}else {setverdict(fail)}
752 log("Expected DTE comes!!!");
753 if(isbound(vl_u.i/(vl_u.i-5))){setverdict(fail)}else {setverdict(pass)} //DTE - OK
757 execute(tc_runtimeDivisionByZero()); //DTE !!!
763 <RESULT IF_PASS POSITIVE>
764 error: Integer division by zero.
770 .*---------------------------------------------------------------------*
771 :h3. Isbound testcases - Compilation error
772 .*---------------------------------------------------------------------*
775 <TC - Isbound testcases - Compilation error >
781 <MODULE TTCN IsBound_Test IsBound_Test.ttcn>
783 module IsBound_Test {
784 type port MyChrMessage_PT message {
786 } with { extension "internal"}
788 type component MTC_CT {
789 port MyChrMessage_PT my_PCO;
790 var integer v_counter1 :=0;
793 //===== SIMPLE, NOT TOO DEEP =====
794 type record of charstring ROC;
795 type record of integer ROI;
796 type record MyRecord {
802 type record of ROI ROROI;
803 type union MyUnion1 {
810 const MyUnion1 c_myunion1:= { roc:= { "1aa", "2bb", "3cc"}}
811 const MyUnion1 c_myunion2:= { i:= 5}
813 testcase tc_compilationerror2() runs on MTC_CT {
814 var MyUnion1 vl_u:= c_myunion2;
815 if(isbound(vl_u.i/0)){setverdict(fail)}else {setverdict(pass)}
819 execute(tc_compilationerror2()); //DTE !!!
825 <RESULT IF_PASS POSITIVE>
826 error: Second operand of operation `/' should not be zero
832 .*---------------------------------------------------------------------*
833 :h2.Testing feature "all from" - Negative tests
834 .*---------------------------------------------------------------------*
837 .*---------------------------------------------------------------------*
838 :h3. Value list: 'all from' can not refer to permutation or AnyElementsOrNone
839 .*---------------------------------------------------------------------*
842 <TC - Value list: 'all from' can not refer to permutation or AnyElementsOrNone >
846 <MODULE TTCN all_from all_from.ttcn >
849 type record of integer RoI;
850 template RoI t_RoI2 := {1, *, 3};
851 template integer t_i10 := ((all from t_RoI2),100);
852 template integer t_i11 := (100,all from t_RoI2);
853 template integer t_i12 := (100,all from t_RoI2,-1);
859 error: 'all from' can not refer to permutation or AnyElementsOrNone
865 *---------------------------------------------------------------------*
866 :h3. Value list: (integer) is not compatible with the list template type (RoI)
867 .*---------------------------------------------------------------------*
870 <TC - Value list: (integer) is not compatible with the list template type (RoI) >
874 <MODULE TTCN all_from all_from.ttcn >
876 type record of integer RoI;
877 template RoI t_RoI1 := {3, 4, 5};
878 template RoI t_i1 := (all from t_RoI1);
884 error: record of value was expected
890 *---------------------------------------------------------------------*
891 :h3. Value list: Matching mechanism can not be used as target of 'all from'
892 .*---------------------------------------------------------------------*
895 <TC - Value list: Matching mechanism can not be used as target of 'all from' >
899 <MODULE TTCN all_from all_from.ttcn >
901 type record of integer RoI;
902 template RoI t_RoI2 := ?;
903 template RoI t_i1 := (all from t_RoI2);
904 template integer t_i2 := (all from t_RoI2);
909 error: Matching mechanism can not be used as target of 'all from'
914 *---------------------------------------------------------------------*
915 :h3. Value list: (integer) is not compatible with the list template type (SoI)
916 .*---------------------------------------------------------------------*
919 <TC - Value list: (integer) is not compatible with the list template type (SoI) >
923 <MODULE TTCN all_from all_from.ttcn >
925 type record of integer RoI;
926 type set of integer SoI;
927 template RoI t_RoI1 := {3, 4, 5};
928 template SoI t_i := (all from t_RoI1);
934 error: set of value was expected
939 .*---------------------------------------------------------------------*
940 :h3. Value list: Length restriction cannot be used in a template of type `integer'
941 .*---------------------------------------------------------------------*
944 <TC - Value list: Length restriction cannot be used in a template of type `integer' >
948 <MODULE TTCN all_from all_from.ttcn >
951 type record of integer RoI;
952 template RoI MyTemplate := { permutation ( 1, 2, 3 ), * length (0..5) };
958 error: Length restriction cannot be used in a template of type `integer'
964 *---------------------------------------------------------------------*
965 :h3. Complement: 'all from' can not refer to permutation or AnyElementsOrNone
966 .*---------------------------------------------------------------------*
969 <TC - Complement: 'all from' can not refer to permutation or AnyElementsOrNone >
973 <MODULE TTCN all_from all_from.ttcn >
976 type record of integer RoI;
977 template RoI t_RoI2 := {1, *, 3};
978 template integer t_i10 := complement ((all from t_RoI2),100);
979 template integer t_i11 := complement (100,all from t_RoI2);
980 template integer t_i12 := complement (100,all from t_RoI2,-1);
986 error: 'all from' can not refer to permutation or AnyElementsOrNone
992 *---------------------------------------------------------------------*
993 :h3. Complement: (integer) is not compatible with the list template type (RoI)
994 .*---------------------------------------------------------------------*
997 <TC - Complement: (integer) is not compatible with the list template type (RoI) >
1001 <MODULE TTCN all_from all_from.ttcn >
1003 type record of integer RoI;
1004 template RoI t_RoI1 := {3, 4, 5};
1005 template RoI t_i1 := complement(all from t_RoI1);
1011 error: record of value was expected
1017 *---------------------------------------------------------------------*
1018 :h3. Complement: Matching mechanism can not be used as target of 'all from'
1019 .*---------------------------------------------------------------------*
1022 <TC - Complement: Matching mechanism can not be used as target of 'all from' >
1026 <MODULE TTCN all_from all_from.ttcn >
1028 type record of integer RoI;
1029 template RoI t_RoI2 := ?;
1030 template RoI t_i1 := (all from t_RoI2);
1031 template integer t_i2 := complement(all from t_RoI2);
1036 error: Matching mechanism can not be used as target of 'all from'
1041 *---------------------------------------------------------------------*
1042 :h3. Complement: (integer) is not compatible with the list template type (SoI)
1043 .*---------------------------------------------------------------------*
1046 <TC - Complement: (integer) is not compatible with the list template type (SoI) >
1050 <MODULE TTCN all_from all_from.ttcn >
1052 type record of integer RoI;
1053 type set of integer SoI;
1054 template RoI t_RoI1 := {3, 4, 5};
1055 template SoI t_i := complement(all from t_RoI1);
1061 error: set of value was expected
1067 *---------------------------------------------------------------------*
1068 :h3. Permutation: Matching mechanism can not be used as target of 'all from'
1069 .*---------------------------------------------------------------------*
1072 <TC - Permutation: Matching mechanism can not be used as target of 'all from' >
1076 <MODULE TTCN all_from all_from.ttcn >
1079 type record of integer RoI;
1080 template RoI t_RoI2 := *;
1081 template RoI t_i10 := { permutation((all from t_RoI2),100),99 }
1082 template RoI t_i11 := {permutation(100,all from t_RoI2)};
1083 template RoI t_i12 := {permutation(100,all from t_RoI2,-1)};
1089 error: Matching mechanism can not be used as target of 'all from'
1094 *---------------------------------------------------------------------*
1095 :h3. Permutation: syntax error, unexpected PermutationKeyword
1096 .*---------------------------------------------------------------------*
1099 <TC -Permutation: syntax error, unexpected PermutationKeyword >
1103 <MODULE TTCN all_from all_from.ttcn >
1106 type record of integer RoI;
1107 template RoI t_RoI2 := {1, *, 3};
1108 template RoI t_i10 := permutation((all from t_RoI2),100);
1114 error: at or before token `permutation': syntax error, unexpected PermutationKeyword
1119 *---------------------------------------------------------------------*
1120 :h3. Component mapping: invalid ports
1121 .*---------------------------------------------------------------------*
1124 <TC -Component mapping: invalid port >
1128 <MODULE TTCN test test.ttcn >
1131 type port P message {
1133 } with { extension "internal" }
1135 type component MTCType
1140 function akarmi () runs on MTCType {
1141 map(mtc:MyPCO_PT, system:MyPCO_PT2);
1145 testcase tc_akarmi () runs on MTCType {
1146 map(mtc:MyPCO_PT, system:MyPCO_PT2);
1154 Component type `@test.MTCType' does not have port with name `MyPCO_PT'
1157 Component type `@test.MTCType' does not have port with name `MyPCO_PT2'
1163 .*---------------------------------------------------------------------*
1165 .*---------------------------------------------------------------------*
1167 :li D='ASN.1'.Abstract Syntax Notation 1
1168 :li D='EDML'.Ericsson Document Markup Language
1169 :li D='SA'.Semantic Analyser
1170 :li D='TTCN-3'.Test and Test Control Notation version 3
1173 .*---------------------------------------------------------------------*
1175 .*---------------------------------------------------------------------*
1177 :li D='[1]'.3/ETH/RUS-2003:0087 Uen
1178 :nl.Requirement Specification for TITAN's TTCN-3 Semantic Analyser
1179 :li D='[2]'.1/174 02-FCPCA 101 22 Uen
1180 :nl.Statement of Compliance for TITAN project
1181 :li D='[3]'.ETSI ES 201 873-1, v3.0.0 Mockup v1 (2004-03):
1182 :nl.Testing and Test Control Notation version 3.,
1183 :nl.Part 1: TTCN-3 Core Language
1186 .*---------------------------------------------------------------------*
1188 .*---------------------------------------------------------------------*
1190 :li D='TITAN'.Ericsson's TTCN-3 Test Environment