RoomModel DynamicActorTest7 { import room.basic.etunit.* from "Tests.room" import room.basic.types.* from "Types.room" LogicalSystem JavaGenTests { SubSystemRef da7Test : SubSystem_DynamicActorTest7 } SubSystemClass SubSystem_DynamicActorTest7 { ActorRef main : Appl LogicalThread defaultThread } ActorClass Appl { Structure { ActorRef cont: Container } Behavior { } } ActorClass Container { Structure { usercode1 { "import java.io.File;" } usercode2 { "private static final String FIRST_OPT_OBJ = \"firstOpt.obj\";" "private static final String SECOND_OPT_OBJ = \"secondOpt.obj\";" } conjugated Port op: PStep conjugated Port opa [*]: PStep Attribute caseId: int32 optional ActorRef opt: Optional optional ActorRef optarr [*]: Optional Binding op and opt.fct Binding opa and optarr.fct } Behavior { ctor { "caseId = etUnit_openAll(\"log/testlog\", \"DynamicActorTest7\", \"org.eclipse.etrice.generator.common.tests.DynamicActorTest7\", \"DynamicActorTest7_case\");" } dtor { "etUnit_closeAll(caseId);" } Operation clean() { "File f = new File(FIRST_OPT_OBJ);" "if (f.exists())" "\tf.delete();" } StateMachine { Transition init: initial -> Init { } Transition tr0: Init -> DestroyAndCreate { triggers { } action { "System.out.println(\"received \"+transitionData);" } } Transition tr1: DestroyAndCreate -> DestroyAndRestore { triggers { } action { "System.out.println(\"received \"+transitionData);" } } Transition tr2: DestroyAndRestore -> LoadInArray { triggers { } action { "System.out.println(\"received \"+transitionData);" } } Transition tr3: LoadInArray -> ReceivedHello { triggers { } action { "System.out.println(\"received \"+transitionData);" } } Transition tr4: ReceivedHello -> Done { triggers { } action { "System.out.println(\"received \"+transitionData);" } } State Init { entry { "clean();" "FilePersistor.createAndLoad(opt, getThread(), FIRST_OPT_OBJ, \"Optional1\");" "op.step();" "op.step();" "op.sayHello();" } } State DestroyAndCreate { entry { "FilePersistor.saveAndDestroy(opt, FIRST_OPT_OBJ);" "FilePersistor.createAndLoad(opt, getThread(), SECOND_OPT_OBJ, \"Optional2\");" "op.step();" "op.step();" "op.sayHello();" } } State DestroyAndRestore { entry { "FilePersistor.saveAndDestroy(opt, SECOND_OPT_OBJ);" "FilePersistor.createAndLoad(opt, getThread(), FIRST_OPT_OBJ, \"Optional1\");" "op.sayHello();" } } State Done { entry { "IRTObject object = getObject(\"/JavaGenTests/da7Test/main/cont/optarr/optarr:0/sub\");" "EXPECT_TRUE(caseId, \"object 0 of optarr is an instance of actor class Sub1\", object instanceof Sub1);" "" "Sub1 inst = (Sub1) object;" "EXPECT_EQUAL_INT32(caseId, \"state\", Sub1.STATE_Step3_StepA, inst.getState());" "EXPECT_EQUAL_INT32(caseId, \"current value of ival\", 123, inst.getIval());" "EXPECT_EQUAL_INT16(caseId, \"current value of sval\", (short)456, inst.getSval());" "EXPECT_EQUAL_INT8(caseId, \"current value of bval\", (byte)3, inst.getBval());" "EXPECT_TRUE(caseId, \"changed string\", \"changed\".equals(inst.getSome()[1].getStr()));" "EXPECT_EQUAL_FLOAT32(caseId, \"current vaue of\", 3.14159f, inst.getDerived().getSome().getFval()[2], 0.001f);" "EXPECT_EQUAL_UINT8(caseId, \"current value of cval\", 'x', inst.getCval());" "" "etUnit_testFinished(caseId);" } } State LoadInArray { entry { "FilePersistor.createAndLoad(optarr, getThread(), FIRST_OPT_OBJ, \"Optional1\");" "FilePersistor.createAndLoad(optarr, getThread(), SECOND_OPT_OBJ, \"Optional2\");" "opa.sayHello();" } } State ReceivedHello } } } abstract ActorClass Optional { Interface { Port fct: PStep } Structure { } Behavior { } } ActorClass Optional1 extends Optional { Structure { ActorRef ^sub: Sub1 Binding fct and ^sub.fct } Behavior { } } ActorClass Optional2 extends Optional { Structure { ActorRef ^sub: Sub2 Binding fct and ^sub.fct } Behavior { } } ActorClass Sub1Base { Structure { Attribute cval: char } } ActorClass Sub1 extends Sub1Base { Interface { Port fct: PStep } Structure { external Port fct conjugated Port dp: PStep Attribute ival: int32 Attribute sval: int16 Attribute bval: int8 Attribute some[3]: SomeData Attribute other: OtherData Attribute derived: DerivedData ActorRef deep: DeepSub1 Binding dp and deep.fct } Behavior { StateMachine { Transition init: initial -> Step1 { } Transition tr0: Step1 -> Step2 { triggers { } action { "dp.step();" } } Transition tr1: Step2 -> Step3 { triggers { } action { "dp.step();" } } Transition tr2: my tp0 -> my tp0 { triggers { } action { "fct.hello(getClassName()+\", state=\"+stateStrings[getState()]+\", path= \"+getInstancePath());" } } handler TransitionPoint tp0 State Step1 { entry { "ival = 1;" "sval = 2;" "bval = 3;" "cval = 'x';" } } State Step2 { entry { "ival = 123;" "some[1].str = \"changed\";" "derived.some.fval[2] = 3.14159f;" } } State Step3 { subgraph { Transition init: initial -> StepA { } Transition tr0: StepA -> StepB { triggers { } action { "dp.step();" } } Transition tr1: StepB -> StepC { triggers { } action { "dp.step();" } } State StepA { entry { "sval = 456;" } } State StepB { entry { "bval = 13;" } } State StepC } } } } } ActorClass DeepSub1 { Interface { Port fct: PStep } Structure { external Port fct } Behavior { StateMachine { Transition init: initial -> Step1 { } Transition tr0: Step1 -> Step2 { triggers { } } Transition tr1: Step2 -> Step3 { triggers { } } Transition tr2: Step3 -> Step5 { triggers { } } Transition tr3: Step5 -> Step6 { triggers { } } Transition tr4: Step6 -> Step7 { triggers { } } State Step1 State Step2 State Step3 State Step5 State Step6 State Step7 } } } ActorClass Sub2 { Interface { Port fct: PStep } Structure { external Port fct } Behavior { StateMachine { Transition init: initial -> Ready { } Transition tr0: Ready -> Ready { triggers { } } Transition tr1: Ready -> Ready { triggers { } action { "fct.hello(getClassName()+\", state=\"+stateStrings[getState()]+\", path= \"+getInstancePath());" } } State Ready } } } ProtocolClass PStep { incoming { Message step() Message sayHello() } outgoing { Message hello(txt: string) } } DataClass SomeData { Attribute fval[3]: float32 = "1.0" Attribute dval: float64 = "123.4" Attribute str: string = "\"Text\"" } DataClass OtherData { Attribute some: SomeData Attribute bval: boolean = "false" } DataClass DerivedData extends OtherData { Attribute cval[3]: char = "{'a', 'b', 'c'}" } }