test457.txml 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- test that an the legal iterable collections are arrays, namely objects that satisfy instanceof(Array) in ECMAScript.
  3. the legal values for the 'item' attribute on foreach are legal ECMAScript variable names.. -->
  4. <scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="ecmascript" version="1.0">
  5. <datamodel>
  6. <data id="Var1" expr="0"/>
  7. <data id="Var2"/>
  8. <data id="Var3"/>
  9. <data id="Var4" expr="7"/>
  10. <data id="Var5" expr="[1,2,3]"/>
  11. <data id="Var6"/>
  12. </datamodel>
  13. <state id="s0">
  14. <onentry>
  15. <!-- invalid array, legal item -->
  16. <foreach item="Var2" index="Var3" array="Var4">
  17. <assign location="Var1" expr="Var1 + 1"/>
  18. </foreach>
  19. <raise event="foo"/>
  20. </onentry>
  21. <transition event="error.execution" target="s1"/>
  22. <transition event="*" target="fail"/>
  23. </state>
  24. <state id="s1">
  25. <onentry>
  26. <!-- illegal item, legal array -->
  27. <foreach item="'continue'" index="Var3" array="Var5">
  28. <assign location="Var1" expr="Var1 + 1"/>
  29. </foreach>
  30. <raise event="bar"/>
  31. </onentry>
  32. <transition event="error.execution" target="s2"/>
  33. <transition event="bar" target="fail"/>
  34. </state>
  35. <state id="s2">
  36. <!-- check that var1 has its original value (so executable content never got executed -->
  37. <transition cond="Var1==0" target="s3"/>
  38. <transition target="fail"/>
  39. </state>
  40. <!-- finally check that a legal array works properly -->
  41. <state id="s3">
  42. <onentry>
  43. <assign location="Var6" expr="0"/>
  44. <foreach item="Var2" array="Var5">
  45. <assign location="Var6" expr="Var6 + Var2"/>
  46. </foreach>
  47. </onentry>
  48. <transition cond="Var6==6" target="pass"/>
  49. <transition target="fail"/>
  50. </state>
  51. <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final>
  52. <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final>
  53. </scxml>