| RoomModel DynamicConfigTest { |
| |
| import etrice.api.types.char |
| import etrice.api.types.boolean |
| import etrice.api.types.int8 |
| import etrice.api.types.int16 |
| import etrice.api.types.int32 |
| import etrice.api.types.int64 |
| import etrice.api.types.float32 |
| import etrice.api.types.float64 |
| import etrice.api.types.string |
| import etrice.api.timer.PTimer |
| import etrice.api.timer.ATimerService |
| |
| LogicalSystem System_DynamicConfigTest { |
| SubSystemRef main: SubSystem_DynamicConfigTest |
| } |
| |
| SubSystemClass SubSystem_DynamicConfigTest { |
| ActorRef testee: Testee_ac |
| ActorRef timingService: ATimerService |
| LayerConnection ref testee satisfied_by timingService.timer |
| |
| LogicalThread defaultThread |
| } |
| |
| 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 { |
| <timeout: timer> |
| } |
| action '''testId++;''' |
| } |
| Transition t2: Test -> ChangeConfigInvalid { |
| triggers { |
| <timeout: timer guard '''testId==2'''> |
| } |
| } |
| Transition t3: ChangeConfigInvalid -> Test { |
| triggers { |
| <timeout: timer> |
| } |
| action '''testId++;''' |
| } |
| Transition t4: Test -> Done { |
| triggers { |
| <timeout: timer guard '''testId==4'''> |
| } |
| } |
| Transition tr0: Test -> ChangeConfigValid { |
| triggers { |
| <timeout: timer guard '''testId==3'''> |
| } |
| } |
| State ChangeConfigValid { |
| entry ''' |
| IConfigSource source = ConfigSourceTestInstance.getInstance(); |
| String path = this.getInstancePath(); |
| Map<String, Object> testValues = new HashMap<String, Object>(); |
| 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 ''' |
| getAStringLock().forbidUpdate(); |
| IConfigSource source = ConfigSourceTestInstance.getInstance(); |
| String path = this.getInstancePath(); |
| Map<String, Object> testValues = new HashMap<String, Object>(); |
| 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 ''' etUnit_testFinished(caseId);''' |
| } |
| } |
| } |
| } |
| |
| DataClass Data_dc { |
| Attribute aString: string |
| Attribute nested: Data_nested_dc |
| } |
| |
| DataClass Data_nested_dc { |
| Attribute aInt32: int32 |
| } |
| } |