diff options
Diffstat (limited to 'tests/org.eclipse.etrice.generator.common.tests/model/pingPongThreadTest/PingPongThreadTest.room')
-rw-r--r-- | tests/org.eclipse.etrice.generator.common.tests/model/pingPongThreadTest/PingPongThreadTest.room | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/tests/org.eclipse.etrice.generator.common.tests/model/pingPongThreadTest/PingPongThreadTest.room b/tests/org.eclipse.etrice.generator.common.tests/model/pingPongThreadTest/PingPongThreadTest.room new file mode 100644 index 000000000..343b9275b --- /dev/null +++ b/tests/org.eclipse.etrice.generator.common.tests/model/pingPongThreadTest/PingPongThreadTest.room @@ -0,0 +1,143 @@ +RoomModel PingPongThreadTest { + + import etrice.api.types.int16 + import etrice.api.types.int32 + import etrice.api.timer.PTimer + import etrice.api.timer.ATimerService + + LogicalSystem System_PingPong { + SubSystemRef main: SubSystem_PingPong + } + + SubSystemClass SubSystem_PingPong { + ActorRef application: PingPongTop + ActorRef services: ATimerService + LayerConnection ref application satisfied_by services.timer + + LogicalThread mrPingThread + LogicalThread mrPong1Thread + LogicalThread mrPong2Thread + LogicalThread mrPong3Thread + LogicalThread timingThread + ActorInstanceMapping application/MrPing -> mrPingThread + ActorInstanceMapping application/MrPong1 -> mrPong1Thread + ActorInstanceMapping application/MrPong2 -> mrPong2Thread + ActorInstanceMapping application/MrPong3 -> mrPong3Thread + ActorInstanceMapping services -> timingThread + } + + ActorClass PingPongTop { + Structure { + ActorRef MrPing: MrPingActor + ActorRef MrPong1: MrPongActor1 + ActorRef MrPong2: MrPongActor1 + ActorRef MrPong3: MrPongActor1 + Binding MrPing.PingPongPort and MrPong1.PingPongPort + Binding MrPing.PingPongPort2 and MrPong2.PingPongPort + Binding MrPing.PingPongPort3 and MrPong3.PingPongPort + } + Behavior { + } + } + + ActorClass MrPingActor { + Interface { + conjugated Port PingPongPort: PingPongProtocol + conjugated Port PingPongPort2: PingPongProtocol + conjugated Port PingPongPort3: PingPongProtocol + } + Structure { + external Port PingPongPort + external Port PingPongPort2 + external Port PingPongPort3 + SAP timer: PTimer + Attribute count: int32 + Attribute pongCount: int32 + Attribute caseId: int32 + Attribute resultlist [23]: int16 = "{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23}" + } + Behavior { + ctor '''caseId = etUnit_openAll("log", "PingPongThreadTest", "org.eclipse.etrice.generator.common.tests.PingPongThreadTest", "PingPongThreadTest_case");''' + dtor '''etUnit_closeAll(caseId);''' + StateMachine { + Transition tr0: initial -> waitForTimer { + action ''' + count = 0; + timer.startTimeout(10); + EXPECT_ORDER_START(caseId,resultlist,23); + EXPECT_ORDER(caseId,"<|MODEL_LOCATION|>", 1);''' + } + Transition tr1: waitForTimer -> waitForPong { + triggers { + <timeout: timer> + } + action ''' + PingPongPort.ping(); + PingPongPort2.ping(); + pongCount = 0;''' + } + Transition tr3: waitForPong -> cp cp0 { + triggers { + <pong: PingPongPort2> or <pong: PingPongPort> + } + action '''pongCount++;''' + } + Transition tr5: cp cp0 -> cp cp1 { + action '''//System.out.println(count);''' + } + Transition tr6: cp cp0 -> waitForPong { + cond '''pongCount < 2''' + } + Transition tr2: cp cp1 -> test_finished + Transition tr4: cp cp1 -> waitForTimer { + cond '''count<20''' + action ''' + timer.startTimeout(5); + EXPECT_ORDER(caseId,"<|MODEL_LOCATION|>", count+2); + count++;''' + } + ChoicePoint cp0 + ChoicePoint cp1 + State waitForTimer + State waitForPong + State test_finished { + entry ''' + EXPECT_ORDER(caseId,"<|MODEL_LOCATION|>", 22); + EXPECT_ORDER_END(caseId,"<|MODEL_LOCATION|>", 23); + etUnit_testFinished(caseId);''' + } + } + } + } + + ActorClass MrPongActor1 { + Interface { + Port PingPongPort: PingPongProtocol + } + Structure { + external Port PingPongPort + } + Behavior { + StateMachine { + Transition tr0: initial -> waitForPing { + } + Transition myTrigger: waitForPing -> waitForPing { + triggers { + <ping: PingPongPort> + } + action '''PingPongPort.pong();''' + } + State waitForPing + } + } + } + + ProtocolClass PingPongProtocol { + incoming { + Message ping() + } + outgoing { + Message pong() + } + } +} |