| RoomModel SendingDataTest { |
| |
| 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" |
| import room.basic.language.* from "../../../runtime/org.eclipse.etrice.modellib.java/model/Language.room" |
| |
| ActorClass SendingDataTop { |
| @TestInstance |
| Structure { |
| ActorRef mrPing: MrPing |
| ActorRef mrPong: MrPong |
| Binding mrPong.PingPongPort and mrPing.PingPongPort |
| } |
| Behavior { } |
| } |
| |
| ActorClass MrPong { |
| Interface { |
| Port PingPongPort: PingPongProtocol |
| } |
| Structure { |
| external Port PingPongPort |
| } |
| Behavior { |
| StateMachine { |
| Transition tr0: reply -> reply { |
| triggers { |
| <pingInt16: PingPongPort> |
| } |
| action { |
| "PingPongPort.pongInt16(d);" |
| } |
| } |
| Transition tr1: reply -> reply { |
| triggers { |
| <pingInt8: PingPongPort> |
| } |
| action { |
| "PingPongPort.pongInt8(d);" |
| } |
| } |
| Transition init: initial -> reply { } |
| Transition tr2: reply -> reply { |
| triggers { |
| <pingInt32: PingPongPort> |
| } |
| action { |
| "PingPongPort.pongInt32(d);" |
| } |
| } |
| Transition tr3: reply -> reply { |
| triggers { |
| <pingFloat32: PingPongPort> |
| } |
| action { |
| "PingPongPort.pongFloat32(d);" |
| } |
| } |
| Transition tr4: reply -> reply { |
| triggers { |
| <pingFloat64: PingPongPort> |
| } |
| action { |
| "PingPongPort.pongFloat64(d);" |
| } |
| } |
| Transition tr7: reply -> cp cp0 { |
| triggers { |
| <pingInt32Ref: PingPongPort guard { |
| "d!=0" |
| }> |
| } |
| } |
| Transition tr8: cp cp0 -> reply { |
| action { |
| "PingPongPort.pongInt32(d+10);" |
| } |
| } |
| Transition tr6: cp cp0 -> reply { |
| cond { |
| "d!=5" |
| } |
| action { |
| "PingPongPort.pongInt32(d);" |
| } |
| } |
| Transition tr9: reply -> reply { |
| triggers { |
| <pingComplex: PingPongPort> |
| } |
| action { |
| "PingPongPort.pongComplex(d);" |
| } |
| } |
| Transition tr11: reply -> reply { |
| triggers { |
| <pingComplexRef: PingPongPort> |
| } |
| action { |
| "PingPongPort.pongComplex(d);" |
| } |
| } |
| Transition tr5: reply -> reply { |
| triggers { |
| <pingInt64: PingPongPort> |
| } |
| action { |
| "PingPongPort.pongInt64(d);" |
| } |
| } |
| Transition tr10: reply -> reply { |
| triggers { |
| <pingInt16Ref: PingPongPort> |
| } |
| action { |
| "PingPongPort.pongInt16(d);" |
| } |
| } |
| Transition tr12: reply -> cp cp1 { |
| triggers { |
| <pingComplexRef: PingPongPort guard { |
| "d.i8Val == 5" |
| }> |
| } |
| action { |
| "PingPongPort.pongComplex(d);" |
| } |
| } |
| Transition tr13: cp cp1 -> reply { |
| action { |
| "PingPongPort.pongComplex(d);" |
| } |
| } |
| Transition tr14: cp cp1 -> reply { |
| cond { |
| "d.i8Val==7" |
| } |
| action { |
| "PingPongPort.pongComplex(d);" |
| } |
| } |
| Transition tr15: reply -> reply { |
| triggers { |
| <pingComplexDerived: PingPongPort> |
| } |
| action { |
| "PingPongPort.pongComplexDerived(d);" |
| } |
| } |
| ChoicePoint cp0 |
| ChoicePoint cp1 |
| State reply |
| } |
| } |
| } |
| |
| ActorClass MrPing { |
| Interface { |
| conjugated Port PingPongPort: PingPongProtocol |
| } |
| Structure { |
| external Port PingPongPort |
| Attribute i8Val: int8="5" |
| Attribute i16Val:int16="19" |
| Attribute i32Val: int32 = "4711" |
| Attribute i64Val: int64 = "11470815" |
| Attribute i32Array [ 10 ]: int32="{0,1,2,3,4,5,6,7,8,9}" |
| Attribute f32Val: float32="3.14" |
| Attribute f64Val: float64="7.987654321" |
| Attribute data: PingPongData |
| Attribute dataD: PingPongDataDerived |
| Attribute counter:int32 |
| Attribute caseId: int32 |
| Attribute lang: languageIndicator |
| Attribute resultlist [ 18 ]: 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 { |
| StateMachine { |
| Transition init: initial -> tp0 of state0 { |
| action { |
| "caseId = etUnit_openAll(\"log\", \"SendingDataTest\", \"org.eclipse.etrice.generator.java.tests.SendingDataTest\", \"SendingDataTest_case\");" |
| "EXPECT_ORDER_START(caseId,resultlist,23);" |
| "EXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 1);" |
| "// send the default values" |
| "" |
| "PingPongPort.pingInt8(i8Val);" |
| "PingPongPort.pingInt16(i16Val);" |
| "PingPongPort.pingInt32(i32Val);" |
| "PingPongPort.pingInt64(i64Val);" |
| "PingPongPort.pingFloat32(f32Val);" |
| "PingPongPort.pingFloat64(f64Val);" |
| "PingPongPort.pingInt16Ref(i16Val);" |
| "PingPongPort.pingInt32Ref(i32Val);" |
| "i8Val++;" |
| "i16Val++;" |
| "i32Val++;" |
| "i64Val++;" |
| "f32Val+=10.1;" |
| "f64Val+=20.2;" |
| "PingPongPort.pingInt8(i8Val);" |
| "PingPongPort.pingInt16(i16Val);" |
| "PingPongPort.pingInt32(i32Val);" |
| "PingPongPort.pingInt64(i64Val);" |
| "PingPongPort.pingFloat32(f32Val);" |
| "PingPongPort.pingFloat64(f64Val);" |
| "PingPongPort.pingInt16Ref(i16Val);" |
| "PingPongPort.pingInt32Ref(i32Val);" |
| } |
| } |
| Transition tr0: tp1 of state0 -> tp0 of state1 |
| Transition tr1: tp1 of state1 -> test_finished |
| State state0 { |
| subgraph { |
| Transition tr0: my tp0 -> receiveFirst7 { |
| action { |
| "counter=0;" |
| } |
| } |
| Transition tr1: receiveFirst7 -> receiveFirst7 { |
| triggers { |
| <pongInt8: PingPongPort> |
| } |
| action { |
| "counter++;" |
| "if (d==5){" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 2);" |
| "}else{" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 0xFF);" |
| "}" |
| } |
| } |
| Transition tr2: receiveFirst7 -> receiveFirst7 { |
| triggers { |
| <pongInt16: PingPongPort> |
| } |
| action { |
| "counter++;" |
| "if (d==19){" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 3);" |
| "}else{" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 0xFF);" |
| "}" |
| } |
| } |
| Transition tr3: receiveFirst7 -> receiveFirst7 { |
| triggers { |
| <pongInt32: PingPongPort> |
| } |
| action { |
| "counter++;" |
| "if (d==4711){" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 4);" |
| "}else{" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 0xFF);" |
| "}" |
| } |
| } |
| Transition tr4: receiveFirst7 -> receiveSecond7 { |
| triggers { |
| <pongInt32: PingPongPort guard { |
| "counter==7" |
| }> |
| } |
| action { |
| "counter=0;" |
| "if (lang == 1){" |
| "// Java cannot send references of primitive types" |
| "\tif (d==4711){\t" |
| "\t\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 9);" |
| "\t}else{" |
| "\t\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 0xFF);" |
| "\t}" |
| "} " |
| "if (lang == 2){" |
| "// C" |
| "\tif (d==4712){\t" |
| "\t\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 9);" |
| "\t}else{" |
| "\t\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 0xFF);" |
| "\t}" |
| "}" |
| } |
| } |
| Transition tr6: receiveFirst7 -> receiveFirst7 { |
| triggers { |
| <pongInt64: PingPongPort> |
| } |
| action { |
| "counter++;" |
| "if (d==11470815){" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 5);" |
| "}else{" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 0xFF);" |
| "}" |
| } |
| } |
| Transition tr5: receiveFirst7 -> receiveFirst7 { |
| triggers { |
| <pongFloat32: PingPongPort> |
| } |
| action { |
| "counter++;" |
| "if ((d>3)&&(d<4)){" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 6);" |
| "}else{" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 0xFF);" |
| "}" |
| } |
| } |
| Transition tr7: receiveFirst7 -> receiveFirst7 { |
| triggers { |
| <pongFloat64: PingPongPort> |
| } |
| action { |
| "counter++;" |
| "if ((d>7)&&(d<8)){" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 7);" |
| "}else{" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 0xFF);" |
| "}" |
| } |
| } |
| Transition tr8: receiveSecond7 -> receiveSecond7 { |
| triggers { |
| <pongInt8: PingPongPort> |
| } |
| action { |
| "counter++;" |
| "if (d==6){" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 10);" |
| "}else{" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 0xFF);" |
| "}" |
| } |
| } |
| Transition tr9: receiveSecond7 -> receiveSecond7 { |
| triggers { |
| <pongInt16: PingPongPort> |
| } |
| action { |
| "counter++;" |
| "if (d==20){" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 11);" |
| "}else{" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 0xFF);" |
| "}" |
| } |
| } |
| Transition tr10: receiveSecond7 -> receiveSecond7 { |
| triggers { |
| <pongInt32: PingPongPort> |
| } |
| action { |
| "counter++;" |
| "if (d==4712){" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 12);" |
| "}else{" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 0xFF);" |
| "}" |
| } |
| } |
| Transition tr11: receiveSecond7 -> receiveSecond7 { |
| triggers { |
| <pongInt64: PingPongPort> |
| } |
| action { |
| "counter++;" |
| "if (d==11470816){" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 13);" |
| "}else{" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 0xFF);" |
| "}" |
| } |
| } |
| Transition tr12: receiveSecond7 -> receiveSecond7 { |
| triggers { |
| <pongFloat32: PingPongPort> |
| } |
| action { |
| "counter++;" |
| "if ((d>13)&&(d<14)){" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 14);" |
| "}else{" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 0xFF);" |
| "}" |
| } |
| } |
| Transition tr13: receiveSecond7 -> receiveSecond7 { |
| triggers { |
| <pongFloat64: PingPongPort> |
| } |
| action { |
| "counter++;" |
| "if ((d>28)&&(d<29)){" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 15);" |
| "}else{" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 0xFF);" |
| "}" |
| } |
| } |
| Transition tr14: receiveSecond7 -> my tp1 { |
| triggers { |
| <pongInt32: PingPongPort guard { |
| "counter==7" |
| }> |
| } |
| action { |
| "if (d==4712){\t" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 17);" |
| "}else{" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 0xFF);" |
| "}" |
| } |
| } |
| Transition tr15: receiveFirst7 -> receiveFirst7 { |
| triggers { |
| <pongInt16: PingPongPort guard { |
| "counter==6" |
| }> |
| } |
| action { |
| "counter++;" |
| "if (lang == 1){" |
| "// Java cannot send references of primitive types" |
| "\tif (d==19){\t" |
| "\t\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 8);" |
| "\t}else{" |
| "\t\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 0xFF);" |
| "\t}" |
| "} " |
| "if (lang == 2){" |
| "// C" |
| "\tif (d==20){\t" |
| "\t\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 8);" |
| "\t}else{" |
| "\t\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 0xFF);" |
| "\t}" |
| "}" |
| } |
| } |
| Transition tr16: receiveSecond7 -> receiveSecond7 { |
| triggers { |
| <pongInt16: PingPongPort guard { |
| "counter==6" |
| }> |
| } |
| action { |
| "counter++;" |
| "if (d==20){\t" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 16);" |
| "}else{" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 0xFF);" |
| "}" |
| } |
| } |
| EntryPoint tp0 |
| ExitPoint tp1 |
| State receiveFirst7 |
| State receiveSecond7 |
| } |
| } |
| State test_finished { |
| entry { |
| "EXPECT_ORDER_END(caseId,\"<|MODEL_LOCATION|>\", 23);" |
| "etUnit_closeAll(caseId);" |
| "etUnit_testFinished(caseId);" |
| } |
| } |
| State state1 { |
| subgraph { |
| Transition tr0: my tp0 -> state0 { |
| action { |
| "counter=0;" |
| "// send default values" |
| "PingPongPort.pingComplex(data);" |
| "PingPongPort.pingComplexRef(data);" |
| } |
| } |
| Transition tr1: state0 -> state1 { |
| triggers { |
| <pongComplex: PingPongPort guard { |
| "counter==1" |
| }> |
| } |
| action { |
| "counter=0;" |
| "if (d.i8Val==10){" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 19);" |
| "}else{" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 0xFF);" |
| "}" |
| "" |
| "if (d.complexVal.i32Val2==80){" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 20);" |
| "}else{" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 0xFF);" |
| "}" |
| "" |
| "dataD.i8Val=11;" |
| "PingPongPort.pingComplexDerived(dataD);" |
| } |
| } |
| Transition tr2: state0 -> state0 { |
| triggers { |
| <pongComplex: PingPongPort> |
| } |
| action { |
| "counter++;" |
| "if (d.i8Val==10){" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 18);" |
| "}else{" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 0xFF);" |
| "}" |
| } |
| } |
| Transition tr3: state1 -> my tp1 { |
| triggers { |
| <pongComplexDerived: PingPongPort> |
| } |
| action { |
| "if (d.i8Val==11){" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 21);" |
| "}else{" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 0xFF);" |
| "}" |
| "" |
| "if (d.i32Val3==150){" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 22);" |
| "}else{" |
| "\tEXPECT_ORDER(caseId,\"<|MODEL_LOCATION|>\", 0xFF);" |
| "}" |
| } |
| } |
| EntryPoint tp0 |
| ExitPoint tp1 |
| State state0 |
| State state1 |
| } |
| } |
| } |
| } |
| } |
| |
| ProtocolClass PingPongProtocol { |
| incoming { |
| Message pingInt8(d: int8) |
| Message pingInt16(d: int16) |
| Message pingInt32(d: int32) |
| Message pingInt64(d: int64) |
| Message pingFloat32(d: float32) |
| Message pingFloat64(d: float64) |
| Message pingInt16Ref(d: int16 ref) |
| Message pingInt32Ref(d: int32 ref) |
| Message pingComplex(d: PingPongData) |
| Message pingComplexRef(d: PingPongData ref) |
| Message pingComplexDerived(d:PingPongDataDerived) |
| } |
| outgoing { |
| Message pongInt8(d: int8) |
| Message pongInt16(d: int16) |
| Message pongInt32(d: int32) |
| Message pongInt64(d:int64) |
| Message pongFloat32(d: float32) |
| Message pongFloat64(d: float64) |
| Message pongComplex(d: PingPongData) |
| Message pongComplexDerived(d: PingPongDataDerived) |
| } |
| } |
| |
| DataClass PingPongData { |
| Attribute i8Val: int8 = "10" |
| Attribute i8ValRef: int8 ref |
| Attribute i32Array [ 3 ]: int32 = "{200,300,400}" |
| Attribute i8ArrayRef [ 2 ]: int8 ref |
| Attribute complexVal: PingPongDataDeep |
| } |
| |
| DataClass PingPongDataDeep { |
| Attribute i32Val1: int32 |
| Attribute i32Val2: int32 = "80" |
| } |
| |
| DataClass PingPongDataDerived extends PingPongData { |
| Attribute i32Val3: int32 = "150" |
| } |
| } |