RoomModel DynamicConfigTest { import room.basic.types.* from "../../../runtime/org.eclipse.etrice.modellib.java/model/Types.room" import room.basic.service.timing.* from "../../../runtime/org.eclipse.etrice.modellib.java/model/TimingService.room" LogicalSystem System_DynamicConfigTest{ SubSystemRef main : SubSystem_DynamicConfigTest } SubSystemClass SubSystem_DynamicConfigTest { ActorRef testee: Testee_ac ActorRef timingService: ATimingService LayerConnection ref testee satisfied_by timingService.timer } ActorClass Testee_ac { Structure { usercode1 { "import java.util.HashMap;" "import java.util.Map;" "import org.eclipse.etrice.runtime.java.config.IConfigSource;" } SAP timer: PTimer Attribute caseId: int32 Attribute testId: int32 = "1" // no dynConfig Attribute sString: string // dynConfig Attribute aInt8: int8 Attribute aInt16: int16 Attribute aInt32: int32 Attribute aInt64: int64 Attribute aBool: boolean Attribute aFloat32: float32 Attribute aFloat64: float64 Attribute aChar: char Attribute aString: string Attribute aInt8_array [ 2 ]: int8 Attribute aInt16_array [ 2 ]: int16 Attribute aInt32_array [ 2 ]: int32 Attribute aInt64_array [ 2 ]: int64 Attribute aBool_array [ 2 ]: boolean Attribute aFloat32_array [ 2 ]: float32 Attribute aFloat64_array [ 2 ]: float64 Attribute aChar_array [ 2 ]: char Attribute dc: Data_dc } Behavior { ctor { "etUnit_open(\"log\", \"DynamicConfigTest\");" "etUnit_openTestSuite(\"org.eclipse.etrice.generator.java.tests.DynamicConfigTest\");" "caseId = etUnit_openTestCase(\"DynamicConfigTest_case_Testee_ac\");" } dtor { "etUnit_closeTestCase(caseId);" "etUnit_closeTestSuite();" "etUnit_close();" } StateMachine { Transition t0: initial -> ChangeConfigValid { } Transition t1: ChangeConfigValid -> Test { triggers { } action { "testId++;" } } Transition t2: Test -> ChangeConfigInvalid { triggers { } } Transition t3: ChangeConfigInvalid -> Test { triggers { } action { "testId++;" } } Transition t4: Test -> Done { triggers { } } Transition tr0: Test -> ChangeConfigValid { triggers { } } State ChangeConfigValid { entry { "IConfigSource source = ConfigSourceTestInstance.getInstance();" "String path = this.getInstancePath();" "Map testValues = new HashMap();" "testValues.put(path+\"/aInt8\", 50);" "testValues.put(path+\"/aInt16\", 51);" "testValues.put(path+\"/aInt32\", 52);" "testValues.put(path+\"/aInt64\", 53);" "testValues.put(path+\"/aFloat32\", 5.4f);" "testValues.put(path+\"/aFloat64\", 5.5);" "testValues.put(path+\"/aChar\", 'B');" "testValues.put(path+\"/aString\", \"Do-NOT-UPDATE-me\");" "testValues.put(path+\"/aBool\", true);" "testValues.put(path+\"/dc/nested/aInt32\", 56);" "testValues.put(path+\"/dc/aString\", \"Okay\");" "testValues.put(path+\"/aInt8_array\", new Byte[]{50,40});" "testValues.put(path+\"/aInt16_array\", new Short[]{51,41});" "testValues.put(path+\"/aInt32_array\", new Integer[]{52,42});" "testValues.put(path+\"/aInt64_array\", new Long[]{53L,43L});" "testValues.put(path+\"/aFloat32_array\", new Float[]{5.4f, 4.4f});" "testValues.put(path+\"/aFloat64_array\", new Double[]{5.5, 4.5});" "testValues.put(path+\"/aChar_array\", \"BB\");" "testValues.put(path+\"/aBool_array\", new Boolean[]{true, false});" "source.writeValues(testValues);" "timer.startTimer(400);" } } State ChangeConfigInvalid { entry { // do not update aString "getAStringLock().forbidUpdate();" "IConfigSource source = ConfigSourceTestInstance.getInstance();" "String path = this.getInstancePath();" "Map testValues = new HashMap();" "testValues.put(path+\"/aInt8\", 128);" "testValues.put(path+\"/aInt16\", 61);" "testValues.put(path+\"/aInt32\", -2);" "testValues.put(path+\"/aInt64\", Long.MAX_VALUE);" "testValues.put(path+\"/aFloat32\", -100f);" "testValues.put(path+\"/aFloat64\", 100d);" "testValues.put(path+\"/aChar\", \"string\");" "testValues.put(path+\"/aString\", \"VALID-String\");" "testValues.put(path+\"/aBool\", \"true\");" "testValues.put(path+\"/dc/aString\", 0.89898);" "testValues.put(path+\"/dc/nested/aInt32\", 62);" "testValues.put(path+\"/aInt8_array\", 128);" "testValues.put(path+\"/aInt16_array\", new Short[]{-1,-2});" "testValues.put(path+\"/aInt32_array\", new Integer[]{60,59});" "testValues.put(path+\"/aInt64_array\", new Long[]{60000L,60000L});" "testValues.put(path+\"/aFloat32_array\", new Float[]{0f, -2f});" "testValues.put(path+\"/aFloat64_array\", \"string\");" "testValues.put(path+\"/aChar_array\", \"BBB\");" "testValues.put(path+\"/aBool_array\", 500);" "source.writeValues(testValues);" "timer.startTimer(400);" } } State Test { entry { "EXPECT_EQUAL_INT8(caseId, \"1:Testee_ac\", (byte)50, getAInt8());" "EXPECT_EQUAL_INT16(caseId, \"2:Testee_ac\", (short)51, getAInt16());" "EXPECT_EQUAL_INT32(caseId, \"3:Testee_ac\", 52, getAInt32());" "EXPECT_TRUE(caseId, \"4:Testee_ac\", getAInt64() == 53L);" "EXPECT_EQUAL_FLOAT32(caseId, \"5:Testee_ac\", 5.4f, getAFloat32(), 0.1f);" "EXPECT_TRUE(caseId, \"6:Testee_ac\", getAFloat64() == 5.5);" "EXPECT_TRUE(caseId, \"7:Testee_ac\", getAChar() == 'B');" "EXPECT_TRUE(caseId, \"8:Testee_ac\", \"Do-NOT-UPDATE-me\".equals(getAString()));" "EXPECT_TRUE(caseId, \"9:Testee_ac\", getABool() == true);" "EXPECT_TRUE(caseId, \"10:Testee_ac\", getAInt8_array()[0] == 50 && getAInt8_array()[1] == 40);" "EXPECT_TRUE(caseId, \"11:Testee_ac\", getAInt16_array()[0] == 51 && getAInt16_array()[1] == 41);" "EXPECT_TRUE(caseId, \"12:Testee_ac\", getAInt32_array()[0] == 52 && getAInt32_array()[1] == 42);" "EXPECT_TRUE(caseId, \"13:Testee_ac\", getAInt64_array()[0] == 53L && getAInt64_array()[1] == 43L);" "EXPECT_EQUAL_FLOAT32(caseId, \"14.1:Testee_ac\", 5.4f, getAFloat32_array()[0], 0.1f);" "EXPECT_EQUAL_FLOAT32(caseId, \"14.2:Testee_ac\", 4.4f, getAFloat32_array()[1], 0.1f);" "EXPECT_TRUE(caseId, \"15:Testee_ac\", getAFloat64_array()[0] == 5.5 && getAFloat64_array()[1] == 4.5);" "EXPECT_TRUE(caseId, \"16:Testee_ac\", String.valueOf(getAChar_array()).equals(\"BB\"));" "EXPECT_TRUE(caseId, \"18:Testee_ac\", getABool_array()[0] == true && getABool_array()[1] == false);" "EXPECT_TRUE(caseId, \"19:Testee_ac\", \"Okay\".equals(getDc().getAString()));" "EXPECT_TRUE(caseId, \"20:Testee_ac\", getDc().getNested().getAInt32() == 56);" "timer.startTimer(1);" } } State Done { entry { "\tetUnit_testFinished(caseId);" } } } } } DataClass Data_dc { Attribute aString:string Attribute nested: Data_nested_dc } DataClass Data_nested_dc { Attribute aInt32: int32 } }