public void initialize(final ExecutionFlow flow) throws NumberFormatException { { this.flow = flow; EList<Scope> _scopes = flow.getScopes(); for (final Scope scope : _scopes) { this.declareContents(scope); } StateVector _stateVector = flow.getStateVector(); int _size = _stateVector.getSize(); this.executionContext.initStateConfigurationVector(_size); this.executionContext.addExecutionContextListener(this); VirtualClock _virtualClock = this.executionContext.getVirtualClock(); this.timingService.init(_virtualClock); VirtualClock _virtualClock_1 = this.executionContext.getVirtualClock(); _virtualClock_1.start(); TraceBeginRunCycle _createTraceBeginRunCycle = SexecFactory.eINSTANCE.createTraceBeginRunCycle(); this.brc = _createTraceBeginRunCycle; TraceEndRunCycle _createTraceEndRunCycle = SexecFactory.eINSTANCE.createTraceEndRunCycle(); this.erc = _createTraceEndRunCycle; BufferingExecutionContext _bufferingExecutionContext = new BufferingExecutionContext(this.executionContext); this.externalExecutionContext = _bufferingExecutionContext; } }
/** * If a time trigger is defined for a transition then an event must be introduced into the * execution flow. */ @Test public void testSingleTransitionTimeTrigger() { Statechart sc = _createStatechart("test"); Scope scope = _createInterfaceScope("interface", sc); VariableDefinition v1 = _createVariableDefinition("v1", TYPE_INTEGER, scope); Region r = _createRegion("main", sc); State s = _createState("s", r); Transition t = _createTransition(s, s); ReactionTrigger tr1 = _createReactionTrigger(t); _createTimeEventSpec(TimeEventType.AFTER, _createValue(1), TimeUnit.SECOND, tr1); AssignmentExpression assign = _createVariableAssignment( v1, AssignmentOperator.ASSIGN, _createValue(42), (ReactionEffect) t.getEffect()); ExecutionFlow flow = sequencer.transform(sc); // assert definition of time event Scope timerScope = flow.getScopes().get(1); assertTrue(timerScope.getDeclarations().get(0) instanceof TimeEvent); TimeEvent te = (TimeEvent) timerScope.getDeclarations().get(0); // assert that the reaction check checks the time event assertEquals(1, flow.getStates().size()); ExecutionState _s = flow.getStates().get(0); assertEquals(s.getName(), _s.getSimpleName()); If _if = (If) SCTTestUtil.flattenSequenceStepsAsList(flow.getStates().get(0).getReactSequence()) .get(0); ElementReferenceExpression _ere = (ElementReferenceExpression) _if.getCheck().getCondition(); assertSame(te, _ere.getReference()); // assert the scheduling of the time event during state entry assertNotNull(_s.getEntryAction()); Sequence entryAction = (Sequence) _s.getEntryAction(); ScheduleTimeEvent ste = (ScheduleTimeEvent) entryAction.getSteps().get(0); assertSame(te, ste.getTimeEvent()); NumericalMultiplyDivideExpression multiply = (NumericalMultiplyDivideExpression) ste.getTimeValue(); assertIntLiteral(1, ((PrimitiveValueExpression) multiply.getLeftOperand()).getValue()); assertIntLiteral(1000, ((PrimitiveValueExpression) multiply.getRightOperand()).getValue()); assertEquals(MultiplicativeOperator.MUL, multiply.getOperator()); // assert the unscheduling of the time events during state exit assertNotNull(_s.getExitAction()); Sequence exitAction = (Sequence) _s.getExitAction(); UnscheduleTimeEvent ute = (UnscheduleTimeEvent) exitAction.getSteps().get(0); assertSame(te, ute.getTimeEvent()); }
@Test public void testSingleLocalTimeTrigger() { Statechart sc = _createStatechart("test"); Scope scope = _createInterfaceScope("interface", sc); VariableDefinition v1 = _createVariableDefinition("v1", TYPE_INTEGER, scope); Region r = _createRegion("main", sc); State s = _createState("s", r); LocalReaction timeTriggeredReaction = _createTimeTriggeredReaction(s, TimeEventType.AFTER, _createValue(2), TimeUnit.MILLISECOND); AssignmentExpression assign = _createVariableAssignment( v1, AssignmentOperator.ASSIGN, _createValue(42), (ReactionEffect) timeTriggeredReaction.getEffect()); ExecutionFlow flow = sequencer.transform(sc); Scope timerScope = flow.getScopes().get(1); assertTrue(timerScope.getDeclarations().get(0) instanceof TimeEvent); TimeEvent te = (TimeEvent) timerScope.getDeclarations().get(0); // assert that the reaction check checks the time event ExecutionState _s = flow.getStates().get(0); // assert the scheduling of the time event during state entry assertNotNull(_s.getEntryAction()); Sequence entryAction = (Sequence) _s.getEntryAction(); ScheduleTimeEvent ste = (ScheduleTimeEvent) entryAction.getSteps().get(0); assertSame(te, ste.getTimeEvent()); PrimitiveValueExpression value = (PrimitiveValueExpression) ste.getTimeValue(); assertIntLiteral(2, value.getValue()); assertNotNull(_s.getExitAction()); Sequence exitAction = (Sequence) _s.getExitAction(); UnscheduleTimeEvent ute = (UnscheduleTimeEvent) exitAction.getSteps().get(0); assertSame(te, ute.getTimeEvent()); }