Sfoglia il codice sorgente

Use lowercase 'null' to init pointer. Added timer test (Fixes #249).

Markus Mühlbrandt 9 anni fa
parent
commit
36d464dd96

+ 1 - 1
plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/StatemachineImplementation.xtend

@@ -97,7 +97,7 @@ class StatemachineImplementation {
 			stateConfVectorPosition = 0;
 			
 			«IF timed»
-				«timerInstance» = NULL;
+				«timerInstance» = null;
 			«ENDIF»
 		}
 	'''

+ 79 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/TimedTransitionsTest/TimedTransitionsTestCustom.cc

@@ -0,0 +1,79 @@
+/**
+* Copyright (c) 2015 committers of YAKINDU and others.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*     committers of YAKINDU - initial API and implementation
+*/
+#include <string>
+#include "gtest/gtest.h"
+#include "TimedTransitions.h"
+#include "Timer.h"
+
+TEST(StatemachineTest, Timer01) {
+	TimedTransitions* statechart = new TimedTransitions();
+	Timer* timer = new Timer();
+	statechart->setTimer(timer);
+	statechart->init();
+	statechart->enter();
+	EXPECT_TRUE(statechart->isStateActive(TimedTransitions::main_region_Start));
+	EXPECT_EQ(2000, timer->getTime());
+	EXPECT_FALSE(timer->isPeriodic());
+	statechart->runCycle();
+	EXPECT_TRUE(statechart->isStateActive(TimedTransitions::main_region_End));
+	EXPECT_EQ(timer->getStatemachineSet(), timer->getStatemachineUnset());
+	EXPECT_EQ(timer->getEventSet(),timer->getEventUnset());
+	delete timer;
+	delete statechart;
+}
+
+Timer::Timer() {
+}
+
+Timer::~Timer() {
+}
+
+void Timer::setTimer(TimedStatemachineInterface* statemachine, sc_eventid event, sc_integer time, sc_boolean isPeriodic) {
+	statemachineSet = statemachine;
+	eventSet = event;
+	this->time = time;
+	periodic = isPeriodic;
+	statemachine->raiseTimeEvent(event);
+}
+
+void Timer::unsetTimer(TimedStatemachineInterface* statemachine, sc_eventid event) {
+	statemachineUnset = statemachine;
+	eventUnset = event;
+}
+
+void Timer::cancel() {
+}
+
+TimedStatemachineInterface* Timer::getStatemachineSet() {
+	return statemachineSet;
+}
+
+TimedStatemachineInterface* Timer::getStatemachineUnset() {
+	return statemachineUnset;
+}
+
+sc_eventid Timer::getEventSet() {
+	return eventSet;
+}
+
+sc_eventid Timer::getEventUnset() {
+	return eventUnset;
+}
+
+sc_integer Timer::getTime() {
+	return time;
+}
+
+sc_boolean Timer::isPeriodic() {
+	return periodic;
+}
+
+

+ 37 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/gtests/TimedTransitionsTest/Timer.h

@@ -0,0 +1,37 @@
+#include "TimerInterface.h"
+
+class Timer : public TimerInterface {
+	
+	private:
+		TimedStatemachineInterface* statemachineSet;
+		TimedStatemachineInterface* statemachineUnset;
+		sc_eventid eventSet;
+		sc_eventid eventUnset;
+		sc_integer time;
+		sc_boolean periodic;
+
+	public:
+
+		Timer();
+
+		~Timer();
+
+		void setTimer(TimedStatemachineInterface* statemachine, sc_eventid event, sc_integer time, sc_boolean isPeriodic);
+		
+		void unsetTimer(TimedStatemachineInterface* statemachine, sc_eventid event);
+	
+		void cancel();
+
+		TimedStatemachineInterface* getStatemachineSet();
+
+		TimedStatemachineInterface* getStatemachineUnset();
+
+		sc_eventid getEventSet();
+
+		sc_eventid getEventUnset();
+
+		sc_integer getTime();
+
+		sc_boolean isPeriodic();
+
+};

+ 2 - 1
test-plugins/org.yakindu.sct.generator.cpp.test/src/org/yakindu/sct/generator/cpp/test/AllTestsTestCustom.java

@@ -9,11 +9,12 @@
  *     committers of YAKINDU - initial API and implementation
  */
 package org.yakindu.sct.generator.cpp.test;
+
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
 import org.junit.runners.Suite.SuiteClasses;
 
 @RunWith(Suite.class)
-@SuiteClasses({OperationsTestCustom.class, OperationsWithoutBracesTestCustom.class})
+@SuiteClasses({ OperationsTestCustom.class, OperationsWithoutBracesTestCustom.class, TimedTransitionsTestCustom.class })
 public class AllTestsTestCustom {
 }

+ 45 - 0
test-plugins/org.yakindu.sct.generator.cpp.test/src/org/yakindu/sct/generator/cpp/test/TimedTransitionsTestCustom.java

@@ -0,0 +1,45 @@
+/**
+ * Copyright (c) 2015 committers of YAKINDU and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     committers of YAKINDU - initial API and implementation
+ */
+package org.yakindu.sct.generator.cpp.test;
+
+import java.util.Collection;
+
+import org.junit.Before;
+import org.junit.runner.RunWith;
+import org.yakindu.sct.generator.c.gtest.GTest;
+import org.yakindu.sct.generator.c.gtest.GTestRunner;
+import org.yakindu.sct.generator.c.gtest.GTestHelper;
+
+@GTest(sourceFile = "gtests/TimedTransitionsTest/TimedTransitionsTestCustom.cc", program = "gtests/TimedTransitionsTest/TimedTransitions", model = "testmodels/SCTUnit/TimedTransitions.sct")
+@RunWith(GTestRunner.class)
+public class TimedTransitionsTestCustom {
+
+	protected final GTestHelper helper = new GTestHelper(this) {
+		
+		@Override
+		protected void getTestDataFiles(Collection<String> files) {
+			super.getTestDataFiles(files);
+			files.add("gtests/TimedTransitionsTest/Timer.h");
+		}
+		
+		@Override
+		protected void getSourceFiles(Collection<String> files) {
+			super.getSourceFiles(files);
+			files.add(getFileName(getTestProgram()) + ".cpp");
+		}
+	};
+
+	@Before
+	public void setUp() {
+		helper.generate();
+		helper.compile();
+	}
+}