Commit 59ce05eb authored by balaskoa's avatar balaskoa
Browse files

templateRec and templateRecof tests mapped into Regression_Test_java


Signed-off-by: default avatarbalaskoa <Jeno.Balasko@ericsson.com>
parent c113ff2c
......@@ -26,12 +26,6 @@
<ExcludeFromBuild>true</ExcludeFromBuild>
</FileProperties>
</FileResource>
<FileResource>
<FilePath>src/TtemplateRec.ttcn</FilePath>
<FileProperties>
<ExcludeFromBuild>true</ExcludeFromBuild>
</FileProperties>
</FileResource>
<FileResource>
<FilePath>src/TverdictOper.ttcn</FilePath>
<FileProperties>
......@@ -122,7 +116,7 @@
</FolderProperties>
</FolderResource>
<FolderResource>
<FolderPath>src/singlecontrol</FolderPath>
<FolderPath>src/templateRec</FolderPath>
<FolderProperties>
<CentralStorage>false</CentralStorage>
<ExcludeFromBuild>true</ExcludeFromBuild>
......
......@@ -21,6 +21,8 @@
"src/text2ttcn_nolegacy/text2ttcn_1.cfg"
#"src/text2ttcn/text2ttcn_1.cfg" #legacy mode
"src/recofOper/config.cfg" #62 pass + 2 tc moved to single_bugs.cfg
"src/templateRecof/config.cfg" #ok 38 pass
[EXECUTE]
#==acceptance_test==
#chinese
......@@ -281,6 +283,13 @@ TsetOper
#if yes, there are comments
#only in parallel, see there
#templateRec:
TtemplateRec #Project config spec dependent, which version will run: legacy flag for omit in value list is OFF or ON.
#templateRecof:
#TtemplateRecof.control #moved into [ORDERED_INCLUDE]
#TmultiplePermutations.control #moved into [ORDERED_INCLUDE]
#text2ttcn_legacy: see [ORDERED_INCLUDE]
#text2ttcn: not ready, that is the legacy code is not ready
#tryCatch:
......@@ -299,7 +308,6 @@ TbasicStatem.control
TtemplateChar.control
TtemplateBool.control
TtemplateEnum.control
#TtemplateRec.control # 1 fail!!
IsTemplateKind.control
ExclusiveRangeTemplate.control
TtemplateBitstr.control
......@@ -319,7 +327,6 @@ TarrayOper.control
#types.control
#TtemplateRecAsn.control
TtemplateSet.control
TtemplateRecof.control
#ASN_Definitions.control
#ImportedTemplates.control
......
......@@ -15,6 +15,7 @@
* Szabo, Janos Zoltan – initial implementation
*
******************************************************************************/
//it works only with the legacy flag "-M"
module TtemplateRec {
type record RP {
......@@ -227,6 +228,24 @@ testcase MTTSM00015947() runs on templateRec_mycomp
setverdict(pass);
}
testcase MTTSM00015947_dyn() runs on templateRec_mycomp
{
var R vl_cr := cr;
var template R vt_tRrec1 := tRrec1;
var template R vt_tRrec2 := tRrec2;
var template R vt_tRrec3 := tRrec3;
var template R vt_tr := tr;
var template R vt_tr2 := tr2;
var template R vt_trc := trc;
if (not match(vl_cr, vt_tRrec1)) { setverdict(fail); }
if (match(vl_cr, vt_tRrec2)) { setverdict(fail); }
if ( not match(vl_cr, vt_tRrec3)) { setverdict(fail); }
if (ispresent(vt_tr.str)) { setverdict(fail); }
if (ispresent(vt_trc.str)) { setverdict(fail); }
if (not ispresent(tr2.str)) { setverdict(fail); }
setverdict(pass);
}
import from TtemplateRecAsn all
template AmbiguousAnyRec t_AAR := { ''O }
const AmbiguousAnyRec c_AAR := { ''O }
......@@ -653,6 +672,7 @@ control {
execute(templateRecAnyorNone());
execute(templateRecIfpresent());
execute(MTTSM00015947());
execute(MTTSM00015947_dyn());
execute(tc_HM39698());
execute(tc_valueof_governor_segfault());
execute(tc_HO49372());
......
###############################################################################
# Copyright (c) 2000-2019 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
# Szabo, Janos Zoltan – initial implementation
#
###############################################################################
[MODULE_PARAMETERS]
[LOGGING]
Logfile := "templateRec.log"
FileMask := LOG_ALL
ConsoleMask := TTCN_WARNING | TTCN_ERROR | TTCN_TESTCASE | TTCN_STATISTICS
[EXECUTE]
TtemplateRec
/******************************************************************************
* Copyright (c) 2000-2019 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
* Delic, Adam
* Kovacs, Ferenc
* Raduly, Csaba
* Szabados, Kristof
* Szabo, Janos Zoltan – initial implementation
*
******************************************************************************/
//it is working with only the legacy flag is off ( omit in value list is not allowed)
module TtemplateRec {
type record RP {
record of record {
integer i optional,
charstring s
} inner
}
type record SR { // simple record
integer i
}
template RP t_r_all_omit := { { { omit, "omit" } } }
type component templateRec_mycomp {};
type record templateRec_myrec {
integer f1,
float f2 };
type record templateRec_rec {
templateRec_myrec x1,
templateRec_myrec x2,
templateRec_myrec x3 optional };
template templateRec_rec templateRec_tSpec :={ //specific values
x1:={f1:=1,f2:=1.2},
x2:={f1:=2,f2:=1.2},
x3:={f1:=3,f2:=1.2} };
template templateRec_rec templateRec_tList :={ //specific value and value list
x1:={f1:=1,f2:=1.2},
x2:=({f1:=2,f2:=1.2},{f1:=3,f2:=1.2},{f1:=6,f2:=1.2}),
x3:={f1:=3,f2:=1.2} };
template templateRec_rec templateRec_tComp :={ //specific value and compl. list
x1:={f1:=1,f2:=1.2},
x2:=complement ({f1:=2,f2:=1.2},{f1:=3,f2:=1.2},{f1:=6,f2:=1.2}),
x3:={f1:=3,f2:=1.2} };
template templateRec_rec templateRec_tOmit :={ //omitting values
x1:={f1:=1,f2:=1.2},
x2:={f1:=2,f2:=1.2},
x3:=omit } ;
template templateRec_rec templateRec_tAny :={ //specific and any value
x1:={f1:=1,f2:=1.2},
x2:={f1:=2,f2:=1.2},
x3:=? } ;
template templateRec_rec templateRec_tAnyorNone :={ //specific and AnyorNone value
x1:={f1:=1,f2:=1.2},
x2:={f1:=2,f2:=1.2},
x3:=* };
template templateRec_rec templateRec_tIfpresent :={ //specific value and ifpresent
x1:={f1:=1,f2:=1.2},
x2:={f1:=2,f2:=1.2},
x3:={f1:=3,f2:=1.2} ifpresent };
testcase pasu() runs on templateRec_mycomp
{
template integer v_timeUnit := 60;
var template SR t_sr := { 13 }
t_sr.i := v_timeUnit;
template RP v_r modifies t_r_all_omit := {{{
i := v_timeUnit
}}}
setverdict(pass); // if it compiles, that's enough
}
testcase templateRecSpec() runs on templateRec_mycomp {
var templateRec_myrec temp:={f1:=3,f2:=1.2};
var templateRec_rec x1,x2; //specific value
x1:={ x1:={f1:=1,f2:=1.2}, x2:={f1:=2,f2:=1.2}, x3:=temp };
x2:={ x1:={f1:=2,f2:=1.2}, x2:={f1:=2,f2:=1.2}, x3:=temp };
//match
if (match(x1,templateRec_tSpec)) {setverdict(pass);}
else {setverdict(fail);}
//no match
if (not(match(x2,templateRec_tSpec))) {setverdict(pass);}
else {setverdict(fail);}
}
testcase templateRecList() runs on templateRec_mycomp {
var templateRec_myrec temp:={f1:=3,f2:=1.2};
var templateRec_rec x1,x2,x3; //value list
x1:={ x1:={f1:=1,f2:=1.2}, x2:={f1:=6,f2:=1.2}, x3:=temp };
x2:={ x1:={f1:=1,f2:=1.2}, x2:={f1:=7,f2:=1.2}, x3:=temp };
x3:={ x1:={f1:=8,f2:=1.2}, x2:={f1:=6,f2:=1.2}, x3:=temp };
//match
if (match(x1,templateRec_tList)) {setverdict(pass);}
else {setverdict(fail, 1);}
//no match: out of list
if (not(match(x2,templateRec_tList))) {setverdict(pass);}
else {setverdict(fail, 2);}
//no match: other field
if (not(match(x3,templateRec_tList))) {setverdict(pass);}
else {setverdict(fail, 3);}
}
testcase templateRecComp() runs on templateRec_mycomp {
var templateRec_myrec temp:={f1:=3,f2:=1.2};
var templateRec_rec x1,x2,x3; //complemented list
x1:={ x1:={f1:=1,f2:=1.2}, x2:={f1:=7,f2:=1.2}, x3:=temp };
x2:={ x1:={f1:=1,f2:=1.2}, x2:={f1:=6,f2:=1.2}, x3:=temp };
x3:={ x1:={f1:=2,f2:=1.2}, x2:={f1:=7,f2:=1.2}, x3:=temp };
//match
if (match(x1,templateRec_tComp)) {setverdict(pass);}
else {setverdict(fail, 1);}
//no match: in the list
if (not(match(x2,templateRec_tComp))) {setverdict(pass);}
else {setverdict(fail, 2);}
//no match: other field
if (not(match(x3,templateRec_tComp))) {setverdict(pass);}
else {setverdict(fail, 3);}
}
testcase templateRecOmit() runs on templateRec_mycomp {
var templateRec_myrec temp:={f1:=3,f2:=1.2};
var templateRec_rec x1,x2,x3; //omitting value
x1:={ x1:={f1:=1,f2:=1.2}, x2:={f1:=2,f2:=1.2}, x3:=omit };
x2:={ x1:={f1:=1,f2:=1.2}, x2:={f1:=2,f2:=1.2}, x3:=temp };
x3:={ x1:={f1:=2,f2:=1.2}, x2:={f1:=2,f2:=1.2}, x3:=omit };
//match
if (match(x1,templateRec_tOmit)) {setverdict(pass);}
else {setverdict(fail);}
//no match: not omitted
if (not(match(x2,templateRec_tOmit))) {setverdict(pass);}
else {setverdict(fail);}
//no match: other field
if (not(match(x3,templateRec_tOmit))) {setverdict(pass);}
else {setverdict(fail);}
}
testcase templateRecAny() runs on templateRec_mycomp {
var templateRec_myrec temp:={f1:=3,f2:=1.2};
var templateRec_rec x1,x2,x3; //any value
x1:={ x1:={f1:=1,f2:=1.2}, x2:={f1:=2,f2:=1.2}, x3:=temp };
x2:={ x1:={f1:=1,f2:=1.2}, x2:={f1:=2,f2:=1.2}, x3:=omit };
x3:={ x1:={f1:=2,f2:=1.2}, x2:={f1:=2,f2:=1.2}, x3:=temp };
//match
if (match(x1,templateRec_tAny)) {setverdict(pass);}
else {setverdict(fail);}
//no match: field omitted
if (not(match(x2,templateRec_tAny))) {setverdict(pass);}
else {setverdict(fail);}
//no match: other field
if (not(match(x3,templateRec_tAny))) {setverdict(pass);}
else {setverdict(fail);}
}
testcase templateRecAnyorNone() runs on templateRec_mycomp {
var templateRec_myrec temp:={f1:=3,f2:=1.2};
var templateRec_rec x1,x2,x3; //AnyorNone value
x1:={ x1:={f1:=1,f2:=1.2}, x2:={f1:=2,f2:=1.2}, x3:=omit };
x2:={ x1:={f1:=1,f2:=1.2}, x2:={f1:=2,f2:=1.2}, x3:=temp };
x3:={ x1:={f1:=2,f2:=1.2}, x2:={f1:=2,f2:=1.2}, x3:=omit };
//match: omitted
if (match(x1,templateRec_tAnyorNone)) {setverdict(pass);}
else {setverdict(fail);}
//match: value
if (match(x2,templateRec_tAnyorNone)) {setverdict(pass);}
else {setverdict(fail);}
//no match: other field
if (not(match(x3,templateRec_tAnyorNone))) {setverdict(pass);}
else {setverdict(fail);}
}
testcase templateRecIfpresent() runs on templateRec_mycomp {
var templateRec_myrec temp1:={f1:=3,f2:=1.2}; //ifpresent
var templateRec_myrec temp2:={f1:=4,f2:=1.2};
var templateRec_rec x1,x2,x3,x4;
x1:={ x1:={f1:=1,f2:=1.2}, x2:={f1:=2,f2:=1.2}, x3:=temp1 };
x2:={ x1:={f1:=1,f2:=1.2}, x2:={f1:=2,f2:=1.2}, x3:=omit };
x3:={ x1:={f1:=1,f2:=1.2}, x2:={f1:=2,f2:=1.2}, x3:=temp2 };
x4:={ x1:={f1:=2,f2:=1.2}, x2:={f1:=2,f2:=1.2}, x3:=omit };
//match: present and match
if (match(x1,templateRec_tIfpresent)) {setverdict(pass);}
else {setverdict(fail);}
//match: not present
if (match(x2,templateRec_tIfpresent)) {setverdict(pass);}
else {setverdict(fail);}
//no match: present and not match
if (not(match(x3,templateRec_tIfpresent))) {setverdict(pass);}
else {setverdict(fail);}
//no match: other field
if (not(match(x4,templateRec_tIfpresent))) {setverdict(pass);}
else {setverdict(fail);}
}
type record R
{
integer i,
charstring str optional
}
const R cr := { 1, omit }
template R tRrec1 := { 1 , omit }
template R tRrec2 := { 1, complement ( "a" ) }
template R tRrec3 := { 1, ( "a" ) }
template R tr := { i := 1, str := "a" ifpresent }
template R tr2 := { i := 1, str := ? }
template R trc := cr; // HQ46602
// Note: this tests the new omit behavior and requires the -M compiler option to be set off!
testcase MTTSM00015947() runs on templateRec_mycomp
{
if (not match(cr, tRrec1)) { setverdict(fail); }
if (match(cr, tRrec2)) { setverdict(fail); }
if ( match(cr, tRrec3)) { setverdict(fail); }
if (ispresent(tr.str)) { setverdict(fail); }
if (ispresent(trc.str)) { setverdict(fail); }
if (not ispresent(tr2.str)) { setverdict(fail); }
setverdict(pass);
}
testcase MTTSM00015947_dyn() runs on templateRec_mycomp
{
var R vl_cr := cr;
var template R vt_tRrec1 := tRrec1;
var template R vt_tRrec2 := tRrec2;
var template R vt_tRrec3 := tRrec3;
var template R vt_tr := tr;
var template R vt_tr2 := tr2;
var template R vt_trc := trc;
if (not match(vl_cr, vt_tRrec1)) { setverdict(fail); }
if (match(vl_cr, vt_tRrec2)) { setverdict(fail); }
if ( match(vl_cr, vt_tRrec3)) { setverdict(fail); }
if (ispresent(vt_tr.str)) { setverdict(fail); }
if (ispresent(vt_trc.str)) { setverdict(fail); }
if (not ispresent(tr2.str)) { setverdict(fail); }
setverdict(pass);
}
import from TtemplateRecAsn all
template AmbiguousAnyRec t_AAR := { ''O }
const AmbiguousAnyRec c_AAR := { ''O }
testcase tc_HM39698() runs on templateRec_mycomp
{
var template AmbiguousAnyRec vt_AAR := { ''O }
var AmbiguousAnyRec v_AAR := { ''O }
log(t_AAR)
log(c_AAR)
log(vt_AAR)
log(v_AAR)
// It's good, if we reach this point...
setverdict(pass)
}
testcase tc_valueof_governor_segfault() runs on templateRec_mycomp
{
var templateRec_myrec mr := valueof({f1 := 1, f2 := 2.0})
setverdict(pass)
}
// Parametrized template reference without `()'.
template R tmr(in integer i := 1) := { i := i, str := omit }
testcase tc_HO49372() runs on templateRec_mycomp
{
log(tmr)
setverdict(pass)
}
type record MyRecord
{
integer int,
boolean deleted
}
testcase tc_HO69658() runs on templateRec_mycomp
{
var template MyRecord vl_myrecord;
vl_myrecord.int := 0;
var template MyRecord vl_myrecordAgain := vl_myrecord;
vl_myrecordAgain.deleted := false;
log("Now assignment finish");
log("Print record:",vl_myrecordAgain);
// It's good, if we reach this point...
if (log2str(vl_myrecordAgain)=="{ int := 0, deleted := false }") {setverdict(pass)}else{setverdict(fail)}
}
type record MyRec2{
ROC roc optional,
ROI roi optional,
MyUnion1 u optional,
MyRecord1 r optional
}
type record of charstring ROC;
type record of integer ROI;
type record MyRecord1 {
integer i optional,
float x optional,
charstring c
}
type union MyUnion1 {
ROC roc,
integer i,
ROI roi,
MyRecord1 r
}
type union MyUnion_OneOption {
integer i
}
type record MyRec4 {
MyUnion_OneOption u,
integer i
}
testcase tc_record_withJoker1() runs on templateRec_mycomp {
var template MyRec2 vtl_rec2_j;
if(isbound(vtl_rec2_j)) {setverdict(fail)}else {setverdict(pass)};
vtl_rec2_j:={
roc:=*
}
if(isbound(vtl_rec2_j)) {setverdict(pass)}else {setverdict(fail)};
if(isbound(vtl_rec2_j.roc)) {setverdict(pass)}else {setverdict(fail)};
if(isbound(vtl_rec2_j.roc[0])) {setverdict(fail)}else {setverdict(pass)};
}
testcase tc_record_withJoker2() runs on templateRec_mycomp {
var template MyRec2 vtl_rec2_j;
vtl_rec2_j:={
roc:={ ?,? }
}
if(isbound(vtl_rec2_j)) {setverdict(pass)}else {setverdict(fail)};
if(isbound(vtl_rec2_j.roc)) {setverdict(pass)}else {setverdict(fail)};
if(isbound(vtl_rec2_j.roc[0])){setverdict(pass)}else {setverdict(fail)};
if(isbound(vtl_rec2_j.roc[1])){setverdict(pass)}else {setverdict(fail)};
if(isbound(vtl_rec2_j.roc[10])){setverdict(fail)}else {setverdict(pass)};
if(isbound(vtl_rec2_j.roi)){setverdict(fail)}else {setverdict(pass)};
if(isbound(vtl_rec2_j.u)){setverdict(fail)}else {setverdict(pass)};
if(isbound(vtl_rec2_j.r)){setverdict(fail)}else {setverdict(pass)};
}
testcase tc_record_withJoker3() runs on templateRec_mycomp {
var template MyRec2 vtl_rec2_j;
vtl_rec2_j:={
u := *
}
if(isbound(vtl_rec2_j)) {setverdict(pass)}else {setverdict(fail)};
if(isbound(vtl_rec2_j.roc)){setverdict(fail)}else {setverdict(pass)};
if(isbound(vtl_rec2_j.roi)){setverdict(fail)}else {setverdict(pass)};
if(isbound(vtl_rec2_j.u)){setverdict(pass)}else {setverdict(fail)};
if(isbound(vtl_rec2_j.u.i)){setverdict(fail)}else {setverdict(pass)};
}
testcase tc_record_withJoker4() runs on templateRec_mycomp {
var template MyRec2 vtl_rec2_j;
vtl_rec2_j:={
roc:=omit,
u:={i:=?}
}
if(isbound(vtl_rec2_j)) {setverdict(pass)}else {setverdict(fail)};
if(isbound(vtl_rec2_j.roc)){setverdict(pass)}else {setverdict(fail)};
if(isbound(vtl_rec2_j.roi)){setverdict(fail)}else {setverdict(pass)};
if(isbound(vtl_rec2_j.u)){setverdict(pass)}else {setverdict(fail)};
if(isbound(vtl_rec2_j.u.i)){setverdict(pass)}else {setverdict(fail)};
}
testcase tc_record_withJoker5() runs on templateRec_mycomp {
var template MyRec2 vtl_rec2_j;
vtl_rec2_j:={
r:= ?
}
if(isbound(vtl_rec2_j)) {setverdict(pass)}else {setverdict(fail)};
if(isbound(vtl_rec2_j.roc)){setverdict(fail)}else {setverdict(pass)};
if(isbound(vtl_rec2_j.roi)){setverdict(fail)}else {setverdict(pass)};
if(isbound(vtl_rec2_j.u)){setverdict(fail)}else {setverdict(pass)};
if(isbound(vtl_rec2_j.u.i)){setverdict(fail)}else {setverdict(pass)};
if(isbound(vtl_rec2_j.r)) {setverdict(pass)}else {setverdict(fail)};
if(isbound(vtl_rec2_j.r.i)) {setverdict(pass)}else {setverdict(fail)};
if(isbound(vtl_rec2_j.r.x)) {setverdict(pass)}else {setverdict(fail)};
if(isbound(vtl_rec2_j.r.c)) {setverdict(pass)}else {setverdict(fail)};
}
testcase tc_record_withJoker6() runs on templateRec_mycomp {
var template MyRec2 vtl_rec2_j;
vtl_rec2_j:={
r:= *
}
if(isbound(vtl_rec2_j)) {setverdict(pass)}else {setverdict(fail)};
if(isbound(vtl_rec2_j.roc)){setverdict(fail)}else {setverdict(pass)};
if(isbound(vtl_rec2_j.roi)){setverdict(fail)}else {setverdict(pass)};
if(isbound(vtl_rec2_j.u)){setverdict(fail)}else {setverdict(pass)};
if(isbound(vtl_rec2_j.u.i)){setverdict(fail)}else {setverdict(pass)};
if(isbound(vtl_rec2_j.r)) {setverdict(pass)}else {setverdict(fail)};
if(isbound(vtl_rec2_j.r.i)) {setverdict(fail)}else {setverdict(pass)};
if(isbound(vtl_rec2_j.r.x)) {setverdict(fail)}else {setverdict(pass)};
if(isbound(vtl_rec2_j.r.c)) {setverdict(fail)}else {setverdict(pass)};
}
group g_TR_HO72812 {
type record MyRecord_HO72812
{
record {
boolean innerField1 optional,
integer innerField2 optional
} field1 optional,
integer field2
}
testcase tc_record_TR_HO72813() runs on templateRec_mycomp {
var MyRecord_HO72812 vl_MyRecord := { field1 := {}, field2 := 5 };
if(isbound(vl_MyRecord)) {setverdict(pass)} else {setverdict(fail)}
if(isbound(vl_MyRecord.field1)) {setverdict(fail)} else {setverdict(pass)}
if(isbound(vl_MyRecord.field2)) {setverdict(pass)} else {setverdict(fail)}
vl_MyRecord.field1 := omit
if(isbound(vl_MyRecord.field1)) {setverdict(pass)} else {setverdict(fail)}
if(isbound(vl_MyRecord.field1.innerField1)) {setverdict(fail)} else {setverdict(pass)}
if(isbound(vl_MyRecord.field1.innerField1)) {setverdict(fail)} else {setverdict(pass)}
if(ispresent(vl_MyRecord.field1)) {setverdict(fail)} else {setverdict(pass)}
vl_MyRecord := { field1 := {innerField1:=true, innerField2:=1 } }
if(isbound(vl_MyRecord.field1)) {setverdict(pass)} else {setverdict(fail)}
if(isbound(vl_MyRecord.field1.innerField1)) {setverdict(pass)} else {setverdict(fail)}
if(isbound(vl_MyRecord.field1.innerField2)) {setverdict(pass)} else {setverdict(fail)}
}
testcase tc_record_TR_HO72813_ip() runs on templateRec_mycomp {
var MyRecord_HO72812 vl_MyRecord := { field1 := {}, field2 := 5 };
if(ispresent(vl_MyRecord)) {setverdict(pass)} else {setverdict(fail)}
if(ispresent(vl_MyRecord.field1)) {setverdict(fail)} else {setverdict(pass)} //according to ethgry
if(ispresent(vl_MyRecord.field2)) {setverdict(pass)} else {setverdict(fail)}
}
testcase tc_record_TR_HO72813_innerFields() runs on templateRec_mycomp {
var MyRecord_HO72812 vl_MyRecord := { field1 := {}, field2 := 5 };
if(ispresent(vl_MyRecord.field1.innerField1)) {setverdict(fail)} else {setverdict(pass)}