Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'tests/org.eclipse.etrice.generator.java.tests/models/DynamicActorTest3.room')
-rw-r--r--tests/org.eclipse.etrice.generator.java.tests/models/DynamicActorTest3.room235
1 files changed, 235 insertions, 0 deletions
diff --git a/tests/org.eclipse.etrice.generator.java.tests/models/DynamicActorTest3.room b/tests/org.eclipse.etrice.generator.java.tests/models/DynamicActorTest3.room
new file mode 100644
index 000000000..152b36811
--- /dev/null
+++ b/tests/org.eclipse.etrice.generator.java.tests/models/DynamicActorTest3.room
@@ -0,0 +1,235 @@
+RoomModel DynamicActorTest3 {
+
+ import room.basic.test.* from "../../../runtime/org.eclipse.etrice.modellib.java/model/Tests.room"
+ import room.basic.types.* from "../../../runtime/org.eclipse.etrice.modellib.java/model/Types.room"
+
+ ActorClass Appl {
+ @TestInstance
+ Structure {
+ ActorRef cont: Controller
+ }
+ Behavior { }
+ }
+
+ ActorClass Controller {
+ Structure {
+ conjugated Port pwrk: PWorker
+ conjugated Port opt: PC
+ Attribute caseId: int32
+ ActorRef worker: Worker
+ Binding pwrk and worker.fct
+ Binding opt and worker.opt
+ }
+ Behavior {
+ ctor {
+ "caseId = etUnit_openAll(\"log\", \"DynamicActorTest3\", \"org.eclipse.etrice.generator.java.tests.DynamicActorTest3\", \"DynamicActorTest3_case\");"
+ }
+ dtor {
+ "etUnit_closeAll(caseId);"
+ }
+ StateMachine {
+ Transition init: initial -> createOpt1 { }
+ Transition tr0: createOpt1 -> SendHello {
+ triggers {
+ <ok: pwrk>
+ }
+ }
+ Transition tr1: SendHello -> TryCreateInvalid {
+ triggers {
+ <hello: opt>
+ }
+ action {
+ "System.out.println(\"controller received \"+txt);"
+ }
+ }
+ Transition tr2: createOpt1 -> UnexpectedError {
+ triggers {
+ <error: pwrk>
+ }
+ }
+ Transition tr3: TryCreateInvalid -> ExpectedError {
+ triggers {
+ <error: pwrk>
+ }
+ }
+ State createOpt1 {
+ entry {
+ "pwrk.create(\"Optional1\");"
+ }
+ }
+ State SendHello {
+ entry {
+ "opt.sayHello();"
+ }
+ }
+ State TryCreateInvalid {
+ entry {
+ "pwrk.create(\"Optional\");"
+ }
+ }
+ State UnexpectedError
+ State ExpectedError {
+ entry {
+ "etUnit_testFinished(caseId);"
+ }
+ }
+ }
+ }
+ }
+
+ ActorClass Worker {
+ Interface {
+ Port fct: PWorker
+ Port opt: PC
+ }
+ Structure {
+ external Port fct
+ optional ActorRef optRef: Optional
+ Binding opt and optRef.p0
+ }
+ 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 {
+ <create: fct>
+ }
+ action {
+ "if (optRef.createOptionalActor(ac, getThread()))"
+ "\tfct.ok();"
+ "else"
+ "\tfct.error();"
+ }
+ }
+ State Ready
+ }
+ }
+ }
+
+ // the class that is referenced as optional by the Worker
+ // since it is abstract it just serves as an interface
+ abstract ActorClass Optional {
+ Interface {
+ Port p0: PC
+ }
+ Structure { }
+ Behavior { }
+ }
+
+ // a sub class of Optional which is valid as optional actor
+ ActorClass Optional1 extends Optional {
+ Structure {
+ ActorRef sub1: AC1
+ Binding p0 and sub1.p0
+ }
+ Behavior { }
+ }
+
+ // a sub class of Optional which is valid as optional actor
+ ActorClass Optional2 extends Optional {
+ Structure {
+ ActorRef sub2: AC2
+ Binding p0 and sub2.p0
+ }
+ Behavior { }
+ }
+
+ // the following actor classes are part of the possible optional instance sub trees
+
+ ActorClass AC1 {
+ Interface {
+ Port p0: PC
+ }
+ Structure {
+ external Port p0
+ conjugated Port hlp: PC
+ ActorRef helper: AC3
+ Binding hlp and helper.p0
+ }
+ Behavior {
+ StateMachine {
+ Transition init: initial -> Ready { }
+ Transition tr0: Ready -> AskHelper {
+ triggers {
+ <sayHello: p0>
+ }
+ }
+ Transition tr1: AskHelper -> Ready {
+ triggers {
+ <hello: hlp>
+ }
+ action {
+ "System.out.println(\"helper said \"+txt);"
+ "p0.hello(\"this is AC1, instance \"+getInstancePath());"
+ }
+ }
+ State Ready
+ State AskHelper {
+ entry {
+ "hlp.sayHello();"
+ }
+ }
+ }
+ }
+ }
+
+ ActorClass AC2 {
+ Interface {
+ Port p0: PC
+ }
+ Structure {
+ ActorRef deep_sub: AC3
+ Binding p0 and deep_sub.p0
+ }
+ Behavior { }
+ }
+
+ ActorClass AC3 {
+ Interface {
+ Port p0: PC
+ }
+ Structure {
+ external Port p0
+ }
+ Behavior {
+ StateMachine {
+ Transition init: initial -> Ready { }
+ Transition tr0: Ready -> Ready {
+ triggers {
+ <sayHello: p0>
+ }
+ action {
+ "p0.hello(\"this is AC3, instance \"+getInstancePath());"
+ }
+ }
+ State Ready
+ }
+ }
+ }
+
+ // a simple protocol that is used to demonstrate that actors are connected
+ ProtocolClass PC {
+ incoming {
+ Message sayHello()
+ }
+ outgoing {
+ Message hello(txt: string)
+ }
+ }
+
+ ProtocolClass PWorker {
+ incoming {
+ Message create(ac: string)
+ }
+ outgoing {
+ Message ok()
+ Message error()
+ }
+ }
+} \ No newline at end of file

Back to the top