summaryrefslogtreecommitdiffstats
path: root/test/w3c/prolog/test579.scxml
blob: 851b1039bb383fec31a0432f42aacf7fdb0ffdfc (plain)
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
<?xml version="1.0" encoding="UTF-8"?>
<!-- test that default history content is executed correctly.   The Process MUST execute any executable content in the transition after the parent state's onentry handlers, and, in the case where the history pseudo-state is the target of an <initial> transition, 
the executable content inside the <initial> transition.  However the Processor MUST
execute this content only if there is no stored history.  Once the history state's
parent state has been visited and exited, the default history content must not be executed -->
<scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" initial="s0" datamodel="prolog">
  <state id="s0">
    <datamodel>
      <data id="var1" expr="0"/>
    </datamodel>
    <initial>
      <transition target="sh1">
        <raise event="event2"/>
      </transition>
    </initial>
    <onentry>
      <send delayexpr="'1s'" event="timeout"/>
      <raise event="event1"/>
    </onentry>
    <onexit>
      <assign location="var1(Y)" expr="var1(X), Y is X + 1, retractall(var1(_))"/>
    </onexit>
    <history id="sh1">
      <transition target="s01">
        <raise event="event3"/>
      </transition>
    </history>
    <state id="s01">
      <transition event="event1" target="s02"/>
      <transition event="*" target="fail"/>
    </state>
    <state id="s02">
      <transition event="event2" target="s03"/>
      <transition event="*" target="fail"/>
    </state>
    <state id="s03">
      <transition cond="var1==0" event="event3" target="s0"/>
      <transition cond="var1==1" event="event1" target="s2"/>
      <transition event="*" target="fail"/>
    </state>
  </state>
  <state id="s2">
    <transition event="event2" target="s3"/>
    <transition event="*" target="fail"/>
  </state>
  <state id="s3">
    <transition event="event3" target="fail"/>
    <transition event="timeout" target="pass"/>
  </state>
  <final id="pass">
    <onentry>
      <log label="Outcome" expr="'pass'"/>
    </onentry>
  </final>
  <final id="fail">
    <onentry>
      <log label="Outcome" expr="'fail'"/>
    </onentry>
  </final>
</scxml>