blob: 15630c617649b6338c1f9512744e3915ebdc61b4 [file] [log] [blame]
RoomModel DynamicActorTest7 {
import room.basic.test.* 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 {
<hello: op>
}
action {
"System.out.println(\"received \"+txt);"
}
}
Transition tr1: DestroyAndCreate -> DestroyAndRestore {
triggers {
<hello: op>
}
action {
"System.out.println(\"received \"+txt);"
}
}
Transition tr2: DestroyAndRestore -> LoadInArray {
triggers {
<hello: op>
}
action {
"System.out.println(\"received \"+txt);"
}
}
Transition tr3: LoadInArray -> ReceivedHello {
triggers {
<hello: opa>
}
action {
"System.out.println(\"received \"+txt);"
}
}
Transition tr4: ReceivedHello -> Done {
triggers {
<hello: opa>
}
action {
"System.out.println(\"received \"+txt);"
}
}
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 {
<step: fct>
}
action {
"dp.step();"
}
}
Transition tr1: Step2 -> Step3 {
triggers {
<step: fct>
}
action {
"dp.step();"
}
}
Transition tr2: my tp0 -> my tp0 {
triggers {
<sayHello: fct>
}
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 {
<step: fct>
}
action {
"dp.step();"
}
}
Transition tr1: StepB -> StepC {
triggers {
<step: fct>
}
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 {
<step: fct>
}
}
Transition tr1: Step2 -> Step3 {
triggers {
<step: fct>
}
}
Transition tr2: Step3 -> Step5 {
triggers {
<step: fct>
}
}
Transition tr3: Step5 -> Step6 {
triggers {
<step: fct>
}
}
Transition tr4: Step6 -> Step7 {
triggers {
<step: fct>
}
}
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 {
<step: fct>
}
}
Transition tr1: Ready -> Ready {
triggers {
<sayHello: fct>
}
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'}"
}
}