diff options
Diffstat (limited to 'tests/org.eclipse.etrice.generator.java.tests/model/dynamicActorTest6/DynamicActorTest6.room')
-rw-r--r-- | tests/org.eclipse.etrice.generator.java.tests/model/dynamicActorTest6/DynamicActorTest6.room | 226 |
1 files changed, 226 insertions, 0 deletions
diff --git a/tests/org.eclipse.etrice.generator.java.tests/model/dynamicActorTest6/DynamicActorTest6.room b/tests/org.eclipse.etrice.generator.java.tests/model/dynamicActorTest6/DynamicActorTest6.room new file mode 100644 index 000000000..fe95b068f --- /dev/null +++ b/tests/org.eclipse.etrice.generator.java.tests/model/dynamicActorTest6/DynamicActorTest6.room @@ -0,0 +1,226 @@ +RoomModel DynamicActorTest6 { + + import etrice.api.types.int32 + import etrice.api.types.string + import etrice.api.annotations.TestInstance + + ActorClass Appl { + @TestInstance + Structure { + ActorRef ctrl: Controller + } + Behavior { + } + } + + ActorClass Controller { + Structure { + conjugated Port pcont: PCtrl + conjugated Port pout: PC + conjugated Port pin: PC + Attribute caseId: int32 + ActorRef cont: Container + Binding pcont and cont.fct + Binding pout and cont.pin + Binding pin and cont.pout + } + Behavior { + ctor '''caseId = etUnit_openAll("log", "DynamicActorTest6", "org.eclipse.etrice.generator.java.tests.DynamicActorTest6", "DynamicActorTest6_case");''' + dtor '''etUnit_closeAll(caseId);''' + StateMachine { + Transition init: initial -> CreateOptionals { + } + Transition tr0: CreateOptionals -> Sending { + triggers { + <done: pcont> + } + } + Transition tr1: Sending -> Destroy { + triggers { + <hello: pin> + } + action '''System.out.println("Controller received: "+transitionData);''' + } + Transition tr2: Destroy -> CreateAgain { + triggers { + <done: pcont> + } + } + Transition tr3: CreateAgain -> SendAgain { + triggers { + <done: pcont> + } + } + Transition tr4: SendAgain -> Done { + triggers { + <hello: pin> + } + action '''System.out.println("Controller received: "+transitionData);''' + } + State CreateOptionals { + entry '''pcont.createOpts();''' + } + State Sending { + entry '''pout.sayHello();''' + } + State Done { + entry '''etUnit_testFinished(caseId);''' + } + State Destroy { + entry '''pcont.destroyOpts();''' + } + State CreateAgain { + entry '''pcont.createOpts();''' + } + State SendAgain { + entry '''pout.sayHello();''' + } + } + } + } + + ActorClass Container { + Interface { + Port fct: PCtrl + Port pout: PC + Port pin: PC + } + Structure { + external Port fct + optional ActorRef opt1: Optional1 + optional ActorRef opt2: Optional2 + Binding opt1.pout and opt2.pin + Binding pin and opt1.pin + Binding pout and opt2.pout + } + Behavior { + + // this method prints the passed message and then dumps the object tree consisting of actors and ports + Operation dumpTree(msg: string) ''' + System.out.println(msg); + System.out.println(((org.eclipse.etrice.runtime.java.messaging.RTObject)getRoot()).toStringRecursive());''' + StateMachine { + Transition init: initial -> Ready { + } + Transition tr0: Ready -> Ready { + triggers { + <createOpts: fct> + } + action ''' + opt1.createOptionalActor("Optional1", getThread()); + opt2.createOptionalActor("Optional2", getThread()); + dumpTree("after creation of op1 and opt2"); + fct.done();''' + } + Transition tr1: Ready -> Ready { + triggers { + <destroyOpts: fct> + } + action ''' + opt1.destroyOptionalActor(); + opt2.destroyOptionalActor(); + fct.done();''' + } + State Ready + } + } + } + + ActorClass Optional1 { + Interface { + Port pout: PC + Port pin: PC + } + Structure { + ActorRef sub1: AC1 + Binding pin and sub1.pin + Binding pout and sub1.pout + } + Behavior { + } + } + + ActorClass Optional2 { + Interface { + Port pout: PC + conjugated Port pin: PC + } + Structure { + ActorRef sub2: AC2 + Binding pout and sub2.pout + Binding pin and sub2.pin + } + Behavior { + } + } + + ActorClass AC1 { + Interface { + Port pout: PC + Port pin: PC + } + Structure { + external Port pout + external Port pin + } + Behavior { + StateMachine { + Transition init: initial -> Ready { + } + Transition tr0: Ready -> Ready { + triggers { + <sayHello: pin> + } + action '''pout.hello("this is AC1, instance "+getInstancePath());''' + } + State Ready + } + } + } + + ActorClass AC2 { + Interface { + Port pout: PC + conjugated Port pin: PC + } + Structure { + external Port pout + external Port pin + } + Behavior { + StateMachine { + Transition init: initial -> Ready { + } + Transition tr0: Ready -> Ready { + triggers { + <hello: pin> + } + action ''' + System.out.println("AC2 received "+transitionData); + + pout.hello("AC2: forwarding "+transitionData);''' + } + State Ready + } + } + } + + ProtocolClass PC { + incoming { + Message sayHello() + } + outgoing { + Message hello(string) + } + } + + ProtocolClass PCtrl { + incoming { + Message createOpts() + Message destroyOpts() + } + outgoing { + Message done() + } + } +}
\ No newline at end of file |