1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
<?xml version="1.0" encoding="UTF-8"?>
<!-- Test that at the end of a macrostep, the processor executes all invokes in states
that have been entered and not exited during the step. (The invokes are supposed to be executed
in document order, but we can test that since each invocation is separate and they may take
different amounts to time to start up.) In this case, there are three invoke statements,
in states s1, s11 and s12. Each invoked process returns an event named after its parent state.
The invokes in s1 and s12 should execute, but not the one
in s11. So we should receive invokeS1, invokeS12, but not invokeS12. Furthermore, when the timeout fires, var1 should equal 2.-->
<scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" initial="s1" datamodel="promela">
<datamodel>
<data id="Var1" type="int" expr="0"/>
</datamodel>
<state id="s1" initial="s11">
<onentry>
<send event="timeout" delayexpr="'2s'"/>
</onentry>
<transition event="invokeS1 invokeS12">
<assign xmlns:scxml="http://www.w3.org/2005/07/scxml" location="Var1" expr="Var1 + 1"/>
</transition>
<transition event="invokeS11" target="fail"/>
<transition event="timeout" cond="Var1==2" target="pass"/>
<transition event="timeout" target="fail"/>
<invoke>
<content>
<!-- when invoked, send 'foo' to parent, then terminate. -->
<scxml initial="sub0" version="1.0" datamodel="promela">
<state id="sub0">
<onentry>
<send target="#_parent" event="invokeS1"/>
</onentry>
<transition target="subFinal0"/>
</state>
<final id="subFinal0"/>
</scxml>
</content>
</invoke>
<state id="s11">
<invoke>
<content>
<!-- when invoked, send 'foo' to parent, then terminate. -->
<scxml initial="sub1" version="1.0" datamodel="promela">
<state id="sub1">
<onentry>
<send target="#_parent" event="invokeS11"/>
</onentry>
<transition target="subFinal1"/>
</state>
<final id="subFinal1"/>
</scxml>
</content>
</invoke>
<transition target="s12"/>
</state>
<state id="s12">
<invoke>
<content>
<!-- when invoked, send 'foo' to parent, then terminate. -->
<scxml initial="sub2" version="1.0" datamodel="promela">
<state id="sub2">
<onentry>
<send target="#_parent" event="invokeS12"/>
</onentry>
<transition target="subFinal2"/>
</state>
<final id="subFinal2"/>
</scxml>
</content>
</invoke>
</state>
</state>
<final xmlns:scxml="http://www.w3.org/2005/07/scxml" id="pass">
<onentry>
<log label="Outcome" expr="'pass'"/>
</onentry>
</final>
<final xmlns:scxml="http://www.w3.org/2005/07/scxml" id="fail">
<onentry>
<log label="Outcome" expr="'fail'"/>
</onentry>
</final>
</scxml>
|