diff options
author | Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de> | 2014-04-22 14:02:03 (GMT) |
---|---|---|
committer | Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de> | 2014-04-22 14:02:03 (GMT) |
commit | 1fb6bcf30f954e426f2d3002d14887574fb941dd (patch) | |
tree | 08cff7f2b879c50efe79e3c04d255075522af862 /test/w3c | |
parent | 71c334bf4e35559496feac3f3cf00b72ceb88812 (diff) | |
download | uscxml-1fb6bcf30f954e426f2d3002d14887574fb941dd.zip uscxml-1fb6bcf30f954e426f2d3002d14887574fb941dd.tar.gz uscxml-1fb6bcf30f954e426f2d3002d14887574fb941dd.tar.bz2 |
Major refactoring
- Moved tests
- Changes to promela datamodel
- Implemented Trie
Diffstat (limited to 'test/w3c')
713 files changed, 23476 insertions, 0 deletions
diff --git a/test/w3c/confEcma.xsl b/test/w3c/confEcma.xsl new file mode 100644 index 0000000..61d48c6 --- /dev/null +++ b/test/w3c/confEcma.xsl @@ -0,0 +1,720 @@ +<?xml version="1.0"?> +<!-- Copyright 1998-2003 W3C (MIT, ERCIM, Keio), All Rights Reserved. See http://www.w3.org/Consortium/Legal/. --> +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" + version="2.0"> + + + + +<!-- Copy everything that doesn't match other rules --> +<xsl:template match="/ | @* | node()"> + <xsl:copy> + <xsl:apply-templates select="@* | node()"/> + </xsl:copy> +</xsl:template> + +<!-- Success criteria --> + +<xsl:template match="//@conf:targetpass"> + <xsl:attribute name="target">pass</xsl:attribute> +</xsl:template> + +<xsl:template match="conf:pass"> + <final xmlns="http://www.w3.org/2005/07/scxml" id="pass"> + <onentry> + <log label="Outcome" expr="'pass'"/> + </onentry> + </final> +</xsl:template> + +<!-- Failure criteria --> + +<xsl:template match="//@conf:targetfail"> + <xsl:attribute name="target">fail</xsl:attribute> +</xsl:template> + +<xsl:template match="conf:fail"> + <final xmlns="http://www.w3.org/2005/07/scxml" id="fail"> + <onentry> + <log label="Outcome" expr="'fail'"/> + </onentry> +</final> +</xsl:template> + +<!-- datamodel --> +<xsl:template match="//@conf:datamodel"> + <xsl:attribute name="datamodel">ecmascript</xsl:attribute> +</xsl:template> + + +<!-- creates id for <data> element, etc. --> +<xsl:template match="//@conf:id"> + <xsl:attribute name="id">Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + + +<!-- creates name for <param>, etc. --> +<xsl:template match="//@conf:name"> + <xsl:attribute name="name">Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + + +<!-- creates location for <assign>, etc. --> +<xsl:template match="//@conf:location"> + <xsl:attribute name="location">Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- uses system var as location for <assign>, etc. --> +<xsl:template match="//@conf:systemVarLocation"> + <xsl:attribute name="location"><xsl:value-of select="." /></xsl:attribute> +</xsl:template> + + + + +<!-- expr is evaluated --> +<xsl:template match="//@conf:expr"> + <xsl:attribute name="expr"><xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- targetexpr is the corresponding ID --> +<xsl:template match="//@conf:targetVar"> + <xsl:attribute name="targetexpr">Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- expr is quoted --> +<xsl:template match="//@conf:quoteExpr"> + <xsl:attribute name="expr">'<xsl:value-of select="." />'</xsl:attribute> +</xsl:template> + +<!-- an expr that is the value of a variable --> +<xsl:template match="//@conf:varExpr"> + <xsl:attribute name="expr">Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- in EcmaScript, this is the same as varExpr --> +<xsl:template match="//@conf:varChildExpr"> + <xsl:attribute name="expr">Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- an expr that is the value of a system variable --> +<xsl:template match="//@conf:systemVarExpr"> + <xsl:attribute name="expr"><xsl:value-of select="." /></xsl:attribute> +</xsl:template> + + +<!-- an expr that is the value of a non-existent substructure of a variable --> +<xsl:template match="//@conf:varNonexistentStruct"> + <xsl:attribute name="expr">Var<xsl:value-of select="." />.bar</xsl:attribute> +</xsl:template> + + +<!-- this should return a value that cannot be assigned to a var. --> +<xsl:template match="//@conf:illegalExpr"> + <xsl:attribute name="expr">return</xsl:attribute> +</xsl:template> + +<!-- this should add 1 to the value of the specified variable --> +<xsl:template match="conf:incrementID"> + <assign xmlns="http://www.w3.org/2005/07/scxml"> + <xsl:attribute name="location">Var<xsl:value-of select="@id"/></xsl:attribute> + <xsl:attribute name="expr">Var<xsl:value-of select="@id"/> + 1</xsl:attribute> + </assign> + </xsl:template> + +<!-- this should concatenate the value of the id2 to id1 and assign the result to id1 --> +<xsl:template match="conf:concatVars"> + <assign xmlns="http://www.w3.org/2005/07/scxml"> + <xsl:attribute name="location">Var<xsl:value-of select="@id1"/></xsl:attribute> + <xsl:attribute name="expr">Var<xsl:value-of select="@id1"/> + Var<xsl:value-of select="@id2"/></xsl:attribute> + </assign> + </xsl:template> + +<!-- assigns the sum of the values of two vars to thefirst var--> +<xsl:template match="//conf:sumVars"> + <assign xmlns="http://www.w3.org/2005/07/scxml"> +<xsl:attribute name="location">Var<xsl:value-of select="@id1"/></xsl:attribute> +<xsl:attribute name="expr">Var<xsl:value-of select="@id1"/> + Var<xsl:value-of select="@id2"/></xsl:attribute> + </assign> + </xsl:template> + +<!-- this should return an illegal target for <send> causing a send error to be raised --> +<xsl:template match="//@conf:illegalTarget"> + <xsl:attribute name="target">baz</xsl:attribute> +</xsl:template> + +<!-- this returns an legal, but unreachable, target for <send> causing a send error to be raised --> +<xsl:template match="//@conf:unreachableTarget"> + <xsl:attribute name="target">#_scxml_foo</xsl:attribute> +</xsl:template> + +<!-- this produces illegal content for <send> causing the message to be rejected --> +<xsl:template match="//conf:illegalContent"> + <content xmlns="http://www.w3.org/2005/07/scxml"> xyz </content> +</xsl:template> + +<!-- a content element whose value is the string 'foo' --> +<xsl:template match="//conf:contentFoo"> + <content xmlns="http://www.w3.org/2005/07/scxml">foo</content> +</xsl:template> + +<!-- this returns something that is guaranteed not to be the ID of the current session --> +<xsl:template match="//@conf:invalidSessionID"> + <xsl:attribute name="expr">27</xsl:attribute> +</xsl:template> + +<!-- this returns something that is guaranteed not to be a valid event I/O processor --> +<xsl:template match="//@conf:invalidSendType"> + <xsl:attribute name="type">27</xsl:attribute> +</xsl:template> + +<!-- same value in an expr --> +<xsl:template match="//@conf:invalidSendTypeExpr"> + <xsl:attribute name="expr">27</xsl:attribute> +</xsl:template> + +<!-- exprs that return the value of the event fields --> + +<xsl:template match="//@conf:eventName"> + <xsl:attribute name="expr">_event.name</xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:eventType"> + <xsl:attribute name="expr">_event.type</xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:eventSendid"> + <xsl:attribute name="expr">_event.sendid</xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:eventField"> + <xsl:attribute name="expr">_event.<xsl:value-of select="."/></xsl:attribute> +</xsl:template> + +<!-- returns the raw message structure as a string --> +<xsl:template match="//@conf:eventRaw"> + <xsl:attribute name="expr">_event.raw</xsl:attribute> +</xsl:template> + + +<!-- returns the value of the specified item in _event.data --> +<xsl:template match="//@conf:eventDataFieldValue"> + <xsl:attribute name="expr">_event.data.<xsl:value-of select="."/></xsl:attribute> +</xsl:template> + +<!-- returns the value of a KVP specified by <param> from _event.data --> +<xsl:template match="//@conf:eventDataParamValue"> + <xsl:attribute name="expr">_event.data.<xsl:value-of select="."/></xsl:attribute> +</xsl:template> +<!-- returns the value of a KVP specified by <param> from _event.data --> +<xsl:template match="//@conf:eventDataNamelistValue"> + <xsl:attribute name="expr">_event.data.<xsl:value-of select="."/></xsl:attribute> +</xsl:template> + +<!-- returns the location of the scxml event i/o processor --> +<xsl:template match="//@conf:scxmlEventIOLocation"> + <xsl:attribute name="expr">_ioprocessors['http://www.w3.org/TR/scxml/#SCXMLEventProcessor'].location</xsl:attribute> +</xsl:template> + +<!-- templates for the expr versions of the send attributes --> + +<!-- eventexpr takes the value of the specified variable --> +<xsl:template match="//@conf:eventExpr"> + <xsl:attribute name="eventexpr">Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- targetexpr takes the value of the specified variable --> +<xsl:template match="//@conf:targetExpr"> + <xsl:attribute name="targetexpr">Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- typeexpr takes the value of the specified variable --> +<xsl:template match="//@conf:typeExpr"> + <xsl:attribute name="typeexpr">Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- delayexpr takes the value of the specified variable --> +<xsl:template match="//@conf:delayExpr"> + <xsl:attribute name="delayexpr">Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- the specified variable is used as idlocation --> +<xsl:template match="//@conf:idlocation"> + <xsl:attribute name="idlocation">Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- the specified variable is used as sendidexpr --> +<xsl:template match="//@conf:sendIDExpr"> + <xsl:attribute name="sendidexpr">Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- the specified variable is used as srcexpr --> +<xsl:template match="//@conf:srcExpr"> + <xsl:attribute name="srcexpr">Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- the specified variable is used as namelist --> +<xsl:template match="//@conf:namelist"> + <xsl:attribute name="namelist">Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + + + +<!-- transition conditions --> +<!-- the value is evaluated --> +<xsl:template match="//@conf:idVal"> + <xsl:attribute name="cond"> + <xsl:analyze-string select="." + regex="([0-9]+)([=<>]=?)(.*)"> + <xsl:matching-substring>Var<xsl:value-of select="regex-group(1)"/> + <xsl:variable name="op"><xsl:value-of select="regex-group(2)"/></xsl:variable> + <xsl:choose> + <xsl:when test="$op='='">==</xsl:when> + <xsl:otherwise><xsl:value-of select="$op"/></xsl:otherwise> + </xsl:choose> + <xsl:value-of select="regex-group(3)"/> + </xsl:matching-substring> + + </xsl:analyze-string> + </xsl:attribute> +</xsl:template> +<!-- compare two variables --> +<xsl:template match="//@conf:varIdVal"> + <xsl:attribute name="cond"> + <xsl:analyze-string select="." + regex="([0-9]+)([=<>]=?)(.*)"> + <xsl:matching-substring>Var<xsl:value-of select="regex-group(1)"/> + <xsl:variable name="op"><xsl:value-of select="regex-group(2)"/></xsl:variable> + <xsl:choose> + <xsl:when test="$op='='">==</xsl:when> + <xsl:otherwise><xsl:value-of select="$op"/></xsl:otherwise> + </xsl:choose>Var<xsl:value-of select="regex-group(3)"/> + </xsl:matching-substring> + + </xsl:analyze-string> + </xsl:attribute> +</xsl:template> + + +<!-- test that given var whose value was passed in via namelist has specific value. The value expr is evaluated --> +<xsl:template match="//@conf:namelistIdVal"> + <xsl:attribute name="cond"> + <xsl:analyze-string select="." + regex="([0-9]+)([=<>]=?)(.*)"> + <xsl:matching-substring>Var<xsl:value-of select="regex-group(1)"/> + <xsl:variable name="op"><xsl:value-of select="regex-group(2)"/></xsl:variable> + <xsl:choose> + <xsl:when test="$op='='">===</xsl:when> + <xsl:otherwise><xsl:value-of select="$op"/></xsl:otherwise> + </xsl:choose> + <xsl:value-of select="regex-group(3)"/> + </xsl:matching-substring> + + </xsl:analyze-string> + </xsl:attribute> +</xsl:template> + +<!-- true if the two vars/ids have the same value --> +<xsl:template match="//@conf:VarEqVar"> + <xsl:attribute name="cond"> + <xsl:analyze-string select="." + regex="([0-9]+)(\W+)([0-9]+)"> + <xsl:matching-substring>Var<xsl:value-of select="regex-group(1)"/>===Var<xsl:value-of select="regex-group(3)"/> + </xsl:matching-substring> + </xsl:analyze-string> + </xsl:attribute> +</xsl:template> + +<!-- true if the two vars/ids have the same value, which is a structure, not atomic --> +<xsl:template match="//@conf:VarEqVarStruct"> + <xsl:attribute name="cond"> + <xsl:analyze-string select="." + regex="([0-9]+)(\W+)([0-9]+)"> + <xsl:matching-substring>Var<xsl:value-of select="regex-group(1)"/>==Var<xsl:value-of select="regex-group(3)"/> + </xsl:matching-substring> + </xsl:analyze-string> + </xsl:attribute> +</xsl:template> + +<!-- the value is quoted --> +<xsl:template match="//@conf:idQuoteVal"> + <xsl:attribute name="cond"> + <xsl:analyze-string select="." + regex="([0-9]+)([=<>]=?)(.*)"> +<xsl:matching-substring>Var<xsl:value-of select="regex-group(1)"/><xsl:variable name="op"><xsl:value-of select="regex-group(2)"/></xsl:variable> +<xsl:choose> +<xsl:when test="$op='='">==</xsl:when> +<xsl:otherwise><xsl:value-of select="$op"/></xsl:otherwise></xsl:choose>'<xsl:value-of select="regex-group(3)"/>'</xsl:matching-substring> +</xsl:analyze-string> +</xsl:attribute> +</xsl:template> + +<!-- test on the value of two vars --> +<xsl:template match="//@conf:compareIDVal"> + <xsl:attribute name="cond"> + <xsl:analyze-string select="." + regex="([0-9]+)([=<>]=?)([0-9+])"> + <xsl:matching-substring>Var<xsl:value-of select="regex-group(1)"/> + <xsl:variable name="op"><xsl:value-of select="regex-group(2)"/></xsl:variable> + <xsl:choose> + <xsl:when test="$op='='">=</xsl:when> + <xsl:otherwise><xsl:value-of select="$op"/></xsl:otherwise> + </xsl:choose>Var<xsl:value-of select="regex-group(3)"/> + </xsl:matching-substring> + </xsl:analyze-string> + </xsl:attribute> +</xsl:template> + + +<!-- test that the event's name fieldhas the value specified --> +<xsl:template match="//@conf:eventNameVal"> + <xsl:attribute name="cond">_event.name == <xsl:text>'</xsl:text><xsl:value-of select="."/><xsl:text>'</xsl:text> + </xsl:attribute> + +</xsl:template> + +<xsl:template match="//@conf:eventvarVal"> + <xsl:attribute name="cond"> + <xsl:analyze-string select="." + regex="([0-9]+)([=<>]=?)(.*)"> + <xsl:matching-substring>_event.data['Var<xsl:value-of select="regex-group(1)"/><xsl:text>']</xsl:text> + <xsl:variable name="op"><xsl:value-of select="regex-group(2)"/></xsl:variable> + <xsl:choose> + <xsl:when test="$op='='">==</xsl:when> + <xsl:otherwise><xsl:value-of select="$op"/></xsl:otherwise> + </xsl:choose> + <xsl:value-of select="regex-group(3)"/> + </xsl:matching-substring> + + </xsl:analyze-string> + </xsl:attribute> + +</xsl:template> + + + +<!-- return true if variable matches value of system var (var number is first arg, system var name +is the second argument --> +<xsl:template match="//@conf:idSystemVarVal"> + <xsl:attribute name="cond"> + <xsl:analyze-string select="." + regex="([0-9]+)([=<>]=?)(.*)"> +<xsl:matching-substring>Var<xsl:value-of select="regex-group(1)"/><xsl:variable name="op"><xsl:value-of select="regex-group(2)"/></xsl:variable> +<xsl:choose> +<xsl:when test="$op='='">==</xsl:when> +<xsl:otherwise><xsl:value-of select="$op"/></xsl:otherwise></xsl:choose><xsl:value-of select="regex-group(3)"/></xsl:matching-substring> +</xsl:analyze-string> +</xsl:attribute> +</xsl:template> + +<!-- return true if event.data field matches the specified value --> + +<xsl:template match="//@conf:eventdataVal"> + <xsl:attribute name="cond">_event.data === '<xsl:value-of select="."/>'</xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:emptyEventData"> + <xsl:attribute name="cond">typeof _event.data === 'undefined'</xsl:attribute> +</xsl:template> + +<!-- return true if the _name system var has the specified quoted value --> +<xsl:template match="//@conf:nameVarVal"> + <xsl:attribute name="cond">_name === '<xsl:value-of select="."/>'</xsl:attribute> +</xsl:template> + +<!-- return true if first var's value is a prefix of the second var's value. Input has form "n m" where n and m are ints.--> +<xsl:template match="//@conf:varPrefix"> + <xsl:attribute name="cond"> + <xsl:analyze-string select="." + regex="(\w+)(\W)(\w+)"> + <xsl:matching-substring> + <!-- the underscore.string.startswith function compressed into one line below: + <xsl:text>(function(str, starts){ + if (starts === '') return true; + if (str == null || starts == null) return false; + str = String(str); starts = String(starts); + return str.length >= starts.length && str.slice(0, starts.length) === starts; + })(</xsl:text>Var<xsl:value-of select="regex-group(3)"/>, Var<xsl:value-of select="regex-group(1)"/><xsl:text>)</xsl:text> --> +<xsl:text>(function(str, starts){if (starts === '') return true;if (str == null || starts == null) return false;str = String(str); starts = String(starts);return str.length >= starts.length && str.slice(0, starts.length) === starts;})(</xsl:text>Var<xsl:value-of select="regex-group(3)"/>, Var<xsl:value-of select="regex-group(1)"/><xsl:text>)</xsl:text> + </xsl:matching-substring> + </xsl:analyze-string> + </xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:inState"> + <xsl:attribute name="cond">In('<xsl:value-of select="."/>')</xsl:attribute> +</xsl:template> + +<!-- returns a value that cannot be converted into a Boolean --> +<xsl:template match="//@conf:nonBoolean"> + <xsl:attribute name="cond">return</xsl:attribute> +</xsl:template> + +<!-- true if id has a value --> +<xsl:template match="//@conf:isBound"> + <xsl:attribute name="cond">Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- return true if specified var has been created but is not bound --> +<xsl:template match="//@conf:unboundVar"> + <xsl:attribute name="cond">typeof Var<xsl:value-of select="." /> === 'undefined' </xsl:attribute> +</xsl:template> + +<!-- true if system var has a value --> +<xsl:template match="//@conf:systemVarIsBound"> + <xsl:attribute name="cond"><xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- true if id does not have a value --> +<xsl:template match="//@conf:noValue"> + <xsl:attribute name="cond">!Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- always returns true --> +<xsl:template match="//@conf:true"> + <xsl:attribute name="cond">true</xsl:attribute> +</xsl:template> + +<!-- always returns false --> +<xsl:template match="//@conf:false"> + <xsl:attribute name="cond">false</xsl:attribute> +</xsl:template> + +<!-- returns true if all the required fields of _event are bound --> +<xsl:template match="//@conf:eventFieldsAreBound"> + <xsl:attribute name="cond">'name' in _event && 'type' in _event && 'sendid' in _event && 'origin' in _event && 'invokeid' && 'data' in _event</xsl:attribute> +</xsl:template> + +<!-- returns true if _event.data contains the specified item --> +<xsl:template match="//@conf:eventDataHasField"> + <xsl:attribute name="cond"><xsl:value-of select="."/> in _event.data</xsl:attribute> +</xsl:template> + +<!-- returns true if specified field of _event has no value --> +<xsl:template match="//@conf:eventFieldHasNoValue"> + <xsl:attribute name="cond">typeof _event.<xsl:value-of select="." /> === 'undefined' </xsl:attribute> +</xsl:template> + +<!-- true if the language of _event matches the processor's datamodel --> +<xsl:template match="//@conf:eventLanguageMatchesDatamodel"> + <xsl:attribute name="cond"> _event.language == 'ecmascript'</xsl:attribute> +</xsl:template> + +<!-- true if _event was delivered on the specified i/o processor --> +<xsl:template match="//@conf:originTypeEq"> + <xsl:attribute name="cond"> _event.origintype == '<xsl:value-of select="."/>'</xsl:attribute> +</xsl:template> + + + + +<!-- scripting --> + +<xsl:template match="conf:script"> + <script xmlns="http://www.w3.org/2005/07/scxml">var Var1 = 1</script> +</xsl:template> + + +<xsl:template match="//@conf:scriptGoodSrc"> + <xsl:attribute name="src">D:\W3C\SCXMLTests\test300.js</xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:scriptBadSrc"> + <xsl:attribute name="src">D:\foo</xsl:attribute> +</xsl:template> + +<!-- sends an event back to the sender of the current event --> +<xsl:template match="conf:sendToSender"> + <send xmlns="http://www.w3.org/2005/07/scxml"> + <xsl:attribute name="event"><xsl:value-of select="@name" /></xsl:attribute> + <xsl:attribute name="targetexpr">_event.origin</xsl:attribute> + <xsl:attribute name="typeexpr">_event.origintype</xsl:attribute> + </send> +</xsl:template> + +<!-- foreach --> +<!-- this should produce an array containing 1 2 3 in that order --> +<xsl:template match="//conf:array123">[1,2,3]</xsl:template> + +<!-- this uses the value of the indicated variable as the 'array' attribute --> +<xsl:template match="//@conf:arrayVar"> + <xsl:attribute name="array">Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- in Python, this is the same as arrayVar --> +<xsl:template match="//@conf:arrayTextVar"> + <xsl:attribute name="array">Var<xsl:value-of select="."/></xsl:attribute> +</xsl:template> + + +<!-- this should produce expr that yields an array containing 1 2 3 in that order --> +<xsl:template match="//@conf:arrayExpr123"> + <xsl:attribute name="expr">1, 2, 3]</xsl:attribute> +</xsl:template> + +<!-- this should yield an expr that evaluates to something that is not a valid array --> +<xsl:template match="//@conf:illegalArray"> + <xsl:attribute name="expr">7</xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:item"> + <xsl:attribute name="item">Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- this should return something that cannot be an variable name --> +<xsl:template match="//@conf:illegalItem"> + <xsl:attribute name="item">'continue'</xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:index"> + <xsl:attribute name="index">Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- this should add an extra item onto the end of the specified array, which +is of the same type as array123 --> +<xsl:template match="conf:extendArray"> + <assign xmlns="http://www.w3.org/2005/07/scxml"> + <xsl:attribute name="location">Var<xsl:value-of select="@id"/></xsl:attribute> + <xsl:attribute name="expr">[].concat(Var<xsl:value-of select="@id"/>, [4])</xsl:attribute> + </assign> + </xsl:template> + +<!-- this should create a multidimensional array all of whose cells are set to the specified value. Not +currently used for any tests --> +<xsl:template match="//@conf:multiDimensionalArrayExpr"> + <xsl:attribute name="expr">[[<xsl:value-of select="."/>,<xsl:value-of select="."/>],[<xsl:value-of select="."/>,<xsl:value-of select="."/>]]</xsl:attribute> +</xsl:template> + + +<!-- this should create a <foreach> statement that increments the values of the specified array. Not +currently used for any tests --> +<xsl:template match="conf:incrementArray"> + <xsl:variable name="targetArray">Var<xsl:value-of select="@id"/></xsl:variable> +<foreach xmlns="http://www.w3.org/2005/07/scxml"> + <xsl:attribute name="item">item</xsl:attribute> + <xsl:attribute name="index">index</xsl:attribute> + <xsl:attribute name="array"><xsl:value-of select="$targetArray"/></xsl:attribute> +<script> +<xsl:value-of select="$targetArray"/>[index][0] = <xsl:value-of select="$targetArray"/>[index][0] + 1 +<xsl:value-of select="$targetArray"/>[index][1] = <xsl:value-of select="$targetArray"/>[index][1] + 1 +</script> +</foreach> +</xsl:template> +<!-- this should return true iff each cell in the specified multidimensional array has the specified value. Not +currently used for any tests --> +<xsl:template match="//@conf:arrayVal"> + <xsl:attribute name="cond"> + <xsl:analyze-string select="." + regex="([0-9]+)(\W+)(.*)"> + <xsl:matching-substring> + <xsl:variable name="targetArray">Var<xsl:value-of select="regex-group(1)"/></xsl:variable> + <xsl:variable name="value"><xsl:value-of select="regex-group(3)"/></xsl:variable> +<xsl:value-of select="$targetArray"/>[0][0]== <xsl:value-of select="$value"/> && <xsl:value-of select="$targetArray"/>[0][1] == <xsl:value-of select="$value"/> && <xsl:value-of select="$targetArray"/>[1][0] == <xsl:value-of select="$value"/> && <xsl:value-of select="$targetArray"/>[1][1] == <xsl:value-of select="$value"/> +</xsl:matching-substring> + + </xsl:analyze-string> + </xsl:attribute> +</xsl:template> + +<!-- SITE SPECIFIC INFORMATION FOR BASIC HTTP EVENT I/O PROCESSOR +This template must be edited by each site that expects to test the Basic HTTP Event I/O +processor. Other templates for the Basic HTTP Event I/O tests are below it --> + +<xsl:template match="//@conf:testOnServer"> + <xsl:attribute name="target">SITE_SPECIFIC_ADDRESS<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- use this template to import or set up anything you need for the code in +the basic http tests. In the case of python, we have to import the regexp module.--> +<xsl:template match="conf:setUpHTTPTest"> +<!-- <script xmlns="http://www.w3.org/2005/07/scxml">import re</script> --> +</xsl:template> + +<!-- return an expression evaluating to the basic http access URI --> +<xsl:template match="//@conf:basicHTTPAccessURI"> + <xsl:attribute name="expr">_ioprocessors['basichttp']['location']</xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:basicHTTPAccessURITarget"> + <xsl:attribute name="targetexpr">_ioprocessors['basichttp']['location']</xsl:attribute> +</xsl:template> + +<!-- generate an cond that evaluates to true if POST was used to send the message --> +<xsl:template match="//@conf:methodIsPost"> + <xsl:attribute name="cond">_event.raw.search('POST') !== -1</xsl:attribute> +</xsl:template> + +<!-- generate a namelist attribute containing all the ids listed in the attribute's value --> +<xsl:template match="//@conf:multipleNamelist"> + <xsl:attribute name="namelist"> + <xsl:analyze-string select="." regex="([0-9]+)"> +<xsl:matching-substring>Var<xsl:value-of select="regex-group(1)"/><xsl:text>
</xsl:text></xsl:matching-substring> +</xsl:analyze-string> +</xsl:attribute> +</xsl:template> + +<!-- generate a cond that evaluates to true if the event is external --> +<xsl:template match="//@conf:eventIsExternal"> + <xsl:attribute name="cond">_event.type === 'external'</xsl:attribute> +</xsl:template> + +<!-- returns true if _event/raw contains the var with the specified value --> +<xsl:template match="//@conf:eventIdParamHasValue"> + <xsl:attribute name="cond"><xsl:analyze-string select="." regex="(\S+)(\s+)(\S+)"> +<xsl:matching-substring>_event.raw.search(/Var<xsl:value-of select="regex-group(1)"/>=<xsl:value-of select="regex-group(3)"/>/) !== -1</xsl:matching-substring></xsl:analyze-string></xsl:attribute> +</xsl:template> + +<!-- returns true if _event/raw contains the param with the specified value --> +<xsl:template match="//@conf:eventNamedParamHasValue"> + <xsl:attribute name="cond"><xsl:analyze-string select="." regex="(\S+)(\s+)(\S+)"> + <xsl:matching-substring>_event.raw.search(/Var<xsl:value-of select="regex-group(1)"/>=<xsl:value-of select="regex-group(3)"/>/) !== -1</xsl:matching-substring></xsl:analyze-string></xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:messageBodyEquals"> + <xsl:attribute name="cond">_event.raw.search(/<xsl:value-of select="."/>/) !== -1</xsl:attribute> +</xsl:template> + + +<!-- the following templates produce an expr that extracts the relevant item from _event.raw --> +<xsl:template match="//@conf:getNamedParamVal"> + <xsl:attribute name="expr">_event.raw.match(/<xsl:value-of select="."/>=(\S+)$/)[1]</xsl:attribute> +</xsl:template> + +<!-- if input is 1, find param Var1, etc. --> +<xsl:template match="//@conf:getIDParamVal"> + <xsl:attribute name="expr">_event.raw.match(/Var<xsl:value-of select="."/>=(\S+)$/)[1]</xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:getNthParamName"> + <xsl:attribute name="expr">txt.match(/\n\n(.*)/)[2].split('&')[<xsl:value-of select="."/>].split('=')[0]</xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:getNthParamVal"> + <xsl:attribute name="expr">txt.match(/\n\n(.*)/)[2].split('&')[<xsl:value-of select="."/>].split('=')[1]</xsl:attribute> +</xsl:template> + +<!-- this should produce an 'expr' that evaluates to a valid SCXML Message structure --> +<xsl:template match="//@conf:scxmlEventExpr"> + <xsl:attribute name="expr">'<message source="' + _ioprocessors['basichttp'] + '"' ++ 'xmlns:scxml="http://www.w3.org/2005/07/scxml" version="1.0" xmlns:xsi=:http://www.w3.org/2001/XMLSchema-instance" +xsi:schemaLocation="http://www.w3.org/2005/07/scxml scxml-message.xsd" sourcetype=:scxml"' ++' 'name="name"' + '"' + <xsl:value-of select="."/> + '"' + />'</xsl:attribute> + </xsl:template> + +<!-- this should produce a <content> tag containing material to use as the message body. This +content must include the address, so the far side can send a response back to us --> +<xsl:template match="conf:msgContent"> +<content xmlns="http://www.w3.org/2005/07/scxml"> + <xsl:attribute name="expr">'address=' + _ioprocessors['basichttp'] + "'"</xsl:attribute> + </content> +</xsl:template> + +<!-- this should produce a test on _event.raw that checks whether the body matches the +expression defined in the previous template. This may need to be tightened up because +it allows anything after the = --> +<xsl:template match="//@conf:msgIsBody"> + <xsl:attribute name="cond">_event.raw.match(/\n\naddress=(.*)$/)</xsl:attribute> +</xsl:template> +</xsl:stylesheet>
\ No newline at end of file diff --git a/test/w3c/confXPath.xsl b/test/w3c/confXPath.xsl new file mode 100644 index 0000000..514752a --- /dev/null +++ b/test/w3c/confXPath.xsl @@ -0,0 +1,630 @@ +<?xml version="1.0"?> +<!-- Copyright 1998-2003 W3C (MIT, ERCIM, Keio), All Rights Reserved. See http://www.w3.org/Consortium/Legal/. --> +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" + version="2.0"> + + + + +<!-- Copy everything that doesn't match other rules --> +<xsl:template match="/ | @* | node()"> + <xsl:copy> + <xsl:apply-templates select="@* | node()"/> + </xsl:copy> +</xsl:template> + +<!-- Success criteria --> + +<xsl:template match="//@conf:targetpass"> + <xsl:attribute name="target">pass</xsl:attribute> +</xsl:template> + +<xsl:template match="conf:pass"> + <final xmlns="http://www.w3.org/2005/07/scxml" id="pass"> + <onentry> + <log label="Outcome" expr="'pass'"/> + </onentry> + </final> +</xsl:template> + +<!-- Failure criteria --> + +<xsl:template match="//@conf:targetfail"> + <xsl:attribute name="target">fail</xsl:attribute> +</xsl:template> + +<xsl:template match="conf:fail"> + <final xmlns="http://www.w3.org/2005/07/scxml" id="fail"> + <onentry> + <log label="Outcome" expr="'fail'"/> + </onentry> +</final> +</xsl:template> + +<!-- datamodel --> +<xsl:template match="//@conf:datamodel"> + <xsl:attribute name="datamodel">xpath</xsl:attribute> +</xsl:template> + + +<!-- creates id for <data> element, etc. --> +<xsl:template match="//@conf:id"> + <xsl:attribute name="id">Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + + +<!-- creates name for <param>, etc. --> +<xsl:template match="//@conf:name"> + <xsl:attribute name="name">Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + + +<!-- creates location for <assign>, etc. --> +<xsl:template match="//@conf:location"> + <xsl:attribute name="location">$Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- uses system var as location for <assign>, etc. --> +<xsl:template match="//@conf:systemVarLocation"> + <xsl:attribute name="location">$<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:expr"> + <xsl:attribute name="expr"><xsl:value-of select="." /></xsl:attribute> +</xsl:template> + + +<!-- expr is quoted --> +<xsl:template match="//@conf:quoteExpr"> + <xsl:attribute name="expr">'<xsl:value-of select="." />'</xsl:attribute> +</xsl:template> + +<!-- targetexpr is the corresponding ID --> +<xsl:template match="//@conf:targetVar"> + <xsl:attribute name="targetexpr">$Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- an expr that yields the text child of a variable --> +<xsl:template match="//@conf:varExpr"> + <xsl:attribute name="expr">$Var<xsl:value-of select="." />/text()</xsl:attribute> +</xsl:template> + + + +<!-- an expr that yields the children of a variable --> +<xsl:template match="//@conf:varChildExpr"> + <xsl:attribute name="expr">$Var<xsl:value-of select="." />/*</xsl:attribute> +</xsl:template> + +<!-- an expr that is the value of a system variable --> +<xsl:template match="//@conf:systemVarExpr"> + <xsl:attribute name="expr">$<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + + +<!-- an expr that is the value of a non-existent substructure of a variable --> +<xsl:template match="//@conf:varNonexistentStruct"> + <xsl:attribute name="expr">$Var<xsl:value-of select="." />.bar</xsl:attribute> +</xsl:template> + + +<!-- this should return a value that cannot be assigned to a var. --> +<xsl:template match="//@conf:illegalExpr"> + <xsl:attribute name="expr">!1</xsl:attribute> +</xsl:template> + +<!-- this should return a simple scxml script that exits as soon as it's invoked. +We assume that this script won't undergo schema validation, so we keep it concise --> +<xsl:template match="//@conf:scxmlExpr"> + <xsl:attribute name="expr">string('<scxml><final/></scxml>')</xsl:attribute> +</xsl:template> + + +<!-- this should add 1 to the value of the specified variable --> +<xsl:template match="conf:incrementID"> + <assign xmlns="http://www.w3.org/2005/07/scxml"> + <xsl:attribute name="location">$Var<xsl:value-of select="@id"/></xsl:attribute> + <xsl:attribute name="expr">$Var<xsl:value-of select="@id"/> + 1</xsl:attribute> + </assign> + </xsl:template> + + <!-- this should concatenate the value of the id2 to id1 and assign the result to id1 --> +<xsl:template match="conf:concatVars"> + <assign xmlns="http://www.w3.org/2005/07/scxml"> + <xsl:attribute name="location">$Var<xsl:value-of select="@id1"/></xsl:attribute> + <xsl:attribute name="expr">concat($Var<xsl:value-of select="@id1"/>, $Var<xsl:value-of select="@id2"/>)</xsl:attribute> + </assign> + </xsl:template> + +<!-- assigns the sum of the values of two vars to thefirst var--> +<xsl:template match="//conf:sumVars"> + <assign xmlns="http://www.w3.org/2005/07/scxml"> +<xsl:attribute name="location">$Var<xsl:value-of select="@id1"/></xsl:attribute> +<xsl:attribute name="expr">$Var<xsl:value-of select="@id1"/>/text() + $Var<xsl:value-of select="@id2"/>/text()</xsl:attribute> + </assign> + </xsl:template> + +<!-- foreach --> +<!-- this should produce literal representation of an array containing 1 2 3 in that order --> +<xsl:template match="//conf:array123"> +<node xmlns="">1</node><node xmlns="">2</node><node xmlns="">3</node> +</xsl:template> + +<!-- this uses the children of the indicated variable as the 'array' attribute --> +<xsl:template match="//@conf:arrayVar"> + <xsl:attribute name="array">$Var<xsl:value-of select="."/>/*</xsl:attribute> +</xsl:template> + +<!-- this uses the text child of the indicated variable as the 'array' attribute --> +<xsl:template match="//@conf:arrayTextVar"> + <xsl:attribute name="array">$Var<xsl:value-of select="."/>/text()</xsl:attribute> +</xsl:template> + +<!-- this should yield an expr that evaluates to something that is not a valid array --> +<xsl:template match="//@conf:illegalArray"> + <xsl:attribute name="expr">(</xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:item"> + <xsl:attribute name="item">Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- this should return something that cannot be an variable name --> +<xsl:template match="//@conf:illegalItem"> + <xsl:attribute name="item">..</xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:index"> + <xsl:attribute name="index">Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- this should add items onto the end of the specified array, which +is of the same type as array123 --> +<xsl:template match="conf:extendArray"> + <assign xmlns="http://www.w3.org/2005/07/scxml"> + <xsl:attribute name="type">lastchild</xsl:attribute> + <xsl:attribute name="location">$Var<xsl:value-of select="@id"/></xsl:attribute> + <xsl:attribute name="expr">$Var<xsl:value-of select="@id"/>/*</xsl:attribute> + </assign> +</xsl:template> + +<xsl:template match="//conf:illegalContent"> + <content xmlns="http://www.w3.org/2005/07/scxml"> xyz </content> +</xsl:template> + +<!-- a content element whose value is the string 'foo' --> +<xsl:template match="//conf:contentFoo"> + <content xmlns="http://www.w3.org/2005/07/scxml">foo</content> +</xsl:template> + + + +<!-- this returns something that is guaranteed not to be the ID of the current session --> +<xsl:template match="//@conf:invalidSessionID"> + <xsl:attribute name="expr">27</xsl:attribute> +</xsl:template> + +<!-- this returns something that is guaranteed not to be a valid event I/O processor --> +<xsl:template match="//@conf:invalidSendType"> + <xsl:attribute name="type">27</xsl:attribute> +</xsl:template> + +<!-- same value in an expr --> +<xsl:template match="//@conf:invalidSendTypeExpr"> + <xsl:attribute name="expr">27</xsl:attribute> +</xsl:template> + +<!-- templates for the expr versions of the send attributes --> + +<!-- eventexpr takes the value of the specified variable --> +<xsl:template match="//@conf:eventExpr"> + <xsl:attribute name="eventexpr">$Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- targetexpr takes the value of the specified variable --> +<xsl:template match="//@conf:targetExpr"> + <xsl:attribute name="targetexpr">$Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- typeexpr takes the value of the specified variable --> +<xsl:template match="//@conf:typeExpr"> + <xsl:attribute name="typeexpr">$Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- delayexpr takes the value of the specified variable --> +<xsl:template match="//@conf:delayExpr"> + <xsl:attribute name="delayexpr">$Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- the specified variable is used as idlocation --> +<xsl:template match="//@conf:idlocation"> + <xsl:attribute name="idlocation">$Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- the specified variable is used as sendidexpr --> +<xsl:template match="//@conf:sendIDExpr"> + <xsl:attribute name="sendidexpr">$Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- the specified variable is used as srcexpr --> +<xsl:template match="//@conf:srcExpr"> + <xsl:attribute name="srcexpr">$Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- the specified variable is used as namelist --> +<xsl:template match="//@conf:namelist"> + <xsl:attribute name="namelist">$Var<xsl:value-of select="." /></xsl:attribute> +</xsl:template> + +<!-- exprs that return the value of the event fields --> + +<xsl:template match="//@conf:eventName"> + <xsl:attribute name="expr">$_event/name/text()</xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:eventType"> + <xsl:attribute name="expr">$_event/type/text()</xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:eventSendid"> + <xsl:attribute name="expr">$_event/sendid/text()</xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:eventField"> + <xsl:attribute name="expr">$_event/<xsl:value-of select="."/>/text()</xsl:attribute> +</xsl:template> + +<!-- returns the raw message structure as a string --> +<xsl:template match="//@conf:eventRaw"> + <xsl:attribute name="expr">$_event/raw/text()</xsl:attribute> +</xsl:template> + +<!-- returns the value of the specified item in _event.data --> +<xsl:template match="//@conf:eventDataFieldValue"> + <xsl:attribute name="expr">$_event/data/data[@id='<xsl:value-of select="."/>']/text()</xsl:attribute> +</xsl:template> + +<!-- returns the value of a KVP specified by <param> from _event.data --> +<xsl:template match="//@conf:eventDataParamValue"> + <xsl:attribute name="expr">$_event/data/data[@id='<xsl:value-of select="."/>']/text()</xsl:attribute> +</xsl:template> + +<!-- returns the value of a KVP specified by Namelist from _event.data --> +<xsl:template match="//@conf:eventDataNamelistValue"> + <xsl:attribute name="expr">$_event/data/data[@id='<xsl:value-of select="."/>']/data/text()</xsl:attribute> +</xsl:template> + +<!-- returns the location of the scxml event i/o processor --> +<xsl:template match="//@conf:scxmlEventIOLocation"> + <xsl:attribute name="expr">$_ioprocessors/processor[@name="http://www.w3.org/TR/scxml/#SCXMLProcessor"]/location/text()</xsl:attribute> +</xsl:template> + +<!-- to test the BasicHTTP Event I/O processor --> + + + +<!-- return an expression evaluating to the basic http access URI --> +<xsl:template match="//@conf:basicHTTPAccessURI"> + <xsl:attribute name="expr">_ioprocessors/processor[@name="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"]/location/text()</xsl:attribute> +</xsl:template> + +<!-- return a targetexpr evaluating to the basic http access URI --> +<xsl:template match="//@conf:basicHTTPAccessURITarget"> + <xsl:attribute name="targetexpr">$_ioprocessors/processor[@name="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"]/location/text()</xsl:attribute> +</xsl:template> + +<!-- generate an cond that evaluates to true if POST was used to send the message --> +<xsl:template match="//@conf:methodIsPost"> + <xsl:attribute name="cond">contains($_event/raw, 'POST')</xsl:attribute> +</xsl:template> + +<!-- generate a namelist attribute containing all the ids listed in the attribute's value --> +<xsl:template match="//@conf:multipleNamelist"> + <xsl:attribute name="namelist"> + <xsl:analyze-string select="." regex="([0-9]+)"> +<xsl:matching-substring>Var<xsl:value-of select="regex-group(1)"/><xsl:text>
</xsl:text></xsl:matching-substring> +</xsl:analyze-string> +</xsl:attribute> +</xsl:template> + +<!-- generate a cond that evaluates to true if the event is external --> +<xsl:template match="//@conf:eventIsExternal"> + <xsl:attribute name="cond">_event.type == 'external'</xsl:attribute> +</xsl:template> + + + +<!-- the following templates produce an expr that extracts the relevant item from _event.raw --> +<!-- returns true if _event/raw contains the var with the specified value --> +<xsl:template match="//@conf:eventIdParamHasValue"> + <xsl:attribute name="cond"><xsl:analyze-string select="." regex="([0-9]+)(\s+)(\S+)"> +<xsl:matching-substring>contains($_event/raw, 'Var<xsl:value-of select="regex-group(1)"/>=<xsl:value-of select="regex-group(3)"/>')</xsl:matching-substring></xsl:analyze-string></xsl:attribute> +</xsl:template> + +<!-- returns true if _event/raw contains the param with the specified value --> +<xsl:template match="//@conf:eventNamedParamHasValue"> + <xsl:attribute name="cond"><xsl:analyze-string select="." regex="([0-9]+)(\s+)(\S+)"> +<xsl:matching-substring>contains($_event/raw, '<xsl:value-of select="regex-group(1)"/>=<xsl:value-of select="regex-group(3)"/>')</xsl:matching-substring></xsl:analyze-string></xsl:attribute> +</xsl:template> + +<!-- Should return true if the body of _event.raw equals the specified value. This is too weak because +it tests only that the specified string is in _event.raw, not that it is the whole body. I don't +know if we can make this strong in XPath 1.0 --> +<xsl:template match="//@conf:messageBodyEquals"> + <xsl:attribute name="cond">contains($_event/raw, <xsl:value-of select="."/>)</xsl:attribute> +</xsl:template> + + +<!-- the following templates produce an expr that extracts the relevant item from _event.raw --> +<xsl:template match="//@conf:getNamedParamVal"> + <xsl:attribute name="expr">re.search('<xsl:value-of select="."/>=(\S+)$', _event.raw).groups()[0]</xsl:attribute> +</xsl:template> + +<!-- if input is 1, find param Var1, etc. --> +<xsl:template match="//@conf:getIDParamVal"> + <xsl:attribute name="expr">substring-before(substring-after('Var<xsl:value-of select="."/>=', $_event/raw), '&')</xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:getNthParamName"> + <xsl:attribute name="expr">re.search('\n\n(.*)', txt).group(1).split('&')[<xsl:value-of select="."/>].split('=')[0]</xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:getNthParamVal"> + <xsl:attribute name="expr">re.search('\n\n(.*)', txt).group(1).split('&')[<xsl:value-of select="."/>].split('=')[1]</xsl:attribute> +</xsl:template> + +<!-- transition conditions --> +<!-- test that given var has specific value. The value expr is evaluated --> +<xsl:template match="//@conf:idVal"> + <xsl:attribute name="cond"> + <xsl:analyze-string select="." + regex="([0-9]+)([=<>]=?)(.*)"> + <xsl:matching-substring>$Var<xsl:value-of select="regex-group(1)"/><xsl:text>/text() </xsl:text> + <xsl:variable name="op"><xsl:value-of select="regex-group(2)"/></xsl:variable> + <xsl:choose> + <xsl:when test="$op='='">=</xsl:when> + <xsl:otherwise><xsl:value-of select="$op"/></xsl:otherwise> + </xsl:choose> + <xsl:value-of select="regex-group(3)"/> + </xsl:matching-substring> + + </xsl:analyze-string> + </xsl:attribute> +</xsl:template> + +<!-- the value is quoted --> +<xsl:template match="//@conf:idQuoteVal"> + <xsl:attribute name="cond"> + <xsl:analyze-string select="." + regex="([0-9]+)([=<>]=?)(.*)"> +<xsl:matching-substring>$Var<xsl:value-of select="regex-group(1)"/><xsl:variable name="op"><xsl:value-of select="regex-group(2)"/></xsl:variable> +<xsl:choose> +<xsl:when test="$op='=='">=</xsl:when> +<xsl:otherwise><xsl:value-of select="$op"/></xsl:otherwise></xsl:choose>'<xsl:value-of select="regex-group(3)"/>'</xsl:matching-substring> +</xsl:analyze-string> +</xsl:attribute> +</xsl:template> + +<!-- test on the value of two vars --> +<xsl:template match="//@conf:compareIDVal"> + <xsl:attribute name="cond"> + <xsl:analyze-string select="." + regex="([0-9]+)([=<>]=?)([0-9+])"> + <xsl:matching-substring>$Var<xsl:value-of select="regex-group(1)"/><xsl:text>/text() </xsl:text> + <xsl:variable name="op"><xsl:value-of select="regex-group(2)"/></xsl:variable> + <xsl:choose> + <xsl:when test="$op='='">=</xsl:when> + <xsl:otherwise><xsl:value-of select="$op"/></xsl:otherwise> + </xsl:choose>$Var<xsl:value-of select="regex-group(3)"/><xsl:text>/text() </xsl:text> + </xsl:matching-substring> + </xsl:analyze-string> + </xsl:attribute> +</xsl:template> + +<!-- test that given var whose value was passed in via namelist has specific value. The value expr is evaluated --> +<xsl:template match="//@conf:namelistIdVal"> + <xsl:attribute name="cond"> + <xsl:analyze-string select="." + regex="([0-9]+)([=<>]=?)(.*)"> + <xsl:matching-substring>$Var<xsl:value-of select="regex-group(1)"/><xsl:text>/data/text() </xsl:text> + <xsl:variable name="op"><xsl:value-of select="regex-group(2)"/></xsl:variable> + <xsl:choose> + <xsl:when test="$op='='">=</xsl:when> + <xsl:otherwise><xsl:value-of select="$op"/></xsl:otherwise> + </xsl:choose> + <xsl:value-of select="regex-group(3)"/> + </xsl:matching-substring> + + </xsl:analyze-string> + </xsl:attribute> +</xsl:template> + +<!-- return true if variable matches value of system var (var number is first arg, system var name +is the second argument --> +<xsl:template match="//@conf:idSystemVarVal"> + <xsl:attribute name="cond"> + <xsl:analyze-string select="." + regex="([0-9]+)([=<>]=?)(.*)"> +<xsl:matching-substring>$Var<xsl:value-of select="regex-group(1)"/><xsl:variable name="op"><xsl:value-of select="regex-group(2)"/></xsl:variable> +<xsl:choose> +<xsl:when test="$op='=='">=</xsl:when> +<xsl:otherwise><xsl:value-of select="$op"/></xsl:otherwise></xsl:choose>$<xsl:value-of select="regex-group(3)"/></xsl:matching-substring> +</xsl:analyze-string> +</xsl:attribute> +</xsl:template> + +<!-- test that the event's name fieldhas the value specified --> +<xsl:template match="//@conf:eventNameVal"> + <xsl:attribute name="cond">$_event/name = <xsl:text>'</xsl:text><xsl:value-of select="."/><xsl:text>'</xsl:text> + </xsl:attribute> + +</xsl:template> +<!-- returns true if all the required fields of _event are bound --> +<xsl:template match="//@conf:eventFieldsAreBound"> + <xsl:attribute name="cond">$_event/name and $_event/type and $_event/sendid and $_event/origin and $_event/origintype and $_event/invokeid and $_event/data</xsl:attribute> +</xsl:template> + +<!-- returns true if machine is in the state specified --> + +<xsl:template match="//@conf:inState"> + <xsl:attribute name="cond">In('<xsl:value-of select="."/>')</xsl:attribute> +</xsl:template> + +<!-- return true if specified var has been created but has no value --> +<xsl:template match="//@conf:unboundVar"> + <xsl:attribute name="cond">$Var<xsl:value-of select="." /> and not($Var<xsl:value-of select="." />/text()) and not($Var<xsl:value-of select="." />/*)</xsl:attribute> +</xsl:template> + +<!-- return true if the specified key in event.data has the specified value --> +<xsl:template match="//@conf:eventvarVal"> + <xsl:attribute name="cond"> + <xsl:analyze-string select="." + regex="([0-9]+)([=<>]=?)(.*)"> + <xsl:matching-substring>$_event/data/data[@id = 'Var<xsl:value-of select="regex-group(1)"/>']/text()<xsl:variable name="op"><xsl:value-of select="regex-group(2)"/></xsl:variable> + <xsl:choose> + <xsl:when test="$op='='">=</xsl:when> + <xsl:otherwise><xsl:value-of select="$op"/></xsl:otherwise> + </xsl:choose> + <xsl:value-of select="regex-group(3)"/> + </xsl:matching-substring> + + </xsl:analyze-string> + </xsl:attribute> + +</xsl:template> + +<!-- return true if event.data field matches the specified value --> + +<xsl:template match="//@conf:eventdataVal"> + <xsl:attribute name="cond">$_event/data = '<xsl:value-of select="."/>'</xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:emptyEventData"> + <xsl:attribute name="cond">not($_event/data/*)</xsl:attribute> +</xsl:template> + +<!-- return true if the _name system var has the specified quoted value --> + +<xsl:template match="//@conf:nameVarVal"> + <xsl:attribute name="cond">$_name/text() = '<xsl:value-of select="."/>'</xsl:attribute> +</xsl:template> + +<!-- returns true if _event.data contains the specified item --> +<xsl:template match="//@conf:eventDataHasField"> + <xsl:attribute name="cond">$_event/data/data[@id=<xsl:value-of select="."/>]</xsl:attribute> +</xsl:template> + +<!-- return true if first var's value is a prefix of the second var's value. Input has form "n m" where n and m are ints.--> +<xsl:template match="//@conf:varPrefix"> + <xsl:attribute name="cond"> + <xsl:analyze-string select="." + regex="(\w+)(\W)(\w+)"> + <xsl:matching-substring> +contains($Var<xsl:value-of select="regex-group(3)"/>, $Var<xsl:value-of select="regex-group(1)"/><xsl:text>)</xsl:text> + </xsl:matching-substring> + </xsl:analyze-string> + </xsl:attribute> +</xsl:template> + +<!-- true if id has a value --> +<xsl:template match="//@conf:isBound"> + <xsl:attribute name="cond">$Var<xsl:value-of select="." />/* or $Var<xsl:value-of select="." />/text()</xsl:attribute> +</xsl:template> + +<!-- true if id does not have an atomic value --> +<xsl:template match="//@conf:noValue"> + <xsl:attribute name="cond">not($Var<xsl:value-of select="." />/text() or $Var<xsl:value-of select="." />/*)</xsl:attribute> +</xsl:template> + +<!-- true if system var has a value --> +<xsl:template match="//@conf:systemVarIsBound"> + <xsl:attribute name="cond">$<xsl:value-of select="." />/text()</xsl:attribute> +</xsl:template> + +<!-- returns true if specified field of _event has no value --> +<xsl:template match="//@conf:eventFieldHasNoValue"> + <xsl:attribute name="cond">not(string($_event/<xsl:value-of select="." />))</xsl:attribute> +</xsl:template> + +<!-- returns a value that cannot be converted into a Boolean --> +<xsl:template match="//@conf:nonBoolean"> + <xsl:attribute name="cond">==!*</xsl:attribute> +</xsl:template> + +<!-- always returns true --> +<xsl:template match="//@conf:true"> + <xsl:attribute name="cond">true()</xsl:attribute> +</xsl:template> + +<!-- always returns false --> +<xsl:template match="//@conf:false"> + <xsl:attribute name="cond">0>1</xsl:attribute> +</xsl:template> + + + +<!-- this should return an illegal target for <send> causing a send error to be raised --> +<xsl:template match="//@conf:illegalTarget"> + <xsl:attribute name="target">baz</xsl:attribute> +</xsl:template> + +<!-- this returns an legal, but unreachable, target for <send> causing a send error to be raised --> +<xsl:template match="//@conf:unreachableTarget"> + <xsl:attribute name="target">#_scxml_foo</xsl:attribute> +</xsl:template> + +<!-- true if the two vars/ids have the same value --> +<xsl:template match="//@conf:VarEqVar"> + <xsl:attribute name="cond"> + <xsl:analyze-string select="." + regex="([0-9]+)(\W+)([0-9]+)"> + <xsl:matching-substring>$Var<xsl:value-of select="regex-group(1)"/>/text()=$Var<xsl:value-of select="regex-group(3)"/>/text()</xsl:matching-substring> + </xsl:analyze-string> + </xsl:attribute> +</xsl:template> + +<!-- true if the two vars/ids have the same value, which is a structure, not atomic --> +<xsl:template match="//@conf:VarEqVarStruct"> + <xsl:attribute name="cond"> + <xsl:analyze-string select="." + regex="([0-9]+)(\W+)([0-9]+)"> + <xsl:matching-substring>$Var<xsl:value-of select="regex-group(1)"/>=$Var<xsl:value-of select="regex-group(3)"/></xsl:matching-substring> + </xsl:analyze-string> + </xsl:attribute> +</xsl:template> + +<!-- true if _event was delivered on the specified i/o processor --> +<xsl:template match="//@conf:originTypeEq"> + <xsl:attribute name="cond">$_event/origintype/text() = '<xsl:value-of select="."/>'</xsl:attribute> +</xsl:template> + + +<!-- scripting is not supported in Xpath, so not sure what to put here. Implementers +should know not to bother to run these tests--> + +<xsl:template match="conf:script"> + <script xmlns="http://www.w3.org/2005/07/scxml"> + </script> +</xsl:template> + + +<xsl:template match="//@conf:scriptGoodSrc"> + <xsl:attribute name="src">D:\W3C\SCXMLTests\test300.py</xsl:attribute> +</xsl:template> + +<xsl:template match="//@conf:scriptBadSrc"> + <xsl:attribute name="src">D:\foo</xsl:attribute> +</xsl:template> + +<!-- sends an event back to the sender of the current event --> +<xsl:template match="conf:sendToSender"> + <send xmlns="http://www.w3.org/2005/07/scxml"> + <xsl:attribute name="event"><xsl:value-of select="@name" /></xsl:attribute> + <xsl:attribute name="targetexpr">$_event/origin/text()</xsl:attribute> + <xsl:attribute name="typeexpr">$_event/origintype/text()</xsl:attribute> + </send> +</xsl:template> + +</xsl:stylesheet>
\ No newline at end of file diff --git a/test/w3c/convert-tests.sh b/test/w3c/convert-tests.sh new file mode 100755 index 0000000..42f8fce --- /dev/null +++ b/test/w3c/convert-tests.sh @@ -0,0 +1,23 @@ +ME=`basename $0` +DIR="$( cd "$( dirname "$0" )" && pwd )" +cd $DIR + +TXMLS=`ls txml/*.txml` + +# see http://saxon.sourceforge.net/saxon6.5.1/using-xsl.html +for TXML in $TXMLS +do + DEST=ecma/`basename $TXML .txml`.scxml + echo "Processing $TXML to $DEST" + java -jar /Users/sradomski/Developer/Applications/SaxonHE9-4-0-7J/saxon9he.jar $TXML confEcma.xsl -o:$DEST +done + +for TXML in $TXMLS +do + DEST=xpath/`basename $TXML .txml`.scxml + echo "Processing $TXML to $DEST" + java -jar /Users/sradomski/Developer/Applications/SaxonHE9-4-0-7J/saxon9he.jar $TXML confXPath.xsl -o:$DEST +done + +cp txml/*.txt ecma/ +cp txml/*.txt xpath/
\ No newline at end of file diff --git a/test/w3c/draft/calc.scxml b/test/w3c/draft/calc.scxml new file mode 100644 index 0000000..e854401 --- /dev/null +++ b/test/w3c/draft/calc.scxml @@ -0,0 +1,158 @@ +<?xml version="1.0" ?> +<scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0" + initial="on" datamodel="ecmascript" name="calc"> + <datamodel> + <data id="long_expr" /> + <data id="short_expr" expr="0" /> + <data id="res" /> + </datamodel> + <state id="wrapper" initial="on"> + <state id="on" initial="ready"> + <onentry> + <send event="DISPLAY.UPDATE" /> + </onentry> + <state id="ready" initial="begin"> + <state id="begin"> + <transition event="OPER.MINUS" target="negated1" /> + <onentry> + <send event="DISPLAY.UPDATE" /> + </onentry> + </state> + <state id="result"> + </state> + <transition event="OPER" target="opEntered" /> + <transition event="DIGIT.0" target="zero1"> + <assign location="short_expr" expr="''" /> + </transition> + <transition event="DIGIT" target="int1"> + <assign location="short_expr" expr="''" /> + </transition> + <transition event="POINT" target="frac1"> + <assign location="short_expr" expr="''" /> + </transition> + </state> + <state id="negated1"> + <onentry> + <assign location="short_expr" expr="'-'" /> + <send event="DISPLAY.UPDATE" /> + </onentry> + <transition event="DIGIT.0" target="zero1" /> + <transition event="DIGIT" target="int1" /> + <transition event="POINT" target="frac1" /> + </state> + <state id="operand1"> + <state id="zero1"> + <transition event="DIGIT" cond="_event.name != 'DIGIT.0'" target="int1" /> + <transition event="POINT" target="frac1" /> + </state> + <state id="int1"> + <transition event="POINT" target="frac1" /> + <transition event="DIGIT"> + <assign location="short_expr" expr="short_expr+_event.name.substr(_event.name.lastIndexOf('.')+1)" /> + <send event="DISPLAY.UPDATE" /> + </transition> + <onentry> + <assign location="short_expr" expr="short_expr+_event.name.substr(_event.name.lastIndexOf('.')+1)" /> + <send event="DISPLAY.UPDATE" /> + </onentry> + </state> + <state id="frac1"> + <onentry> + <assign location="short_expr" expr="short_expr+'.'" /> + <send event="DISPLAY.UPDATE" /> + </onentry> + <transition event="DIGIT"> + <assign location="short_expr" expr="short_expr+_event.name.substr(_event.name.lastIndexOf('.')+1)" /> + <send event="DISPLAY.UPDATE" /> + </transition> + </state> + <transition event="OPER" target="opEntered" /> + </state> + <state id="opEntered"> + <transition event="OPER.MINUS" target="negated2" /> + <transition event="POINT" target="frac2" /> + <transition event="DIGIT.0" target="zero2" /> + <transition event="DIGIT" target="int2" /> + <onentry> + <raise event="CALC.SUB" /> + <send target="_internal" event="OP.INSERT"> + <param name="operator" expr="_event.name" /> + </send> + </onentry> + </state> + <state id="negated2"> + <onentry> + <assign location="short_expr" expr="'-'" /> + <send event="DISPLAY.UPDATE" /> + </onentry> + <transition event="DIGIT.0" target="zero2" /> + <transition event="DIGIT" target="int2" /> + <transition event="POINT" target="frac2" /> + </state> + <state id="operand2"> + <state id="zero2"> + <transition event="DIGIT" cond="_event.name != 'DIGIT.0'" target="int2" /> + <transition event="POINT" target="frac2" /> + </state> + <state id="int2"> + <transition event="DIGIT"> + <assign location="short_expr" expr="short_expr+_event.name.substr(_event.name.lastIndexOf('.')+1)" /> + <send event="DISPLAY.UPDATE" /> + </transition> + <onentry> + <assign location="short_expr" expr="short_expr+_event.name.substr(_event.name.lastIndexOf('.')+1)" /> + <send event="DISPLAY.UPDATE" /> + </onentry> + <transition event="POINT" target="frac2" /> + </state> + <state id="frac2"> + <onentry> + <assign location="short_expr" expr="short_expr +'.'" /> + <send event="DISPLAY.UPDATE" /> + </onentry> + <transition event="DIGIT"> + <assign location="short_expr" expr="short_expr +_event.name.substr(_event.name.lastIndexOf('.')+1)" /> + <send event="DISPLAY.UPDATE" /> + </transition> + </state> + <transition event="OPER" target="opEntered"> + <raise event="CALC.SUB" /> + <raise event="OP.INSERT" /> + </transition> + <transition event="EQUALS" target="result"> + <raise event="CALC.SUB" /> + <raise event="CALC.DO" /> + </transition> + </state> + <transition event="C" target="on" /> + </state> + <transition event="CALC.DO"> + <assign location="short_expr" expr="''+ res" /> + <assign location="long_expr" expr="''" /> + <assign location="res" expr="0" /> + </transition> + <transition event="CALC.SUB"> + <if cond="short_expr!=''"> + <assign location="long_expr" expr="long_expr+'('+short_expr+')'" /> + </if> + <assign location="res" expr="eval(long_expr)" /> + <assign location="short_expr" expr="''" /> + <send event="DISPLAY.UPDATE" /> + </transition> + <transition event="DISPLAY.UPDATE"> + <!--log level="0" label="'result'" expr=".short_expr==''?res:short_expr" / --> + </transition> + <transition event="OP.INSERT"> + <log level="0" expr="_event.data[0]" /> + <if cond="_event.data[0] == 'OPER.PLUS'"> + <assign location="long_expr" expr="long_expr+'+'" /> + <elseif cond="_event.data[0]=='OPER.MINUS'" /> + <assign location="long_expr" expr="long_expr+'-'" /> + <elseif cond="_event.data[0]=='OPER.STAR'" /> + <assign location="long_expr" expr="long_expr+'*'" /> + <elseif cond="_event.data[0]=='OPER.DIV'" /> + <assign location="long_expr" expr="long_expr+'/'" /> + </if> + </transition> + </state> +</scxml> diff --git a/test/w3c/ecma/robots.txt b/test/w3c/ecma/robots.txt new file mode 100644 index 0000000..54f3e01 --- /dev/null +++ b/test/w3c/ecma/robots.txt @@ -0,0 +1,96 @@ +# +# robots.txt for http://www.w3.org/ +# +# $Id: robots.txt,v 1.66 2012/07/17 21:30:56 gerald Exp $ +# + +# For use by search.w3.org +User-agent: W3C-gsa +Disallow: /Out-Of-Date + +User-agent: W3T_SE +Disallow: /Out-Of-Date + +User-agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT; MS Search 4.0 Robot) +Disallow: / + +# W3C Link checker +User-agent: W3C-checklink +Disallow: + +# the following settings apply to all bots +User-agent: * +# Blogs - WordPress +# https://codex.wordpress.org/Search_Engine_Optimization_for_WordPress#Robots.txt_Optimization +Disallow: /*/wp-admin/ +Disallow: /*/wp-includes/ +Disallow: /*/wp-content/plugins/ +Disallow: /*/wp-content/cache/ +Disallow: /*/wp-content/themes/ +Disallow: /blog/*/trackback/ +Disallow: /blog/*/feed/ +Disallow: /blog/*/comments/ +Disallow: /blog/*/category/*/* +Disallow: /blog/*/*/trackback/ +Disallow: /blog/*/*/feed/ +Disallow: /blog/*/*/comments/ +Disallow: /blog/*/*? +Disallow: /community/trackback/ +Disallow: /community/feed/ +Disallow: /community/comments/ +Disallow: /community/category/*/* +Disallow: /community/*/trackback/ +Disallow: /community/*/feed/ +Disallow: /community/*/comments/ +Disallow: /community/*/category/*/* +Disallow: /community/*? +Disallow: /Consortium/Offices/trackback/ +Disallow: /Consortium/Offices/feed/ +Disallow: /Consortium/Offices/comments/ +Disallow: /Consortium/Offices/category/*/* +Disallow: /Consortium/Offices/*/trackback/ +Disallow: /Consortium/Offices/*/feed/ +Disallow: /Consortium/Offices/*/comments/ +Disallow: /Consortium/Offices/*? +# Wikis - Mediawiki +# https://www.mediawiki.org/wiki/Manual:Robots.txt +Disallow: /wiki/index.php? +Disallow: /wiki/index.php/Help +Disallow: /wiki/index.php/MediaWiki +Disallow: /wiki/index.php/Special: +Disallow: /wiki/index.php/Template +Disallow: /wiki/skins/ +Disallow: /*/wiki/index.php? +Disallow: /*/wiki/index.php/Help +Disallow: /*/wiki/index.php/MediaWiki +Disallow: /*/wiki/index.php/Special: +Disallow: /*/wiki/index.php/Template +# various other access-controlled or expensive areas +Disallow: /2004/ontaria/basic +Disallow: /Team/ +Disallow: /Project +Disallow: /Web +Disallow: /Systems +Disallow: /History +Disallow: /Out-Of-Date +Disallow: /2002/02/mid +Disallow: /mid/ +Disallow: /2005/06/blog/ +Disallow: /2004/08/W3CTalks +Disallow: /2007/11/Talks/search +Disallow: /People/all/ +Disallow: /RDF/Validator/ARPServlet +Disallow: /2003/03/Translations/byLanguage +Disallow: /2003/03/Translations/byTechnology +Disallow: /2005/11/Translations/Query +Disallow: /2000/06/webdata/xslt +Disallow: /2000/09/webdata/xslt +Disallow: /2005/08/online_xslt/xslt +Disallow: /Bugs/ +Disallow: /Search/Mail/Public/ +Disallow: /2006/02/chartergen +Disallow: /2004/01/pp-impl +Disallow: /Consortium/supporters +Disallow: /2007/08/pyRdfa/ +Disallow: /WAI/PF/comments/ + diff --git a/test/w3c/ecma/test144.scxml b/test/w3c/ecma/test144.scxml new file mode 100644 index 0000000..fcec83a --- /dev/null +++ b/test/w3c/ecma/test144.scxml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that events are inserted into the queue in the order in which they are raised. If +foo occurs before bar, success, otherwise failure --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <raise event="foo"/> + <raise event="bar"/> + </onentry> + <transition event="foo" target="s1"/> + <transition event="*" target="fail"/> + + </state> + +<state id="s1"> + <transition event="bar" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test147.scxml b/test/w3c/ecma/test147.scxml new file mode 100644 index 0000000..f877ecf --- /dev/null +++ b/test/w3c/ecma/test147.scxml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the first clause that evaluates to true - and only that clause - is executed. +Only one event should be raised, and it should be bar --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1" expr="0"/> + </datamodel> + +<state id="s0"> + <onentry> + <if cond="false"> + <raise event="foo"/> + <assign location="Var1" expr="Var1 + 1"/> + <elseif cond="true"/> + <raise event="bar"/> + <assign location="Var1" expr="Var1 + 1"/> + <else/> + <raise event="baz"/> + <assign location="Var1" expr="Var1 + 1"/> + </if> + <raise event="bat"/> + </onentry> + <transition event="bar" cond="Var1==1" target="pass"/> + <transition event="*" target="fail"/> + + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test148.scxml b/test/w3c/ecma/test148.scxml new file mode 100644 index 0000000..acebba7 --- /dev/null +++ b/test/w3c/ecma/test148.scxml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the else clause executes if <if> and <elseif> evaluate to false. +Baz should be the only event generated by the <if>. bat is raised to catch the case where the <else> clause +fails and baz is not generated, i.e. it makes sure that the test doesn't hang. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1" expr="0"/> + </datamodel> + +<state id="s0"> + <onentry> + <if cond="false"> + <raise event="foo"/> + <assign location="Var1" expr="Var1 + 1"/> + <elseif cond="false"/> + <raise event="bar"/> + <assign location="Var1" expr="Var1 + 1"/> + <else/> + <raise event="baz"/> + <assign location="Var1" expr="Var1 + 1"/> + </if> + <raise event="bat"/> + </onentry> + <transition event="baz" cond="Var1==1" target="pass"/> + <transition event="*" target="fail"/> + + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test149.scxml b/test/w3c/ecma/test149.scxml new file mode 100644 index 0000000..b7626c6 --- /dev/null +++ b/test/w3c/ecma/test149.scxml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that neither if clause executes, so that bat is the only event raised. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1" expr="0"/> + </datamodel> + +<state id="s0"> + <onentry> + <if cond="false"> + <raise event="foo"/> + <assign location="Var1" expr="Var1 + 1"/> + <elseif cond="false"/> + <raise event="bar"/> + <assign location="Var1" expr="Var1 + 1"/> + </if> + <raise event="bat"/> + </onentry> + <transition event="bat" cond="Var1==0" target="pass"/> + <transition event="*" target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test150.scxml b/test/w3c/ecma/test150.scxml new file mode 100644 index 0000000..41e1895 --- /dev/null +++ b/test/w3c/ecma/test150.scxml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that foreach causes a new variable to be declared if 'item' doesn't already exist. Also +test that it will use an existing var if it does exist. --><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"> +<datamodel> + <data id="Var1"/> + <data id="Var2"/> + <data id="Var3"> + [1,2,3] + </data> + </datamodel> + + <state id="s0"> + <onentry> +<!-- first use declared variables --> + <foreach item="Var1" index="Var2" array="Var3"/> + <raise event="foo"/> + </onentry> + <transition event="error" target="fail"/> + <transition event="*" target="s1"/> + </state> + +<state id="s1"> + <onentry> +<!-- now use undeclared variables --> + <foreach item="Var4" index="Var5" array="Var3"/> + <raise event="bar"/> + </onentry> + <transition event="error" target="fail"/> + <transition event="*" target="s2"/> + </state> + +<state id="s2"> + <!-- check that var4 is bound --> + <transition cond="Var4" target="pass"/> + <transition target="fail"/> + </state> + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test151.scxml b/test/w3c/ecma/test151.scxml new file mode 100644 index 0000000..119bb65 --- /dev/null +++ b/test/w3c/ecma/test151.scxml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that foreach causes a new variable to be declared if 'item' doesn't already exist. Also +test that it will use an existing var if it does exist. --><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"> +<datamodel> + <data id="Var1"/> + <data id="Var2"/> + <data id="Var3"> + [1,2,3] + </data> + </datamodel> + + <state id="s0"> + <onentry> +<!-- first use declared variables --> + <foreach item="Var1" index="Var2" array="Var3"/> + <raise event="foo"/> + </onentry> + <transition event="error" target="fail"/> + <transition event="*" target="s1"/> + </state> + +<state id="s1"> + <onentry> +<!-- now use undeclared variables --> + <foreach item="Var4" index="Var5" array="Var3"/> + <raise event="bar"/> + </onentry> + <transition event="error" target="fail"/> + <transition event="*" target="s2"/> + </state> + +<state id="s2"> + <!-- check that var5 is bound --> + <transition cond="Var5" target="pass"/> + <transition target="fail"/> + </state> + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test152.scxml b/test/w3c/ecma/test152.scxml new file mode 100644 index 0000000..8af51a8 --- /dev/null +++ b/test/w3c/ecma/test152.scxml @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that an illegal array or item value causes error.execution and results in executable content +not being executed. --><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"> +<datamodel> + <data id="Var1" expr="0"/> + <data id="Var2"/> + <data id="Var3"/> + <data id="Var4" expr="7"/> + <data id="Var5"> + [1,2,3] + </data> + </datamodel> + + <state id="s0"> + <onentry> +<!-- invalid array, legal item --> + <foreach item="Var2" index="Var3" array="Var4"> + <assign location="Var1" expr="Var1 + 1"/> + </foreach> + <raise event="foo"/> + </onentry> + <transition event="error.execution" target="s1"/> + <transition event="*" target="fail"/> + </state> + + <state id="s1"> + <onentry> +<!-- illegal item, legal array --> + <foreach item="'continue'" index="Var3" array="Var5"> + <assign location="Var1" expr="Var1 + 1"/> + </foreach> + <raise event="bar"/> + </onentry> + <transition event="error.execution" target="s2"/> + <transition event="bar" target="fail"/> + </state> + +<state id="s2"> + <!-- check that var1 has its original value (so executable content never got executed --> + <transition cond="Var1==0" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test153.scxml b/test/w3c/ecma/test153.scxml new file mode 100644 index 0000000..c46c32d --- /dev/null +++ b/test/w3c/ecma/test153.scxml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that foreach goes over the array in the right order. since the array contains 1 2 3, we compare the current +value with the previous value, which is stored in var1. The current value should always be larger. If +it ever isn't, set Var4 to 0, indicating failure --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1" expr="0"/> <!-- contains the previous value --> + <data id="Var2"/> <!-- the item which will contain the current value --> + <data id="Var3"> + [1,2,3] + </data> + <data id="Var4" expr="1"/> <!-- 1 if success, 0 if failure --> + </datamodel> + + <state id="s0"> + <onentry> + <foreach item="Var2" array="Var3"> + <if cond="Var1<Var2"> + <assign location="Var1" expr="Var2"/> + <else/> + <!-- values are out of order, record failure --> + <assign location="Var4" expr="0"/> + </if> + </foreach> + </onentry> + + <!-- check that var1 has its original value --> + <transition cond="Var4==0" target="fail"/> + <transition 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>
\ No newline at end of file diff --git a/test/w3c/ecma/test155.scxml b/test/w3c/ecma/test155.scxml new file mode 100644 index 0000000..17d3a70 --- /dev/null +++ b/test/w3c/ecma/test155.scxml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that foreach executes the executable content once for each item in the list '(1,2,3)'. The executable +content sums the items into var1 so it should be 6 at the end --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + +<datamodel> + <data id="Var1" expr="0"/> + <data id="Var2"/> + <data id="Var3"> + [1,2,3] + </data> + </datamodel> + + <state id="s0"> + <onentry> + <foreach item="Var2" array="Var3"> + <assign location="Var1" expr="Var1 + Var2"/> + </foreach> + </onentry> + + <transition cond="Var1==6" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test156.scxml b/test/w3c/ecma/test156.scxml new file mode 100644 index 0000000..aa9e2b0 --- /dev/null +++ b/test/w3c/ecma/test156.scxml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that an error causes the foreach to stop execution. The second piece of executable content +should cause an error, so var1 should be incremented only once --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + +<datamodel> + <data id="Var1" expr="0"/> + <data id="Var2"/> + <data id="Var3"> + [1,2,3] + </data> + </datamodel> + + <state id="s0"> + <onentry> + <foreach item="Var2" array="Var3"> + <assign location="Var1" expr="Var1 + 1"/> + <!-- assign an illegal value to a non-existent var --> + <assign location="Var5" expr="return"/> + </foreach> + </onentry> + + <transition cond="Var1==1" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test158.scxml b/test/w3c/ecma/test158.scxml new file mode 100644 index 0000000..f1a583f --- /dev/null +++ b/test/w3c/ecma/test158.scxml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that executable content executes in document order. if event1 occurs then event2, succeed, otherwise fail --><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"> +<datamodel> + <data id="Var1" expr="0"/> + </datamodel> + +<state id="s0"> + <onentry> + <raise event="event1"/> + <raise event="event2"/> + </onentry> + <transition event="event1" target="s1"/> + <transition event="*" target="fail"/> + </state> + +<state id="s1"> + <transition event="event2" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test159.scxml b/test/w3c/ecma/test159.scxml new file mode 100644 index 0000000..d7b7821 --- /dev/null +++ b/test/w3c/ecma/test159.scxml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that any error raised by an element of executable content causes all subsequent elements to be skipped. +The send tag will raise an error so var1 should not be incremented. If it is fail, otherwise succeed --><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"> +<datamodel> + <data id="Var1" expr="0"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="thisWillFail" target="baz"/> + <assign location="Var1" expr="Var1 + 1"/> + </onentry> + <transition cond="Var1==1" target="fail"/> + <transition 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>
\ No newline at end of file diff --git a/test/w3c/ecma/test172.scxml b/test/w3c/ecma/test172.scxml new file mode 100644 index 0000000..28f2bcb --- /dev/null +++ b/test/w3c/ecma/test172.scxml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that eventexpr uses the current value of var1, not its initial value --><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"> +<datamodel> + <data id="Var1" expr="'event1'"/> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="Var1" expr="'event2'"/> + <send eventexpr="Var1"/> + </onentry> + + <transition event="event2" target="pass"/> + <transition event="*" target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test173.scxml b/test/w3c/ecma/test173.scxml new file mode 100644 index 0000000..fa2a289 --- /dev/null +++ b/test/w3c/ecma/test173.scxml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that targetexpr uses the current value of var1, not its initial value +(If it uses the initial value, it will generate an error. If it uses the current value, event1 will be raised --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1" expr="27"/> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="Var1" expr="'#_internal'"/> + <send targetexpr="Var1" event="event1"/> + </onentry> + + <transition event="event1" target="pass"/> + <transition event="*" target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test174.scxml b/test/w3c/ecma/test174.scxml new file mode 100644 index 0000000..f78feee --- /dev/null +++ b/test/w3c/ecma/test174.scxml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that typeexpr uses the current value of var1, not its initial value +(If it uses the initial value, it will generate an error. If it uses the current value, event1 will be raised --><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"> +<datamodel> + <data id="Var1" expr="27"/> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="Var1" expr="'http://www.w3.org/TR/scxml/#SCXMLEventProcessor'"/> + <send typeexpr="Var1" event="event1"/> + </onentry> + + <transition event="event1" target="pass"/> + <transition event="*" target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test175.scxml b/test/w3c/ecma/test175.scxml new file mode 100644 index 0000000..4876821 --- /dev/null +++ b/test/w3c/ecma/test175.scxml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that delayexpr uses the current value of var1, not its initial value +(If it uses the initial value, event2 will be generated first, before event1. If it uses the current value, +event1 will be raised first. Succeed if event1 occurs before event2, otherwise fail --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1" expr="'0s'"/> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="Var1" expr="'3s'"/> + <send delayexpr="Var1" event="event2"/> + <send delay="1s" event="event1"/> + </onentry> + + <transition event="event1" target="s1"/> + <transition event="event2" target="fail"/> + </state> + +<state id="s1"> + <transition event="event2" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test176.scxml b/test/w3c/ecma/test176.scxml new file mode 100644 index 0000000..4b120ec --- /dev/null +++ b/test/w3c/ecma/test176.scxml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that <param> uses the current value of var1, not its initial value. If the value of +aParam in event1 is 2 so that var2 gets set to 2, success, otherwise failure --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1" expr="1"/> + <data id="Var2"/> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="Var1" expr="2"/> + <send event="event1"> + <param name="aParam" expr="Var1"/> + </send> + </onentry> + + <transition event="event1" target="s1"> + <assign location="Var2" expr="_event.data.aParam"/> + </transition> + <transition event="*" target="fail"/> + </state> + +<state id="s1"> + <transition cond="Var2==2" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test178.scxml b/test/w3c/ecma/test178.scxml new file mode 100644 index 0000000..91b4681 --- /dev/null +++ b/test/w3c/ecma/test178.scxml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that multiple key/value pairs are included, even when the keys are the same. +This is a manual test. The tester must look at the log output and verify that both +keys are there. (This test uses the SCXML Event I/O processor, which is the only +one that all platforms must support. It does not specify the message format, so +we cannot test _event.raw directly. Therefore we print it out for visual +inspection.) --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + +<state id="s0"> + <onentry> + <send event="event1"> + <param name="Var1" expr="2"/> + <param name="Var1" expr="3"/> + </send> + </onentry> + + <transition event="event1" target="final"> + <log label="_event " expr="_event.raw"/> + </transition> + <transition event="*" target="fail"/> + + </state> + + +<final id="final"/> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test179.scxml b/test/w3c/ecma/test179.scxml new file mode 100644 index 0000000..170b105 --- /dev/null +++ b/test/w3c/ecma/test179.scxml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that <content> can be used to populate body of a message --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <send event="event1"> + <content>123</content> + </send> + </onentry> + + <transition event="event1" cond="_event.data === '123'" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test183.scxml b/test/w3c/ecma/test183.scxml new file mode 100644 index 0000000..2c17ea8 --- /dev/null +++ b/test/w3c/ecma/test183.scxml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that <send> stores the value of the sendid in idlocation. If it does, +var1 has a value and we pass. Otherwise we fail --><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"> +<datamodel> + <data id="Var1"/> + + </datamodel> + +<state id="s0"> + <onentry> + <send event="event1" idlocation="Var1"/> + </onentry> + + <transition cond="Var1" target="pass"/> + <transition target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test185.scxml b/test/w3c/ecma/test185.scxml new file mode 100644 index 0000000..cdf8a77 --- /dev/null +++ b/test/w3c/ecma/test185.scxml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that <send> respects the delay specification. If it does, event1 arrives before event2 + and we pass. Otherwise we fail --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <send event="event2" delay="2s"/> + <send event="event1"/> + </onentry> + + <transition event="event1" target="s1"/> + <transition event="*" target="fail"/> + </state> + +<state id="s1"> + <transition event="event2" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test186.scxml b/test/w3c/ecma/test186.scxml new file mode 100644 index 0000000..20f0063 --- /dev/null +++ b/test/w3c/ecma/test186.scxml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that <send> evals its args when it is evaluated, not when the delay interval expires and the +message is actually sent. If it does, aParam will have the value of 1 (even though var1 has been incremented +in the interval.) If var2 ends up == 1, we pass. Otherwise we fail --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1" expr="1"/> + <data id="Var2"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="event1" delay="2s"> + <param name="aParam" expr="Var1"/> + </send> + <assign location="Var1" expr="2"/> + </onentry> + + <transition event="event1" target="s1"> + <assign location="Var2" expr="_event.data.aParam"/> + </transition> + <transition event="*" target="fail"/> + </state> + +<state id="s1"> + <transition cond="Var2==1" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test187.scxml b/test/w3c/ecma/test187.scxml new file mode 100644 index 0000000..d03c16d --- /dev/null +++ b/test/w3c/ecma/test187.scxml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that delayed <send> is not sent if the sending session terminates. In this case, +a subscript is invoked which sends the event childToParent delayed by 1 second, and then terminates. The +parent session, should not receive childToParent. If it does, we fail. Otherwise the +10 sec timer expires and we pass --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="10s"/> + </onentry> + <invoke type="scxml"> + <content> + <!-- exit before the delayed send can execute --> + <scxml initial="sub0" version="1.0" datamodel="ecmascript"> + <state id="sub0"> + <onentry> + <send event="childToParent" target="#_parent" delay="1s"/> + </onentry> + <transition target="subFinal"/> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <transition event="childToParent" 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>
\ No newline at end of file diff --git a/test/w3c/ecma/test189.scxml b/test/w3c/ecma/test189.scxml new file mode 100644 index 0000000..683b874 --- /dev/null +++ b/test/w3c/ecma/test189.scxml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that #_internal as a target of <send> puts the event on the internal queue. If it does, +event1 will be processed before event2, because event1 is added to the internal queue while event2 is +added to the external queue (event though event2 is generated first) --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <!-- goes to the external queue --> + <send event="event2"/> + <!-- to the internal queue --> + <send event="event1" target="#_internal"/> + </onentry> + + <!-- once we've entered the state, we should check for internal events first --> + <transition event="event1" target="pass"/> + <transition event="event2" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test190.scxml b/test/w3c/ecma/test190.scxml new file mode 100644 index 0000000..a1f6d56 --- /dev/null +++ b/test/w3c/ecma/test190.scxml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that #_scxml_sessionid as a target of <send> puts the event on the external queue. If it does, +event1 will be processed before event2, because event1 is added to the internal queue while event2 is +added to the external queue (event though event2 is generated first). we have to make sure that event2 +is actually delivered. The delayed <send> makes sure another event is generated (so the test doesn't hang) --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1" expr="'#_scxml_'"/> + <data id="Var2" expr="_sessionid"/> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="Var1" expr="Var1 + Var2"/> + <!-- goes to the external queue --> + <send event="event2" targetexpr="Var1"/> + <!-- to the internal queue --> + <raise event="event1"/> + <!-- this should get added to the external queue after event2 --> + <send event="timeout"/> + </onentry> + + <!-- once we've entered the state, we should check for internal events first --> + <transition event="event1" target="s1"/> + <transition event="*" target="fail"/> + </state> + +<!-- now check that we get event2 and not a timeout --> +<state id="s1"> + <transition event="event2" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test191.scxml b/test/w3c/ecma/test191.scxml new file mode 100644 index 0000000..6e82274 --- /dev/null +++ b/test/w3c/ecma/test191.scxml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that #_parent works as a target of <send> . a subscript is invoked and sends the event +childToParent to its parent session (ths session) using #_parent as the target. If we get this event, we +pass, otherwise we fail. The timer insures that some event is generated and that the test does not hang. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="5s"/> + </onentry> + <invoke type="scxml"> + <content> + <!-- send an event to the parent session using #_parent as the target --> + <scxml initial="sub0" version="1.0" datamodel="ecmascript"> + <state id="sub0"> + <onentry> + <send event="childToParent" target="#_parent"/> + </onentry> + <transition target="subFinal"/> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + <transition event="childToParent" target="pass"/> + <transition event="*" target="fail"/> +</state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test192.scxml b/test/w3c/ecma/test192.scxml new file mode 100644 index 0000000..a74a05e --- /dev/null +++ b/test/w3c/ecma/test192.scxml @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that #_invokeid works as a target of <send> . A child script is invoked and sends us +childToParent once its running. Then we send it the event parentToChild using its invokeid as the target. +If it receives this event, it sends sends the event eventReceived to its parent session (ths session). +If we get this event, we pass, otherwise the child script eventually times out sends invoke.done and we fail. +We also set a timeout in this process to make sure the test doesn't hang --><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"> + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="5s"/> + </onentry> + + <invoke type="scxml" id="invokedChild"> + <content> + <!-- let the parent session know we're running by sending childToParent, then wait for parentToChild. + If we get it, send eventReceived. If we don't we eventually time out --> + <scxml initial="sub0" version="1.0" datamodel="ecmascript"> + + <state id="sub0"> + <onentry> + <send event="childToParent" target="#_parent"/> + <send event="timeout" delay="3s"/> + </onentry> + + <transition event="parentToChild" target="subFinal"> + <send target="#_parent" event="eventReceived"/> + </transition> + + <transition event="timeout" target="subFinal"/> + </state> + + <final id="subFinal"/> + + </scxml> + </content> + </invoke> + + <transition event="timeout" target="fail"/> + <transition event="done.invoke" target="fail"/> + +<state id="s01"> + <transition event="childToParent" target="s02"> + <send target="#_invokedChild" event="parentToChild"/> + </transition> +</state> + +<state id="s02"> + <transition event="eventReceived" target="pass"/> + </state> + +</state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test193.scxml b/test/w3c/ecma/test193.scxml new file mode 100644 index 0000000..441a658 --- /dev/null +++ b/test/w3c/ecma/test193.scxml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that omitting target and targetexpr of <send> when using the +basichttp event i/o processor puts error.communication on the internal queue. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <!-- this should put an error in the internal queue --> + <send event="event1" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"/> + <send event="fail"/> + </onentry> + + <transition event="error.communication" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test194.scxml b/test/w3c/ecma/test194.scxml new file mode 100644 index 0000000..e7dcd76 --- /dev/null +++ b/test/w3c/ecma/test194.scxml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that specifying an illegal target for <send> causes the event error.execution to be raised. If it does, +we succeed. Otherwise we eventually timeout and fail. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <!-- should cause an error --> + <send target="baz" event="event2"/> + <!-- this will get added to the external event queue after the error has been raised --> + <send event="timeout"/> + </onentry> + + <!-- once we've entered the state, we should check for internal events first --> + <transition event="error.execution" target="pass"/> + <transition event="*" target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test198.scxml b/test/w3c/ecma/test198.scxml new file mode 100644 index 0000000..e804625 --- /dev/null +++ b/test/w3c/ecma/test198.scxml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that if type is not provided <send> uses the scxml event i/o processor. The only way to tell +what processor was used is to look at the origintype of the resulting event --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + +<state id="s0"> + <onentry> + <send event="event1"/> + <send event="timeout"/> + </onentry> + + + <transition event="event1" cond=" _event.origintype == 'http://www.w3.org/TR/scxml/#SCXMLEventProcessor'" target="pass"/> + <transition event="*" target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test199.scxml b/test/w3c/ecma/test199.scxml new file mode 100644 index 0000000..2119cd8 --- /dev/null +++ b/test/w3c/ecma/test199.scxml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that using an invalid send type results in error.execution --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + +<state id="s0"> + <onentry> + <send type="27" event="event1"/> + <send event="timeout"/> + </onentry> + + + <transition event="error.execution" target="pass"/> + <transition event="*" target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test200.scxml b/test/w3c/ecma/test200.scxml new file mode 100644 index 0000000..2aa85a9 --- /dev/null +++ b/test/w3c/ecma/test200.scxml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that the processor supports the scxml event i/o processor --><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"> + +<state id="s0"> + <onentry> + <send type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" event="event1"/> + <send event="timeout"/> + </onentry> + + + <transition event="event1" target="pass"/> + <transition event="*" target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test201.scxml b/test/w3c/ecma/test201.scxml new file mode 100644 index 0000000..8ded0d5 --- /dev/null +++ b/test/w3c/ecma/test201.scxml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that the processor supports the basic http event i/o processor. This is an optional +test since platforms are not required to support basic http event i/o --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + +<state id="s0"> + <onentry> + <send type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor" targetexpr="_ioprocessors['basichttp']['location']" event="event1"/> + <send event="timeout"/> + </onentry> + + + <transition event="event1" target="pass"/> + <transition event="*" target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test205.scxml b/test/w3c/ecma/test205.scxml new file mode 100644 index 0000000..5adefbe --- /dev/null +++ b/test/w3c/ecma/test205.scxml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that the processor doesn't change the message. We can't test that it never does this, but +at least we can check that the event name and included data are the same as we sent. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="event1"> + <param name="aParam" expr="1"/> + </send> + <send event="timeout"/> + </onentry> + + + <transition event="event1" target="s1"> + <assign location="Var1" expr="_event.data.aParam"/> + </transition> + <transition event="*" target="fail"/> + </state> + +<state id="s1"> + <transition cond="Var1==1" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test207.scxml b/test/w3c/ecma/test207.scxml new file mode 100644 index 0000000..aa5786a --- /dev/null +++ b/test/w3c/ecma/test207.scxml @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that that we can't cancel an event in another session. We invoke a child process. It notifies +us when it has generated a delayed event with sendid foo. We try to cancel foo. The child process sends us event + event success if the event is not cancelled, event fail otherwise. This doesn't test that there is absolutely no way to cancel an event +raised in another session, but the spec doesn't define any way to refer to an event in another process --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="10s"/> + </onentry> + <invoke type="scxml"> + <content> + <!-- when invoked, we raise a delayed event1 with sendid 'foo' and notify our parent. Then we wait. + If event1 occurs, the parent hasn't succeeded in canceling it and we return pass. If event2 occurs + it means event1 was canceled (because event2 is delayed longer than event1) and we return 'fail'. --> + + + <scxml initial="sub0" version="1.0" datamodel="ecmascript"> + <state id="sub0"> + <onentry> + <send event="event1" id="foo" delay="3s"/> + <send event="event2" delay="5s"/> + <send target="#_parent" event="childToParent"/> + </onentry> + + <transition event="event1" target="subFinal"> + <send target="#_parent" event="pass"/> + </transition> + <transition event="*" target="subFinal"> + <send target="#_parent" event="fail"/> + </transition> + + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <state id="s01"> + <transition event="childToParent" target="s02"> + <cancel sendid="foo"/> + </transition> + </state> + + <state id="s02"> + <transition event="pass" target="pass"/> + <transition event="fail" target="fail"/> + <transition event="timeout" target="fail"/> + </state> + +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test208.scxml b/test/w3c/ecma/test208.scxml new file mode 100644 index 0000000..6faa9c1 --- /dev/null +++ b/test/w3c/ecma/test208.scxml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that cancel works. We cancel delayed event1. If cancel works, we get event2 first and pass. If +we get event1 or an error first, cancel didn't work and we fail. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <send id="foo" event="event1" delay="1s"/> + <send event="event2" delay="5s"/> + <cancel sendid="foo"/> + </onentry> + + <transition event="event2" target="pass"/> + <transition event="*" target="fail"/> + + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test210.scxml b/test/w3c/ecma/test210.scxml new file mode 100644 index 0000000..e29b65d --- /dev/null +++ b/test/w3c/ecma/test210.scxml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that sendidexpr works with cancel. If it takes the most recent value of var1, it should cancel +delayed event1. Thus we get event2 first and pass. If we get event1 or an error first, cancel didn't work and we fail. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1" expr="'bar'"/> + </datamodel> + +<state id="s0"> + <onentry> + <send id="foo" event="event1" delay="1s"/> + <send event="event2" delay="5s"/> + <assign location="Var1" expr="'foo'"/> + <cancel sendidexpr="Var1"/> + </onentry> + + <transition event="event2" target="pass"/> + <transition event="*" target="fail"/> + + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test215.scxml b/test/w3c/ecma/test215.scxml new file mode 100644 index 0000000..97e6a39 --- /dev/null +++ b/test/w3c/ecma/test215.scxml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that typexpr is evaluated at runtime. If the original value of var1 is used, the invocation +will fail (test215sub1.scxml is not of type 'foo', even if the platform supports foo as a type). If +the runtime value is used, the invocation will succeed --><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"> + +<datamodel> + <data id="Var1" expr="'foo'"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="5s"/> + <assign location="Var1" expr="'http://www.w3.org/TR/scxml/'"/> + </onentry> + <invoke typeexpr="Var1"> + <content> + <!-- when invoked, terminate returning done.invoke. This proves that the invocation succeeded. --> + <scxml initial="subFinal" datamodel="ecmascript" version="1.0"> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + <transition event="done.invoke" target="pass"/> + <transition event="*" target="fail"/> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test216.scxml b/test/w3c/ecma/test216.scxml new file mode 100644 index 0000000..97b2a77 --- /dev/null +++ b/test/w3c/ecma/test216.scxml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that srcexpr is evaluated at runtime. If the original value of var1 is used, the invocation +will fail (assuming that there is no script named 'foo'). If +the runtime value is used, the invocation will succeed --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + +<datamodel> + <data id="Var1" expr="'foo'"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="5s"/> + <assign location="Var1" expr="'file:test216sub1.scxml'"/> + </onentry> + <invoke srcexpr="Var1" type="http://www.w3.org/TR/scxml"/> + <transition event="done.invoke" target="pass"/> + <transition event="*" target="fail"/> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test216sub1.scxml b/test/w3c/ecma/test216sub1.scxml new file mode 100644 index 0000000..3c3a88d --- /dev/null +++ b/test/w3c/ecma/test216sub1.scxml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- when invoked, terminate returning done.invoke. This proves that the invocation succeeded. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="final" version="1.0" datamodel="ecmascript"> + +<final id="final"/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test220.scxml b/test/w3c/ecma/test220.scxml new file mode 100644 index 0000000..2d447c4 --- /dev/null +++ b/test/w3c/ecma/test220.scxml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that the scxml type is supported. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + +<state id="s0"> + <onentry> + <send event="timeout" delay="5s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <!-- when invoked, terminate returning done.invoke. This proves that the invocation succeeded. --> + <scxml initial="subFinal" version="1.0" datamodel="ecmascript"> + <final id="subFinal"/> + </scxml></content> + </invoke> + <transition event="done.invoke" target="pass"/> + <transition event="*" target="fail"/> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test223.scxml b/test/w3c/ecma/test223.scxml new file mode 100644 index 0000000..63ceadd --- /dev/null +++ b/test/w3c/ecma/test223.scxml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that idlocation is supported. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + <datamodel> + <data id="Var1"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/" idlocation="Var1"> + <content> + <!-- when invoked, terminate returning done.invoke. This proves that the invocation succeeded. --> + <scxml initial="subFinal" version="1.0" datamodel="ecmascript"> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + <transition event="*" target="s1"/> +</state> + +<state id="s1"> + <transition cond="Var1" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test224.scxml b/test/w3c/ecma/test224.scxml new file mode 100644 index 0000000..e2e8a32 --- /dev/null +++ b/test/w3c/ecma/test224.scxml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that the automatically generated id has the form stateid.platformid. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + <datamodel> + <data id="Var1"/> + <data id="Var2" expr="'s0.'"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/" idlocation="Var1"> + <content> + <!-- when invoked, terminate returning done.invoke. This proves that the invocation succeeded. --> + <scxml version="1.0" initial="subFinal" datamodel="ecmascript"> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <transition event="*" target="s1"/> +</state> + +<state id="s1"> + <transition cond="(function(str, starts){if (starts === '') return true;if (str == null || starts == null) return false;str = String(str); starts = String(starts);return str.length >= starts.length && str.slice(0, starts.length) === starts;})(Var1, Var2)" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test225.scxml b/test/w3c/ecma/test225.scxml new file mode 100644 index 0000000..467d1ba --- /dev/null +++ b/test/w3c/ecma/test225.scxml @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that the automatically generated id is unique, we call invoke twice and compare the ids. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + <datamodel> + <data id="Var1"/> + <data id="Var2"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/" idlocation="Var1"> + <content> + <scxml initial="subFinal1" version="1.0" datamodel="ecmascript"> + <final id="subFinal1"/> + </scxml> + </content> + </invoke> + <invoke type="http://www.w3.org/TR/scxml/" idlocation="Var2"> + <content> + <scxml initial="subFinal2" version="1.0" datamodel="ecmascript"> + <final id="subFinal2"/> + </scxml> + </content> + </invoke> + + <transition event="*" target="s1"/> +</state> + +<state id="s1"> + <transition cond="Var1===Var2" target="fail"/> + <transition 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>
\ No newline at end of file diff --git a/test/w3c/ecma/test226.scxml b/test/w3c/ecma/test226.scxml new file mode 100644 index 0000000..e1c6d3f --- /dev/null +++ b/test/w3c/ecma/test226.scxml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- this is basically just a test that invoke works correctly and that you can pass data +to the invoked process. If the invoked session finds aParam==1, it exits, signalling +success. otherwise it will hang and the timeout in this doc signifies failure. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="3s"/> + </onentry> + + + <invoke type="http://www.w3.org/TR/scxml/" src="file:test226sub1.scxml"> + <param name="Var1" expr="1"/> + </invoke> + + <transition event="varBound" target="pass"/> + <transition event="*" target="fail"/> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test226sub1.scxml b/test/w3c/ecma/test226sub1.scxml new file mode 100644 index 0000000..809efb0 --- /dev/null +++ b/test/w3c/ecma/test226sub1.scxml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- when invoked, if var1 has a value notify parent. Then terminate. --><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"> + +<datamodel> + <data id="Var1"/> + </datamodel> + +<state id="s0"> + <transition cond="Var1" target="final"> + <send target="#_parent" event="varBound"/> + </transition> + <transition target="final"/> + </state> + +<final id="final"/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test228.scxml b/test/w3c/ecma/test228.scxml new file mode 100644 index 0000000..b44de56 --- /dev/null +++ b/test/w3c/ecma/test228.scxml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the invokeid is included in events returned from the invoked process. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + <datamodel> + <data id="Var1"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="3s"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/" id="foo"> + <content> + <scxml initial="subFinal" version="1.0" datamodel="ecmascript"> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <transition event="done.invoke" target="s1"> + <assign location="Var1" expr="_event.invokeid"/> + </transition> + <transition event="*" target="fail"/> +</state> + +<state id="s1"> + <transition cond="Var1=='foo'" target="pass"/> + <transition target="fail"/> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test229.scxml b/test/w3c/ecma/test229.scxml new file mode 100644 index 0000000..e3aeecb --- /dev/null +++ b/test/w3c/ecma/test229.scxml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that autofoward works. If the child process receives back a copy of the +childToParent event that it sends to this doc, it sends eventReceived, signalling success. (Note +that this doc is not required to process that event explicitly. It should be forwarded in any case.) Otherwise +it eventually times out and the done.invoke signals failure --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="3s"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/" autoforward="true"> + <content> + <!-- when invoked, send childToParent to parent. + If it is forwarded back to us, send + eventReceived to signal success and terminate. + Otherwise wait for timer to expire and terminate. --> + <scxml initial="sub0" version="1.0" datamodel="ecmascript"> + <state id="sub0"> + <onentry> + <send target="#_parent" event="childToParent"/> + <send event="timeout" delay="3s"/> + </onentry> + <transition event="childToParent" target="subFinal"> + <send target="#_parent" event="eventReceived"/> + </transition> + <transition event="*" target="subFinal"/> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <transition event="childToParent"/> + <transition event="eventReceived" target="pass"/> + <transition event="*" target="fail"/> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test230.scxml b/test/w3c/ecma/test230.scxml new file mode 100644 index 0000000..ae13476 --- /dev/null +++ b/test/w3c/ecma/test230.scxml @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- a manual test that an autofowarded event has the same fields and values as the original event. +the child process sends the parent process an event which is forwarded back to it. +Both the parent and child process print out the contents of the event. The tester +must check if they are the same and report his result. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="3s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/" autoforward="true"> + <content> + <!-- when invoked, send childToParent to parent. If it is forwarded back to us, print out its + fields and terminate. --> + <scxml initial="sub0" version="1.0" datamodel="ecmascript"> + <state id="sub0"> + <onentry> + <send target="#_parent" event="childToParent"/> + <send event="timeout" delay="2s"/> + </onentry> + <transition event="childToParent" target="subFinal"> + <log label="name is " expr="_event.name"/> + <log label="type is " expr="_event.type"/> + <log label="sendid is " expr="_event.sendid"/> + <log label="origin is " expr="_event.origin"/> + <log label="origintype is " expr="_event.origintype"/> + <log label="invokeid is " expr="_event.invokeid"/> + <log label="data is " expr="_event.data"/> + </transition> + <transition event="*" target="subFinal"/> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + <transition event="timeout" target="final"/> + + + <state id="s01"> + <transition event="childToParent" target="s02"> + <log label="name is " expr="_event.name"/> + <log label="type is " expr="_event.type"/> + <log label="sendid is " expr="_event.sendid"/> + <log label="origin is " expr="_event.origin"/> + <log label="origintype is " expr="_event.origintype"/> + <log label="invokeid is " expr="_event.invokeid"/> + <log label="data is " expr="_event.data"/> + </transition> + <transition event="*" target="fail"/> + </state> + + <state id="s02"> + <!-- wait till we get the done event to ensure that the child process has time to print out its results --> + <transition event="done.invoke" target="final"/> + </state> + +</state> + +<final id="final"/> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test232.scxml b/test/w3c/ecma/test232.scxml new file mode 100644 index 0000000..9515e15 --- /dev/null +++ b/test/w3c/ecma/test232.scxml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that a parent process can receive multiple events from a child process --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="3s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <scxml initial="subFinal" version="1.0" datamodel="ecmascript"> + <final id="subFinal"> + <onentry> + <send target="#_parent" event="childToParent1"/> + <send target="#_parent" event="childToParent2"/> + </onentry> + </final> + </scxml> + </content> + </invoke> + <transition event="timeout" target="fail"/> + + + <state id="s01"> + <transition event="childToParent1" target="s02"/> + </state> + + <state id="s02"> + <transition event="childToParent2" target="s03"/> + </state> + +<state id="s03"> + <transition event="done.invoke" target="pass"/> + </state> + +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test233.scxml b/test/w3c/ecma/test233.scxml new file mode 100644 index 0000000..3900d28 --- /dev/null +++ b/test/w3c/ecma/test233.scxml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that finalize markup runs before the event is processed. The invoked process will +return 2 in _event.data.aParam, so that new value should be in force when we select +the transtitions. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1" expr="1"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="3s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <scxml initial="subFinal" version="1.0" datamodel="ecmascript"> + <final id="subFinal"> + <onentry> + <send target="#_parent" event="childToParent"> + <param name="aParam" expr="2"/> + </send> + </onentry> + </final> + </scxml> + </content> + <finalize> + <assign location="Var1" expr="_event.data.aParam"/> + </finalize> + </invoke> + + <transition event="childToParent" cond="" target="pass"/> + <transition event="*" target="fail"/> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test234.scxml b/test/w3c/ecma/test234.scxml new file mode 100644 index 0000000..b874fe9 --- /dev/null +++ b/test/w3c/ecma/test234.scxml @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that only finalize markup in the invoking state runs. the first invoked process will +return 2 in _event.data.aParam, while second invoked process sleeps without returning any events. +Only the first finalize should execute. So when we get to s1 var1 should have value 2 but +var2 should still be set to 1 --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="p0" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1" expr="1"/> + <data id="Var2" expr="1"/> + </datamodel> +<parallel id="p0"> + <onentry> + <send event="timeout" delay="3s"/> + </onentry> + <transition event="timeout" target="fail"/> + + <state id="p01"> + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <scxml version="1.0" initial="subFinal1" datamodel="ecmascript"> + <final id="subFinal1"> + <onentry> + <send target="#_parent" event="childToParent"> + <param name="aParam" expr="2"/> + </send> + </onentry> + </final> + </scxml> + </content> + <finalize> + <assign location="Var1" expr="_event.data.aParam"/> + </finalize> + </invoke> + + <transition event="childToParent" cond="Var1==2" target="s1"/> + <transition event="childToParent" target="fail"/> + </state> + + <state id="p02"> + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <scxml version="1.0" initial="sub0" datamodel="ecmascript"> + <state id="sub0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <transition event="timeout" target="subFinal2"/> + </state> + <final id="subFinal2"/> + </scxml> + </content> + <finalize> + <assign location="Var2" expr="_event.data.aParam"/> + </finalize> + </invoke> + </state> + +</parallel> + + +<state id="s1"> + <transition cond="Var2==1" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test235.scxml b/test/w3c/ecma/test235.scxml new file mode 100644 index 0000000..17d0cf0 --- /dev/null +++ b/test/w3c/ecma/test235.scxml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that done.invoke.id event has the right id. the invoked child terminates immediately +and should generate done.invoke.foo --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/" id="foo"> + <content> + <scxml initial="subFinal" version="1.0" datamodel="ecmascript"> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <transition event="done.invoke.foo" target="pass"/> + <transition event="*" target="fail"/> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test236.scxml b/test/w3c/ecma/test236.scxml new file mode 100644 index 0000000..700c6f8 --- /dev/null +++ b/test/w3c/ecma/test236.scxml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that done.invoke.id event is the last event we receive. the invoked process sends childToParent +in the exit handler of its final state. We should get it before the done.invoke, and we should get no +events after the done.invoke. Hence timeout indicates success --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <scxml initial="subFinal" version="1.0" datamodel="ecmascript"> + <final id="subFinal"> + <onexit> + <send target="#_parent" event="childToParent"/> + </onexit> + </final> + </scxml> + </content> + </invoke> + + <transition event="childToParent" target="s1"/> + <transition event="done.invoke" target="fail"/> +</state> + +<state id="s1"> + <!-- here we should get done.invoke --> + <transition event="done.invoke" target="s2"/> + <transition event="*" target="fail"/> + </state> + +<state id="s2"> + <transition event="timeout" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test237.scxml b/test/w3c/ecma/test237.scxml new file mode 100644 index 0000000..b23811d --- /dev/null +++ b/test/w3c/ecma/test237.scxml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that cancelling works. invoked child sleeps for two seconds, then terminates. We +sleep for 1 sec in s0, then move to s1. This should cause the invocation to get cancelled. +If we receive done.invoke, the invocation wasn't cancelled, and we fail. If we receive no events by +the time timeout2 fires, success --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <send event="timeout1" delay="1s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <!-- when invoked, sleep for 2 secs then terminate. Parent will try to cancel this session --> + <scxml initial="sub0" version="1.0" datamodel="ecmascript"> + <state id="sub0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <transition event="timeout" target="subFinal"/> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <transition event="timeout1" target="s1"/> + +</state> + +<state id="s1"> + <onentry> + <send event="timeout2" delay="2s"/> + </onentry> + <!-- here we should NOT get done.invoke --> + <transition event="done.invoke" target="fail"/> + <transition event="*" 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>
\ No newline at end of file diff --git a/test/w3c/ecma/test239.scxml b/test/w3c/ecma/test239.scxml new file mode 100644 index 0000000..4fcfc92 --- /dev/null +++ b/test/w3c/ecma/test239.scxml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that markup can be specified both by 'src' and by <content> --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <transition event="timeout" target="fail"/> + + <state id="s01"> + <invoke type="http://www.w3.org/TR/scxml/" src="file:test239sub1.scxml"/> + <transition event="done.invoke" target="s02"/> + </state> + +<state id="s02"> + <invoke type="http://www.w3.org/TR/scxml/"> + <!-- identical to test239sub1.scxml. --> + <content> + <scxml version="1.0" initial="final" datamodel="ecmascript"> + <final id="final"/> + </scxml> + </content> + </invoke> + + <transition event="done.invoke" target="pass"/> + </state> + +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test239sub1.scxml b/test/w3c/ecma/test239sub1.scxml new file mode 100644 index 0000000..0f099d3 --- /dev/null +++ b/test/w3c/ecma/test239sub1.scxml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- when invoked, just terminate. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="final" version="1.0" datamodel="ecmascript"> + + <final id="final"/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test240.scxml b/test/w3c/ecma/test240.scxml new file mode 100644 index 0000000..6d74d4c --- /dev/null +++ b/test/w3c/ecma/test240.scxml @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that datamodel values can be specified both by 'namelist' and by <param>. +invoked child will return success if its Var1 is set to 1, failure otherwise. This +test will fail schema validation because of the multiple occurences of Var1, but +should run correctly. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1" expr="1"/> + </datamodel> + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <transition event="timeout" target="fail"/> + + <state id="s01"> + <invoke type="http://www.w3.org/TR/scxml/" namelist="Var1"> + <content> + <scxml initial="sub01" version="1.0" datamodel="ecmascript"> + <datamodel> + <data id="Var1" expr="0"/> + </datamodel> + <state id="sub01"> + <transition cond="Var1===1" target="subFinal1"> + <send target="#_parent" event="success"/> + </transition> + <transition target="subFinal1"> + <send target="#_parent" event="failure"/> + </transition> + </state> + <final id="subFinal1"/> + </scxml> + </content> + </invoke> + <transition event="success" target="s02"/> + <transition event="failure" target="fail"/> + </state> + +<state id="s02"> + <invoke type="http://www.w3.org/TR/scxml/"> + <param name="Var1" expr="1"/> + <content> + <scxml initial="sub02" version="1.0" datamodel="ecmascript"> + <datamodel> + <data id="Var1" expr="0"/> + </datamodel> + + <state id="sub02"> + <transition cond="Var1==1" target="subFinal2"> + <send target="#_parent" event="success"/> + </transition> + <transition target="subFinal1"> + <send target="#_parent" event="failure"/> + </transition> + </state> + <final id="subFinal2"/> + </scxml> + </content> + </invoke> + <transition event="success" target="pass"/> + <transition event="failure" target="fail"/> + </state> + +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test241.scxml b/test/w3c/ecma/test241.scxml new file mode 100644 index 0000000..af1471f --- /dev/null +++ b/test/w3c/ecma/test241.scxml @@ -0,0 +1,98 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- The child process will return success ifits Var1 is set to 1, failure otherwise. For this test +we try passing in Var1 by param and by namelist and check that we either get two successes +or two failures. This test will fail schema validation due to multiple declarations of +Var1, but should run correctly. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1" expr="1"/> + </datamodel> + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <transition event="timeout" target="fail"/> + + <state id="s01"> + <invoke type="http://www.w3.org/TR/scxml/" namelist="Var1"> + <content> + <scxml initial="sub01" version="1.0" datamodel="ecmascript"> + <datamodel> + <data id="Var1" expr="0"/> + </datamodel> + + <state id="sub01"> + <transition cond="Var1==1" target="subFinal1"> + <send target="#_parent" event="success"/> + </transition> + <transition target="subFinal1"> + <send target="#_parent" event="failure"/> + </transition> + </state> + + <final id="subFinal1"/> + </scxml> + </content> + </invoke> + <transition event="success" target="s02"/> + <transition event="failure" target="s03"/> + </state> + +<state id="s02"> + <invoke type="http://www.w3.org/TR/scxml/"> + <param name="Var1" expr="1"/> + <content> + <scxml initial="sub02" version="1.0" datamodel="ecmascript"> + <datamodel> + <data id="Var1" expr="0"/> + </datamodel> + + <state id="sub02"> + <transition cond="Var1==1" target="subFinal2"> + <send target="#_parent" event="success"/> + </transition> + <transition target="subFinal2"> + <send target="#_parent" event="failure"/> + </transition> + </state> + + <final id="subFinal2"/> + </scxml> + </content> + </invoke> + <!-- we got success in s01, so we need to do so here --> + <transition event="success" target="pass"/> + <transition event="failure" target="fail"/> + </state> + +<state id="s03"> + <invoke type="http://www.w3.org/TR/scxml/"> + <param name="Var1" expr="1"/> + <content> + <scxml initial="sub03" version="1.0" datamodel="ecmascript"> + <datamodel> + <data id="Var1" expr="0"/> + </datamodel> + + <state id="sub03"> + <transition cond="Var1==1" target="subFinal3"> + <send target="#_parent" event="success"/> + </transition> + <transition target="subFinal3"> + <send target="#_parent" event="failure"/> + </transition> + </state> + + <final id="subFinal3"/> + </scxml> + </content> + </invoke> + <!-- we got failure in s01, so we need to do so here --> + <transition event="failure" target="pass"/> + <transition event="success" target="fail"/> + </state> + +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test242.scxml b/test/w3c/ecma/test242.scxml new file mode 100644 index 0000000..f0fa504 --- /dev/null +++ b/test/w3c/ecma/test242.scxml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that markup specified by 'src' and by <content> is treated the same way. That means that +either we get done.invoke in both cases or in neither case (in which case we timeout) --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <send event="timeout1" delay="1s"/> + </onentry> + <transition event="timeout" target="fail"/> + + <invoke type="http://www.w3.org/TR/scxml/" src="file:test242sub1.scxml"/> + <transition event="done.invoke" target="s02"/> + <transition event="timeout1" target="s03"/> + </state> + +<state id="s02"> + <onentry> + <send event="timeout2" delay="1s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/"> + <!-- identical to test242sub1.scxml. --> + <content> + <scxml version="1.0" initial="subFinal1" datamodel="ecmascript"> + <final id="subFinal1"/> + </scxml> + </content> + </invoke> + <!-- we got done.invoke last time, so we need it this time too --> + <transition event="done.invoke" target="pass"/> + <transition event="timeout2" target="fail"/> + </state> + +<state id="s03"> + <onentry> + <send event="timeout3" delay="1s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/"> + <!-- identical to test242sub1.scxml. --> + <content> + <scxml version="1.0" initial="subFinal2" datamodel="ecmascript"> + <final id="subFinal2"/> + </scxml> + </content> + </invoke> + <!-- we got timeout last time, so we need it this time too --> + <transition event="timeout3" target="pass"/> + <transition event="done.invoke" target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test242sub1.scxml b/test/w3c/ecma/test242sub1.scxml new file mode 100644 index 0000000..0f099d3 --- /dev/null +++ b/test/w3c/ecma/test242sub1.scxml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- when invoked, just terminate. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="final" version="1.0" datamodel="ecmascript"> + + <final id="final"/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test243.scxml b/test/w3c/ecma/test243.scxml new file mode 100644 index 0000000..18f2175 --- /dev/null +++ b/test/w3c/ecma/test243.scxml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that datamodel values can be specified by param. +test240sub1 will return success ifits Var1 is set to 1, failure otherwise. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/"> + <param name="Var1" expr="1"/> + <content> + <scxml version="1.0" initial="sub0" datamodel="ecmascript"> + <datamodel> + <data id="Var1" expr="0"/> + </datamodel> + + <state id="sub0"> + <transition cond="Var1==1" target="subFinal"> + <send target="#_parent" event="success"/> + </transition> + <transition target="subFinal"> + <send target="#_parent" event="failure"/> + </transition> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + <transition event="success" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test244.scxml b/test/w3c/ecma/test244.scxml new file mode 100644 index 0000000..d251c59 --- /dev/null +++ b/test/w3c/ecma/test244.scxml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that datamodel values can be specified by namelist. +invoked child will return success ifits Var1 is set to 1, failure otherwise. +This test will fail schema validation due to multiple occurrences of Var1, +but should run correctly. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1" expr="1"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/" namelist="Var1"> + <content> + <scxml initial="sub0" version="1.0" datamodel="ecmascript"> + <datamodel> + <data id="Var1" expr="0"/> + </datamodel> + + <state id="sub0"> + <transition cond="Var1==1" target="subFinal"> + <send target="#_parent" event="success"/> + </transition> + <transition target="subFinal"> + <send target="#_parent" event="failure"/> + </transition> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + <transition event="success" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test245.scxml b/test/w3c/ecma/test245.scxml new file mode 100644 index 0000000..58838b2 --- /dev/null +++ b/test/w3c/ecma/test245.scxml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that non-existent datamodel values are not set. Var2 is not defined in +invoked child's datamodel. It will will return success if its Var2 remains unbound, failure otherwise. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var2" expr="3"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/" namelist="Var2"> + <content> + <scxml initial="sub0" version="1.0" datamodel="ecmascript"> + <state id="sub0"> + <transition cond="Var2" target="subFinal"> + <send target="#_parent" event="failure"/> + </transition> + <transition target="subFinal"> + <send target="#_parent" event="success"/> + </transition> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <transition event="success" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test247.scxml b/test/w3c/ecma/test247.scxml new file mode 100644 index 0000000..b543bf1 --- /dev/null +++ b/test/w3c/ecma/test247.scxml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that we get done.invoke. timeout indicates failure --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <scxml version="1.0" initial="subFinal" datamodel="ecmascript"> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + <transition event="done.invoke" target="pass"/> + <transition event="timeout" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test250.scxml b/test/w3c/ecma/test250.scxml new file mode 100644 index 0000000..f5228ab --- /dev/null +++ b/test/w3c/ecma/test250.scxml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the onexit handlers run in the invoked process if it is cancelled. This has to be a +manual test, since this process won't accept any events from the child process once it has been cancelled. +Tester must examine log output from child process to determine success --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <send event="foo"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <scxml initial="sub0" version="1.0" datamodel="ecmascript"> + <state id="sub0" initial="sub01"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <transition event="timeout" target="subFinal"/> + <onexit> + <log expr="'Exiting sub0'"/> + </onexit> + <state id="sub01"> + <onexit> + <log expr="'Exiting sub01'"/> + </onexit> + </state> + </state> + <final id="subFinal"> + <onentry> + <log expr="'entering final state, invocation was not cancelled'"/> + </onentry> + </final> + </scxml> + </content> + </invoke> + + <!-- this transition will cause the invocation to be cancelled --> + <transition event="foo" target="final"/> + </state> + +<final id="final"/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test252.scxml b/test/w3c/ecma/test252.scxml new file mode 100644 index 0000000..14c6686 --- /dev/null +++ b/test/w3c/ecma/test252.scxml @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that we don't process any events received from the invoked process once it is cancelled. child +process tries to send us childToParent in an onexit handler. If we get it, we fail. +timeout indicates success. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + + <transition event="timeout" target="pass"/> + <transition event="childToParent" target="fail"/> + <transition event="done.invoke" target="fail"/> + + <state id="s01"> + <onentry> + <send event="foo"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <scxml initial="sub0" version="1.0" datamodel="ecmascript"> + <state id="sub0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <transition event="timeout" target="subFinal"/> + <onexit> + <send target="#_parent" event="childToParent"/> + </onexit> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <!-- this transition will cause the invocation to be cancelled --> + <transition event="foo" target="s02"/> + </state> + + <state id="s02"/> + +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test253.scxml b/test/w3c/ecma/test253.scxml new file mode 100644 index 0000000..e8924ec --- /dev/null +++ b/test/w3c/ecma/test253.scxml @@ -0,0 +1,79 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the scxml event processor is used in both directions. If child process uses the +scxml event i/o processor to communicate with us, send it an event. It will send back success if +this process uses the scxml processor to send the message to it, otherwise failure. For this test we allow +'scxml' as an alternative to the full url. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1"/> + </datamodel> + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + + <transition event="timeout" target="fail"/> + + <invoke type="scxml" id="foo"> + <content> + <!-- inform parent we're running then wait for it to send us an event. If it uses the scxml event i/o + processor to do so, return success, otherwise return failure. --> + <scxml initial="sub0" version="1.0" datamodel="ecmascript"> + <datamodel> + <data id="Var2"/> + </datamodel> + <state id="sub0"> + <onentry> + <send target="#_parent" event="childRunning"/> + </onentry> + + <transition event="parentToChild" target="sub1"> + <assign location="Var2" expr="_event.origintype"/> + </transition> + </state> + <state id="sub1"> + <transition cond="Var2=='http://www.w3.org/TR/scxml/#SCXMLEventProcessor'" target="subFinal"> + <send target="#_parent" event="success"/> + </transition> + <transition cond="Var2=='scxml'" target="subFinal"> + <send target="#_parent" event="success"/> + </transition> + <transition target="subFinal"> + <send target="#_parent" event="failure"/> + </transition> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <state id="s01"> + <transition event="childRunning" target="s02"> + <assign location="Var1" expr="_event.origintype"/> + </transition> + </state> + + <state id="s02"> + + <transition cond="Var1=='http://www.w3.org/TR/scxml/#SCXMLEventProcessor'" target="s03"> + <send target="#_foo" event="parentToChild"/> + </transition> + <transition cond="Var1=='scxml'" target="s03"> + <send target="#_foo" event="parentToChild"/> + </transition> + + <transition target="fail"/> + + </state> + + + <state id="s03"> + <transition event="success" target="pass"/> + <transition event="fail" target="fail"/> + + </state> + +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test276.scxml b/test/w3c/ecma/test276.scxml new file mode 100644 index 0000000..233c171 --- /dev/null +++ b/test/w3c/ecma/test276.scxml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that values passed in from parent process override default values specified in the child, test276sub1.scxml. +The child returns event1 if var1 has value 1, event0 if it has default value 0. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + <state id="s0"> + <invoke type="scxml" src="file:test276sub1.scxml"> + <param name="Var1" expr="1"/> + </invoke> + <transition event="event1" target="pass"/> + <transition event="event0" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test276sub1.scxml b/test/w3c/ecma/test276sub1.scxml new file mode 100644 index 0000000..b18ceb2 --- /dev/null +++ b/test/w3c/ecma/test276sub1.scxml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- define var1 with default value 0. Parent will invoke this process setting var1 = 1. Return event1 if var1 == 1, event0 otherwise --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + <datamodel> + <data id="Var1" expr="0"/> + </datamodel> + + <state id="s0"> + + + <transition cond="Var1==1" target="final"> + <send target="#_parent" event="event1"/> + </transition> + + <transition target="final"> + <send target="#_parent" event="event0"/> + </transition> + + </state> + + <final id="final"/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test277.scxml b/test/w3c/ecma/test277.scxml new file mode 100644 index 0000000..eb6a1ee --- /dev/null +++ b/test/w3c/ecma/test277.scxml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that platform creates undound variable if we assign an illegal value to it. Thus + we can assign to it later in state s1. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + <datamodel> + <data id="Var1" expr="return"/> + </datamodel> + + <state id="s0"> + <onentry> + <raise event="foo"/> + </onentry> + + <transition event="error.execution" cond="typeof Var1 === 'undefined' " target="s1"/> + <transition event="*" target="fail"/> + </state> + + <state id="s1"> + <onentry> + <assign location="Var1" expr="1"/> + </onentry> + <transition cond="Var1==1" target="pass"/> + <transition target="fail"/> + + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test278.scxml b/test/w3c/ecma/test278.scxml new file mode 100644 index 0000000..b26c6f2 --- /dev/null +++ b/test/w3c/ecma/test278.scxml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + +<!-- test that a variable can be accessed from a state that is outside its lexical scope --> + + <state id="s0"> + <transition cond="Var1==1" target="pass"/> + + <transition target="fail"/> + + </state> + +<state id="s1"> + <datamodel> + <data id="Var1" expr="1"/> + </datamodel> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test279.scxml b/test/w3c/ecma/test279.scxml new file mode 100644 index 0000000..2de6fd2 --- /dev/null +++ b/test/w3c/ecma/test279.scxml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- testing that in case of early binding variables are assigned values at init time, before + the state containing them is visited --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + + <state id="s0"> + <transition cond="Var1==1" target="pass"/> + + <transition target="fail"/> + + </state> + +<state id="s1"> + <datamodel> + <data id="Var1" expr="1"/> + </datamodel> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test280.scxml b/test/w3c/ecma/test280.scxml new file mode 100644 index 0000000..78865bf --- /dev/null +++ b/test/w3c/ecma/test280.scxml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test late binding. var2 won't get bound until s1 is entered, so it shouldn't have a value in s0 and +accessing it should cause an error. It should get bound before the onentry code in s1 so it should be +possible access it there and assign its value to var1 --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript" binding="late"> + + <datamodel> + <data id="Var1"/> + </datamodel> + + <state id="s0"> + <transition cond="typeof Var2 === 'undefined' " target="s1"/> + <transition target="fail"/> + </state> + +<state id="s1"> + <datamodel> + <data id="Var2" expr="1"/> + </datamodel> + <onentry> + <assign location="Var1" expr="Var2"/> + </onentry> + <transition cond="Var1===Var2" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test286.scxml b/test/w3c/ecma/test286.scxml new file mode 100644 index 0000000..596f2ba --- /dev/null +++ b/test/w3c/ecma/test286.scxml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that assigment to a non-declared var causes an error. the transition on foo catches the case +where no error is raised --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="ecmascript" initial="s0"> + + + <state id="s0"> + <onentry> + <assign location="Var1" expr="1"/> + <raise event="foo"/> + </onentry> + + <transition event="error.execution" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test287.scxml b/test/w3c/ecma/test287.scxml new file mode 100644 index 0000000..030c6b5 --- /dev/null +++ b/test/w3c/ecma/test287.scxml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- a simple test that a legal value may be assigned to a valid data model location --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="ecmascript" version="1.0" initial="s0"> + +<datamodel> + <data id="Var1" expr="0"/> + </datamodel> + + <state id="s0"> + <onentry> + <assign location="Var1" expr="1"/> + </onentry> + + <transition cond="Var1==1" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test294.scxml b/test/w3c/ecma/test294.scxml new file mode 100644 index 0000000..efd26f4 --- /dev/null +++ b/test/w3c/ecma/test294.scxml @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that a param inside donedata ends up in the data field of the done event and +that content inside donedata sets the full value of the event.data field --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="ecmascript" initial="s0"> + <datamodel> + <data id="Var1" expr="0"/> + </datamodel> + + <state id="s0" initial="s01"> + + <transition event="done.state.s0" cond="_event.data['Var1']==1" target="s1"> + </transition> + + <transition event="done.state.s0" target="fail"> + </transition> + + <state id="s01"> + <transition target="s02"/> + </state> + <final id="s02"> + <donedata> + <param name="Var1" expr="1"/> + </donedata> + </final> + </state> + + <state id="s1" initial="s11"> + + <transition event="done.state.s1" cond="_event.data === 'foo'" target="pass"> + </transition> + + <transition event="done.state.s1" target="fail"> + </transition> + + <state id="s11"> + <transition target="s12"/> + </state> + <final id="s12"> + <donedata> + <content>foo</content> + </donedata> + </final> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test298.scxml b/test/w3c/ecma/test298.scxml new file mode 100644 index 0000000..6a82a95 --- /dev/null +++ b/test/w3c/ecma/test298.scxml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- refence a non-existent data model location in param in donedata and see that the right error is raised --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="ecmascript" initial="s0"> + <datamodel> + <data id="Var1" expr="0"/> + </datamodel> + + <state id="s0" initial="s01"> + <transition event="error.execution" target="pass"/> + <transition event="*" target="fail"/> + + <state id="s01"> + <transition target="s02"/> + </state> + <final id="s02"> + <donedata> + <param name="Var3" location="Var2"/> + </donedata> + </final> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test301.scxml b/test/w3c/ecma/test301.scxml new file mode 100644 index 0000000..59125c8 --- /dev/null +++ b/test/w3c/ecma/test301.scxml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- the processor should reject this document because it can't download the script. +Therefore we fail if it runs at all. This test is valid only for datamodels that support scripting --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" initial="s0"> + <script src="D:\foo"/> + + <state id="s0"> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test302.scxml b/test/w3c/ecma/test302.scxml new file mode 100644 index 0000000..166b4fc --- /dev/null +++ b/test/w3c/ecma/test302.scxml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that a script is evaluated at load time. <conf:script> shoudl assign the value 1 to +Var1. Hence, if script is evaluated at download time, Var1 has a value in the initial state s0. +This test is valid only for datamodels that support scripting --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="ecmascript" initial="s0"> + <script>var Var1 = 1</script> + + <state id="s0"> + <transition cond="Var1==1" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test303.scxml b/test/w3c/ecma/test303.scxml new file mode 100644 index 0000000..0b1e11c --- /dev/null +++ b/test/w3c/ecma/test303.scxml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- to test that scripts are run as part of executable content, we check that it changes the value of a var at the +right point. This test is valid only for datamodels that support scripting --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="ecmascript" initial="s0"> +<datamodel> +<data id="Var1" expr="0"/> +</datamodel> + + <state id="s0"> + <onentry> + <assign location="Var1" expr="2"/> + <script>var Var1 = 1</script> + </onentry> + <transition cond="Var1==1" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test304.scxml b/test/w3c/ecma/test304.scxml new file mode 100644 index 0000000..250d0cd --- /dev/null +++ b/test/w3c/ecma/test304.scxml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that a variable declared by a script can be accessed like any other part of the data model --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="ecmascript" version="1.0" initial="s0"> + <script>var Var1 = 1</script> + + <state id="s0"> + <transition cond="Var1==1" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test307.scxml b/test/w3c/ecma/test307.scxml new file mode 100644 index 0000000..3f93f10 --- /dev/null +++ b/test/w3c/ecma/test307.scxml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" initial="s0" binding="late"> + +<!-- with binding=late, in s0 we access a variable that isn't created until we get to s1. Then in s1 +we access a non-existent substructure of a variable. We use log tags to report the values that both operations +yield, and whether there are errors. This is a manual test, since the tester must report whether the output +is the same in the two cases --> + +<state id="s0"> + <onentry> + <log label="entering s0 value of Var 1 is: " expr="Var1"/> + <raise event="foo"/> + </onentry> + <transition event="error" target="s1"> + <log label="error in state s0" expr="_event"/> + </transition> + <transition event="foo" target="s1"> + <log label="no error in s0" expr=""/> + </transition> + </state> + +<state id="s1"> + <datamodel> + <data id="Var1" expr="1"/> + </datamodel> + + <onentry> + <log label="entering s1, value of non-existent substructure of Var 1 is: " expr="Var1.bar"/> + <raise event="bar"/> + </onentry> + + <transition event="error" target="final"> + <log label="error in state s1" expr="_event"/> + </transition> + <transition event="bar" target="final"> + <log label="No error in s1" expr=""/> + </transition> + +</state> + +<final id="final"/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test309.scxml b/test/w3c/ecma/test309.scxml new file mode 100644 index 0000000..7ac405c --- /dev/null +++ b/test/w3c/ecma/test309.scxml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that an expression that cannot be interpreted as a boolean is treated as false --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="ecmascript" initial="s0"> + +<state id="s0"> + <transition cond="return" target="fail"/> + <transition 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>
\ No newline at end of file diff --git a/test/w3c/ecma/test310.scxml b/test/w3c/ecma/test310.scxml new file mode 100644 index 0000000..e939ded --- /dev/null +++ b/test/w3c/ecma/test310.scxml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- simple test of the in() predicate --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="ecmascript" initial="p"> + + + <parallel id="p"> + + <state id="s0"> + <transition cond="In('s1')" target="pass"/> + <transition target="fail"/> + </state> + + <state id="s1"/> + </parallel> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test311.scxml b/test/w3c/ecma/test311.scxml new file mode 100644 index 0000000..851f3ad --- /dev/null +++ b/test/w3c/ecma/test311.scxml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that assignment to a non-existent location yields an error --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="ecmascript" initial="s0"> + + +<state id="s0"> + <onentry> + <assign location="Var1" expr="1"/> + </onentry> + <transition event="error.execution" target="pass"/> + <transition event=".*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test312.scxml b/test/w3c/ecma/test312.scxml new file mode 100644 index 0000000..a9741e5 --- /dev/null +++ b/test/w3c/ecma/test312.scxml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that assignment with an illegal expr raises an error --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="ecmascript" initial="s0"> + +<datamodel> + <data id="Var1" expr="1"/> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="Var1" expr="return"/> + <raise event="foo"/> + </onentry> + <transition event="error.execution" target="pass"/> + <transition event=".*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test313.scxml b/test/w3c/ecma/test313.scxml new file mode 100644 index 0000000..fcec4ac --- /dev/null +++ b/test/w3c/ecma/test313.scxml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- this is a manual test. The processor is allowed to reject this doc, but if it executes it with its illegal +expression, it must raise an error --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="ecmascript" initial="s0"> + +<datamodel> + <data id="Var1" expr="1"/> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="Var1" expr="return"/> + <raise event="foo"/> + </onentry> + <transition event="error.execution" target="pass"/> + <transition event=".*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test314.scxml b/test/w3c/ecma/test314.scxml new file mode 100644 index 0000000..ed78e79 --- /dev/null +++ b/test/w3c/ecma/test314.scxml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- this is a manual test because the processor is allowed to reject this document. But if it executes it, +it should not raise an error until it gets to s03 and evaluates the illegal expr --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="ecmascript" initial="s0"> +<datamodel> + <data id="Var1" expr="1"/> + </datamodel> + + +<state id="s0" initial="s01"> + <transition event="error.execution" target="fail"/> + + <state id="s01"> + <transition target="s02"/> + </state> + + <state id="s02"> + <transition target="s03"/> + </state> + + <state id="s03"> + <onentry> + <assign location="Var1" expr="return"/> + <raise event="foo"/> + </onentry> + <transition event="error.execution" target="pass"/> + <transition event=".*" target="fail"/> + </state> + +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test318.scxml b/test/w3c/ecma/test318.scxml new file mode 100644 index 0000000..15bf7f8 --- /dev/null +++ b/test/w3c/ecma/test318.scxml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that _event stays bound during the onexit and entry into the next state --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript" name="machineName"> +<datamodel> + <data id="Var1"/> + </datamodel> + + <state id="s0"> + <onentry> + <raise event="foo"/> + </onentry> + <transition event="foo" target="s1"/> + </state> + + <state id="s1"> + <onentry> + <raise event="bar"/> + <!-- _event should still be bound to 'foo' at this point --> + <assign location="Var1" expr="_event.name"/> + </onentry> + <transition cond="Var1=='foo'" target="pass"/> + <transition target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test319.scxml b/test/w3c/ecma/test319.scxml new file mode 100644 index 0000000..adac328 --- /dev/null +++ b/test/w3c/ecma/test319.scxml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that _event is not bound before any event has been raised --><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" name="machineName"> + + <state id="s0"> + <onentry> + <if cond="_event"> + <raise event="bound"/> + <else/> + <raise event="unbound"/> + </if> + </onentry> + <transition event="unbound" target="pass"/> + <transition event="bound" target="fail"/> + + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test321.scxml b/test/w3c/ecma/test321.scxml new file mode 100644 index 0000000..66fcf58 --- /dev/null +++ b/test/w3c/ecma/test321.scxml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that _sessionid is bound on startup --><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" name="machineName"> +<datamodel> + <data id="Var1" expr="_sessionid"/> + </datamodel> + + <state id="s0"> +<transition cond="Var1" target="pass"/> + <transition cond="true" target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test322.scxml b/test/w3c/ecma/test322.scxml new file mode 100644 index 0000000..2d0fee1 --- /dev/null +++ b/test/w3c/ecma/test322.scxml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that _sessionid remains bound to the same value throught the session. this means that it can't +be assigned to --><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" name="machineName"> +<datamodel> + <data id="Var1" expr="_sessionid"/> + <data id="Var2"/> + </datamodel> + + <state id="s0"> + <transition target="s1"/> + + </state> + + <state id="s1"> + <onentry> + <assign location="_sessionid" expr="'otherName'"/> + <raise event="foo"/> + </onentry> + + <transition event="error.execution" target="s2"/> + <transition event="*" target="fail"/> + </state> + + <state id="s2"> + + <transition cond="Var1==_sessionid" target="pass"/> + <transition target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test323.scxml b/test/w3c/ecma/test323.scxml new file mode 100644 index 0000000..43fa9c8 --- /dev/null +++ b/test/w3c/ecma/test323.scxml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that _name is bound on startup --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript" name="machineName"> +<datamodel> + <data id="Var1" expr="_name"/> + </datamodel> + + <state id="s0"> +<transition cond="Var1" target="pass"/> + <transition cond="true" target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test324.scxml b/test/w3c/ecma/test324.scxml new file mode 100644 index 0000000..7e5023e --- /dev/null +++ b/test/w3c/ecma/test324.scxml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that _name stays bound till the session ends. This means that it cannot be assigned to --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript" name="machineName"> + + + <state id="s0"> + <transition cond="_name === 'machineName'" target="s1"/> + <transition target="fail"/> + </state> + + <state id="s1"> + <onentry> + <assign location="_name" expr="'otherName'"/> + </onentry> + <transition cond="_name === 'machineName'" target="pass"/> + <transition target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test325.scxml b/test/w3c/ecma/test325.scxml new file mode 100644 index 0000000..eaa4c22 --- /dev/null +++ b/test/w3c/ecma/test325.scxml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that _ioprocessors is bound at startup. I'm not sure how to test for a set value or +how to test that the entries in it do represent I/O processors, since the set that each implementation +supports may be different. Suggestions welcome --><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" name="machineName"> +<datamodel> + <data id="Var1" expr="_ioprocessors"/> + </datamodel> + + + <state id="s0"> + <transition cond="Var1" target="pass"/> + <transition target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test326.scxml b/test/w3c/ecma/test326.scxml new file mode 100644 index 0000000..f18a661 --- /dev/null +++ b/test/w3c/ecma/test326.scxml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that _ioprocessors stays bound till the session ends. This means that it cannot be assigned to --><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" name="machineName"> +<datamodel> + <data id="Var1" expr="_ioprocessors"/> + <data id="Var2"/> + </datamodel> + + <state id="s0"> + <transition cond="Var1" target="s1"/> + <transition cond="true" target="fail"/> + </state> + + + <state id="s1"> + <onentry> + <assign location="_ioprocessors" expr="'otherName'"/> + <raise event="foo"/> + </onentry> + + <transition event="error.execution" target="s2"/> + <transition event="*" target="fail"/> + </state> + + <state id="s2"> + <onentry> + <assign location="Var2" expr="_ioprocessors"/> + </onentry> + <transition cond="Var1==Var2" target="pass"/> + <transition target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test329.scxml b/test/w3c/ecma/test329.scxml new file mode 100644 index 0000000..9a95643 --- /dev/null +++ b/test/w3c/ecma/test329.scxml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that none of the system variables can be modified --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript" name="machineName"> + <datamodel> + <data id="Var1"/> + <data id="Var2"/> + <data id="Var3"/> + <data id="Var4"/> + </datamodel> + + <state id="s0"> + <onentry> + <!-- get _event bound so we can use it in s1--> + <raise event="foo"/> + <assign location="Var1" expr="_sessionid"/> + <assign location="_sessionid" expr="27"/> + </onentry> + + <transition event="foo" cond="Var1==_sessionid" target="s1"/> + <transition event="*" target="fail"/> + </state> + + <state id="s1"> + <onentry> + <assign location="Var2" expr="_event"/> + <assign location="_event" expr="27"/> + </onentry> + <transition cond="Var2==_event" target="s2"/> + <transition target="fail"/> + </state> + +<state id="s2"> + <onentry> + <assign location="Var3" expr="_name"/> + <assign location="_name" expr="27"/> + </onentry> + <transition cond="Var3==_name" target="s3"/> + <transition target="fail"/> + </state> + + +<state id="s3"> + <onentry> + <assign location="Var4" expr="_ioprocessors"/> + <assign location="_ioprocessors" expr="27"/> + </onentry> + <transition cond="Var4==_ioprocessors" target="pass"/> + <transition target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test330.scxml b/test/w3c/ecma/test330.scxml new file mode 100644 index 0000000..5cbf4bc --- /dev/null +++ b/test/w3c/ecma/test330.scxml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- check that the required fields are present in both internal and external events --><scxml xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="ecmascript" name="machineName"> + + <state id="s0"> + <onentry> + <raise event="foo"/> + </onentry> + <transition event="foo" cond="'name' in _event && 'type' in _event && 'sendid' in _event && 'origin' in _event && 'invokeid' && 'data' in _event" target="s1"/> + <transition event="*" target="fail"/> + </state> + + <state id="s1"> + <onentry> + <send event="foo"/> + </onentry> + <transition event="foo" cond="'name' in _event && 'type' in _event && 'sendid' in _event && 'origin' in _event && 'invokeid' && 'data' in _event" target="pass"/> + <transition event="*" target="fail"/> + </state> + + + <final xmlns="http://www.w3.org/2005/07/scxml" id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final xmlns="http://www.w3.org/2005/07/scxml" id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test331.scxml b/test/w3c/ecma/test331.scxml new file mode 100644 index 0000000..e1271f0 --- /dev/null +++ b/test/w3c/ecma/test331.scxml @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8"?><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="ecmascript" initial="s0" name="machineName"> + +<!-- test that _event.type is set correctly for internal, platform, and external events --> +<datamodel> + <data id="Var1"/> + </datamodel> + + <state id="s0"> + <onentry> + <!-- internal event --> + <raise event="foo"/> + </onentry> + <transition event="foo" target="s1"> + <assign location="Var1" expr="_event.type"/> + </transition> + <transition event="*" target="fail"/> + </state> + +<state id="s1"> + <transition cond="Var1=='internal'" target="s2"/> + <transition target="fail"/> + </state> + +<state id="s2"> + <onentry> + <!-- this will generate an error, which is a platform event --> + <assign location="Var2" expr="1"/> + </onentry> + <transition event="error" target="s3"> + <assign location="Var1" expr="_event.type"/> + </transition> + <transition event="*" target="fail"/> + </state> + +<state id="s3"> + <transition cond="Var1=='platform'" target="s4"/> + <transition target="fail"/> + </state> + + <state id="s4"> + <onentry> + <!-- external event --> + <send event="foo"/> + </onentry> + <transition event="foo" target="s5"> + <assign location="Var1" expr="_event.type"/> + </transition> + <transition event="*" target="fail"/> + </state> + +<state id="s5"> + <transition cond="Var1=='external'" target="pass"/> + <transition target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test332.scxml b/test/w3c/ecma/test332.scxml new file mode 100644 index 0000000..da68cf4 --- /dev/null +++ b/test/w3c/ecma/test332.scxml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that sendid is present in error events triggered by send errors --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" initial="s0" datamodel="ecmascript" name="machineName"> + <datamodel> + <data id="Var1"/> + <data id="Var2"/> + </datamodel> + + + <state id="s0"> + <onentry> + <!-- this will raise an error and also store the sendid in var1 --> + <send target="baz" event="foo" idlocation="Var1"/> + </onentry> + <transition event="error" target="s1"> + <!-- get the sendid out of the error event --> + <assign location="Var2" expr="_event.sendid"/> + </transition> + <transition event="*" target="fail"/> + </state> + +<state id="s1"> +<!-- make sure that the sendid in the error event matches the one generated when send executed --> + <transition cond="Var1===Var2" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test333.scxml b/test/w3c/ecma/test333.scxml new file mode 100644 index 0000000..9e06896 --- /dev/null +++ b/test/w3c/ecma/test333.scxml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- make sure sendid is blank in a non-error event --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" initial="s0" datamodel="ecmascript" name="machineName"> + + <state id="s0"> + <onentry> + <send event="foo"/> + </onentry> + <transition event="foo" cond="typeof _event.sendid === 'undefined' " target="pass"/> + <transition event="*" target="fail"/> + </state> + + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test335.scxml b/test/w3c/ecma/test335.scxml new file mode 100644 index 0000000..a56074a --- /dev/null +++ b/test/w3c/ecma/test335.scxml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that origin field is blank for internal events --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" initial="s0" datamodel="ecmascript" name="machineName"> + + <state id="s0"> + <onentry> + <raise event="foo"/> + </onentry> + <transition event="foo" cond="typeof _event.origin === 'undefined' " target="pass"/> + <transition event="*" target="fail"/> + </state> + + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test336.scxml b/test/w3c/ecma/test336.scxml new file mode 100644 index 0000000..92bd3dd --- /dev/null +++ b/test/w3c/ecma/test336.scxml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the origin field of an external event contains a URL that lets you send back to the originator. In +this case it's the same session, so if we get bar we succeed --><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" name="machineName"> + + <state id="s0"> + <onentry> + <send event="foo"/> + </onentry> + <transition event="foo" target="s1"> + <send event="bar" targetexpr="_event.origin" typeexpr="_event.origintype"/> + </transition> + <transition event="*" target="fail"/> + </state> + +<state id="s1"> + <onentry> + <send event="baz"/> + </onentry> + <transition event="bar" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test337.scxml b/test/w3c/ecma/test337.scxml new file mode 100644 index 0000000..71092a8 --- /dev/null +++ b/test/w3c/ecma/test337.scxml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that origintype is blank on internal events --><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" name="machineName"> + + <state id="s0"> + <onentry> + <raise event="foo"/> + </onentry> + <transition event="foo" cond="typeof _event.origintype === 'undefined' " target="pass"/> + <transition event="*" target="fail"/> + </state> + + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test338.scxml b/test/w3c/ecma/test338.scxml new file mode 100644 index 0000000..fef53be --- /dev/null +++ b/test/w3c/ecma/test338.scxml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that invokeid is set correctly in events received from an invoked process. timeout event catches the +case where the invoke doesn't work correctly --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1"/> + <data id="Var2"/> + </datamodel> + + <state id="s0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <invoke idlocation="Var1" type="http://www.w3.org/TR/scxml/"> + <content> + <scxml initial="sub0" version="1.0" datamodel="ecmascript" name="machineName"> + <final id="sub0"> + <onentry> + <send target="#_parent" event="event1"/> + </onentry> + </final> + </scxml> + </content> + </invoke> + <transition event="event1" target="s1"> + <assign location="Var2" expr="_event.invokeid"/> + </transition> + <transition event="event0" target="fail"/> + </state> + +<state id="s1"> + <transition cond="Var1===Var2" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test339.scxml b/test/w3c/ecma/test339.scxml new file mode 100644 index 0000000..82864c9 --- /dev/null +++ b/test/w3c/ecma/test339.scxml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that invokeid is blank in an event that wasn't returned from an invoked process --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript" name="machineName"> + + <state id="s0"> + <onentry> + <raise event="foo"/> + </onentry> + <transition event="foo" cond="typeof _event.invokeid === 'undefined' " target="pass"/> + <transition event="*" target="fail"/> + </state> + + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test342.scxml b/test/w3c/ecma/test342.scxml new file mode 100644 index 0000000..2934704 --- /dev/null +++ b/test/w3c/ecma/test342.scxml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that eventexpr works and sets the name field of the resulting event --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript" name="machineName"> + <datamodel> + <data id="Var1" expr="'foo'"/> + <data id="Var2"/> + </datamodel> + + <state id="s0"> + <onentry> + <send eventexpr="Var1"/> + </onentry> + <transition event="foo" target="s1"> + <assign location="Var2" expr="_event.name"/> + </transition> + <transition event="*" target="fail"/> + </state> + +<state id="s1"> + <transition cond="Var1===Var2" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test343.scxml b/test/w3c/ecma/test343.scxml new file mode 100644 index 0000000..7f15cf0 --- /dev/null +++ b/test/w3c/ecma/test343.scxml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that illegal <param> produces error.execution and empty event.data --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="ecmascript" initial="s0"> + + + <state id="s0" initial="s01"> + <!-- we should get the error before the done event --> + <transition event="error.execution" target="s1"/> + <transition event="done.state.s0" target="fail"/> + + <transition event="done.state.s0" target="fail"> + </transition> + + <state id="s01"> + <transition target="s02"/> + </state> + <final id="s02"> + <donedata> + <param location="Varfoo" name="someParam"/> + </donedata> + </final> + </state> + + + <!-- if we get here, we received the error event. Now check that the done + event has empty event.data --> + + <state id="s1"> + <transition event="done.state.s0" cond="typeof _event.data === 'undefined'" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test344.scxml b/test/w3c/ecma/test344.scxml new file mode 100644 index 0000000..068581d --- /dev/null +++ b/test/w3c/ecma/test344.scxml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that a cond expression that cannot be evaluated as a +boolean cond expression evaluates to false and causes error.execution to be raised. +In some languages, any valid expression/object can be converted to a boolean, so conf:nonBoolean will +have to be mapped onto something that produces a syntax error or something similarly invalid --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="ecmascript" initial="s0"> + +<state id="s0"> + <transition cond="return" target="fail"/> + <transition target="s1"/> + </state> + +<state id="s1"> + <onentry> + <raise event="foo"/> + </onentry> + <transition event="error.execution" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test346.scxml b/test/w3c/ecma/test346.scxml new file mode 100644 index 0000000..622de71 --- /dev/null +++ b/test/w3c/ecma/test346.scxml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that any attempt to change the value of a system variable causes error.execution to be raised. +Event1..4 are there to catch the case where the error event is not raised. In cases where it is, we have +to dispose of eventn in the next state, hence the targetless transitions (which simply throw away the event.) --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript" name="machineName"> + + + <state id="s0"> + <onentry> + <assign location="_sessionid" expr="'otherName'"/> + <raise event="event1"/> + </onentry> + + <transition event="error.execution" target="s1"/> + <transition event="*" target="fail"/> + </state> + + <state id="s1"> + <onentry> + <assign location="_event" expr="'otherName'"/> + <raise event="event2"/> + </onentry> + <!-- throw out event1 if it's still around --> + <transition event="event1"/> + <transition event="error.execution" target="s2"/> + <!-- event1 would trigger this transition if we didn't drop it. We want this transition to have + a very general trigger to catch cases where the wrong error event was raised --> + <transition event="*" target="fail"/> + </state> + +<state id="s2"> + <onentry> + <assign location="_ioprocessors" expr="'otherName'"/> + <raise event="event3"/> + </onentry> + <transition event="event2"/> + <transition event="error.execution" target="s3"/> + <transition event="*" target="fail"/> + </state> + +<state id="s3"> + <onentry> + <assign location="_name" expr="'otherName'"/> + <raise event="event4"/> + </onentry> + <transition event="event3"/> + <transition event="error.execution" target="pass"/> + <transition event="*" target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test347.scxml b/test/w3c/ecma/test347.scxml new file mode 100644 index 0000000..7ed7cca --- /dev/null +++ b/test/w3c/ecma/test347.scxml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the scxml event I/O processor works by sending events back and forth between an invoked child +and its parent process --><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"> + + +<state id="s0" initial="s01"> + <invoke id="child" type="scxml"> + <content> + <scxml initial="sub0" version="1.0" datamodel="ecmascript" name="machineName"> + <state id="sub0"> + <onentry> + <send type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" target="#_parent" event="childToParent"/> + </onentry> + <transition event="parentToChild" target="subFinal"/> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + <onentry> + <send delay="20s" event="timeout"/> + </onentry> + <transition event="timeout" target="fail"/> + + <state id="s01"> + <transition event="childToParent" target="s02"/> + </state> + + <state id="s02"> + <onentry> + <send type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" target="#_child" event="parentToChild"/> + </onentry> + <transition event="done.invoke" target="pass"/> + <transition event="error" target="fail"/> + </state> +</state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test348.scxml b/test/w3c/ecma/test348.scxml new file mode 100644 index 0000000..dc4b301 --- /dev/null +++ b/test/w3c/ecma/test348.scxml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?><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"> + + <!-- test that event param of send sets the name of the event --> + +<state id="s0"> + + <onentry> + <send type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" event="s0Event"/> + </onentry> + <transition event="s0Event" target="pass"/> + <transition event="*" target="fail"/> + +</state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test349.scxml b/test/w3c/ecma/test349.scxml new file mode 100644 index 0000000..7fe2408 --- /dev/null +++ b/test/w3c/ecma/test349.scxml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that value in origin field can be used to send an event back to the sender --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1"/> + </datamodel> + +<state id="s0"> + + <onentry> + <send type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" event="s0Event"/> + </onentry> + <transition event="s0Event" target="s2"> + <assign location="Var1" expr="_event.origin"/> + </transition> + <transition event="*" target="fail"/> + +</state> + +<state id="s2"> + <onentry> + <send type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" targetexpr="Var1" event="s0Event2"/> + </onentry> + <transition event="s0Event2" target="pass"/> + <transition event="*" target="fail"/> +</state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test350.scxml b/test/w3c/ecma/test350.scxml new file mode 100644 index 0000000..b401ab1 --- /dev/null +++ b/test/w3c/ecma/test350.scxml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that target value is used to decide what session to deliver the event to. A session should be +able to send an event to itself using its own session ID as the target --><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"> +<datamodel> + <data id="Var1" expr="'#_scxml_' + _sessionid"/> + </datamodel> + +<state id="s0"> + + <onentry> + <send delay="5s" event="timeout"/> + <send type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" targetexpr="Var1" event="s0Event"/> + </onentry> + <transition event="s0Event" target="pass"/> + <transition event="*" target="fail"/> + +</state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test351.scxml b/test/w3c/ecma/test351.scxml new file mode 100644 index 0000000..a308a14 --- /dev/null +++ b/test/w3c/ecma/test351.scxml @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that sendid is set in event if present in send, blank otherwise --><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"> +<datamodel> + <data id="Var1"/> + <data id="Var2"/> + </datamodel> + + +<state id="s0"> + + <onentry> + <send delay="5s" event="timeout"/> + <send type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" id="send1" event="s0Event"/> + </onentry> + <transition event="s0Event" target="s1"> + <assign location="Var1" expr="_event.sendid"/> + </transition> + <transition event="*" target="fail"> + </transition> + +</state> + +<state id="s1"> + <transition cond="Var1=='send1'" target="s2"/> + <transition target="fail"/> + </state> + +<state id="s2"> + + <onentry> + <send delay="5s" event="timeout"/> + <send event="s0Event2"/> + </onentry> + <transition event="s0Event2" target="s3"> + <assign location="Var2" expr="_event.sendid"/> + </transition> + <transition event="*" target="fail"/> +</state> + +<state id="s3"> + <transition cond="!Var2" target="pass"/> + <transition target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test352.scxml b/test/w3c/ecma/test352.scxml new file mode 100644 index 0000000..513089a --- /dev/null +++ b/test/w3c/ecma/test352.scxml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test the origintype is 'http://www.w3.org/TR/scxml/#SCXMLEventProcessor' --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1"/> + </datamodel> + + +<state id="s0"> + <onentry> + <send delay="5s" event="timeout"/> + <send type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" event="s0Event"/> + </onentry> + <transition event="s0Event" target="s1"> + <assign location="Var1" expr="_event.origintype"/> + </transition> + <transition event="*" target="fail"> + </transition> + +</state> + +<state id="s1"> + <transition cond="Var1=='http://www.w3.org/TR/scxml/#SCXMLEventProcessor'" target="pass"/> + <transition target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test354.scxml b/test/w3c/ecma/test354.scxml new file mode 100644 index 0000000..3a3c33b --- /dev/null +++ b/test/w3c/ecma/test354.scxml @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that event.data can be populated using both namelist, param and <content> +and that correct values are used --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1" expr="1"/> + <data id="Var2"/> + <data id="Var3"/> + </datamodel> + +<state id="s0"> + <onentry> + <send delay="5s" event="timeout"/> + <send event="event1" type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" namelist="Var1"> + <param name="param1" expr="2"/> + </send> + </onentry> + <transition event="event1" target="s1"> + <assign location="Var2" expr="_event.data.Var1"/> + <assign location="Var3" expr="_event.data.param1"/> + </transition> + <transition event="*" target="fail"> + </transition> + +</state> + +<state id="s1"> + + <transition cond="Var2==1" target="s2"/> + <transition target="fail"/> + </state> + +<state id="s2"> + <transition cond="Var3==2" target="s3"/> + <transition target="fail"/> + </state> + +<state id="s3"> + <onentry> + <send delay="5s" event="timeout"/> + <send event="event2"> + <content>foo</content> + </send> + </onentry> + <transition event="event2" cond="_event.data === 'foo'" target="pass"/> + <transition event="*" target="fail"/> + +</state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test355.scxml b/test/w3c/ecma/test355.scxml new file mode 100644 index 0000000..6a77251 --- /dev/null +++ b/test/w3c/ecma/test355.scxml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that default initial state is first in document order. If we enter s0 first we succeed, if s1, failure. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="ecmascript" version="1.0"> + + +<state id="s0"> + <transition target="pass"/> +</state> + +<state id="s1"> + <transition target="fail"/> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test364.scxml b/test/w3c/ecma/test364.scxml new file mode 100644 index 0000000..ac57647 --- /dev/null +++ b/test/w3c/ecma/test364.scxml @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that default initial states are entered when a compound state is entered. First we test +the 'initial' attribute, then the initial element, then default to the first child in document order. +If we get to s01111 we succeed, if any other state, failure. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="ecmascript" initial="s1" version="1.0"> + +<state id="s1" initial="s11p112 s11p122"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="timeout" target="fail"/> + <state id="s11" initial="s111"> + <state id="s111"/> + <parallel id="s11p1"> + <state id="s11p11" initial="s11p111"> + <state id="s11p111"/> + <state id="s11p112"> + <onentry> + <raise event="In-s11p112"/> + </onentry> + </state> + </state> + <state id="s11p12" initial="s11p121"> + <state id="s11p121"/> + <state id="s11p122"> + <transition event="In-s11p112" target="s2"/> + </state> + </state> + </parallel> + </state> +</state> + +<state id="s2"> + <initial> + <transition target="s21p112 s21p122"/> + </initial> + <transition event="timeout" target="fail"/> + <state id="s21" initial="s211"> + <state id="s211"/> + <parallel id="s21p1"> + <state id="s21p11" initial="s21p111"> + <state id="s21p111"/> + <state id="s21p112"> + <onentry> + <raise event="In-s21p112"/> + </onentry> + </state> + </state> + <state id="s21p12" initial="s21p121"> + <state id="s21p121"/> + <state id="s21p122"> + <transition event="In-s21p112" target="s3"/> + </state> + </state> + </parallel> + </state> +</state> + +<state id="s3"> + <transition target="fail"/> + <state id="s31"> + <state id="s311"> + <state id="s3111"> + <transition target="pass"/> + </state> + <state id="s3112"/> + <state id="s312"/> + <state id="s32"/> +</state> +</state> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test372.scxml b/test/w3c/ecma/test372.scxml new file mode 100644 index 0000000..9b6c7ec --- /dev/null +++ b/test/w3c/ecma/test372.scxml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that entering a final state generates done.state.parentid after executing the onentry elements. +Var1 should be set to 2 (but not 3) by the time the event is raised --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="ecmascript" version="1.0"> + +<datamodel> + <data id="Var1" expr="1"/> + </datamodel> + +<state id="s0" initial="s0final"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="done.state.s0" cond="Var1==2" target="pass"/> + <transition event="*" target="fail"/> + + <final id="s0final"> + <onentry> + <assign location="Var1" expr="2"/> + </onentry> + <onexit> + <assign location="Var1" expr="3"/> + </onexit> + </final> +</state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test375.scxml b/test/w3c/ecma/test375.scxml new file mode 100644 index 0000000..1652588 --- /dev/null +++ b/test/w3c/ecma/test375.scxml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that onentry handlers are executed in document order. event1 should be raised before event2 --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="ecmascript" version="1.0"> + + + +<state id="s0"> + <onentry> + <raise event="event1"/> + </onentry> + <onentry> + <raise event="event2"/> + </onentry> + + <transition event="event1" target="s1"/> + <transition event="*" target="fail"/> + +</state> + +<state id="s1"> + <transition event="event2" target="pass"/> + <transition event="*" target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test376.scxml b/test/w3c/ecma/test376.scxml new file mode 100644 index 0000000..1da5a9a --- /dev/null +++ b/test/w3c/ecma/test376.scxml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that each onentry handler is a separate block. The <send> of event1 will cause an error but + the increment to var1 should happen anyways --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="ecmascript" version="1.0"> +<datamodel> + <data id="Var1" expr="1"/> + </datamodel> + +<state id="s0"> + <onentry> + <send target="baz" event="event1"/> + </onentry> + <onentry> + <assign location="Var1" expr="Var1 + 1"/> + </onentry> + + <transition cond="Var1==2" target="pass"/> + <transition target="fail"/> + +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test377.scxml b/test/w3c/ecma/test377.scxml new file mode 100644 index 0000000..49549c8 --- /dev/null +++ b/test/w3c/ecma/test377.scxml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that onexit handlers are executed in document order. event1 should be raised before event2 --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="ecmascript" version="1.0"> + + + +<state id="s0"> + <onexit> + <raise event="event1"/> + </onexit> + <onexit> + <raise event="event2"/> + </onexit> + + <transition target="s1"/> + </state> + + <state id="s1"> + + <transition event="event1" target="s2"/> + <transition event="*" target="fail"/> + +</state> + +<state id="s2"> + <transition event="event2" target="pass"/> + <transition event="*" target="fail"/> +</state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test378.scxml b/test/w3c/ecma/test378.scxml new file mode 100644 index 0000000..34501fb --- /dev/null +++ b/test/w3c/ecma/test378.scxml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that each onexithandler is a separate block. The <send> of event1 will cause an error but + the increment to var1 should happen anyways --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1" expr="1"/> + </datamodel> + +<state id="s0"> + <onexit> + <send target="baz" event="event1"/> + </onexit> + <onexit> + <assign location="Var1" expr="Var1 + 1"/> + </onexit> + +<transition target="s1"/> +</state> + +<state id="s1"> + <transition cond="Var1==2" target="pass"/> + <transition target="fail"/> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test387.scxml b/test/w3c/ecma/test387.scxml new file mode 100644 index 0000000..35fb910 --- /dev/null +++ b/test/w3c/ecma/test387.scxml @@ -0,0 +1,97 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the default history state works correctly. From initial state s3 we take a transition to s0's default +shallow history state. That should generate "enteringS011", which takes us to s4. In s4, we +transition to s1's default deep history state. We should end up in s122, generating "enteringS122". Otherwise failure.--><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s3" version="1.0" datamodel="ecmascript"> + + +<state id="s0" initial="s01"> + + <transition event="enteringS011" target="s4"/> + <transition event="*" target="fail"/> + + <history type="shallow" id="s0HistShallow"> + <transition target="s01"/> + </history> + <history type="deep" id="s0HistDeep"> + <transition target="s022"/> + </history> + <state id="s01" initial="s011"> + <state id="s011"> + <onentry> + <raise event="enteringS011"/> + </onentry> + </state> + <state id="s012"> + <onentry> + <raise event="enteringS012"/> + </onentry> + </state> + </state> + <state id="s02" initial="s021"> + <state id="s021"> + <onentry> + <raise event="enteringS021"/> + </onentry> + </state> + <state id="s022"> + <onentry> + <raise event="enteringS022"/> + </onentry> + </state> + </state> + +</state> + +<state id="s1" initial="s11"> + + <transition event="enteringS122" target="pass"/> + <transition event="*" target="fail"/> + + <history type="shallow" id="s1HistShallow"> + <transition target="s11"/> + </history> + <history type="deep" id="s1HistDeep"> + <transition target="s122"/> + </history> + <state id="s11" initial="s111"> + <state id="s111"> + <onentry> + <raise event="enteringS111"/> + </onentry> + </state> + <state id="s112"> + <onentry> + <raise event="enteringS112"/> + </onentry> + </state> + </state> + <state id="s12" initial="s121"> + <state id="s121"> + <onentry> + <raise event="enteringS121"/> + </onentry> + </state> + <state id="s122"> + <onentry> + <raise event="enteringS122"/> + </onentry> + </state> + </state> + +</state> + + +<state id="s3"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <transition target="s0HistShallow"/> +</state> + +<state id="s4"> + <transition target="s1HistDeep"/> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test388.scxml b/test/w3c/ecma/test388.scxml new file mode 100644 index 0000000..6a93fd0 --- /dev/null +++ b/test/w3c/ecma/test388.scxml @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that history states works correctly. The counter Var1 counts how many times +we have entered s0. The initial state is s012. We then transition to s1, which transitions +to s0's deep history state. entering.s012 should be raised, otherwise failure. Then we transition +to s02, which transitions to s0's shallow history state. That should have value s01, and its initial +state is s011, so we should get entering.s011, otherwise failure.--><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" initial="s012" datamodel="ecmascript"> +<datamodel> + <data id="Var1" expr="0"/> + </datamodel> + +<state id="s0" initial="s01"> + <onentry> + <assign location="Var1" expr="Var1 + 1"/> + </onentry> + + <!-- the first time through, go to s1, setting a timer just in case something hangs --> + <transition event="entering.s012" cond="Var1==1" target="s1"> + <send event="timeout" delay="2s"/> + </transition> + + <!-- the second time, we should get entering.s012. If so, go to s2, otherwise fail --> + <transition event="entering.s012" cond="Var1==2" target="s2"/> + <transition event="entering" cond="Var1==2" target="fail"/> + + <!-- the third time we should get entering-s011. If so, pass, otherwise fail --> + <transition event="entering.s011" cond="Var1==3" target="pass"/> + <transition event="entering" cond="Var1==3" target="fail"/> + + <!-- if we timeout, the state machine is hung somewhere, so fail --> + <transition event="timeout" target="fail"/> + + <history type="shallow" id="s0HistShallow"> + <transition target="s02"/> + </history> + <history type="deep" id="s0HistDeep"> + <transition target="s022"/> + </history> + <state id="s01" initial="s011"> + <state id="s011"> + <onentry> + <raise event="entering.s011"/> + </onentry> + </state> + <state id="s012"> + <onentry> + <raise event="entering.s012"/> + </onentry> + </state> + </state> + <state id="s02" initial="s021"> + <state id="s021"> + <onentry> + <raise event="entering.s021"/> + </onentry> + </state> + <state id="s022"> + <onentry> + <raise event="entering.s022"/> + </onentry> + </state> + </state> + +</state> + + +<state id="s1"> + <transition target="s0HistDeep"/> +</state> + +<state id="s2"> + <transition target="s0HistShallow"/> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test396.scxml b/test/w3c/ecma/test396.scxml new file mode 100644 index 0000000..dbbb124 --- /dev/null +++ b/test/w3c/ecma/test396.scxml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the value in _event.name matches the event name used to match against transitions --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="ecmascript" version="1.0"> + +<state id="s0"> + <onentry> + <raise event="foo"/> + </onentry> + + + <transition event="foo" cond="_event.name == 'foo'" target="pass"/> + <transition event="foo" target="fail"/> + +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test399.scxml b/test/w3c/ecma/test399.scxml new file mode 100644 index 0000000..e5a951e --- /dev/null +++ b/test/w3c/ecma/test399.scxml @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the event name matching works correctly, including prefix matching and the fact +that the event attribute of transition may contain multiple event designators. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + + <!-- this will catch the failure case --> + <transition event="timeout" target="fail"/> + + <state id="s01"> + <onentry> + <raise event="foo"/> + </onentry> + <!-- test that an event can match against a transition with multiple descriptors --> + <transition event="foo bar" target="s02"/> + </state> + + <state id="s02"> + <onentry> + <raise event="bar"/> + </onentry> + <!-- test that an event can match the second descriptor as well --> + <transition event="foo bar" target="s03"/> + </state> + + <state id="s03"> + <onentry> + <raise event="foo.zoo"/> + </onentry> + <!-- test that a prefix descriptor matches --> + <transition event="foo bar" target="s04"/> + </state> + +<state id="s04"> + <onentry> + <raise event="foos"/> + </onentry> + <!-- test that only token prefixes match --> + <transition event="foo" target="fail"/> + <transition event="foos" target="s05"/> +</state> + +<state id="s05"> + <onentry> + <raise event="foo.zoo"/> + </onentry> + <!-- test that .* works at the end of a descriptor --> + <transition event="foo.*" target="s06"/> + </state> + + <state id="s06"> + <onentry> + <raise event="foo"/> + </onentry> + <!-- test that "*" works by itself --> + <transition event="*" target="pass"/> + </state> + +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test401.scxml b/test/w3c/ecma/test401.scxml new file mode 100644 index 0000000..9ce7217 --- /dev/null +++ b/test/w3c/ecma/test401.scxml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that errors go in the internal event queue. We send ourselves an external event foo, then perform +and operation that raises an error. Then check that the error event is processed first, even though +it was raised second --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <send event="foo"/> + <!-- assigning to a non-existent location should raise an error --> + <assign location="Var1" expr="2"/> + </onentry> + + + <transition event="foo" target="fail"/> + <transition event="error" 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>
\ No newline at end of file diff --git a/test/w3c/ecma/test402.scxml b/test/w3c/ecma/test402.scxml new file mode 100644 index 0000000..104483d --- /dev/null +++ b/test/w3c/ecma/test402.scxml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- the assertion that errors are 'like any other event' is pretty broad, but we can check that they +are pulled off the internal queue in order, and that prefix matching works on them. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0" initial="s01"> + <onentry> + <!-- catch the failure case --> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="timeout" target="fail"/> + + <state id="s01"> + <onentry> + <!-- the first internal event. The error will be the second, and event2 will be the third --> + <raise event="event1"/> + <!-- assigning to a non-existent location should raise an error --> + <assign location="Var1" expr="2"/> + </onentry> + + <transition event="event1" target="s02"> + <raise event="event2"/> + </transition> + <transition event="*" target="fail"/> + </state> + +<state id="s02"> + <transition event="error" target="s03"/> + <transition event="*" target="fail"/> + </state> + +<state id="s03"> + <transition event="event2" target="pass"/> + <transition event="*" target="fail"/> + </state> + +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test403a.scxml b/test/w3c/ecma/test403a.scxml new file mode 100644 index 0000000..89a4ad9 --- /dev/null +++ b/test/w3c/ecma/test403a.scxml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test one part of 'optimal enablement' meaning that of all transitions that are enabled, we chose the ones +in child states over parent states, and use document order to break ties. We have +a parent state s0 with two children, s01 and s02. In s01, we test that a) if +a transition in the child matches, we don't consider matches in the parent and b) +that if two transitions match in any state, we take the first in document order. +In s02 we test that we take a transition in the parent if there is no +matching transition in the child. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0" initial="s01"> + <onentry> + <!-- catch the failure case --> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="timeout" target="fail"/> + <transition event="event1" target="fail"/> + <transition event="event2" target="pass"/> + + <state id="s01"> + <onentry> + <!-- this should be caught by the first transition in this state, taking us to S02 --> + <raise event="event1"/> + </onentry> + + <transition event="event1" target="s02"/> + <transition event="*" target="fail"/> + </state> + +<state id="s02"> + <onentry> + <!-- since the local transition has a cond that evaluates to false this should be caught by a + transition in the parent state, taking us to pass --> + <raise event="event2"/> + </onentry> + <transition event="event1" target="fail"/> + <transition event="event2" cond="false" target="fail"/> + </state> + +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test403b.scxml b/test/w3c/ecma/test403b.scxml new file mode 100644 index 0000000..18acfb5 --- /dev/null +++ b/test/w3c/ecma/test403b.scxml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that 'optimally enabled set' really is a set, specifically that if a transition is optimally enabled in +two different states, it is taken only once. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + <datamodel> + <data id="Var1" expr="0"/> + </datamodel> + +<state id="s0" initial="p0"> + <!-- this transition should never be taken because a transition in a lower state should + always be selected --> + <transition event="event1"> + <assign location="Var1" expr="Var1 + 1"/> + </transition> + + + + <parallel id="p0"> + + <onentry> + <raise event="event1"/> + <raise event="event2"/> + </onentry> + + <!-- this transition will be selected by both states p0s1 and p0s2, but should be executed only once --> + <transition event="event1"> + <assign location="Var1" expr="Var1 + 1"/> + </transition> + + <state id="p0s1"> + <transition event="event2" cond="Var1==1" target="pass"/> + <transition event="event2" target="fail"/> + </state> + + <state id="p0s2"/> + +</parallel> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test403c.scxml b/test/w3c/ecma/test403c.scxml new file mode 100644 index 0000000..9e7fd12 --- /dev/null +++ b/test/w3c/ecma/test403c.scxml @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test 'optimally enabled set', specifically that preemption works correctly --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + <datamodel> + <data id="Var1" expr="0"/> + </datamodel> + +<state id="s0" initial="p0"> + <onentry> + <raise event="event1"/> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="event2" target="fail"/> + <transition event="timeout" target="fail"/> + + <parallel id="p0"> + + <state id="p0s1"> + <transition event="event1"/> + <transition event="event2"/> + </state> + + <state id="p0s2"> + <transition event="event1" target="p0s1"> + <raise event="event2"/> + </transition> + + </state> + + <state id="p0s3"> + <!-- this transition should be blocked by the one in p0s2--> + <transition event="event1" target="fail"/> + <!-- this transition will preempt the one that p0s2 inherits + from an ancestor --> + <transition event="event2" target="s1"/> + + </state> + +<state id="p0s4"> + <!-- this transition never gets preempted, should fire twice --> + <transition event="*"> + <assign location="Var1" expr="Var1 + 1"/> + </transition> + </state> + +</parallel> +</state> + +<state id="s1"> + <transition cond="Var1==2" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test404.scxml b/test/w3c/ecma/test404.scxml new file mode 100644 index 0000000..ad6bb24 --- /dev/null +++ b/test/w3c/ecma/test404.scxml @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that states are exited in exit order (children before parents with reverse doc order used to break ties + before the executable content in the transitions. event1, event2, event3, event4 should be raised in that + order when s01p is exited --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0" initial="s01p"> + + + +<parallel id="s01p"> + <onexit> + <!-- this should be the 3rd event raised --> + <raise event="event3"/> + </onexit> + <transition target="s02"> + <!-- this should be the fourth event raised --> + <raise event="event4"/> + </transition> + + <state id="s01p1"> + <onexit> + <!-- this should be the second event raised --> + <raise event="event2"/> + </onexit> + </state> + + <state id="s01p2"> + <!-- this should be the first event raised --> + <onexit> + <raise event="event1"/> + </onexit> + </state> + </parallel> + + <state id="s02"> + <transition event="event1" target="s03"/> + <transition event="*" target="fail"/> + </state> + + <state id="s03"> + <transition event="event2" target="s04"/> + <transition event="*" target="fail"/> + </state> + + <state id="s04"> + <transition event="event3" target="s05"/> + <transition event="*" target="fail"/> + </state> + + <state id="s05"> + <transition event="event4" target="pass"/> + <transition event="*" target="fail"/> + </state> + + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test405.scxml b/test/w3c/ecma/test405.scxml new file mode 100644 index 0000000..114cf22 --- /dev/null +++ b/test/w3c/ecma/test405.scxml @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the executable content in the transitions is executed in document order after +the states are exited. event1, event2, event3, event4 should be raised in that order when the +state machine is entered --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + +<state id="s0" initial="s01p"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="timeout" target="fail"/> + +<parallel id="s01p"> + <transition event="event1" target="s02"/> + + + <state id="s01p1" initial="s01p11"> + <state id="s01p11"> + <onexit> + <!-- this should be the second event raised --> + <raise event="event2"/> + </onexit> + <transition target="s01p12"> + <!-- this should be the third event raised --> + <raise event="event3"/> + </transition> + </state> + <state id="s01p12"/> + </state> <!-- end s01p1 --> + + <state id="s01p2" initial="s01p21"> + <state id="s01p21"> + <onexit> + <!-- this should be the first event raised --> + <raise event="event1"/> + </onexit> + <transition target="s01p22"> + <!-- this should be the fourth event raised --> + <raise event="event4"/> + </transition> + </state> + <state id="s01p22"/> + + </state> <!-- end s01p2 --> + </parallel> + + + <state id="s02"> + <transition event="event2" target="s03"/> + <transition event="*" target="fail"/> + </state> + + <state id="s03"> + <transition event="event3" target="s04"/> + <transition event="*" target="fail"/> + </state> + + + <state id="s04"> + <transition event="event4" target="pass"/> + <transition event="*" target="fail"/> + </state> + + </state> <!-- end s01 --> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test406.scxml b/test/w3c/ecma/test406.scxml new file mode 100644 index 0000000..a8f8f99 --- /dev/null +++ b/test/w3c/ecma/test406.scxml @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- Test that states are entered in entry order (parents before children with document order used to break ties) +after the executable content in the transition is executed. event1, event2, event3, event4 should be raised in that +order when the transition in s01 is taken --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" initial="s0" datamodel="ecmascript"> + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="timeout" target="fail"/> + + <state id="s01"> + <transition target="s0p2"> + <!-- this should be the first event raised --> + <raise event="event1"/> + </transition> + </state> + +<parallel id="s0p2"> + + <transition event="event1" target="s03"/> + + <state id="s01p21"> + <onentry> + <!-- third event --> + <raise event="event3"/> + </onentry> + </state> + + <state id="s01p22"> + <onentry> + <!-- the fourth event --> + <raise event="event4"/> + </onentry> + </state> + + <onentry> + <!-- this should be the second event raised --> + <raise event="event2"/> + </onentry> + </parallel> + + + <state id="s03"> + <transition event="event2" target="s04"/> + <transition event="*" target="fail"/> + </state> + + <state id="s04"> + <transition event="event3" target="s05"/> + <transition event="*" target="fail"/> + </state> + + + <state id="s05"> + <transition event="event4" target="pass"/> + <transition event="*" target="fail"/> + </state> + + </state> <!-- end s0 --> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test407.scxml b/test/w3c/ecma/test407.scxml new file mode 100644 index 0000000..0407c99 --- /dev/null +++ b/test/w3c/ecma/test407.scxml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- a simple test that onexit handlers work. var1 should be incremented when we leave s0 --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1" expr="0"/> + </datamodel> + +<state id="s0"> + <onexit> + <assign location="Var1" expr="Var1 + 1"/> + </onexit> + <transition target="s1"/> +</state> + +<state id="s1"> + <transition cond="Var1==1" target="pass"/> + <transition target="fail"/> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test409.scxml b/test/w3c/ecma/test409.scxml new file mode 100644 index 0000000..9b4f1aa --- /dev/null +++ b/test/w3c/ecma/test409.scxml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that states are removed from the active states list as they are exited. When s01's onexit handler +fires, s011 should not be on the active state list, so in(S011) should be false, and event1 should not +be raised. Therefore the timeout should fire to indicate success --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + + <transition event="timeout" target="pass"/> + <transition event="event1" target="fail"/> + + <state id="s01" initial="s011"> + <onexit> + <if cond="In('s011')"> + <raise event="event1"/> + </if> + </onexit> + + <state id="s011"> + <transition target="s02"/> + </state> + </state> <!-- end s01 --> + +<state id="s02"/> + +</state> <!-- end s0 --> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test411.scxml b/test/w3c/ecma/test411.scxml new file mode 100644 index 0000000..8e1c673 --- /dev/null +++ b/test/w3c/ecma/test411.scxml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that states are added to the active states list as they are entered and before onentry handlers +are executed. When s0's onentry handler fires we should not be in s01. But when s01's onentry handler +fires, we should be in s01. Therefore event1 should not fire, but event2 should. Either event1 or +timeout also indicates failure --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="1s"/> + <if cond="In('s01')"> + <raise event="event1"/> + </if> + </onentry> + + <transition event="timeout" target="fail"/> + <transition event="event1" target="fail"/> + <transition event="event2" target="pass"/> + + <state id="s01"> + <onentry> + <if cond="In('s01')"> + <raise event="event2"/> + </if> + </onentry> + </state> + +</state> <!-- end s0 --> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test412.scxml b/test/w3c/ecma/test412.scxml new file mode 100644 index 0000000..4a8b26a --- /dev/null +++ b/test/w3c/ecma/test412.scxml @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that executable content in the <initial> transition executes after the onentry handler on the state +and before the onentry handler of the child states. Event1, event2, and event3 should occur in that order. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + + <transition event="timeout" target="fail"/> + <transition event="event1" target="fail"/> + <transition event="event2" target="pass"/> + + <state id="s01"> + <onentry> + <raise event="event1"/> + </onentry> + <initial> + <transition target="s011"> + <raise event="event2"/> + </transition> + </initial> + + <state id="s011"> + <onentry> + <raise event="event3"/> + </onentry> + <transition target="s02"/> + </state> + </state> + +<state id="s02"> + <transition event="event1" target="s03"/> + <transition event="*" target="fail"/> + </state> + +<state id="s03"> + <transition event="event2" target="s04"/> + <transition event="*" target="fail"/> + </state> + +<state id="s04"> + <transition event="event3" target="pass"/> + <transition event="*" target="fail"/> + </state> + +</state> <!-- end s0 --> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test413.scxml b/test/w3c/ecma/test413.scxml new file mode 100644 index 0000000..94e32a2 --- /dev/null +++ b/test/w3c/ecma/test413.scxml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the state machine is put into the configuration specified by the initial element, without regard +to any other defaults. we should start off in s2p111 and s2p122. the atomic +states we should not enter all have immediate transitions to failure in them --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s2p112 s2p122" version="1.0" datamodel="ecmascript"> + + <state id="s1"> + <transition target="fail"/> + </state> + +<state id="s2" initial="s2p1"> + +<parallel id="s2p1"> + <!-- this transition will be triggered only if we end up in an illegal configuration where we're in + either s2p112 or s2p122, but not both of them --> + <transition target="fail"/> + + <state id="s2p11" initial="s2p111"> + <state id="s2p111"> + <transition target="fail"/> + </state> + + <state id="s2p112"> + <transition cond="In('s2p122')" target="pass"/> + </state> + + </state> <!-- end s2p11 --> + + <state id="s2p12" initial="s2p121"> + <state id="s2p121"> + <transition target="fail"/> + </state> + + <state id="s2p122"> + <transition cond="In('s2p112')" target="pass"/> + </state> + </state> + +</parallel> + +</state> <!-- end s2 --> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test415.scxml b/test/w3c/ecma/test415.scxml new file mode 100644 index 0000000..159218b --- /dev/null +++ b/test/w3c/ecma/test415.scxml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- Test that the state machine halts when it enters a top-level final state. Since + the initial state is a final state, this machine should halt immediately without + processing "event1" which is raised in the final state's on-entry handler. This + is a manual test since there is no platform-independent way to test that event1 + is not processed --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="final" version="1.0" datamodel="ecmascript"> + <final id="final"> + <onentry> + <raise event="event1"/> + </onentry> + </final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test416.scxml b/test/w3c/ecma/test416.scxml new file mode 100644 index 0000000..45799e4 --- /dev/null +++ b/test/w3c/ecma/test416.scxml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the done.state.id gets generated when we enter the final state of a compound state --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" initial="s1" datamodel="ecmascript"> + + <state id="s1" initial="s11"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="timeout" target="fail"/> + + <state id="s11" initial="s111"> + <transition event="done.state.s11" target="pass"/> + <state id="s111"> + <transition target="s11final"/> + </state> + <final id="s11final"/> + </state> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test417.scxml b/test/w3c/ecma/test417.scxml new file mode 100644 index 0000000..5ca6144 --- /dev/null +++ b/test/w3c/ecma/test417.scxml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that we get the done.state.id event when all of a +parallel elements children enter final states. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" initial="s1" datamodel="ecmascript"> + + <state id="s1" initial="s1p1"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="timeout" target="fail"/> + + <parallel id="s1p1"> + <transition event="done.state.s1p1" target="pass"/> + + <state id="s1p11" initial="s1p111"> + <state id="s1p111"> + <transition target="s1p11final"/> + </state> + <final id="s1p11final"/> + </state> + + <state id="s1p12" initial="s1p121"> + <state id="s1p121"> + <transition target="s1p12final"/> + </state> + <final id="s1p12final"/> + </state> + + </parallel> +</state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test419.scxml b/test/w3c/ecma/test419.scxml new file mode 100644 index 0000000..c4de17e --- /dev/null +++ b/test/w3c/ecma/test419.scxml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that eventless transitions take precedence over event-driven ones --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" initial="s1" datamodel="ecmascript"> + + <state id="s1"> + <onentry> + <raise event="internalEvent"/> + <send event="externalEvent"/> + </onentry> + + <transition event="*" target="fail"/> + <transition 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>
\ No newline at end of file diff --git a/test/w3c/ecma/test421.scxml b/test/w3c/ecma/test421.scxml new file mode 100644 index 0000000..1747334 --- /dev/null +++ b/test/w3c/ecma/test421.scxml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that internal events take priority over external ones, and that the processor +keeps pulling off internal events until it finds one that triggers a transition --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" initial="s1" datamodel="ecmascript"> + + <state id="s1" initial="s11"> + <onentry> + <send event="externalEvent"/> + <raise event="internalEvent1"/> + <raise event="internalEvent2"/> + <raise event="internalEvent3"/> + <raise event="internalEvent4"/> + </onentry> + + <transition event="externalEvent" target="fail"/> + + <state id="s11"> + <transition event="internalEvent3" target="s12"/> + </state> + + <state id="s12"> + <transition event="internalEvent4" target="pass"/> + </state> + +</state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test422.scxml b/test/w3c/ecma/test422.scxml new file mode 100644 index 0000000..803f75f --- /dev/null +++ b/test/w3c/ecma/test422.scxml @@ -0,0 +1,75 @@ +<?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="ecmascript"> +<datamodel> + <data id="Var1" expr="0"/> + </datamodel> + <state id="s1" initial="s11"> + <onentry> + <send event="timeout" delay="5s"/> + </onentry> + <transition event="invokeS1 invokeS12"> + <assign 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="ecmascript"> + <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="ecmascript"> + <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="ecmascript"> + <state id="sub2"> + <onentry> + <send target="#_parent" event="invokeS12"/> + </onentry> + <transition target="subFinal2"/> + </state> + <final id="subFinal2"/> + </scxml> + </content> + </invoke> + </state> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test423.scxml b/test/w3c/ecma/test423.scxml new file mode 100644 index 0000000..f6287ab --- /dev/null +++ b/test/w3c/ecma/test423.scxml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that we keep pulling external events off the queue till we find one that matches a transition. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + + <state id="s0"> + <onentry> + <send event="externalEvent1"/> + <send event="externalEvent2" delay="1s"/> + <raise event="internalEvent"/> + </onentry> + <!-- in this state we should process only internalEvent --> + <transition event="internalEvent" target="s1"/> + <transition event="*" target="fail"/> + </state> + + <state id="s1"> + <!-- in this state we ignore externalEvent1 and wait for externalEvent2 --> + <transition event="externalEvent2" target="pass"/> + <transition event="internalEvent" target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test436.scxml b/test/w3c/ecma/test436.scxml new file mode 100644 index 0000000..d8b2ca2 --- /dev/null +++ b/test/w3c/ecma/test436.scxml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that in() predicate works in null data model --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="null" version="1.0" initial="p"> + + + <parallel id="p"> + + <state id="ps0"> + <transition cond="In('s1')" target="fail"/> + <transition cond="In('ps1')" target="pass"/> + <transition target="fail"/> + </state> + + <state id="ps1"/> + </parallel> + + <state id="s1"/> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test444.scxml b/test/w3c/ecma/test444.scxml new file mode 100644 index 0000000..c689674 --- /dev/null +++ b/test/w3c/ecma/test444.scxml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that <data> creates a new ecmascript variable. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="ecmascript" version="1.0"> + <datamodel> + <data id="var1" expr="1"/> + </datamodel> + +<state id="s0"> +<!-- test that var1 can be used as an ecmascript variable --> + <transition cond="++var1==2" target="pass"/> + <transition target="fail"/> +</state> + + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test445.scxml b/test/w3c/ecma/test445.scxml new file mode 100644 index 0000000..f1ae24b --- /dev/null +++ b/test/w3c/ecma/test445.scxml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that ecmascript objects defined by <data> have value undefined if <data> does not assign a value --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="ecmascript" version="1.0"> + <datamodel> + <data id="var1"/> + </datamodel> + +<state id="s0"> + + <transition cond="var1==undefined" target="pass"/> + <transition target="fail"/> +</state> + + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test448.scxml b/test/w3c/ecma/test448.scxml new file mode 100644 index 0000000..adbc121 --- /dev/null +++ b/test/w3c/ecma/test448.scxml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that all ecmascript objects are placed in a single global scope --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="ecmascript" version="1.0"> + + +<state id="s0"> +<!-- test that a parent state can access a variable defined in a child --> + <transition cond="var1==1" target="s1"/> + <transition target="fail"/> + <state id="s01"> + <datamodel> + <data id="var1" expr="1"/> + </datamodel> + </state> + </state> + <state id="s1" initial="s01p"> + <parallel id="s01p"> + <state id="s01p1"> + <!-- test that we can access a variable defined in a parallel sibling state --> + <transition cond="var2==1" target="pass"/> + <transition target="fail"/> + </state> + <state id="s01p2"> + <datamodel> + <data id="var2" expr="1"/> + </datamodel> + </state> + </parallel> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test449.scxml b/test/w3c/ecma/test449.scxml new file mode 100644 index 0000000..d06cc9a --- /dev/null +++ b/test/w3c/ecma/test449.scxml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that ecmascript objects are converted to booleans inside cond --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="ecmascript" version="1.0"> + + +<state id="s0"> + <transition cond="'foo'" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test451.scxml b/test/w3c/ecma/test451.scxml new file mode 100644 index 0000000..e939ded --- /dev/null +++ b/test/w3c/ecma/test451.scxml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- simple test of the in() predicate --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="ecmascript" initial="p"> + + + <parallel id="p"> + + <state id="s0"> + <transition cond="In('s1')" target="pass"/> + <transition target="fail"/> + </state> + + <state id="s1"/> + </parallel> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test452.scxml b/test/w3c/ecma/test452.scxml new file mode 100644 index 0000000..4f38ca7 --- /dev/null +++ b/test/w3c/ecma/test452.scxml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that we can assign to any location in the datamodel. In this case, we just test that we can assign +to a substructure (not the top level variable). This may not be the most idiomatic way to write the test --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="ecmascript" version="1.0"> + <datamodel> + <data id="foo" expr="0"/> + </datamodel> + <script> + function testobject() { + this.bar = 0;} + </script> +<state id="s0"> + <onentry> + <assign location="foo" expr="new testobject();"/> +<!-- try to assign to foo's bar property --> + <assign location="foo.bar" expr="1"/> + <raise event="event1"/> + </onentry> +<!-- test that we have assigned to foo's bar property --> + <transition event="event1" cond="foo.bar == 1" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test453.scxml b/test/w3c/ecma/test453.scxml new file mode 100644 index 0000000..33b904d --- /dev/null +++ b/test/w3c/ecma/test453.scxml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that we can use any ecmascript expression as a value expression. +In this case, we just test that we can assign +a function to a variable and then call it. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="ecmascript" version="1.0"> + <datamodel> + <data id="var1" expr="function(invar) {return invar + 1;}"/> + </datamodel> + +<state id="s0"> + <onentry> + <raise event="event1"/> + </onentry> +<!-- test that we can call the function --> + <transition event="event1" cond="var1(2) == 3" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test456.scxml b/test/w3c/ecma/test456.scxml new file mode 100644 index 0000000..2865fb2 --- /dev/null +++ b/test/w3c/ecma/test456.scxml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we can't test that _any_ ecmascript is valid inside <script>, so we +just run a simple one and check that it can update the data model. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1" expr="0"/> + </datamodel> + + <state id="s0"> + <onentry> + <script> + Var1+=1 + </script> + </onentry> + <transition cond="Var1==1" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test457.scxml b/test/w3c/ecma/test457.scxml new file mode 100644 index 0000000..86cf156 --- /dev/null +++ b/test/w3c/ecma/test457.scxml @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that an the legal iterable collections are arrays, namely objects that satisfy instanceof(Array) in ECMAScript. + the legal values for the 'item' attribute on foreach are legal ECMAScript variable names.. --><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"> +<datamodel> + <data id="Var1" expr="0"/> + <data id="Var2"/> + <data id="Var3"/> + <data id="Var4" expr="7"/> + <data id="Var5" expr="[1,2,3]"/> + <data id="Var6"/> + </datamodel> + + <state id="s0"> + <onentry> +<!-- invalid array, legal item --> + <foreach item="Var2" index="Var3" array="Var4"> + <assign location="Var1" expr="Var1 + 1"/> + </foreach> + <raise event="foo"/> + </onentry> + <transition event="error.execution" target="s1"/> + <transition event="*" target="fail"/> + </state> + + <state id="s1"> + <onentry> +<!-- illegal item, legal array --> + <foreach item="'continue'" index="Var3" array="Var5"> + <assign location="Var1" expr="Var1 + 1"/> + </foreach> + <raise event="bar"/> + </onentry> + <transition event="error.execution" target="s2"/> + <transition event="bar" target="fail"/> + </state> + +<state id="s2"> + <!-- check that var1 has its original value (so executable content never got executed --> + <transition cond="Var1==0" target="s3"/> + <transition target="fail"/> + </state> + + +<!-- finally check that a legal array works properly --> +<state id="s3"> + <onentry> + <assign location="Var6" expr="0"/> + <foreach item="Var2" array="Var5"> + <assign location="Var6" expr="Var6 + Var2"/> + </foreach> + </onentry> + <transition cond="Var6==6" target="pass"/> + <transition target="fail"/> + </state> + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test460.scxml b/test/w3c/ecma/test460.scxml new file mode 100644 index 0000000..8ba3e5e --- /dev/null +++ b/test/w3c/ecma/test460.scxml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that <foreach> does a shallow copy, so that modifying the array does not change +the iteration behavior. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="ecmascript" version="1.0"> + <datamodel> + <data id="Var1" expr="[1,2,3]"/> + <data id="Var2" expr="0"/> <!-- counts the number of iterations --> + </datamodel> + +<state id="s0"> + <onentry> + <foreach item="Var3" array="Var1"> + <assign location="Var1" expr="[].concat(Var1, [4])"/> + <assign location="Var2" expr="Var2 + 1"/> + </foreach> + </onentry> + + <transition cond="Var2==3" target="pass"/> + <transition target="fail"/> +</state> + + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test463.scxml b/test/w3c/ecma/test463.scxml new file mode 100644 index 0000000..4f32b84 --- /dev/null +++ b/test/w3c/ecma/test463.scxml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the <data> tag creates an element in the XML datamodel with the correct name and id attr +and binds an XPath variable to it --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="foo" expr="2"/> + </datamodel> + +<state id="s0"> + + + <transition cond="local-name($foo)='data'and $foo/@id ='foo'" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test464.scxml b/test/w3c/ecma/test464.scxml new file mode 100644 index 0000000..bd640f2 --- /dev/null +++ b/test/w3c/ecma/test464.scxml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that an unassigned variable creates an empty <data> element --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="foo"/> + </datamodel> + +<state id="s0"> + + + <transition cond="count($foo) = 1 and count($foo/*) = 0" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test465.scxml b/test/w3c/ecma/test465.scxml new file mode 100644 index 0000000..a91bb06 --- /dev/null +++ b/test/w3c/ecma/test465.scxml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that all xpath variables are in a single global scope--><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="foo" expr="2"/> + </datamodel> + +<state id="s0"> + <transition cond="count($foo) = 1 and count($bar) = 1" target="s1"/> + <transition target="fail"/> + </state> + + +<state id="s1"> + <datamodel> + <data id="bar" expr="1"/> + </datamodel> + <transition 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>
\ No newline at end of file diff --git a/test/w3c/ecma/test466.scxml b/test/w3c/ecma/test466.scxml new file mode 100644 index 0000000..1431fab --- /dev/null +++ b/test/w3c/ecma/test466.scxml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that xpath expressions are converted to boolean when used as conditional expressions--><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="foo" expr="2"/> + </datamodel> + +<state id="s0"> + <transition cond="$foo" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test467.scxml b/test/w3c/ecma/test467.scxml new file mode 100644 index 0000000..130b7bc --- /dev/null +++ b/test/w3c/ecma/test467.scxml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that in() is available --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <transition cond="In('s0')" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test468.scxml b/test/w3c/ecma/test468.scxml new file mode 100644 index 0000000..3b6902d --- /dev/null +++ b/test/w3c/ecma/test468.scxml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that XPath expressions can be used as location expressions. + This example is taken from the spec --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cities"> + <list xmlns=""> + <city id="nyc" count="0">New York</city> + <city id="bos" count="0">Boston</city> + </list> + </data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cities/list/city[@id='nyc']/@count" expr="1"/> + </onentry> + <transition cond="$cities/list/city[@id='nyc']/@count = 1" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test469.scxml b/test/w3c/ecma/test469.scxml new file mode 100644 index 0000000..02fe476 --- /dev/null +++ b/test/w3c/ecma/test469.scxml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that XPath expressions can be used as value expressions. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="copyOfEventData"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="event1"> + <param name="param1" expr="1"/> + </send> + </onentry> + <transition event="event1" target="s1"> + <assign location="$copyOfEventData" expr="$_event/data"/> + </transition> + </state> + +<state id="s1"> + <transition cond="$copyOfEventData/data/data[@id='param1'] =1" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test470.scxml b/test/w3c/ecma/test470.scxml new file mode 100644 index 0000000..3c26bb1 --- /dev/null +++ b/test/w3c/ecma/test470.scxml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the processor makes a deep copy of a node set when assigning. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="var1"> + <foo xmlns=""> + <bar>2</bar> + </foo> + </data> + <data id="var2"/> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$var2" expr="$var1/foo"/> + <assign location="$var1/foo/bar" expr="3"/> + </onentry> + <transition cond="$var2/foo/bar=2" target="pass"/> + <transition target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test473.scxml b/test/w3c/ecma/test473.scxml new file mode 100644 index 0000000..4a57129 --- /dev/null +++ b/test/w3c/ecma/test473.scxml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that 'replacechildren' in <assign> replaces all children with the new value. + This example is taken from the doc --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cart/myCart/books/book[1]"> + <bookinfo xmlns=""> + <isdn>12334455</isdn> + <author>some author</author> + </bookinfo> +</assign> + </onentry> + <transition cond="$cart/myCart/books/book[1]/bookinfo/isdn/text() = '12334455' and not($cart/myCart/books/book[1]/title)" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test474.scxml b/test/w3c/ecma/test474.scxml new file mode 100644 index 0000000..decad75 --- /dev/null +++ b/test/w3c/ecma/test474.scxml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that 'firstchild' in <assign> inserts the new value before the other children. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cart/myCart/books/book[1]" type="firstchild"> + <bookinfo xmlns=""> + <isdn>12334455</isdn> + <author>some author</author> + </bookinfo> +</assign> + </onentry> + <transition cond="$cart/myCart/books/book[1]/*[1]/isdn/text() = '12334455' and $cart/myCart/books/book[1]/*[2]/text() = 'The Zen Mind'" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test475.scxml b/test/w3c/ecma/test475.scxml new file mode 100644 index 0000000..0f9cdfe --- /dev/null +++ b/test/w3c/ecma/test475.scxml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that 'lastchild' in <assign> inserts the new value after the other children. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cart/myCart/books/book[1]" type="lastchild"> + <bookinfo xmlns=""> + <isdn>12334455</isdn> + <author>some author</author> + </bookinfo> +</assign> + </onentry> + <transition cond="$cart/myCart/books/book[1]/*[2]/isdn/text() = '12334455' and $cart/myCart/books/book[1]/*[1]/text() = 'The Zen Mind'" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test476.scxml b/test/w3c/ecma/test476.scxml new file mode 100644 index 0000000..d3fe8e8 --- /dev/null +++ b/test/w3c/ecma/test476.scxml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that 'nextsibling' in <assign> inserts the new value after the location. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cart/myCart/books/book[1]/title" type="nextsibling"> + <bookinfo xmlns=""> + <isdn>12334455</isdn> + <author>some author</author> + </bookinfo> +</assign> + </onentry> + <transition cond="$cart/myCart/books/book[1]/*[2]/isdn/text() = '12334455' and $cart/myCart/books/book[1]/*[1]/text() = 'The Zen Mind'" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test477.scxml b/test/w3c/ecma/test477.scxml new file mode 100644 index 0000000..1726866 --- /dev/null +++ b/test/w3c/ecma/test477.scxml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that 'previoussibling' in <assign> inserts the new value before the location. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cart/myCart/books/book[1]/title" type="previoussibling"> + <bookinfo xmlns=""> + <isdn>12334455</isdn> + <author>some author</author> + </bookinfo> +</assign> + </onentry> + <transition cond="$cart/myCart/books/book[1]/*[1]/isdn/text() = '12334455' and $cart/myCart/books/book[1]/*[2]/text() = 'The Zen Mind'" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test478.scxml b/test/w3c/ecma/test478.scxml new file mode 100644 index 0000000..9821608 --- /dev/null +++ b/test/w3c/ecma/test478.scxml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that 'replace' in <assign> replaces the value at the location. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cart/myCart/books/book[2]" type="replace"> + <cd xmlns=""> + <title>This is not a book</title> + </cd> +</assign> + </onentry> + + <transition cond="$cart/myCart/books/cd/title = 'This is not a book'" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test479.scxml b/test/w3c/ecma/test479.scxml new file mode 100644 index 0000000..3d5b1ac --- /dev/null +++ b/test/w3c/ecma/test479.scxml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that 'delete' in <assign> deletes the value at the location. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cart/myCart/cds" type="delete"> + <cd xmlns=""> + <title>This is not a book</title> + </cd> +</assign> + </onentry> + + <transition cond="not($cart/myCart/cds)" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test480.scxml b/test/w3c/ecma/test480.scxml new file mode 100644 index 0000000..0fde260 --- /dev/null +++ b/test/w3c/ecma/test480.scxml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that 'addattr' in <assign> adds an attribute to the specified node. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cart/myCart/books/book[1]" type="addattribute" attr="author" expr="'somebody'"/> + </onentry> + + <transition cond="$cart/myCart/books/book[1]/@author = 'somebody'" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test481.scxml b/test/w3c/ecma/test481.scxml new file mode 100644 index 0000000..a0505f6 --- /dev/null +++ b/test/w3c/ecma/test481.scxml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that illegal assignments fail and have no side effects. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="3s"/> + <assign location="$cart/myCart/cds/cd/@name"> + <foo> + <bar/> + </foo> +</assign> + </onentry> + + <transition event="error.execution" cond="$cart/myCart/cds/cd/@name = 'Something'" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test482.scxml b/test/w3c/ecma/test482.scxml new file mode 100644 index 0000000..00eb3fe --- /dev/null +++ b/test/w3c/ecma/test482.scxml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that system vars are created and bound to XPath variables --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" name="scxmltest" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <onentry> + <!-- event isn't bound until an event is raised --> + <raise event="someevent"/> + </onentry> + <transition event="*" cond="local-name($_event) = 'data' and local-name($_sessionid) = 'data' and local-name($_name) = 'data' and local-name($_ioprocessors) = 'data'" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test483.scxml b/test/w3c/ecma/test483.scxml new file mode 100644 index 0000000..0a1b236 --- /dev/null +++ b/test/w3c/ecma/test483.scxml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that foreach works correctly, iterating over node set in document order. + This tests assertions 483-485 --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" name="scxmltest" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="var1"> + <nodes xmlns=""> + <node/> + <node/> + <node/> + </nodes> + </data> + </datamodel> + +<state id="s0"> + <onentry> + <foreach array="$var1/nodes/node" item="item" index="pos"> + <assign location="$item" type="addattribute" attr="position" expr="$pos"/> + </foreach> + </onentry> + + <transition cond="$var1/nodes/node[1]/@position = 1 and $var1/nodes/node[2]/@position = 2 and $var1/nodes/node[3]/@position = 3" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test487.scxml b/test/w3c/ecma/test487.scxml new file mode 100644 index 0000000..30a50eb --- /dev/null +++ b/test/w3c/ecma/test487.scxml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test illegal assignment. error.execution should be raised. --><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"> +<datamodel> + <data id="Var1" expr="return"/> + </datamodel> + +<state id="s0"> + <onentry> + <raise event="event"/> + </onentry> + + <transition event="error.execution" target="pass"/> + <transition event="*" target="fail"/> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test488.scxml b/test/w3c/ecma/test488.scxml new file mode 100644 index 0000000..9d9e1d8 --- /dev/null +++ b/test/w3c/ecma/test488.scxml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that illegal expr in <param> produces error.execution and empty event.data --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="ecmascript" initial="s0"> + + + <state id="s0" initial="s01"> + <!-- we should get the error before the done event --> + <transition event="error.execution" target="s1"/> + <transition event="done.state.s0" target="fail"/> + + <transition event="done.state.s0" target="fail"> + </transition> + + <state id="s01"> + <transition target="s02"/> + </state> + <final id="s02"> + <donedata> + <param expr="return" name="someParam"/> + </donedata> + </final> + </state> + + + <!-- if we get here, we received the error event. Now check that the done + event has empty event.data --> + + <state id="s1"> + <transition event="done.state.s0" cond="typeof _event.data === 'undefined'" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test495.scxml b/test/w3c/ecma/test495.scxml new file mode 100644 index 0000000..e3a8e58 --- /dev/null +++ b/test/w3c/ecma/test495.scxml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the scxml event i/o processor puts events in the correct queues.--><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <!-- default target is external queue --> + <send event="event1" type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor"/> + <send event="event2" target="#_internal" type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor"/> + </onentry> + <!-- we should get the internal event first --> + <transition event="event1" target="fail"/> + <transition event="event2" target="s1"/> + </state> + +<state id="s1"> + <transition event="event1" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test500.scxml b/test/w3c/ecma/test500.scxml new file mode 100644 index 0000000..26beec6 --- /dev/null +++ b/test/w3c/ecma/test500.scxml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that location field is found inside entry for SCXML Event I/O processor --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1" expr="_ioprocessors['http://www.w3.org/TR/scxml/#SCXMLEventProcessor'].location"/> + </datamodel> + +<state id="s0"> + <transition cond="Var1" target="pass"/> + <transition target="fail"/> + + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test501.scxml b/test/w3c/ecma/test501.scxml new file mode 100644 index 0000000..6cca0f5 --- /dev/null +++ b/test/w3c/ecma/test501.scxml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the location entry for the SCXML Event I/O processor can be used as the target for an event --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1" expr="_ioprocessors['http://www.w3.org/TR/scxml/#SCXMLEventProcessor'].location"/> + </datamodel> + +<state id="s0"> + <onentry> + <send targetexpr="Var1" event="foo"/> + <send event="timeout" delay="2s"/> + </onentry> + <transition event="foo" target="pass"/> + <transition event="*" target="fail"/> + + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test503.scxml b/test/w3c/ecma/test503.scxml new file mode 100644 index 0000000..6e1ab2b --- /dev/null +++ b/test/w3c/ecma/test503.scxml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that a targetless transition does not exit and reenter its source state --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s1" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1" expr="0"/> <!-- how often we have exited s2 --> + <data id="Var2" expr="0"/> <!-- how often the targetless transition in s2 has been executed --> + </datamodel> + + <state id="s1"> + <onentry> + <raise event="foo"/> + <raise event="bar"/> + </onentry> + <transition target="s2"/> + </state> + + <state id="s2"> + <onexit> + <assign location="Var1" expr="Var1 + 1"/> + </onexit> + <transition event="foo"> + <assign location="Var2" expr="Var2 + 1"/> + </transition> + <!-- make sure the transition on foo was actually taken --> + <transition event="bar" cond="Var2==1" target="s3"/> + <transition event="bar" target="fail"/> + </state> + + <state id="s3"> + <!-- make sure that s2 was exited only once --> + <transition cond="Var1==1" target="pass"/> + <transition target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test504.scxml b/test/w3c/ecma/test504.scxml new file mode 100644 index 0000000..6e2679b --- /dev/null +++ b/test/w3c/ecma/test504.scxml @@ -0,0 +1,75 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that an external transition exits all states up the the LCCA --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s1" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1" expr="0"/> <!-- how often we have exited p --> + <data id="Var2" expr="0"/> <!-- how often we have exited ps1 --> + <data id="Var3" expr="0"/> <!-- how often we have exited ps2 --> + <data id="Var4" expr="0"/> <!-- how often the transition for foo has been taken --> + <data id="Var5" expr="0"/> <!-- how often we have exited s2 --> + </datamodel> + + <state id="s1"> + <onentry> + <raise event="foo"/> + <raise event="bar"/> + </onentry> + <transition target="p"/> + </state> + +<state id="s2"> + <onexit> + <assign location="Var5" expr="Var5 + 1"/> + </onexit> + +<parallel id="p"> + <onexit> + <assign location="Var1" expr="Var1 + 1"/> + </onexit> + <transition event="foo" target="ps1"> + <assign location="Var4" expr="Var4 + 1"/> + </transition> + + <!-- make sure the transition on foo was actually taken --> + <transition event="bar" cond="Var4==1" target="s3"/> + <transition event="bar" target="fail"/> + + <state id="ps1"> + <onexit> + <assign location="Var2" expr="Var2 + 1"/> + </onexit> + </state> + <state id="ps2"> + <onexit> + <assign location="Var3" expr="Var3 + 1"/> + </onexit> + </state> +</parallel> +</state> + +<state id="s3"> + <!-- make sure that p was exited twice --> + <transition cond="Var1==2" target="s4"/> + <transition target="fail"/> + </state> + +<state id="s4"> + <!-- make sure that ps1 was exited twice --> + <transition cond="Var2==2" target="s5"/> + <transition target="fail"/> + </state> + +<state id="s5"> + <!-- make sure that ps2 was exited twice --> + <transition cond="Var3==2" target="s6"/> + <transition target="fail"/> + </state> + +<state id="s6"> + <!-- make sure that s1 was exited once --> + <transition cond="Var5==1" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test505.scxml b/test/w3c/ecma/test505.scxml new file mode 100644 index 0000000..01d326b --- /dev/null +++ b/test/w3c/ecma/test505.scxml @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that an internal transition does not exit its source state --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s1" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1" expr="0"/> <!-- how often we have exited s1 --> + <data id="Var2" expr="0"/> <!-- how often we have exited s11 --> + <data id="Var3" expr="0"/> <!-- how often the transition for foo has been taken --> + </datamodel> + + <state id="s1"> + <onentry> + <raise event="foo"/> + <raise event="bar"/> + </onentry> + <onexit> + <assign location="Var1" expr="Var1 + 1"/> + </onexit> + <transition event="foo" type="internal" target="s11"> + <assign location="Var3" expr="Var3 + 1"/> + </transition> + + <!-- make sure the transition on foo was actually taken --> + <transition event="bar" cond="Var3==1" target="s2"/> + <transition event="bar" target="fail"/> + + <state id="s11"> + <onexit> + <assign location="Var2" expr="Var2 + 1"/> + </onexit> + </state> + </state> + +<state id="s2"> + <!-- make sure that s1 was exited once --> + <transition cond="Var1==1" target="s3"/> + <transition target="fail"/> + </state> + + +<state id="s3"> + <!-- make sure that s11 was exited twice --> + <transition cond="Var2==2" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test506.scxml b/test/w3c/ecma/test506.scxml new file mode 100644 index 0000000..1a7a1da --- /dev/null +++ b/test/w3c/ecma/test506.scxml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that an internal transition whose targets are not proper descendants of its source state +behaves like an external transition --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s1" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1" expr="0"/> <!-- how often we have exited s2 --> + <data id="Var2" expr="0"/> <!-- how often we have exited s21 --> + <data id="Var3" expr="0"/> <!-- how often the transition for foo has been taken --> + </datamodel> + + <state id="s1"> + <onentry> + <raise event="foo"/> + <raise event="bar"/> + </onentry> + <transition target="s2"/> + </state> + +<state id="s2" initial="s21"> + <onexit> + <assign location="Var1" expr="Var1 + 1"/> + </onexit> + <transition event="foo" type="internal" target="s2"> + <assign location="Var3" expr="Var3 + 1"/> + </transition> + + <!-- make sure the transition on foo was actually taken --> + <transition event="bar" cond="Var3==1" target="s3"/> + <transition event="bar" target="fail"/> + + <state id="s21"> + <onexit> + <assign location="Var2" expr="Var2 + 1"/> + </onexit> + </state> + +</state> + +<state id="s3"> + <!-- make sure that s2 was exited twice --> + <transition cond="Var1==2" target="s4"/> + <transition target="fail"/> + </state> + +<state id="s4"> + <!-- make sure that s21 was exited twice --> + <transition cond="Var2==2" target="pass"/> + <transition target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test509.scxml b/test/w3c/ecma/test509.scxml new file mode 100644 index 0000000..de55b5d --- /dev/null +++ b/test/w3c/ecma/test509.scxml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that Basic HTTP Event I/O processor uses POST method and that it can receive messages +at the accessURI --><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"> + +<state id="s0"> + <onentry> + <send event="timeout" delay="30s"/> + <send event="test" targetexpr="_ioprocessors['basichttp']['location']" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"/> + </onentry> + <!-- if the event was send by http and we get it, we succeed --> + <transition event="test" cond="_event.raw.search('POST') !== -1" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test510.scxml b/test/w3c/ecma/test510.scxml new file mode 100644 index 0000000..45d3057 --- /dev/null +++ b/test/w3c/ecma/test510.scxml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that Basic HTTP messages go into external queue. --><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"> + +<state id="s0"> + <onentry> + <send event="timeout" delay="30s"/> + <send event="test" targetexpr="_ioprocessors['basichttp']['location']" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"/> + <!-- this creates an internal event --> + <raise event="internal"/> + + </onentry> + <!-- we should get 'internal' first, then 'test' --> + <transition event="internal" target="s1"/> + <transition event="*" target="fail"/> + </state> + + <state id="s1"> + <transition event="test" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test513.scxml b/test/w3c/ecma/test513.scxml new file mode 100644 index 0000000..c26d498 --- /dev/null +++ b/test/w3c/ecma/test513.scxml @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that we get an HTTP success code back on successful delivery. To run this test, implementations +must support an extension to send: if the parameter httpResponse is present with value 'true', then when +the processor gets an http response code back, it must raise an event 'http.n1.nrest' where 'ni' is +the first digit of the response code and 'nrest' are the remaining digits--><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"> + +<state id="s0" initial="s01"> + <datamodel> + <data id="Var1"/> + </datamodel> + + <onentry> + <send event="timeout" delay="30s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <!-- child script. Once we're running send childRunning to parent and include basicHTTPAccess URI --> + <scxml initial="child0" datamodel="ecmascript" version="1.0"> + <state id="child0"> + <onentry> + <send target="#_parent" event="childRunning"> + <param name="uri" expr="_ioprocessors['basichttp']['location']"/> + </send> + </onentry> + </state> + </scxml> + </content> + </invoke> + + <transition event="*" target="fail"/> + + <state id="s01"> + <!-- when we get the event from the child, extract the access uri and use + the basicHTTP event i/o processor to send it an event --> + <transition event="childRunning" target="s02"> + <assign location="Var1" expr="_event.data.uri"/> + <send event="test" targetexpr="Var1" httpResponse="true" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"/> + </transition> + </state> + + <state id="s02"> + <!-- the child should send this back automatically. It does not need to take + any transition on the event --> + <transition event="HTTP.2" target="pass"/> + </state> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test518.scxml b/test/w3c/ecma/test518.scxml new file mode 100644 index 0000000..69f171c --- /dev/null +++ b/test/w3c/ecma/test518.scxml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that that namelist values get encoded as POST parameters. --><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"> +<datamodel> + <data id="Var1" expr="2"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="30s"/> + <send event="test" targetexpr="_ioprocessors['basichttp']['location']" namelist="Var1" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"/> + </onentry> + + <transition event="test" cond="_event.raw.search(/Var1=2/) !== -1" target="pass"/> + <transition event="*" target="fail"/> + + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test519.scxml b/test/w3c/ecma/test519.scxml new file mode 100644 index 0000000..6f559da --- /dev/null +++ b/test/w3c/ecma/test519.scxml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that that <param> values get encoded as POST parameters. . --><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"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="30s"/> + <send event="test" targetexpr="_ioprocessors['basichttp']['location']" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"> + <param name="param1" expr="1"/> + </send> + </onentry> + + <!-- if other end sends us back this event, we succeed --> + <transition event="test" cond="_event.raw.search(/Varparam1=1/) !== -1" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test520.scxml b/test/w3c/ecma/test520.scxml new file mode 100644 index 0000000..daaf3a8 --- /dev/null +++ b/test/w3c/ecma/test520.scxml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that that <content> gets sent as the body of the message. --><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"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="30s"/> + <send targetexpr="_ioprocessors['basichttp']['location']" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"> + <content>this is some content</content> + </send> + </onentry> + + <!-- if other end sends us back this event, we succeed --> + <transition event="HTTP.POST" cond="_event.raw.search(/this is some content/) !== -1" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test521.scxml b/test/w3c/ecma/test521.scxml new file mode 100644 index 0000000..e4b00d8 --- /dev/null +++ b/test/w3c/ecma/test521.scxml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that the processor raises error.communication if it cannot dispatch the event. +(To create an undispatchable event, we choose a non-existent session as target). If it raises +the error event, we succeed. Otherwise we eventually timeout and fail. --><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"> + + +<state id="s0"> + <onentry> + <!-- should cause an error --> + <send target="#_scxml_foo" event="event2"/> + <!-- this will get added to the external event queue after the error has been raised --> + <send event="timeout"/> + </onentry> + + <!-- once we've entered the state, we should check for internal events first --> + <transition event="error.communication" target="pass"/> + <transition event="*" target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test522.scxml b/test/w3c/ecma/test522.scxml new file mode 100644 index 0000000..3f16dac --- /dev/null +++ b/test/w3c/ecma/test522.scxml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that location field the entry for Basic HTTP Event I/O processor can be used +to send a message to the processor --><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"> + +<state id="s0"> + <onentry> + <send event="timeout" delay="30s"/> + <send event="test" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor" targetexpr="_ioprocessors['basichttp']['location']"/> + + </onentry> + <!-- the event we receive should be called 'test', but that's not actually + required for this test. Only that the send deliver some event to us. So if + we get something other than timeout or error, we call it success --> + <transition event="timeout" target="fail"/> + <transition event="error" target="fail"/> + <transition event="*" 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>
\ No newline at end of file diff --git a/test/w3c/ecma/test525.scxml b/test/w3c/ecma/test525.scxml new file mode 100644 index 0000000..432e760 --- /dev/null +++ b/test/w3c/ecma/test525.scxml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that <foreach> does a shallow copy, so that modifying the array does not change +the iteration behavior. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="ecmascript" version="1.0"> + <datamodel> + <data id="Var1"> + [1,2,3] + </data> + <data id="Var2" expr="0"/> <!-- counts the number of iterations --> + </datamodel> + +<state id="s0"> + <onentry> + <foreach item="Var3" array="Var1"> + <assign location="Var1" expr="[].concat(Var1, [4])"/> + <assign location="Var2" expr="Var2 + 1"/> + </foreach> + </onentry> + + <transition cond="Var2==3" target="pass"/> + <transition target="fail"/> +</state> + + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test527.scxml b/test/w3c/ecma/test527.scxml new file mode 100644 index 0000000..426cc6c --- /dev/null +++ b/test/w3c/ecma/test527.scxml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- simple test that 'expr' works with <content> --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="ecmascript" initial="s0"> + + + <state id="s0" initial="s01"> + + <transition event="done.state.s0" cond="_event.data === 'foo'" target="pass"> + </transition> + + <transition event="done.state.s0" target="fail"> + </transition> + + <state id="s01"> + <transition target="s02"/> + </state> + <final id="s02"> + <donedata> + <content expr="'foo'"/> + </donedata> + </final> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test528.scxml b/test/w3c/ecma/test528.scxml new file mode 100644 index 0000000..f0e8911 --- /dev/null +++ b/test/w3c/ecma/test528.scxml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that illegal 'expr' produces error.execution and empty event.data --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="ecmascript" initial="s0"> + + + <state id="s0" initial="s01"> + <!-- we should get the error before the done event --> + <transition event="error.execution" target="s1"/> + <transition event="done.state.s0" target="fail"/> + + <transition event="done.state.s0" target="fail"/> + + <state id="s01"> + <transition target="s02"/> + </state> + <final id="s02"> + <donedata> + <content expr="return"/> + </donedata> + </final> + </state> + + + <!-- if we get here, we received the error event. Now check that the done + event has empty event.data --> + + <state id="s1"> + <transition event="done.state.s0" cond="typeof _event.data === 'undefined'" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test529.scxml b/test/w3c/ecma/test529.scxml new file mode 100644 index 0000000..91dc002 --- /dev/null +++ b/test/w3c/ecma/test529.scxml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- simple test that children workn with <content> --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="ecmascript" initial="s0"> + + + <state id="s0" initial="s01"> + + <transition event="done.state.s0" cond="_event.data === '21'" target="pass"> + </transition> + + <transition event="done.state.s0" target="fail"> + </transition> + + <state id="s01"> + <transition target="s02"/> + </state> + <final id="s02"> + <donedata> + <content>21</content> + </donedata> + </final> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test530.scxml b/test/w3c/ecma/test530.scxml new file mode 100644 index 0000000..9361181 --- /dev/null +++ b/test/w3c/ecma/test530.scxml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that <content> child is evaluated when <invoke> is. Var1 is initialized +with an integer value, then set to an scxml script in the onentry to s0. If <content> +is evaluated at the right time, we should get invoke.done, otherwise an error --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + <datamodel> + <data id="Var1" expr="1"/> + </datamodel> + + <state id="s0"> + <onentry> + <assign location="Var1"> + <scxml version="1.0"><final/></scxml> + </assign> + <send event="timeout" delay="2s"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/"> + <content expr="Var1"/> + </invoke> + + <transition event="done.invoke" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + </scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test531.scxml b/test/w3c/ecma/test531.scxml new file mode 100644 index 0000000..9eaa3f3 --- /dev/null +++ b/test/w3c/ecma/test531.scxml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that that the value of the <param> _scxmleventname gets used as the name +of the raised event. --><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"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="3s"/> + <send targetexpr="_ioprocessors['basichttp']['location']" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"> + <content>_scxmleventname=test</content> + </send> + </onentry> + + <!-- if we get an event named 'test' we succeed. Otherwise fail --> + <transition event="test" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test532.scxml b/test/w3c/ecma/test532.scxml new file mode 100644 index 0000000..412310c --- /dev/null +++ b/test/w3c/ecma/test532.scxml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that that if _scxmleventname is not present, the name of the HTTP method is used +as the name of the resulting event. --><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"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="3s"/> + <send targetexpr="_ioprocessors['basichttp']['location']" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"> + <!-- this content will be ignored, but it's here to make sure we have a message body --> + <content>some content</content> + </send> + </onentry> + + <transition event="HTTP.POST" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test533.scxml b/test/w3c/ecma/test533.scxml new file mode 100644 index 0000000..a4550e3 --- /dev/null +++ b/test/w3c/ecma/test533.scxml @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that an internal transition whose source state is not compound does exit its source state --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s1" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1" expr="0"/> <!-- how often we have exited p --> + <data id="Var2" expr="0"/> <!-- how often we have exited ps1 --> + <data id="Var3" expr="0"/> <!-- how often we have exited ps2 --> + <data id="Var4" expr="0"/> <!-- how often the transition for foo has been taken --> + </datamodel> + + <state id="s1"> + <onentry> + <raise event="foo"/> + <raise event="bar"/> + </onentry> + <transition target="p"/> + </state> + +<parallel id="p"> + <onexit> + <assign location="Var1" expr="Var1 + 1"/> + </onexit> + <transition event="foo" type="internal" target="ps1"> + <assign location="Var4" expr="Var4 + 1"/> + </transition> + + <!-- make sure the transition on foo was actually taken --> + <transition event="bar" cond="Var4==1" target="s2"/> + <transition event="bar" target="fail"/> + + <state id="ps1"> + <onexit> + <assign location="Var2" expr="Var2 + 1"/> + </onexit> + </state> + <state id="ps2"> + <onexit> + <assign location="Var3" expr="Var3 + 1"/> + </onexit> + </state> +</parallel> + +<state id="s2"> + <!-- make sure that p was exited twice --> + <transition cond="Var1==2" target="s3"/> + <transition target="fail"/> + </state> + +<state id="s3"> + <!-- make sure that ps1 was exited twice --> + <transition cond="Var2==2" target="s4"/> + <transition target="fail"/> + </state> + +<state id="s4"> + <!-- make sure that ps2 was exited twice --> + <transition cond="Var3==2" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test534.scxml b/test/w3c/ecma/test534.scxml new file mode 100644 index 0000000..9495d9e --- /dev/null +++ b/test/w3c/ecma/test534.scxml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that that <send> 'event' value gets sent as the param _scxmleventname . --><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"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="30s"/> + <send event="test" targetexpr="_ioprocessors['basichttp']['location']" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"> + </send> + </onentry> + + <!-- if other end sends us back this event, we succeed --> + <transition event="test" cond="_event.raw.search(/Var_scxmleventname=test/) !== -1" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test537.scxml b/test/w3c/ecma/test537.scxml new file mode 100644 index 0000000..350d422 --- /dev/null +++ b/test/w3c/ecma/test537.scxml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the root element of the datamodel is <datamodel> and that <data> elements are its +children--><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="foo" expr="2"/> + </datamodel> + +<state id="s0"> + + + <transition cond="local-name($foo/..)='datamodel'" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test539.scxml b/test/w3c/ecma/test539.scxml new file mode 100644 index 0000000..450bfd9 --- /dev/null +++ b/test/w3c/ecma/test539.scxml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that if the child of <data> is XML, or if XML is loaded via src=, the processor + assigns it as the value of the var --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="var1"> + <books xmlns=""> + <book title="title1"/> + <book title="title2"/> + </books> +</data> + <data id="var2" src="file:test539.txt"/> + </datamodel> + +<state id="s0"> + <transition cond="$var1/books/book[2]/@title = 'title2'" target="s1"/> + <transition target="fail"/> + </state> + +<state id="s1"> + <transition cond="$var2/books/book[2]/@title = 'title2'" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test539.txt b/test/w3c/ecma/test539.txt new file mode 100644 index 0000000..de1b0a1 --- /dev/null +++ b/test/w3c/ecma/test539.txt @@ -0,0 +1,4 @@ + <books xmlns=""> + <book title="title1"/> + <book title="title2"/> + </books>
\ No newline at end of file diff --git a/test/w3c/ecma/test540.scxml b/test/w3c/ecma/test540.scxml new file mode 100644 index 0000000..641509f --- /dev/null +++ b/test/w3c/ecma/test540.scxml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that if the child of <data> is a string or if a string is loaded via src=, the processor + does white space normalization on it and assigns it as the value of the var --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="var1">123 +4 5 +</data> + <data id="var2" src="file:test540.txt"/> + </datamodel> + +<state id="s0"> + <onentry> + <log label="var1 " expr="$var1"/> + </onentry> + <transition cond="$var1 = '123 4 5' and $var2 = '123 4 5'" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test540.txt b/test/w3c/ecma/test540.txt new file mode 100644 index 0000000..2191239 --- /dev/null +++ b/test/w3c/ecma/test540.txt @@ -0,0 +1,3 @@ +123 +4 5 +
\ No newline at end of file diff --git a/test/w3c/ecma/test542.scxml b/test/w3c/ecma/test542.scxml new file mode 100644 index 0000000..1101471 --- /dev/null +++ b/test/w3c/ecma/test542.scxml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that <content> inside <donedata> handles XML and strings, + including white space normalization. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + +<state id="s0" initial="s01"> + <transition event="done.state.s0" cond="$_event/data/books/book[1]/@title = 'title1'" target="s1"/> + <transition event="done" target="fail"/> + <final id="s01"> + <donedata> + <content> + <books xmlns=""> + <book title="title1"/> + <book title="title2"/> + </books> + </content> + </donedata> + </final> + </state> + +<state id="s1" initial="s11"> + <transition event="done.state.s1" cond="$_event/data = '123 4 5'" target="pass"/> + <transition event="done" target="fail"/> + <final id="s11"> + <donedata> + <content>123 +4 5 + </content> + </donedata> + </final> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test543.scxml b/test/w3c/ecma/test543.scxml new file mode 100644 index 0000000..2c5c6de --- /dev/null +++ b/test/w3c/ecma/test543.scxml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that event fields are present as children of _event --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" name="scxmltest" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <onentry> + <!-- event isn't bound until an event is raised --> + <raise event="someevent"/> + </onentry> + <!-- origintype sendid, invokeid and data will not be bound in this event. name, type, and origin + are guaranteed to be there. --> + <transition event="*" cond="$_event/name and $_event/origin and $_event/type" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test544.scxml b/test/w3c/ecma/test544.scxml new file mode 100644 index 0000000..fd09502 --- /dev/null +++ b/test/w3c/ecma/test544.scxml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that kvps are represented as <data> elements under event/data --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" name="scxmltest" initial="s0" version="1.0" datamodel="xpath"> + +<state id="s0"> + <onentry> + <send event="someevent"> + <param name="key1" expr="2"/> + </send> + </onentry> + + <transition event="*" cond="$_event/data/data[@id='key1'] = 2" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test546.scxml b/test/w3c/ecma/test546.scxml new file mode 100644 index 0000000..728843b --- /dev/null +++ b/test/w3c/ecma/test546.scxml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that string content in send is place as a string under event/data --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" name="scxmltest" initial="s0" version="1.0" datamodel="xpath"> + +<state id="s0"> + <onentry> + <send event="someevent"> + <content>some string</content> + </send> + </onentry> + + <transition event="*" cond="$_event/data = 'some string'" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test547.scxml b/test/w3c/ecma/test547.scxml new file mode 100644 index 0000000..8c04c95 --- /dev/null +++ b/test/w3c/ecma/test547.scxml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that assiging to a node set performs the assignment to each node. + This example is taken from the spec. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" name="scxmltest" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cart/myCart/books/book" expr="'The Zen Mind'"/> + </onentry> + + <transition cond="$cart/myCart/books/book[1] = 'The Zen Mind' and $cart/myCart/books/book[2] = 'The Zen Mind'" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test550.scxml b/test/w3c/ecma/test550.scxml new file mode 100644 index 0000000..0ca4c1a --- /dev/null +++ b/test/w3c/ecma/test550.scxml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that expr can be used to assign a value to a var. This test uses early binding --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript" binding="early"> + + <state id="s0"> + + <transition cond="Var1==2" target="pass"/> + <transition target="fail"/> + </state> + + <state id="s1"> + <datamodel> + <data id="Var1" expr="2"/> + </datamodel> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test551.scxml b/test/w3c/ecma/test551.scxml new file mode 100644 index 0000000..cd267eb --- /dev/null +++ b/test/w3c/ecma/test551.scxml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that inline content can be used to assign a value to a var. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" binding="early" datamodel="ecmascript"> + + + <state id="s0"> + + <transition cond="Var1" target="pass"/> + <transition target="fail"/> + </state> + +<state id="s1"> + <datamodel> + <data id="Var1"> + [1,2,3] + </data> + </datamodel> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test552.scxml b/test/w3c/ecma/test552.scxml new file mode 100644 index 0000000..94267c6 --- /dev/null +++ b/test/w3c/ecma/test552.scxml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that src content can be used to assign a value to a var. Edit +test552.txt to have a value that's legal for the datamodel in question --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + <datamodel> + <data id="Var1" src="file:test552.txt"/> + </datamodel> + + <state id="s0"> + + <transition cond="Var1" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test552.txt b/test/w3c/ecma/test552.txt new file mode 100644 index 0000000..d8263ee --- /dev/null +++ b/test/w3c/ecma/test552.txt @@ -0,0 +1 @@ +2
\ No newline at end of file diff --git a/test/w3c/ecma/test553.scxml b/test/w3c/ecma/test553.scxml new file mode 100644 index 0000000..114c4a2 --- /dev/null +++ b/test/w3c/ecma/test553.scxml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that the processor does not dispatch the event if evaluation +of <send>'s args causes an error.. --><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"> + + +<state id="s0"> + <onentry> + <!-- timeout event --> + <send event="timeout" delay="3s"/> + <!-- include a non-existing var in the namelist --> + <send event="event1" namelist="Var2"/> + </onentry> + + <!-- if we get the timeout before event1, we assume that event1 hasn't been sent + We ignore the error event here because this assertion doesn't mention it --> + <transition event="timeout" target="pass"/> + <transition event="event1" target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test554.scxml b/test/w3c/ecma/test554.scxml new file mode 100644 index 0000000..b328ae9 --- /dev/null +++ b/test/w3c/ecma/test554.scxml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that if the evaluation of <invoke>'s args causes an error, the +invocation is cancelled. In this test, that means that we don't get done.invoke +before the timer goes off. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <send event="timer" delay="2s"/> + </onentry> + + <!-- namelist references an undeclared variable --> + <invoke type="http://www.w3.org/TR/scxml/" namelist="Var2"> + <content> + <scxml initial="subFinal" version="1.0" datamodel="ecmascript"> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + <transition event="timer" target="pass"/> + <transition event="done.invoke" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test555.scxml b/test/w3c/ecma/test555.scxml new file mode 100644 index 0000000..79dea75 --- /dev/null +++ b/test/w3c/ecma/test555.scxml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- in the XPATH data model, test that processor coerces types to produce a string + where it's needed --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="var1"> + <books xmlns=""> + <book title="title1"/> + <book title="title2"/> + </books> +</data> + + </datamodel> + +<state id="s0"> + <onentry> + <send eventexpr="$var1"/> + </onentry> + <transition event="error" target="fail"/> + <!-- don't really know what the stringification of that xml structure should be, but if + we get something other than an error, we assume that it worked. --> + <transition event="*" 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>
\ No newline at end of file diff --git a/test/w3c/ecma/test557.scxml b/test/w3c/ecma/test557.scxml new file mode 100644 index 0000000..6f4eed1 --- /dev/null +++ b/test/w3c/ecma/test557.scxml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- in the ECMA data model, test that if the child of <data> is XML, or if XML is loaded via src=, the processor + assigns it as the value of the var --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + <datamodel> + <data id="var1"> + <books xmlns=""> + <book title="title1"/> + <book title="title2"/> + </books> +</data> + <data id="var2" src="file:test557.txt"/> + </datamodel> + +<state id="s0"> + <transition cond="var1.getElementsByTagName('book')[0].getAttribute('title') == 'title1'" target="s1"/> + <transition target="fail"/> + </state> + +<state id="s1"> + <transition cond="var2.getElementsByTagName('book')[1].getAttribute('title') == 'title2'" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test557.txt b/test/w3c/ecma/test557.txt new file mode 100644 index 0000000..a8e51da --- /dev/null +++ b/test/w3c/ecma/test557.txt @@ -0,0 +1,4 @@ +<books xmlns=""> + <book title="title1"/> + <book title="title2"/> + </books>
\ No newline at end of file diff --git a/test/w3c/ecma/test558.scxml b/test/w3c/ecma/test558.scxml new file mode 100644 index 0000000..a075100 --- /dev/null +++ b/test/w3c/ecma/test558.scxml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- in the ECMA data model, test that if the child of <data> is not XML, or if XML is loaded via src=, + the processor treats the value as a string, does whitespace normalization and assigns it to the var.--><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + <datamodel> + <data id="var1"> +this is +a string +</data> + <data id="var2" src="file:test558.txt"/> + </datamodel> + +<state id="s0"> + <transition cond="var1 == 'this is a string'" target="s1"/> + <transition target="fail"/> + </state> + +<state id="s1"> + <transition cond="var2 == 'this is a string'" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test558.txt b/test/w3c/ecma/test558.txt new file mode 100644 index 0000000..bb2bcc7 --- /dev/null +++ b/test/w3c/ecma/test558.txt @@ -0,0 +1,3 @@ + +this is +a string
\ No newline at end of file diff --git a/test/w3c/ecma/test560.scxml b/test/w3c/ecma/test560.scxml new file mode 100644 index 0000000..d283b1a --- /dev/null +++ b/test/w3c/ecma/test560.scxml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- in the ECMA data model, test that processor creates correct structure in + _event.data when receiving KVPs in an event --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <send event="foo"> + <param name="aParam" expr="1"/> + </send> + </onentry> + <transition event="foo" cond="_event.data.aParam == 1" target="pass"/> + <transition event="*" target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test561.scxml b/test/w3c/ecma/test561.scxml new file mode 100644 index 0000000..e50e00c --- /dev/null +++ b/test/w3c/ecma/test561.scxml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- in the ECMA data model, test that processor creates an ECMAScript object + _event.data when receiving JSON in an event --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <send event="foo"> + <content> +<books xmlns=""> +<book title="title1"/> +<book title="title2"/> +</books> +</content> + </send> + </onentry> + <transition event="foo" cond="_event.data.getElementsByTagName('book')[1].getAttribute('title') == 'title2'" target="pass"/> + <transition event="*" target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test562.scxml b/test/w3c/ecma/test562.scxml new file mode 100644 index 0000000..f5997bb --- /dev/null +++ b/test/w3c/ecma/test562.scxml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- in the ECMA data model, test that processor creates space normalized string in + _event.data when receiving anything other than KVPs or XML in an event --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <send event="foo"> + <content> +this is a +string +</content> + </send> + </onentry> + <transition event="foo" cond="_event.data == 'this is a string'" target="pass"/> + <transition event="*" target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test567.scxml b/test/w3c/ecma/test567.scxml new file mode 100644 index 0000000..465105b --- /dev/null +++ b/test/w3c/ecma/test567.scxml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that that any content in the message other than _scxmleventname is used to populate +_event.data. --><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"> +<datamodel> + <data id="Var1" expr="2"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="3s"/> + <!-- in this case, 'test' will be placed in _scxmleventname. The <param> should + be used to populate _event.data --> + <send event="test" targetexpr="_ioprocessors['basichttp']['location']" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"> + <param name="param1" expr="2"/> + </send> + </onentry> + + <!-- if we get this event, we succeed --> + <transition event="test" target="s1"> + <assign location="Var1" expr="_event.data.param1"/> + </transition> + <transition event="*" target="fail"/> + </state> + + <state id="s1"> + <transition cond="Var1==2" target="pass"/> + <transition target="fail"/> + </state> + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test568.scxml b/test/w3c/ecma/test568.scxml new file mode 100644 index 0000000..e8b888f --- /dev/null +++ b/test/w3c/ecma/test568.scxml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that location field is found inside entry for SCXML Event I/O processor in the XPath +data model. The tests for the relevant event i/o processors will test that it can be used to +send events. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <transition cond="$_ioprocessors/[@name='http://www.w3.org/TR/scxml/#SCXMLEventProcessor']/location/text()" target="pass"/> + <transition target="fail"/> + + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test569.scxml b/test/w3c/ecma/test569.scxml new file mode 100644 index 0000000..832a0c0 --- /dev/null +++ b/test/w3c/ecma/test569.scxml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that location field is found inside entry for SCXML Event I/O processor in the ECMAScript +data model. The tests for the relevant event i/o processors will test that it can be used to +send events. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <transition cond="_ioprocessors['scxml'].location" target="pass"/> + <transition target="fail"/> + + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test570.scxml b/test/w3c/ecma/test570.scxml new file mode 100644 index 0000000..2f5ccbe --- /dev/null +++ b/test/w3c/ecma/test570.scxml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that we generate done.state.id when all a parallel state's children are in final states --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="p0" datamodel="ecmascript" version="1.0"> + <datamodel> + <data id="Var1" expr="0"/> + </datamodel> +<parallel id="p0"> + <onentry> + <send event="timeout" delay="2s"/> + <raise event="e1"/> + <raise event="e2"/> + </onentry> + <!-- record that we get the first done event --> + <transition event="done.state.p0s1"> + <assign location="Var1" expr="1"/> + </transition> + <!-- we should get the second done event before done.state.p0 --> + <transition event="done.state.p0s2" target="s1"/> + <transition event="timeout" target="fail"/> + + + <state id="p0s1" initial="p0s11"> + <state id="p0s11"> + <transition event="e1" target="p0s1final"/> + </state> + <final id="p0s1final"/> + </state> + + <state id="p0s2" initial="p0s21"> + <state id="p0s21"> + <transition event="e2" target="p0s2final"/> + </state> + <final id="p0s2final"/> + </state> + + </parallel> + + <state id="s1"> + <!-- if we get done.state.p0, success --> + <transition event="done.state.p0" cond="Var1==1" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test576.scxml b/test/w3c/ecma/test576.scxml new file mode 100644 index 0000000..2bed2ca --- /dev/null +++ b/test/w3c/ecma/test576.scxml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the 'initial' value of scxml is respected. We set the value to deeply nested non-default parallel siblings and +test that both are entered. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s11p112 s11p122" datamodel="ecmascript" version="1.0"> + + +<state id="s0"> + <transition target="fail"/> +</state> + +<state id="s1"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="timeout" target="fail"/> + <state id="s11" initial="s111"> + <state id="s111"/> + <parallel id="s11p1"> + <state id="s11p11" initial="s11p111"> + <state id="s11p111"/> + <state id="s11p112"> + <onentry> + <raise event="In-s11p112"/> + </onentry> + </state> + </state> + <state id="s11p12" initial="s11p121"> + <state id="s11p121"/> + <state id="s11p122"> + <transition event="In-s11p112" target="pass"/> + </state> + </state> + </parallel> + </state> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/ecma/test578.scxml b/test/w3c/ecma/test578.scxml new file mode 100644 index 0000000..bdb5e2d --- /dev/null +++ b/test/w3c/ecma/test578.scxml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- in the ECMA data model, test that processor creates an ECMAScript object + _event.data when receiving JSON in an event --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <send event="foo"> + <content>{ productName : "bar", size : 27 }</content> + </send> + </onentry> + <transition event="foo" cond="_event.data.productName == 'bar'" target="pass"/> + <transition event="*" target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/robots.txt b/test/w3c/txml/robots.txt new file mode 100644 index 0000000..54f3e01 --- /dev/null +++ b/test/w3c/txml/robots.txt @@ -0,0 +1,96 @@ +# +# robots.txt for http://www.w3.org/ +# +# $Id: robots.txt,v 1.66 2012/07/17 21:30:56 gerald Exp $ +# + +# For use by search.w3.org +User-agent: W3C-gsa +Disallow: /Out-Of-Date + +User-agent: W3T_SE +Disallow: /Out-Of-Date + +User-agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT; MS Search 4.0 Robot) +Disallow: / + +# W3C Link checker +User-agent: W3C-checklink +Disallow: + +# the following settings apply to all bots +User-agent: * +# Blogs - WordPress +# https://codex.wordpress.org/Search_Engine_Optimization_for_WordPress#Robots.txt_Optimization +Disallow: /*/wp-admin/ +Disallow: /*/wp-includes/ +Disallow: /*/wp-content/plugins/ +Disallow: /*/wp-content/cache/ +Disallow: /*/wp-content/themes/ +Disallow: /blog/*/trackback/ +Disallow: /blog/*/feed/ +Disallow: /blog/*/comments/ +Disallow: /blog/*/category/*/* +Disallow: /blog/*/*/trackback/ +Disallow: /blog/*/*/feed/ +Disallow: /blog/*/*/comments/ +Disallow: /blog/*/*? +Disallow: /community/trackback/ +Disallow: /community/feed/ +Disallow: /community/comments/ +Disallow: /community/category/*/* +Disallow: /community/*/trackback/ +Disallow: /community/*/feed/ +Disallow: /community/*/comments/ +Disallow: /community/*/category/*/* +Disallow: /community/*? +Disallow: /Consortium/Offices/trackback/ +Disallow: /Consortium/Offices/feed/ +Disallow: /Consortium/Offices/comments/ +Disallow: /Consortium/Offices/category/*/* +Disallow: /Consortium/Offices/*/trackback/ +Disallow: /Consortium/Offices/*/feed/ +Disallow: /Consortium/Offices/*/comments/ +Disallow: /Consortium/Offices/*? +# Wikis - Mediawiki +# https://www.mediawiki.org/wiki/Manual:Robots.txt +Disallow: /wiki/index.php? +Disallow: /wiki/index.php/Help +Disallow: /wiki/index.php/MediaWiki +Disallow: /wiki/index.php/Special: +Disallow: /wiki/index.php/Template +Disallow: /wiki/skins/ +Disallow: /*/wiki/index.php? +Disallow: /*/wiki/index.php/Help +Disallow: /*/wiki/index.php/MediaWiki +Disallow: /*/wiki/index.php/Special: +Disallow: /*/wiki/index.php/Template +# various other access-controlled or expensive areas +Disallow: /2004/ontaria/basic +Disallow: /Team/ +Disallow: /Project +Disallow: /Web +Disallow: /Systems +Disallow: /History +Disallow: /Out-Of-Date +Disallow: /2002/02/mid +Disallow: /mid/ +Disallow: /2005/06/blog/ +Disallow: /2004/08/W3CTalks +Disallow: /2007/11/Talks/search +Disallow: /People/all/ +Disallow: /RDF/Validator/ARPServlet +Disallow: /2003/03/Translations/byLanguage +Disallow: /2003/03/Translations/byTechnology +Disallow: /2005/11/Translations/Query +Disallow: /2000/06/webdata/xslt +Disallow: /2000/09/webdata/xslt +Disallow: /2005/08/online_xslt/xslt +Disallow: /Bugs/ +Disallow: /Search/Mail/Public/ +Disallow: /2006/02/chartergen +Disallow: /2004/01/pp-impl +Disallow: /Consortium/supporters +Disallow: /2007/08/pyRdfa/ +Disallow: /WAI/PF/comments/ + diff --git a/test/w3c/txml/test144.txml b/test/w3c/txml/test144.txml new file mode 100644 index 0000000..73e50b0 --- /dev/null +++ b/test/w3c/txml/test144.txml @@ -0,0 +1,27 @@ +<?xml version="1.0"?> + +<!-- test that events are inserted into the queue in the order in which they are raised. If +foo occurs before bar, success, otherwise failure --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> + <onentry> + <raise event="foo"/> + <raise event="bar"/> + </onentry> + <transition event="foo" target="s1"/> + <transition event="*" conf:targetfail=""/> + + </state> + +<state id="s1"> + <transition event="bar" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test147.txml b/test/w3c/txml/test147.txml new file mode 100644 index 0000000..20363a0 --- /dev/null +++ b/test/w3c/txml/test147.txml @@ -0,0 +1,34 @@ +<?xml version="1.0"?> + +<!-- test that the first clause that evaluates to true - and only that clause - is executed. +Only one event should be raised, and it should be bar --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:expr="0"/> + </datamodel> + +<state id="s0"> + <onentry> + <if conf:false=""> + <raise event="foo"/> + <conf:incrementID id="1"/> + <elseif conf:true=""/> + <raise event="bar"/> + <conf:incrementID id="1"/> + <else/> + <raise event="baz"/> + <conf:incrementID id="1"/> + </if> + <raise event="bat"/> + </onentry> + <transition event="bar" conf:idVal="1=1" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + + </state> + + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test148.txml b/test/w3c/txml/test148.txml new file mode 100644 index 0000000..8d19e56 --- /dev/null +++ b/test/w3c/txml/test148.txml @@ -0,0 +1,35 @@ +<?xml version="1.0"?> + +<!-- test that the else clause executes if <if> and <elseif> evaluate to false. +Baz should be the only event generated by the <if>. bat is raised to catch the case where the <else> clause +fails and baz is not generated, i.e. it makes sure that the test doesn't hang. --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:expr="0"/> + </datamodel> + +<state id="s0"> + <onentry> + <if conf:false=""> + <raise event="foo"/> + <conf:incrementID id="1"/> + <elseif conf:false=""/> + <raise event="bar"/> + <conf:incrementID id="1"/> + <else/> + <raise event="baz"/> + <conf:incrementID id="1"/> + </if> + <raise event="bat"/> + </onentry> + <transition event="baz" conf:idVal="1=1" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + + </state> + + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test149.txml b/test/w3c/txml/test149.txml new file mode 100644 index 0000000..c971eea --- /dev/null +++ b/test/w3c/txml/test149.txml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<!-- test that neither if clause executes, so that bat is the only event raised. --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:expr="0"/> + </datamodel> + +<state id="s0"> + <onentry> + <if conf:false=""> + <raise event="foo"/> + <conf:incrementID id="1"/> + <elseif conf:false=""/> + <raise event="bar"/> + <conf:incrementID id="1"/> + </if> + <raise event="bat"/> + </onentry> + <transition event="bat" conf:idVal="1=0" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test150.txml b/test/w3c/txml/test150.txml new file mode 100644 index 0000000..ff290dd --- /dev/null +++ b/test/w3c/txml/test150.txml @@ -0,0 +1,45 @@ +<?xml version="1.0"?> + +<!-- test that foreach causes a new variable to be declared if 'item' doesn't already exist. Also +test that it will use an existing var if it does exist. --> + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1"/> + <data conf:id="2"/> + <data conf:id="3"> + <conf:array123/> + </data> + </datamodel> + + <state id="s0"> + <onentry> +<!-- first use declared variables --> + <foreach conf:item="1" conf:index="2" conf:arrayVar="3"/> + <raise event="foo"/> + </onentry> + <transition event="error" conf:targetfail=""/> + <transition event="*" target="s1"/> + </state> + +<state id="s1"> + <onentry> +<!-- now use undeclared variables --> + <foreach conf:item="4" conf:index="5" conf:arrayVar="3"/> + <raise event="bar"/> + </onentry> + <transition event="error" conf:targetfail=""/> + <transition event="*" target="s2"/> + </state> + +<state id="s2"> + <!-- check that var4 is bound --> + <transition conf:isBound="4" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + <conf:pass/> + <conf:fail/> + + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test151.txml b/test/w3c/txml/test151.txml new file mode 100644 index 0000000..6f95692 --- /dev/null +++ b/test/w3c/txml/test151.txml @@ -0,0 +1,45 @@ +<?xml version="1.0"?> + +<!-- test that foreach causes a new variable to be declared if 'item' doesn't already exist. Also +test that it will use an existing var if it does exist. --> + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1"/> + <data conf:id="2"/> + <data conf:id="3"> + <conf:array123/> + </data> + </datamodel> + + <state id="s0"> + <onentry> +<!-- first use declared variables --> + <foreach conf:item="1" conf:index="2" conf:arrayVar="3"/> + <raise event="foo"/> + </onentry> + <transition event="error" conf:targetfail=""/> + <transition event="*" target="s1"/> + </state> + +<state id="s1"> + <onentry> +<!-- now use undeclared variables --> + <foreach conf:item="4" conf:index="5" conf:arrayVar="3"/> + <raise event="bar"/> + </onentry> + <transition event="error" conf:targetfail=""/> + <transition event="*" target="s2"/> + </state> + +<state id="s2"> + <!-- check that var5 is bound --> + <transition conf:isBound="5" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + <conf:pass/> + <conf:fail/> + + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test152.txml b/test/w3c/txml/test152.txml new file mode 100644 index 0000000..86b50e9 --- /dev/null +++ b/test/w3c/txml/test152.txml @@ -0,0 +1,52 @@ +<?xml version="1.0"?> + +<!-- test that an illegal array or item value causes error.execution and results in executable content +not being executed. --> + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:expr="0"/> + <data conf:id="2"/> + <data conf:id="3"/> + <data conf:id="4" conf:illegalArray=""/> + <data conf:id="5"> + <conf:array123/> + </data> + </datamodel> + + <state id="s0"> + <onentry> +<!-- invalid array, legal item --> + <foreach conf:item="2" conf:index="3" conf:arrayTextVar="4"> + <conf:incrementID id="1"/> + </foreach> + <raise event="foo"/> + </onentry> + <transition event="error.execution" target="s1"/> + <transition event="*" conf:targetfail=""/> + </state> + + <state id="s1"> + <onentry> +<!-- illegal item, legal array --> + <foreach conf:illegalItem="" conf:index="3" conf:arrayVar="5"> + <conf:incrementID id="1"/> + </foreach> + <raise event="bar"/> + </onentry> + <transition event="error.execution" target="s2"/> + <transition event="bar" conf:targetfail=""/> + </state> + +<state id="s2"> + <!-- check that var1 has its original value (so executable content never got executed --> + <transition conf:idVal="1=0" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> + + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test153.txml b/test/w3c/txml/test153.txml new file mode 100644 index 0000000..e9f8038 --- /dev/null +++ b/test/w3c/txml/test153.txml @@ -0,0 +1,39 @@ +<?xml version="1.0"?> + +<!-- test that foreach goes over the array in the right order. since the array contains 1 2 3, we compare the current +value with the previous value, which is stored in var1. The current value should always be larger. If +it ever isn't, set Var4 to 0, indicating failure --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:expr="0"/> <!-- contains the previous value --> + <data conf:id="2"/> <!-- the item which will contain the current value --> + <data conf:id="3"> + <conf:array123/> + </data> + <data conf:id="4" conf:expr="1"/> <!-- 1 if success, 0 if failure --> + </datamodel> + + <state id="s0"> + <onentry> + <foreach conf:item="2" conf:arrayVar="3"> + <if conf:compareIDVal="1<2"> + <assign conf:location="1" conf:varExpr="2"/> + <else/> + <!-- values are out of order, record failure --> + <assign conf:location="4" conf:expr="0"/> + </if> + </foreach> + </onentry> + + <!-- check that var1 has its original value --> + <transition conf:idVal="4=0" conf:targetfail=""/> + <transition conf:targetpass=""/> + </state> + + <conf:pass/> + <conf:fail/> + + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test155.txml b/test/w3c/txml/test155.txml new file mode 100644 index 0000000..8444442 --- /dev/null +++ b/test/w3c/txml/test155.txml @@ -0,0 +1,30 @@ +<?xml version="1.0"?> + +<!-- test that foreach executes the executable content once for each item in the list '(1,2,3)'. The executable +content sums the items into var1 so it should be 6 at the end --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + +<datamodel> + <data conf:id="1" conf:expr="0"/> + <data conf:id="2"/> + <data conf:id="3"> + <conf:array123/> + </data> + </datamodel> + + <state id="s0"> + <onentry> + <foreach conf:item="2" conf:arrayVar="3"> + <conf:sumVars id1="1" id2="2"/> + </foreach> + </onentry> + + <transition conf:idVal="1=6" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test156.txml b/test/w3c/txml/test156.txml new file mode 100644 index 0000000..316f879 --- /dev/null +++ b/test/w3c/txml/test156.txml @@ -0,0 +1,32 @@ +<?xml version="1.0"?> + +<!-- test that an error causes the foreach to stop execution. The second piece of executable content +should cause an error, so var1 should be incremented only once --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + +<datamodel> + <data conf:id="1" conf:expr="0"/> + <data conf:id="2"/> + <data conf:id="3"> + <conf:array123/> + </data> + </datamodel> + + <state id="s0"> + <onentry> + <foreach conf:item="2" conf:arrayVar="3"> + <conf:incrementID id="1"/> + <!-- assign an illegal value to a non-existent var --> + <assign conf:location="5" conf:illegalExpr=""/> + </foreach> + </onentry> + + <transition conf:idVal="1=1" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test158.txml b/test/w3c/txml/test158.txml new file mode 100644 index 0000000..cff220d --- /dev/null +++ b/test/w3c/txml/test158.txml @@ -0,0 +1,27 @@ +<?xml version="1.0"?> + +<!-- test that executable content executes in document order. if event1 occurs then event2, succeed, otherwise fail --> + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:expr="0"/> + </datamodel> + +<state id="s0"> + <onentry> + <raise event="event1"/> + <raise event="event2"/> + </onentry> + <transition event="event1" target="s1"/> + <transition event="*" conf:targetfail=""/> + </state> + +<state id="s1"> + <transition event="event2" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test159.txml b/test/w3c/txml/test159.txml new file mode 100644 index 0000000..b7245c0 --- /dev/null +++ b/test/w3c/txml/test159.txml @@ -0,0 +1,24 @@ +<?xml version="1.0"?> + +<!-- test that any error raised by an element of executable content causes all subsequent elements to be skipped. +The send tag will raise an error so var1 should not be incremented. If it is fail, otherwise succeed --> + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:expr="0"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="thisWillFail" conf:illegaltarget=""/> + <conf:incrementID id="1"/> + </onentry> + <transition conf:idVal="1=1" conf:targetfail=""/> + <transition conf:targetpass=""/> + </state> + + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test172.txml b/test/w3c/txml/test172.txml new file mode 100644 index 0000000..45075a0 --- /dev/null +++ b/test/w3c/txml/test172.txml @@ -0,0 +1,23 @@ +<?xml version="1.0"?> +<!-- we test that eventexpr uses the current value of var1, not its initial value --> + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:quoteExpr="event1"/> + </datamodel> + +<state id="s0"> + <onentry> + <assign conf:location="1" conf:quoteExpr="event2"/> + <send conf:eventExpr="1"/> + </onentry> + + <transition event="event2" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test173.txml b/test/w3c/txml/test173.txml new file mode 100644 index 0000000..c770856 --- /dev/null +++ b/test/w3c/txml/test173.txml @@ -0,0 +1,24 @@ +<?xml version="1.0"?> +<!-- we test that targetexpr uses the current value of var1, not its initial value +(If it uses the initial value, it will generate an error. If it uses the current value, event1 will be raised --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:invalidSessionID=""/> + </datamodel> + +<state id="s0"> + <onentry> + <assign conf:location="1" conf:quoteExpr="#_internal"/> + <send conf:targetExpr="1" event="event1"/> + </onentry> + + <transition event="event1" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test174.txml b/test/w3c/txml/test174.txml new file mode 100644 index 0000000..3d33d5b --- /dev/null +++ b/test/w3c/txml/test174.txml @@ -0,0 +1,24 @@ +<?xml version="1.0"?> +<!-- we test that typeexpr uses the current value of var1, not its initial value +(If it uses the initial value, it will generate an error. If it uses the current value, event1 will be raised --> + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:invalidSendTypeExpr=""/> + </datamodel> + +<state id="s0"> + <onentry> + <assign conf:location="1" conf:quoteExpr="http://www.w3.org/TR/scxml/#SCXMLEventProcessor"/> + <send conf:typeExpr="1" event="event1"/> + </onentry> + + <transition event="event1" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test175.txml b/test/w3c/txml/test175.txml new file mode 100644 index 0000000..aba7ac4 --- /dev/null +++ b/test/w3c/txml/test175.txml @@ -0,0 +1,30 @@ +<?xml version="1.0"?> +<!-- we test that delayexpr uses the current value of var1, not its initial value +(If it uses the initial value, event2 will be generated first, before event1. If it uses the current value, +event1 will be raised first. Succeed if event1 occurs before event2, otherwise fail --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:quoteExpr="0s"/> + </datamodel> + +<state id="s0"> + <onentry> + <assign conf:location="1" conf:quoteExpr="3s"/> + <send conf:delayExpr="1" event="event2"/> + <send delay="1s" event="event1"/> + </onentry> + + <transition event="event1" target="s1"/> + <transition event="event2" conf:targetfail=""/> + </state> + +<state id="s1"> + <transition event="event2" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test176.txml b/test/w3c/txml/test176.txml new file mode 100644 index 0000000..8d084d4 --- /dev/null +++ b/test/w3c/txml/test176.txml @@ -0,0 +1,33 @@ +<?xml version="1.0"?> +<!-- we test that <param> uses the current value of var1, not its initial value. If the value of +aParam in event1 is 2 so that var2 gets set to 2, success, otherwise failure --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:expr="1"/> + <data conf:id="2"/> + </datamodel> + +<state id="s0"> + <onentry> + <assign conf:location="1" conf:expr="2"/> + <send event="event1"> + <param name="aParam" conf:varExpr="1"/> + </send> + </onentry> + + <transition event="event1" target="s1"> + <assign conf:location="2" conf:eventDataFieldValue="aParam"/> + </transition> + <transition event="*" conf:targetfail=""/> + </state> + +<state id="s1"> + <transition conf:idVal="2=2" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test178.txml b/test/w3c/txml/test178.txml new file mode 100644 index 0000000..de7a334 --- /dev/null +++ b/test/w3c/txml/test178.txml @@ -0,0 +1,31 @@ +<?xml version="1.0"?> +<!-- we test that multiple key/value pairs are included, even when the keys are the same. +This is a manual test. The tester must look at the log output and verify that both +keys are there. (This test uses the SCXML Event I/O processor, which is the only +one that all platforms must support. It does not specify the message format, so +we cannot test _event.raw directly. Therefore we print it out for visual +inspection.) --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + +<state id="s0"> + <onentry> + <send event="event1"> + <param conf:name="1" conf:expr="2"/> + <param conf:name="1" conf:expr="3"/> + </send> + </onentry> + + <transition event="event1" target="final"> + <log label="_event " conf:eventRaw=""/> + </transition> + <transition event="*" conf:targetfail=""/> + + </state> + + +<final id="final"/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test179.txml b/test/w3c/txml/test179.txml new file mode 100644 index 0000000..02b74f6 --- /dev/null +++ b/test/w3c/txml/test179.txml @@ -0,0 +1,21 @@ +<?xml version="1.0"?> +<!-- we test that <content> can be used to populate body of a message --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> + <onentry> + <send event="event1"> + <content>123</content> + </send> + </onentry> + + <transition event="event1" conf:eventdataVal="123" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test183.txml b/test/w3c/txml/test183.txml new file mode 100644 index 0000000..bb6e44a --- /dev/null +++ b/test/w3c/txml/test183.txml @@ -0,0 +1,24 @@ +<?xml version="1.0"?> +<!-- we test that <send> stores the value of the sendid in idlocation. If it does, +var1 has a value and we pass. Otherwise we fail --> + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1"/> + + </datamodel> + +<state id="s0"> + <onentry> + <send event="event1" conf:idlocation="1"/> + </onentry> + + <transition conf:isBound="1" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test185.txml b/test/w3c/txml/test185.txml new file mode 100644 index 0000000..c036cbf --- /dev/null +++ b/test/w3c/txml/test185.txml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<!-- we test that <send> respects the delay specification. If it does, event1 arrives before event2 + and we pass. Otherwise we fail --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> + <onentry> + <send event="event2" delay="2s"/> + <send event="event1"/> + </onentry> + + <transition event="event1" target="s1"/> + <transition event="*" conf:targetfail=""/> + </state> + +<state id="s1"> + <transition event="event2" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test186.txml b/test/w3c/txml/test186.txml new file mode 100644 index 0000000..e91c290 --- /dev/null +++ b/test/w3c/txml/test186.txml @@ -0,0 +1,34 @@ +<?xml version="1.0"?> +<!-- we test that <send> evals its args when it is evaluated, not when the delay interval expires and the +message is actually sent. If it does, aParam will have the value of 1 (even though var1 has been incremented +in the interval.) If var2 ends up == 1, we pass. Otherwise we fail --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:expr="1"/> + <data conf:id="2"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="event1" delay="2s"> + <param name="aParam" conf:varExpr="1"/> + </send> + <assign conf:location="1" conf:expr="2"/> + </onentry> + + <transition event="event1" target="s1"> + <assign conf:location="2" conf:eventDataFieldValue="aParam"/> + </transition> + <transition event="*" conf:targetfail=""/> + </state> + +<state id="s1"> + <transition conf:idVal="2=1" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test187.txml b/test/w3c/txml/test187.txml new file mode 100644 index 0000000..994a489 --- /dev/null +++ b/test/w3c/txml/test187.txml @@ -0,0 +1,36 @@ +<?xml version="1.0"?> +<!-- we test that delayed <send> is not sent if the sending session terminates. In this case, +a subscript is invoked which sends the event childToParent delayed by 1 second, and then terminates. The +parent session, should not receive childToParent. If it does, we fail. Otherwise the +10 sec timer expires and we pass --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0" > + <onentry> + <send event="timeout" delay="10s"/> + </onentry> + <invoke type="scxml" > + <content> + <!-- exit before the delayed send can execute --> + <scxml initial="sub0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <state id="sub0"> + <onentry> + <send event="childToParent" target="#_parent" delay="1s"/> + </onentry> + <transition target="subFinal"/> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <transition event="childToParent" conf:targetfail=""/> + <transition event="timeout" conf:targetpass=""/> +</state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test189.txml b/test/w3c/txml/test189.txml new file mode 100644 index 0000000..cd1cd19 --- /dev/null +++ b/test/w3c/txml/test189.txml @@ -0,0 +1,25 @@ +<?xml version="1.0"?> +<!-- we test that #_internal as a target of <send> puts the event on the internal queue. If it does, +event1 will be processed before event2, because event1 is added to the internal queue while event2 is +added to the external queue (event though event2 is generated first) --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> + <onentry> + <!-- goes to the external queue --> + <send event="event2"/> + <!-- to the internal queue --> + <send event="event1" target="#_internal"/> + </onentry> + + <!-- once we've entered the state, we should check for internal events first --> + <transition event="event1" conf:targetpass=""/> + <transition event="event2" conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test190.txml b/test/w3c/txml/test190.txml new file mode 100644 index 0000000..e6090eb --- /dev/null +++ b/test/w3c/txml/test190.txml @@ -0,0 +1,38 @@ +<?xml version="1.0"?> +<!-- we test that #_scxml_sessionid as a target of <send> puts the event on the external queue. If it does, +event1 will be processed before event2, because event1 is added to the internal queue while event2 is +added to the external queue (event though event2 is generated first). we have to make sure that event2 +is actually delivered. The delayed <send> makes sure another event is generated (so the test doesn't hang) --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:quoteExpr="#_scxml_"/> + <data conf:id="2" conf:systemVarExpr="_sessionid"/> + </datamodel> + +<state id="s0"> + <onentry> + <conf:concatVars id1="1" id2="2"/> + <!-- goes to the external queue --> + <send event="event2" conf:targetExpr="1"/> + <!-- to the internal queue --> + <raise event="event1"/> + <!-- this should get added to the external queue after event2 --> + <send event="timeout"/> + </onentry> + + <!-- once we've entered the state, we should check for internal events first --> + <transition event="event1" target="s1"/> + <transition event="*" conf:targetfail=""/> + </state> + +<!-- now check that we get event2 and not a timeout --> +<state id="s1"> + <transition event="event2" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test191.txml b/test/w3c/txml/test191.txml new file mode 100644 index 0000000..6f42159 --- /dev/null +++ b/test/w3c/txml/test191.txml @@ -0,0 +1,34 @@ +<?xml version="1.0"?> +<!-- we test that #_parent works as a target of <send> . a subscript is invoked and sends the event +childToParent to its parent session (ths session) using #_parent as the target. If we get this event, we +pass, otherwise we fail. The timer insures that some event is generated and that the test does not hang. --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0" > + <onentry> + <send event="timeout" delay="5s"/> + </onentry> + <invoke type="scxml" > + <content> + <!-- send an event to the parent session using #_parent as the target --> + <scxml initial="sub0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <state id="sub0"> + <onentry> + <send event="childToParent" target="#_parent"/> + </onentry> + <transition target="subFinal"/> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + <transition event="childToParent" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> +</state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test192.txml b/test/w3c/txml/test192.txml new file mode 100644 index 0000000..7331750 --- /dev/null +++ b/test/w3c/txml/test192.txml @@ -0,0 +1,58 @@ +<?xml version="1.0"?> +<!-- we test that #_invokeid works as a target of <send> . A child script is invoked and sends us +childToParent once its running. Then we send it the event parentToChild using its invokeid as the target. +If it receives this event, it sends sends the event eventReceived to its parent session (ths session). +If we get this event, we pass, otherwise the child script eventually times out sends invoke.done and we fail. +We also set a timeout in this process to make sure the test doesn't hang --> + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + +<state id="s0" initial="s01" > + <onentry> + <send event="timeout" delay="5s"/> + </onentry> + + <invoke type="scxml" id="invokedChild"> + <content> + <!-- let the parent session know we're running by sending childToParent, then wait for parentToChild. + If we get it, send eventReceived. If we don't we eventually time out --> + <scxml initial="sub0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + <state id="sub0"> + <onentry> + <send event="childToParent" target="#_parent"/> + <send event="timeout" delay="3s"/> + </onentry> + + <transition event="parentToChild" target="subFinal"> + <send target="#_parent" event="eventReceived"/> + </transition> + + <transition event="timeout" target="subFinal"/> + </state> + + <final id="subFinal"/> + + </scxml> + </content> + </invoke> + + <transition event="timeout" conf:targetfail=""/> + <transition event="done.invoke" conf:targetfail=""/> + +<state id="s01"> + <transition event="childToParent" target="s02"> + <send target="#_invokedChild" event="parentToChild"/> + </transition> +</state> + +<state id="s02"> + <transition event="eventReceived" conf:targetpass=""/> + </state> + +</state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test193.txml b/test/w3c/txml/test193.txml new file mode 100644 index 0000000..ba1598b --- /dev/null +++ b/test/w3c/txml/test193.txml @@ -0,0 +1,22 @@ +<?xml version="1.0"?> +<!-- we test that omitting target and targetexpr of <send> when using the +basichttp event i/o processor puts error.communication on the internal queue. --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> + <onentry> + <!-- this should put an error in the internal queue --> + <send event="event1" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"/> + <send event="fail"/> + </onentry> + + <transition event="error.communication" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test194.txml b/test/w3c/txml/test194.txml new file mode 100644 index 0000000..9e660a5 --- /dev/null +++ b/test/w3c/txml/test194.txml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<!-- we test that specifying an illegal target for <send> causes the event error.execution to be raised. If it does, +we succeed. Otherwise we eventually timeout and fail. --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> + <onentry> + <!-- should cause an error --> + <send conf:illegalTarget="" event="event2"/> + <!-- this will get added to the external event queue after the error has been raised --> + <send event="timeout"/> + </onentry> + + <!-- once we've entered the state, we should check for internal events first --> + <transition event="error.execution" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test198.txml b/test/w3c/txml/test198.txml new file mode 100644 index 0000000..706ea93 --- /dev/null +++ b/test/w3c/txml/test198.txml @@ -0,0 +1,23 @@ +<?xml version="1.0"?> +<!-- we test that if type is not provided <send> uses the scxml event i/o processor. The only way to tell +what processor was used is to look at the origintype of the resulting event --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + +<state id="s0"> + <onentry> + <send event="event1"/> + <send event="timeout"/> + </onentry> + + + <transition event="event1" conf:originTypeEq="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test199.txml b/test/w3c/txml/test199.txml new file mode 100644 index 0000000..dadd5b0 --- /dev/null +++ b/test/w3c/txml/test199.txml @@ -0,0 +1,22 @@ +<?xml version="1.0"?> +<!-- we test that using an invalid send type results in error.execution --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + +<state id="s0"> + <onentry> + <send conf:invalidSendType="" event="event1"/> + <send event="timeout"/> + </onentry> + + + <transition event="error.execution" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test200.txml b/test/w3c/txml/test200.txml new file mode 100644 index 0000000..4aed203 --- /dev/null +++ b/test/w3c/txml/test200.txml @@ -0,0 +1,22 @@ +<?xml version="1.0"?> +<!-- we test that the processor supports the scxml event i/o processor --> + + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + +<state id="s0"> + <onentry> + <send type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" event="event1"/> + <send event="timeout"/> + </onentry> + + + <transition event="event1" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test201.txml b/test/w3c/txml/test201.txml new file mode 100644 index 0000000..cdcf285 --- /dev/null +++ b/test/w3c/txml/test201.txml @@ -0,0 +1,25 @@ +<?xml version="1.0"?> +<!-- we test that the processor supports the basic http event i/o processor. This is an optional +test since platforms are not required to support basic http event i/o --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + +<state id="s0"> + <onentry> + <send type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor" + conf:basicHTTPAccessURITarget="" + event="event1"/> + <send event="timeout"/> + </onentry> + + + <transition event="event1" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test205.txml b/test/w3c/txml/test205.txml new file mode 100644 index 0000000..6cc06f4 --- /dev/null +++ b/test/w3c/txml/test205.txml @@ -0,0 +1,34 @@ +<?xml version="1.0"?> +<!-- we test that the processor doesn't change the message. We can't test that it never does this, but +at least we can check that the event name and included data are the same as we sent. --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="event1"> + <param name="aParam" conf:expr="1"/> + </send> + <send event="timeout"/> + </onentry> + + + <transition event="event1" target="s1"> + <assign conf:location="1" conf:eventDataFieldValue="aParam"/> + </transition> + <transition event="*" conf:targetfail=""/> + </state> + +<state id="s1"> + <transition conf:idVal="1=1" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test207.txml b/test/w3c/txml/test207.txml new file mode 100644 index 0000000..6893dcf --- /dev/null +++ b/test/w3c/txml/test207.txml @@ -0,0 +1,60 @@ +<?xml version="1.0"?> +<!-- we test that that we can't cancel an event in another session. We invoke a child process. It notifies +us when it has generated a delayed event with sendid foo. We try to cancel foo. The child process sends us event + event success if the event is not cancelled, event fail otherwise. This doesn't test that there is absolutely no way to cancel an event +raised in another session, but the spec doesn't define any way to refer to an event in another process --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="10s"/> + </onentry> + <invoke type="scxml"> + <content> + <!-- when invoked, we raise a delayed event1 with sendid 'foo' and notify our parent. Then we wait. + If event1 occurs, the parent hasn't succeeded in canceling it and we return pass. If event2 occurs + it means event1 was canceled (because event2 is delayed longer than event1) and we return 'fail'. --> + + + <scxml initial="sub0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <state id="sub0"> + <onentry> + <send event="event1" id="foo" delay="3s"/> + <send event="event2" delay="5s"/> + <send target="#_parent" event="childToParent"/> + </onentry> + + <transition event="event1" target="subFinal"> + <send target="#_parent" event="pass"/> + </transition> + <transition event="*" target="subFinal"> + <send target="#_parent" event="fail"/> + </transition> + + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <state id="s01"> + <transition event="childToParent" target="s02"> + <cancel sendid="foo"/> + </transition> + </state> + + <state id="s02"> + <transition event="pass" conf:targetpass=""/> + <transition event="fail" conf:targetfail=""/> + <transition event="timeout" conf:targetfail=""/> + </state> + +</state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test208.txml b/test/w3c/txml/test208.txml new file mode 100644 index 0000000..5a86e6d --- /dev/null +++ b/test/w3c/txml/test208.txml @@ -0,0 +1,25 @@ +<?xml version="1.0"?> +<!-- we test that cancel works. We cancel delayed event1. If cancel works, we get event2 first and pass. If +we get event1 or an error first, cancel didn't work and we fail. --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> + <onentry> + <send id="foo" event="event1" delay="1s"/> + <send event="event2" delay="5s"/> + <cancel sendid="foo"/> + </onentry> + + <transition event="event2" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + + </state> + + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test210.txml b/test/w3c/txml/test210.txml new file mode 100644 index 0000000..402ed36 --- /dev/null +++ b/test/w3c/txml/test210.txml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<!-- we test that sendidexpr works with cancel. If it takes the most recent value of var1, it should cancel +delayed event1. Thus we get event2 first and pass. If we get event1 or an error first, cancel didn't work and we fail. --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:quoteExpr="bar"/> + </datamodel> + +<state id="s0"> + <onentry> + <send id="foo" event="event1" delay="1s"/> + <send event="event2" delay="5s"/> + <assign conf:location="1" conf:quoteExpr="foo"/> + <cancel conf:sendIDExpr="1"/> + </onentry> + + <transition event="event2" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + + </state> + + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test215.txml b/test/w3c/txml/test215.txml new file mode 100644 index 0000000..afb8df5 --- /dev/null +++ b/test/w3c/txml/test215.txml @@ -0,0 +1,33 @@ +<?xml version="1.0"?> +<!-- we test that typexpr is evaluated at runtime. If the original value of var1 is used, the invocation +will fail (test215sub1.scxml is not of type 'foo', even if the platform supports foo as a type). If +the runtime value is used, the invocation will succeed --> + + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + +<datamodel> + <data conf:id="1" conf:quoteExpr="foo"/> + </datamodel> + +<state id="s0" > + <onentry> + <send event="timeout" delay="5s"/> + <assign conf:location="1" conf:quoteExpr="http://www.w3.org/TR/scxml/"/> + </onentry> + <invoke conf:typeExpr="1"> + <content> + <!-- when invoked, terminate returning done.invoke. This proves that the invocation succeeded. --> + <scxml initial="subFinal" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + <transition event="done.invoke" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> +</state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test216.txml b/test/w3c/txml/test216.txml new file mode 100644 index 0000000..e65818e --- /dev/null +++ b/test/w3c/txml/test216.txml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<!-- we test that srcexpr is evaluated at runtime. If the original value of var1 is used, the invocation +will fail (assuming that there is no script named 'foo'). If +the runtime value is used, the invocation will succeed --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + +<datamodel> + <data conf:id="1" conf:quoteExpr="foo"/> + </datamodel> + +<state id="s0" > + <onentry> + <send event="timeout" delay="5s"/> + <assign conf:location="1" conf:quoteExpr="file:test216sub1.scxml"/> + </onentry> + <invoke conf:srcExpr="1" type="http://www.w3.org/TR/scxml"/> + <transition event="done.invoke" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> +</state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test216sub1.txml b/test/w3c/txml/test216sub1.txml new file mode 100644 index 0000000..eb4c9df --- /dev/null +++ b/test/w3c/txml/test216sub1.txml @@ -0,0 +1,9 @@ +<?xml version="1.0"?> +<!-- when invoked, terminate returning done.invoke. This proves that the invocation succeeded. --> + + +<scxml initial="final" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + +<final id="final"/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test220.txml b/test/w3c/txml/test220.txml new file mode 100644 index 0000000..4c79e4d --- /dev/null +++ b/test/w3c/txml/test220.txml @@ -0,0 +1,25 @@ +<?xml version="1.0"?> +<!-- we test that the scxml type is supported. --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + +<state id="s0" > + <onentry> + <send event="timeout" delay="5s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <!-- when invoked, terminate returning done.invoke. This proves that the invocation succeeded. --> + <scxml initial="subFinal" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <final id="subFinal"/> + </scxml></content> + </invoke> + <transition event="done.invoke" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> +</state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test223.txml b/test/w3c/txml/test223.txml new file mode 100644 index 0000000..9cdc499 --- /dev/null +++ b/test/w3c/txml/test223.txml @@ -0,0 +1,33 @@ +<?xml version="1.0"?> +<!-- we test that idlocation is supported. --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <datamodel> + <data conf:id="1"/> + </datamodel> + +<state id="s0" > + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/" conf:idlocation="1"> + <content> + <!-- when invoked, terminate returning done.invoke. This proves that the invocation succeeded. --> + <scxml initial="subFinal" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + <transition event="*" target="s1"/> +</state> + +<state id="s1"> + <transition conf:isBound="1" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test224.txml b/test/w3c/txml/test224.txml new file mode 100644 index 0000000..0ffe8eb --- /dev/null +++ b/test/w3c/txml/test224.txml @@ -0,0 +1,35 @@ +<?xml version="1.0"?> +<!-- we test that the automatically generated id has the form stateid.platformid. --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <datamodel> + <data conf:id="1"/> + <data conf:id="2" conf:quoteExpr="s0."/> + </datamodel> + +<state id="s0" > + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/" conf:idlocation="1"> + <content> + <!-- when invoked, terminate returning done.invoke. This proves that the invocation succeeded. --> + <scxml version="1.0" initial="subFinal" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <transition event="*" target="s1"/> +</state> + +<state id="s1"> + <transition conf:varPrefix="2 1" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test225.txml b/test/w3c/txml/test225.txml new file mode 100644 index 0000000..548ff46 --- /dev/null +++ b/test/w3c/txml/test225.txml @@ -0,0 +1,42 @@ +<?xml version="1.0"?> +<!-- we test that the automatically generated id is unique, we call invoke twice and compare the ids. --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <datamodel> + <data conf:id="1"/> + <data conf:id="2"/> + </datamodel> + +<state id="s0" > + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/" conf:idlocation="1"> + <content> + <scxml initial="subFinal1" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <final id="subFinal1"/> + </scxml> + </content> + </invoke> + <invoke type="http://www.w3.org/TR/scxml/" conf:idlocation="2" > + <content> + <scxml initial="subFinal2" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <final id="subFinal2"/> + </scxml> + </content> + </invoke> + + <transition event="*" target="s1"/> +</state> + +<state id="s1"> + <transition conf:VarEqVar="1 2" conf:targetfail=""/> + <transition conf:targetpass=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test226.txml b/test/w3c/txml/test226.txml new file mode 100644 index 0000000..0d83070 --- /dev/null +++ b/test/w3c/txml/test226.txml @@ -0,0 +1,27 @@ +<?xml version="1.0"?> +<!-- this is basically just a test that invoke works correctly and that you can pass data +to the invoked process. If the invoked session finds aParam==1, it exits, signalling +success. otherwise it will hang and the timeout in this doc signifies failure. --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0" > + <onentry> + <send event="timeout" delay="3s"/> + </onentry> + + + <invoke type="http://www.w3.org/TR/scxml/" src="file:test226sub1.scxml"> + <param conf:name="1" conf:expr="1"/> + </invoke> + + <transition event="varBound" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> +</state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test226sub1.txml b/test/w3c/txml/test226sub1.txml new file mode 100644 index 0000000..b4780c7 --- /dev/null +++ b/test/w3c/txml/test226sub1.txml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<!-- when invoked, if var1 has a value notify parent. Then terminate. --> + + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + +<datamodel> + <data conf:id="1"/> + </datamodel> + +<state id="s0"> + <transition conf:isBound="1" target="final"> + <send target="#_parent" event="varBound"/> + </transition> + <transition target="final"/> + </state> + +<final id="final"/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test228.txml b/test/w3c/txml/test228.txml new file mode 100644 index 0000000..40021bb --- /dev/null +++ b/test/w3c/txml/test228.txml @@ -0,0 +1,37 @@ +<?xml version="1.0"?> +<!-- test that the invokeid is included in events returned from the invoked process. --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <datamodel> + <data conf:id="1"/> + </datamodel> + +<state id="s0" > + <onentry> + <send event="timeout" delay="3s"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/" id="foo"> + <content> + <scxml initial="subFinal" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <transition event="done.invoke" target="s1"> + <assign conf:location="1" conf:eventField="invokeid"/> + </transition> + <transition event="*" conf:targetfail=""/> +</state> + +<state id="s1"> + <transition conf:idQuoteVal="1=foo" conf:targetpass=""/> + <transition conf:targetfail=""/> +</state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test229.txml b/test/w3c/txml/test229.txml new file mode 100644 index 0000000..3837b69 --- /dev/null +++ b/test/w3c/txml/test229.txml @@ -0,0 +1,46 @@ +<?xml version="1.0"?> +<!-- test that autofoward works. If the child process receives back a copy of the +childToParent event that it sends to this doc, it sends eventReceived, signalling success. (Note +that this doc is not required to process that event explicitly. It should be forwarded in any case.) Otherwise +it eventually times out and the done.invoke signals failure --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0" > + <onentry> + <send event="timeout" delay="3s"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/" autoforward="true"> + <content> + <!-- when invoked, send childToParent to parent. + If it is forwarded back to us, send + eventReceived to signal success and terminate. + Otherwise wait for timer to expire and terminate. --> + <scxml initial="sub0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <state id="sub0"> + <onentry> + <send target="#_parent" event="childToParent"/> + <send event="timeout" delay="3s"/> + </onentry> + <transition event="childToParent" target="subFinal"> + <send target="#_parent" event="eventReceived"/> + </transition> + <transition event="*" target="subFinal"/> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <transition event="childToParent"/> + <transition event="eventReceived" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> +</state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test230.txml b/test/w3c/txml/test230.txml new file mode 100644 index 0000000..fc27220 --- /dev/null +++ b/test/w3c/txml/test230.txml @@ -0,0 +1,66 @@ +<?xml version="1.0"?> +<!-- a manual test that an autofowarded event has the same fields and values as the original event. +the child process sends the parent process an event which is forwarded back to it. +Both the parent and child process print out the contents of the event. The tester +must check if they are the same and report his result. --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="3s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/" autoforward="true"> + <content> + <!-- when invoked, send childToParent to parent. If it is forwarded back to us, print out its + fields and terminate. --> + <scxml initial="sub0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <state id="sub0"> + <onentry> + <send target="#_parent" event="childToParent"/> + <send event="timeout" delay="2s"/> + </onentry> + <transition event="childToParent" target="subFinal"> + <log label="name is " conf:eventField="name" /> + <log label="type is " conf:eventField="type" /> + <log label="sendid is " conf:eventField="sendid"/> + <log label="origin is " conf:eventField="origin" /> + <log label="origintype is " conf:eventField="origintype" /> + <log label="invokeid is " conf:eventField="invokeid" /> + <log label="data is " conf:eventField="data"/> + </transition> + <transition event="*" target="subFinal"/> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + <transition event="timeout" target="final"/> + + + <state id="s01"> + <transition event="childToParent" target="s02"> + <log label="name is " conf:eventField="name" /> + <log label="type is " conf:eventField="type" /> + <log label="sendid is " conf:eventField="sendid"/> + <log label="origin is " conf:eventField="origin" /> + <log label="origintype is " conf:eventField="origintype" /> + <log label="invokeid is " conf:eventField="invokeid" /> + <log label="data is " conf:eventField="data"/> + </transition> + <transition event="*" conf:targetfail=""/> + </state> + + <state id="s02"> + <!-- wait till we get the done event to ensure that the child process has time to print out its results --> + <transition event="done.invoke" target="final"/> + </state> + +</state> + +<final id="final"/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test232.txml b/test/w3c/txml/test232.txml new file mode 100644 index 0000000..1cbc14f --- /dev/null +++ b/test/w3c/txml/test232.txml @@ -0,0 +1,44 @@ +<?xml version="1.0"?> +<!-- test that a parent process can receive multiple events from a child process --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="3s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <scxml initial="subFinal" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <final id="subFinal"> + <onentry> + <send target="#_parent" event="childToParent1"/> + <send target="#_parent" event="childToParent2"/> + </onentry> + </final> + </scxml> + </content> + </invoke> + <transition event="timeout" conf:targetfail=""/> + + + <state id="s01"> + <transition event="childToParent1" target="s02"/> + </state> + + <state id="s02"> + <transition event="childToParent2" target="s03"/> + </state> + +<state id="s03"> + <transition event="done.invoke" conf:targetpass=""/> + </state> + +</state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test233.txml b/test/w3c/txml/test233.txml new file mode 100644 index 0000000..94b219b --- /dev/null +++ b/test/w3c/txml/test233.txml @@ -0,0 +1,39 @@ +<?xml version="1.0"?> +<!-- test that finalize markup runs before the event is processed. The invoked process will +return 2 in _event.data.aParam, so that new value should be in force when we select +the transtitions. --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:expr="1"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="3s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <scxml initial="subFinal" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <final id="subFinal"> + <onentry> + <send target="#_parent" event="childToParent"> + <param name="aParam" conf:expr="2"/> + </send> + </onentry> + </final> + </scxml> + </content> + <finalize> + <assign conf:location="1" conf:eventDataFieldValue="aParam"/> + </finalize> + </invoke> + + <transition event="childToParent" conf:idVal="1 2" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> +</state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test234.txml b/test/w3c/txml/test234.txml new file mode 100644 index 0000000..27d4626 --- /dev/null +++ b/test/w3c/txml/test234.txml @@ -0,0 +1,70 @@ +<?xml version="1.0"?> +<!-- test that only finalize markup in the invoking state runs. the first invoked process will +return 2 in _event.data.aParam, while second invoked process sleeps without returning any events. +Only the first finalize should execute. So when we get to s1 var1 should have value 2 but +var2 should still be set to 1 --> + + +<scxml initial="p0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:expr="1"/> + <data conf:id="2" conf:expr="1"/> + </datamodel> +<parallel id="p0"> + <onentry> + <send event="timeout" delay="3s"/> + </onentry> + <transition event="timeout" conf:targetfail=""/> + + <state id="p01"> + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <scxml version="1.0" initial="subFinal1" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <final id="subFinal1"> + <onentry> + <send target="#_parent" event="childToParent"> + <param name="aParam" conf:expr="2"/> + </send> + </onentry> + </final> + </scxml> + </content> + <finalize> + <assign conf:location="1" conf:eventDataFieldValue="aParam"/> + </finalize> + </invoke> + + <transition event="childToParent" conf:idVal="1=2" target="s1"/> + <transition event="childToParent" conf:targetfail=""/> + </state> + + <state id="p02"> + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <scxml version="1.0" initial="sub0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <state id="sub0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <transition event="timeout" target="subFinal2"/> + </state> + <final id="subFinal2"/> + </scxml> + </content> + <finalize> + <assign conf:location="2" conf:eventDataFieldValue="aParam"/> + </finalize> + </invoke> + </state> + +</parallel> + + +<state id="s1"> + <transition conf:idVal="2=1" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test235.txml b/test/w3c/txml/test235.txml new file mode 100644 index 0000000..84b8680 --- /dev/null +++ b/test/w3c/txml/test235.txml @@ -0,0 +1,27 @@ +<?xml version="1.0"?> +<!-- test that done.invoke.id event has the right id. the invoked child terminates immediately +and should generate done.invoke.foo --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/" id="foo"> + <content> + <scxml initial="subFinal" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <transition event="done.invoke.foo" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> +</state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test236.txml b/test/w3c/txml/test236.txml new file mode 100644 index 0000000..5d18c2f --- /dev/null +++ b/test/w3c/txml/test236.txml @@ -0,0 +1,43 @@ +<?xml version="1.0"?> +<!-- test that done.invoke.id event is the last event we receive. the invoked process sends childToParent +in the exit handler of its final state. We should get it before the done.invoke, and we should get no +events after the done.invoke. Hence timeout indicates success --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <scxml initial="subFinal" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <final id="subFinal"> + <onexit> + <send target="#_parent" event="childToParent"/> + </onexit> + </final> + </scxml> + </content> + </invoke> + + <transition event="childToParent" target="s1"/> + <transition event="done.invoke" conf:targetfail=""/> +</state> + +<state id="s1"> + <!-- here we should get done.invoke --> + <transition event="done.invoke" target="s2"/> + <transition event="*" conf:targetfail=""/> + </state> + +<state id="s2"> + <transition event="timeout" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test237.txml b/test/w3c/txml/test237.txml new file mode 100644 index 0000000..c6097bc --- /dev/null +++ b/test/w3c/txml/test237.txml @@ -0,0 +1,45 @@ +<?xml version="1.0"?> +<!-- test that cancelling works. invoked child sleeps for two seconds, then terminates. We +sleep for 1 sec in s0, then move to s1. This should cause the invocation to get cancelled. +If we receive done.invoke, the invocation wasn't cancelled, and we fail. If we receive no events by +the time timeout2 fires, success --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> + <onentry> + <send event="timeout1" delay="1s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <!-- when invoked, sleep for 2 secs then terminate. Parent will try to cancel this session --> + <scxml initial="sub0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <state id="sub0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <transition event="timeout" target="subFinal"/> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <transition event="timeout1" target="s1"/> + +</state> + +<state id="s1"> + <onentry> + <send event="timeout2" delay="2s"/> + </onentry> + <!-- here we should NOT get done.invoke --> + <transition event="done.invoke" conf:targetfail=""/> + <transition event="*" conf:targetpass=""/> + </state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test239.txml b/test/w3c/txml/test239.txml new file mode 100644 index 0000000..8fa1837 --- /dev/null +++ b/test/w3c/txml/test239.txml @@ -0,0 +1,36 @@ +<?xml version="1.0"?> +<!-- test that markup can be specified both by 'src' and by <content> --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <transition event="timeout" conf:targetfail=""/> + + <state id="s01"> + <invoke type="http://www.w3.org/TR/scxml/" src="file:test239sub1.scxml"/> + <transition event="done.invoke" target="s02"/> + </state> + +<state id="s02"> + <invoke type="http://www.w3.org/TR/scxml/"> + <!-- identical to test239sub1.scxml. --> + <content> + <scxml version="1.0" initial="final" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <final id="final"/> + </scxml> + </content> + </invoke> + + <transition event="done.invoke" conf:targetpass=""/> + </state> + +</state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test239sub1.txml b/test/w3c/txml/test239sub1.txml new file mode 100644 index 0000000..fd27e45 --- /dev/null +++ b/test/w3c/txml/test239sub1.txml @@ -0,0 +1,9 @@ +<?xml version="1.0"?> +<!-- when invoked, just terminate. --> + + +<scxml initial="final" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + <final id="final"/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test240.txml b/test/w3c/txml/test240.txml new file mode 100644 index 0000000..bf669d4 --- /dev/null +++ b/test/w3c/txml/test240.txml @@ -0,0 +1,71 @@ +<?xml version="1.0"?> +<!-- test that datamodel values can be specified both by 'namelist' and by <param>. +invoked child will return success if its Var1 is set to 1, failure otherwise. This +test will fail schema validation because of the multiple occurences of Var1, but +should run correctly. --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:expr="1"/> + </datamodel> + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <transition event="timeout" conf:targetfail=""/> + + <state id="s01"> + <invoke type="http://www.w3.org/TR/scxml/" conf:namelist="1"> + <content> + <scxml initial="sub01" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <datamodel> + <data conf:id="1" conf:expr="0"/> + </datamodel> + <state id="sub01"> + <transition conf:namelistIdVal="1=1" target="subFinal1"> + <send target="#_parent" event="success"/> + </transition> + <transition target="subFinal1"> + <send target="#_parent" event="failure"/> + </transition> + </state> + <final id="subFinal1"/> + </scxml> + </content> + </invoke> + <transition event="success" target="s02"/> + <transition event="failure" conf:targetfail=""/> + </state> + +<state id="s02"> + <invoke type="http://www.w3.org/TR/scxml/"> + <param conf:name="1" conf:expr="1"/> + <content> + <scxml initial="sub02" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <datamodel> + <data conf:id="1" conf:expr="0"/> + </datamodel> + + <state id="sub02"> + <transition conf:idVal="1=1" target="subFinal2"> + <send target="#_parent" event="success"/> + </transition> + <transition target="subFinal1"> + <send target="#_parent" event="failure"/> + </transition> + </state> + <final id="subFinal2"/> + </scxml> + </content> + </invoke> + <transition event="success" conf:targetpass=""/> + <transition event="failure" conf:targetfail=""/> + </state> + +</state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test241.txml b/test/w3c/txml/test241.txml new file mode 100644 index 0000000..9587697 --- /dev/null +++ b/test/w3c/txml/test241.txml @@ -0,0 +1,102 @@ +<?xml version="1.0"?> +<!-- The child process will return success ifits Var1 is set to 1, failure otherwise. For this test +we try passing in Var1 by param and by namelist and check that we either get two successes +or two failures. This test will fail schema validation due to multiple declarations of +Var1, but should run correctly. --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:expr="1"/> + </datamodel> + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <transition event="timeout" conf:targetfail=""/> + + <state id="s01"> + <invoke type="http://www.w3.org/TR/scxml/" conf:namelist="1"> + <content> + <scxml initial="sub01" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <datamodel> + <data conf:id="1" conf:expr="0"/> + </datamodel> + + <state id="sub01"> + <transition conf:idVal="1=1" target="subFinal1"> + <send target="#_parent" event="success"/> + </transition> + <transition target="subFinal1"> + <send target="#_parent" event="failure"/> + </transition> + </state> + + <final id="subFinal1"/> + </scxml> + </content> + </invoke> + <transition event="success" target="s02"/> + <transition event="failure" target="s03"/> + </state> + +<state id="s02"> + <invoke type="http://www.w3.org/TR/scxml/"> + <param conf:name="1" conf:expr="1"/> + <content> + <scxml initial="sub02" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <datamodel> + <data conf:id="1" conf:expr="0"/> + </datamodel> + + <state id="sub02"> + <transition conf:idVal="1=1" target="subFinal2"> + <send target="#_parent" event="success"/> + </transition> + <transition target="subFinal2"> + <send target="#_parent" event="failure"/> + </transition> + </state> + + <final id="subFinal2"/> + </scxml> + </content> + </invoke> + <!-- we got success in s01, so we need to do so here --> + <transition event="success" conf:targetpass=""/> + <transition event="failure" conf:targetfail=""/> + </state> + +<state id="s03"> + <invoke type="http://www.w3.org/TR/scxml/" > + <param conf:name="1" conf:expr="1"/> + <content> + <scxml initial="sub03" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <datamodel> + <data conf:id="1" conf:expr="0"/> + </datamodel> + + <state id="sub03"> + <transition conf:idVal="1=1" target="subFinal3"> + <send target="#_parent" event="success"/> + </transition> + <transition target="subFinal3"> + <send target="#_parent" event="failure"/> + </transition> + </state> + + <final id="subFinal3"/> + </scxml> + </content> + </invoke> + <!-- we got failure in s01, so we need to do so here --> + <transition event="failure" conf:targetpass=""/> + <transition event="success" conf:targetfail=""/> + </state> + +</state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test242.txml b/test/w3c/txml/test242.txml new file mode 100644 index 0000000..35fa154 --- /dev/null +++ b/test/w3c/txml/test242.txml @@ -0,0 +1,57 @@ +<?xml version="1.0"?> +<!-- test that markup specified by 'src' and by <content> is treated the same way. That means that +either we get done.invoke in both cases or in neither case (in which case we timeout) --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0" > + <onentry> + <send event="timeout1" delay="1s"/> + </onentry> + <transition event="timeout" conf:targetfail=""/> + + <invoke type="http://www.w3.org/TR/scxml/" src="file:test242sub1.scxml"/> + <transition event="done.invoke" target="s02"/> + <transition event="timeout1" target="s03"/> + </state> + +<state id="s02"> + <onentry> + <send event="timeout2" delay="1s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/"> + <!-- identical to test242sub1.scxml. --> + <content> + <scxml version="1.0" initial="subFinal1" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <final id="subFinal1"/> + </scxml> + </content> + </invoke> + <!-- we got done.invoke last time, so we need it this time too --> + <transition event="done.invoke" conf:targetpass=""/> + <transition event="timeout2" conf:targetfail=""/> + </state> + +<state id="s03"> + <onentry> + <send event="timeout3" delay="1s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/"> + <!-- identical to test242sub1.scxml. --> + <content> + <scxml version="1.0" initial="subFinal2" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <final id="subFinal2"/> + </scxml> + </content> + </invoke> + <!-- we got timeout last time, so we need it this time too --> + <transition event="timeout3" conf:targetpass=""/> + <transition event="done.invoke" conf:targetfail=""/> + </state> + + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test242sub1.txml b/test/w3c/txml/test242sub1.txml new file mode 100644 index 0000000..fd27e45 --- /dev/null +++ b/test/w3c/txml/test242sub1.txml @@ -0,0 +1,9 @@ +<?xml version="1.0"?> +<!-- when invoked, just terminate. --> + + +<scxml initial="final" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + <final id="final"/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test243.txml b/test/w3c/txml/test243.txml new file mode 100644 index 0000000..a01345c --- /dev/null +++ b/test/w3c/txml/test243.txml @@ -0,0 +1,40 @@ +<?xml version="1.0"?> +<!-- test that datamodel values can be specified by param. +test240sub1 will return success ifits Var1 is set to 1, failure otherwise. --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/"> + <param conf:name="1" conf:expr="1"/> + <content> + <scxml version="1.0" initial="sub0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <datamodel> + <data conf:id="1" conf:expr="0"/> + </datamodel> + + <state id="sub0"> + <transition conf:idVal="1=1" target="subFinal"> + <send target="#_parent" event="success"/> + </transition> + <transition target="subFinal"> + <send target="#_parent" event="failure"/> + </transition> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + <transition event="success" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test244.txml b/test/w3c/txml/test244.txml new file mode 100644 index 0000000..c0f1a23 --- /dev/null +++ b/test/w3c/txml/test244.txml @@ -0,0 +1,43 @@ +<?xml version="1.0"?> +<!-- test that datamodel values can be specified by namelist. +invoked child will return success ifits Var1 is set to 1, failure otherwise. +This test will fail schema validation due to multiple occurrences of Var1, +but should run correctly. --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:expr="1"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/" conf:namelist="1"> + <content> + <scxml initial="sub0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <datamodel> + <data conf:id="1" conf:expr="0"/> + </datamodel> + + <state id="sub0"> + <transition conf:idVal="1=1" target="subFinal"> + <send target="#_parent" event="success"/> + </transition> + <transition target="subFinal"> + <send target="#_parent" event="failure"/> + </transition> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + <transition event="success" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test245.txml b/test/w3c/txml/test245.txml new file mode 100644 index 0000000..459bec6 --- /dev/null +++ b/test/w3c/txml/test245.txml @@ -0,0 +1,38 @@ +<?xml version="1.0"?> +<!-- test that non-existent datamodel values are not set. Var2 is not defined in +invoked child's datamodel. It will will return success if its Var2 remains unbound, failure otherwise. --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="2" conf:expr="3"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/" conf:namelist="2"> + <content> + <scxml initial="sub0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <state id="sub0"> + <transition conf:isBound="2" target="subFinal"> + <send target="#_parent" event="failure"/> + </transition> + <transition target="subFinal"> + <send target="#_parent" event="success"/> + </transition> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <transition event="success" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test247.txml b/test/w3c/txml/test247.txml new file mode 100644 index 0000000..7c528a3 --- /dev/null +++ b/test/w3c/txml/test247.txml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<!-- test that we get done.invoke. timeout indicates failure --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <scxml version="1.0" initial="subFinal" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + <transition event="done.invoke" conf:targetpass=""/> + <transition event="timeout" conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test250.txml b/test/w3c/txml/test250.txml new file mode 100644 index 0000000..3455062 --- /dev/null +++ b/test/w3c/txml/test250.txml @@ -0,0 +1,46 @@ +<?xml version="1.0"?> +<!-- test that the onexit handlers run in the invoked process if it is cancelled. This has to be a +manual test, since this process won't accept any events from the child process once it has been cancelled. +Tester must examine log output from child process to determine success --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> + <onentry> + <send event="foo"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/" > + <content> + <scxml initial="sub0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <state id="sub0" initial="sub01"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <transition event="timeout" target="subFinal"/> + <onexit> + <log conf:quoteExpr="Exiting sub0"/> + </onexit> + <state id="sub01"> + <onexit> + <log conf:quoteExpr="Exiting sub01"/> + </onexit> + </state> + </state> + <final id="subFinal"> + <onentry> + <log conf:quoteExpr="entering final state, invocation was not cancelled"/> + </onentry> + </final> + </scxml> + </content> + </invoke> + + <!-- this transition will cause the invocation to be cancelled --> + <transition event="foo" target="final"/> + </state> + +<final id="final"/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test252.txml b/test/w3c/txml/test252.txml new file mode 100644 index 0000000..40c36cb --- /dev/null +++ b/test/w3c/txml/test252.txml @@ -0,0 +1,51 @@ +<?xml version="1.0"?> +<!-- test that we don't process any events received from the invoked process once it is cancelled. child +process tries to send us childToParent in an onexit handler. If we get it, we fail. +timeout indicates success. --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + + <transition event="timeout" conf:targetpass=""/> + <transition event="childToParent" conf:targetfail=""/> + <transition event="done.invoke" conf:targetfail=""/> + + <state id="s01"> + <onentry> + <send event="foo"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <scxml initial="sub0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <state id="sub0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <transition event="timeout" target="subFinal"/> + <onexit> + <send target="#_parent" event="childToParent"/> + </onexit> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <!-- this transition will cause the invocation to be cancelled --> + <transition event="foo" target="s02"/> + </state> + + <state id="s02"/> + +</state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test253.txml b/test/w3c/txml/test253.txml new file mode 100644 index 0000000..041797a --- /dev/null +++ b/test/w3c/txml/test253.txml @@ -0,0 +1,83 @@ +<?xml version="1.0"?> +<!-- test that the scxml event processor is used in both directions. If child process uses the +scxml event i/o processor to communicate with us, send it an event. It will send back success if +this process uses the scxml processor to send the message to it, otherwise failure. For this test we allow +'scxml' as an alternative to the full url. --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1"/> + </datamodel> + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + + <transition event="timeout" conf:targetfail=""/> + + <invoke type="scxml" id="foo"> + <content> + <!-- inform parent we're running then wait for it to send us an event. If it uses the scxml event i/o + processor to do so, return success, otherwise return failure. --> + <scxml initial="sub0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <datamodel> + <data conf:id="2"/> + </datamodel> + <state id="sub0"> + <onentry> + <send target="#_parent" event="childRunning"/> + </onentry> + + <transition event="parentToChild" target="sub1"> + <assign conf:location="2" conf:eventField="origintype"/> + </transition> + </state> + <state id="sub1"> + <transition conf:idQuoteVal="2=http://www.w3.org/TR/scxml/#SCXMLEventProcessor" target="subFinal"> + <send target="#_parent" event="success"/> + </transition> + <transition conf:idQuoteVal="2=scxml" target="subFinal"> + <send target="#_parent" event="success"/> + </transition> + <transition target="subFinal"> + <send target="#_parent" event="failure"/> + </transition> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <state id="s01"> + <transition event="childRunning" target="s02"> + <assign conf:location="1" conf:eventField="origintype"/> + </transition> + </state> + + <state id="s02"> + + <transition conf:idQuoteVal="1=http://www.w3.org/TR/scxml/#SCXMLEventProcessor" target="s03"> + <send target="#_foo" event="parentToChild"/> + </transition> + <transition conf:idQuoteVal="1=scxml" target="s03"> + <send target="#_foo" event="parentToChild"/> + </transition> + + <transition conf:targetfail=""/> + + </state> + + + <state id="s03"> + <transition event="success" conf:targetpass=""/> + <transition event="fail" conf:targetfail=""/> + + </state> + +</state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test276.txml b/test/w3c/txml/test276.txml new file mode 100644 index 0000000..e4a9d9f --- /dev/null +++ b/test/w3c/txml/test276.txml @@ -0,0 +1,21 @@ +<?xml version="1.0"?> + +<!-- test that values passed in from parent process override default values specified in the child, test276sub1.scxml. +The child returns event1 if var1 has value 1, event0 if it has default value 0. --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + <state id="s0"> + <invoke type="scxml" src="file:test276sub1.scxml" > + <param conf:name="1" conf:expr="1"/> + </invoke> + <transition event="event1" conf:targetpass=""/> + <transition event="event0" conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> + + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test276sub1.txml b/test/w3c/txml/test276sub1.txml new file mode 100644 index 0000000..3bb40c0 --- /dev/null +++ b/test/w3c/txml/test276sub1.txml @@ -0,0 +1,24 @@ +<?xml version="1.0"?> + +<!-- define var1 with default value 0. Parent will invoke this process setting var1 = 1. Return event1 if var1 == 1, event0 otherwise --> +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <datamodel> + <data conf:id="1" conf:expr="0"/> + </datamodel> + + <state id="s0"> + + + <transition conf:idVal="1=1" target="final"> + <send target="#_parent" event="event1"/> + </transition> + + <transition target="final"> + <send target="#_parent" event="event0"/> + </transition> + + </state> + + <final id="final"/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test277.txml b/test/w3c/txml/test277.txml new file mode 100644 index 0000000..bd08341 --- /dev/null +++ b/test/w3c/txml/test277.txml @@ -0,0 +1,32 @@ +<?xml version="1.0"?> + +<!-- test that platform creates undound variable if we assign an illegal value to it. Thus + we can assign to it later in state s1. --> + +<scxml initial="s0" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" conf:datamodel="" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <datamodel> + <data conf:id="1" conf:illegalExpr=""/> + </datamodel> + + <state id="s0"> + <onentry> + <raise event="foo"/> + </onentry> + + <transition event="error.execution" conf:unboundVar="1" target="s1"/> + <transition event="*" conf:targetfail=""/> + </state> + + <state id="s1"> + <onentry> + <assign conf:location="1" conf:expr="1"/> + </onentry> + <transition conf:idVal="1=1" conf:targetpass=""/> + <transition conf:targetfail=""/> + + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test278.txml b/test/w3c/txml/test278.txml new file mode 100644 index 0000000..c95b329 --- /dev/null +++ b/test/w3c/txml/test278.txml @@ -0,0 +1,22 @@ + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + +<!-- test that a variable can be accessed from a state that is outside its lexical scope --> + + <state id="s0"> + <transition conf:idVal="1=1" conf:targetpass=""/> + + <transition conf:targetfail=""/> + + </state> + +<state id="s1"> + <datamodel> + <data conf:id="1" conf:expr="1"/> + </datamodel> + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test279.txml b/test/w3c/txml/test279.txml new file mode 100644 index 0000000..b3b1adc --- /dev/null +++ b/test/w3c/txml/test279.txml @@ -0,0 +1,25 @@ +<?xml version="1.0"?> + +<!-- testing that in case of early binding variables are assigned values at init time, before + the state containing them is visited --> +<scxml initial="s0" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" conf:datamodel="" + xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + + <state id="s0"> + <transition conf:idVal="1=1" conf:targetpass=""/> + + <transition conf:targetfail=""/> + + </state> + +<state id="s1"> + <datamodel> + <data conf:id="1" conf:expr="1"/> + </datamodel> + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test280.txml b/test/w3c/txml/test280.txml new file mode 100644 index 0000000..723eaa5 --- /dev/null +++ b/test/w3c/txml/test280.txml @@ -0,0 +1,34 @@ +<?xml version="1.0"?> + + +<!-- test late binding. var2 won't get bound until s1 is entered, so it shouldn't have a value in s0 and +accessing it should cause an error. It should get bound before the onentry code in s1 so it should be +possible access it there and assign its value to var1 --> + +<scxml initial="s0" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" conf:datamodel="" + binding="late" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + <datamodel> + <data conf:id="1"/> + </datamodel> + + <state id="s0"> + <transition conf:unboundVar="2" target="s1"/> + <transition conf:targetfail=""/> + </state> + +<state id="s1"> + <datamodel> + <data conf:id="2" conf:expr="1"/> + </datamodel> + <onentry> + <assign conf:location="1" conf:varExpr="2"/> + </onentry> + <transition conf:VarEqVar="1 2" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test286.txml b/test/w3c/txml/test286.txml new file mode 100644 index 0000000..89b77a9 --- /dev/null +++ b/test/w3c/txml/test286.txml @@ -0,0 +1,23 @@ +<?xml version="1.0"?> + +<!-- test that assigment to a non-declared var causes an error. the transition on foo catches the case +where no error is raised --> + +<scxml xmlns="http://www.w3.org/2005/07/scxml" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" conf:datamodel="" initial="s0"> + + + <state id="s0"> + <onentry> + <assign conf:location="1" conf:expr="1"/> + <raise event="foo"/> + </onentry> + + <transition event="error.execution" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml> diff --git a/test/w3c/txml/test287.txml b/test/w3c/txml/test287.txml new file mode 100644 index 0000000..8f25165 --- /dev/null +++ b/test/w3c/txml/test287.txml @@ -0,0 +1,23 @@ +<?xml version="1.0"?> +<!-- a simple test that a legal value may be assigned to a valid data model location --> + +<scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" + conf:datamodel="" version="1.0" initial="s0"> + +<datamodel> + <data conf:id="1" conf:expr="0"/> + </datamodel> + + <state id="s0"> + <onentry> + <assign conf:location="1" conf:expr="1"/> + </onentry> + + <transition conf:idVal="1=1" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test294.txml b/test/w3c/txml/test294.txml new file mode 100644 index 0000000..507ff3b --- /dev/null +++ b/test/w3c/txml/test294.txml @@ -0,0 +1,49 @@ +<?xml version="1.0"?> +<!-- test that a param inside donedata ends up in the data field of the done event and +that content inside donedata sets the full value of the event.data field --> + +<scxml version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" conf:datamodel="" initial="s0"> + <datamodel> + <data conf:id="1" conf:expr="0"/> + </datamodel> + + <state id="s0" initial="s01"> + + <transition event="done.state.s0" conf:eventvarVal="1=1" target="s1"> + </transition> + + <transition event="done.state.s0" conf:targetfail=""> + </transition> + + <state id="s01"> + <transition target="s02"/> + </state> + <final id="s02"> + <donedata> + <param conf:name="1" conf:expr="1"/> + </donedata> + </final> + </state> + + <state id="s1" initial="s11"> + + <transition event="done.state.s1" conf:eventdataVal="foo" conf:targetpass=""> + </transition> + + <transition event="done.state.s1" conf:targetfail=""> + </transition> + + <state id="s11"> + <transition target="s12"/> + </state> + <final id="s12"> + <donedata> + <conf:contentFoo/> + </donedata> + </final> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test298.txml b/test/w3c/txml/test298.txml new file mode 100644 index 0000000..e1af350 --- /dev/null +++ b/test/w3c/txml/test298.txml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<!-- refence a non-existent data model location in param in donedata and see that the right error is raised --> + +<scxml version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" conf:datamodel="" initial="s0"> + <datamodel> + <data conf:id="1" conf:expr="0"/> + </datamodel> + + <state id="s0" initial="s01"> + <transition event="error.execution" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + + <state id="s01"> + <transition target="s02"/> + </state> + <final id="s02"> + <donedata> + <param conf:name="3" conf:location="2"/> + </donedata> + </final> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml> + + diff --git a/test/w3c/txml/test301.txml b/test/w3c/txml/test301.txml new file mode 100644 index 0000000..d3245f3 --- /dev/null +++ b/test/w3c/txml/test301.txml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- the processor should reject this document because it can't download the script. +Therefore we fail if it runs at all. This test is valid only for datamodels that support scripting --> + +<scxml version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0"> + <script conf:scriptBadSrc=""/> + + <state id="s0"> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test302.txml b/test/w3c/txml/test302.txml new file mode 100644 index 0000000..b5ecbae --- /dev/null +++ b/test/w3c/txml/test302.txml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- test that a script is evaluated at load time. <conf:script> shoudl assign the value 1 to +Var1. Hence, if script is evaluated at download time, Var1 has a value in the initial state s0. +This test is valid only for datamodels that support scripting --> + +<scxml version="1.0" xmlns="http://www.w3.org/2005/07/scxml" conf:datamodel="" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0"> + <conf:script/> + + <state id="s0"> + <transition conf:idVal="1=1" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test303.txml b/test/w3c/txml/test303.txml new file mode 100644 index 0000000..b7fe556 --- /dev/null +++ b/test/w3c/txml/test303.txml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- to test that scripts are run as part of executable content, we check that it changes the value of a var at the +right point. This test is valid only for datamodels that support scripting --> + +<scxml version="1.0" xmlns="http://www.w3.org/2005/07/scxml" + conf:datamodel="" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0"> +<datamodel> +<data conf:id="1" conf:expr="0"/> +</datamodel> + + <state id="s0"> + <onentry> + <assign conf:location="1" conf:expr="2"/> + <conf:script/> + </onentry> + <transition conf:idVal="1=1" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test304.txml b/test/w3c/txml/test304.txml new file mode 100644 index 0000000..a165ff8 --- /dev/null +++ b/test/w3c/txml/test304.txml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- test that a variable declared by a script can be accessed like any other part of the data model --> + +<scxml xmlns="http://www.w3.org/2005/07/scxml" conf:datamodel="" + version="1.0" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0"> + <conf:script/> + + <state id="s0"> + <transition conf:idVal="1=1" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test307.txml b/test/w3c/txml/test307.txml new file mode 100644 index 0000000..4065f5f --- /dev/null +++ b/test/w3c/txml/test307.txml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?><scxml xmlns="http://www.w3.org/2005/07/scxml" +xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" initial="s0" binding="late"> + +<!-- with binding=late, in s0 we access a variable that isn't created until we get to s1. Then in s1 +we access a non-existent substructure of a variable. We use log tags to report the values that both operations +yield, and whether there are errors. This is a manual test, since the tester must report whether the output +is the same in the two cases --> + +<state id="s0"> + <onentry> + <log label="entering s0 value of Var 1 is: " conf:varExpr="1"/> + <raise event="foo"/> + </onentry> + <transition event="error" target="s1"> + <log label="error in state s0" conf:expr="_event"/> + </transition> + <transition event="foo" target="s1"> + <log label="no error in s0" conf:expr=""/> + </transition> + </state> + +<state id="s1"> + <datamodel> + <data conf:id="1" conf:expr="1"/> + </datamodel> + + <onentry> + <log label="entering s1, value of non-existent substructure of Var 1 is: " conf:varNonexistentStruct="1"/> + <raise event="bar"/> + </onentry> + + <transition event="error" target="final"> + <log label="error in state s1" conf:expr="_event"/> + </transition> + <transition event="bar" target="final"> + <log label="No error in s1" conf:expr=""/> + </transition> + +</state> + +<final id="final"/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test309.txml b/test/w3c/txml/test309.txml new file mode 100644 index 0000000..c781100 --- /dev/null +++ b/test/w3c/txml/test309.txml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- test that an expression that cannot be interpreted as a boolean is treated as false --> + +<scxml version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0"> + +<state id="s0"> + <transition conf:nonBoolean="" conf:targetfail=""/> + <transition conf:targetpass=""/> + </state> + +<conf:pass/> +<conf:fail/> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test310.txml b/test/w3c/txml/test310.txml new file mode 100644 index 0000000..f88a87a --- /dev/null +++ b/test/w3c/txml/test310.txml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- simple test of the in() predicate --> + +<scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0" conf:datamodel="" +xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="p"> + + + <parallel id="p"> + + <state id="s0"> + <transition conf:inState="s1" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + <state id="s1"/> + </parallel> + +<conf:pass/> +<conf:fail/> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test311.txml b/test/w3c/txml/test311.txml new file mode 100644 index 0000000..f6485be --- /dev/null +++ b/test/w3c/txml/test311.txml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- test that assignment to a non-existent location yields an error --> + +<scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0" conf:datamodel="" +xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0"> + + +<state id="s0"> + <onentry> + <assign conf:location="1" conf:expr="1"/> + </onentry> + <transition event="error.execution" conf:targetpass=""/> + <transition event=".*" conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test312.txml b/test/w3c/txml/test312.txml new file mode 100644 index 0000000..597200b --- /dev/null +++ b/test/w3c/txml/test312.txml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- test that assignment with an illegal expr raises an error --> + +<scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0" conf:datamodel="" +xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0"> + +<datamodel> + <data conf:id="1" conf:expr="1"/> + </datamodel> + +<state id="s0"> + <onentry> + <assign conf:location="1" conf:illegalExpr=""/> + <raise event="foo"/> + </onentry> + <transition event="error.execution" conf:targetpass=""/> + <transition event=".*" conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test313.txml b/test/w3c/txml/test313.txml new file mode 100644 index 0000000..ee11064 --- /dev/null +++ b/test/w3c/txml/test313.txml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- this is a manual test. The processor is allowed to reject this doc, but if it executes it with its illegal +expression, it must raise an error --> + +<scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0" conf:datamodel="" +xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0"> + +<datamodel> + <data conf:id="1" conf:expr="1"/> + </datamodel> + +<state id="s0"> + <onentry> + <assign conf:location="1" conf:illegalExpr=""/> + <raise event="foo"/> + </onentry> + <transition event="error.execution" conf:targetpass=""/> + <transition event=".*" conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test314.txml b/test/w3c/txml/test314.txml new file mode 100644 index 0000000..7a2329e --- /dev/null +++ b/test/w3c/txml/test314.txml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- this is a manual test because the processor is allowed to reject this document. But if it executes it, +it should not raise an error until it gets to s03 and evaluates the illegal expr --> + +<scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0" + conf:datamodel="" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0"> +<datamodel> + <data conf:id="1" conf:expr="1"/> + </datamodel> + + +<state id="s0" initial="s01"> + <transition event="error.execution" conf:targetfail=""/> + + <state id="s01"> + <transition target="s02"/> + </state> + + <state id="s02"> + <transition target="s03"/> + </state> + + <state id="s03"> + <onentry> + <assign conf:location="1" conf:illegalExpr=""/> + <raise event="foo"/> + </onentry> + <transition event="error.execution" conf:targetpass=""/> + <transition event=".*" conf:targetfail=""/> + </state> + +</state> + +<conf:pass/> +<conf:fail/> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test318.txml b/test/w3c/txml/test318.txml new file mode 100644 index 0000000..9e71bc6 --- /dev/null +++ b/test/w3c/txml/test318.txml @@ -0,0 +1,31 @@ +<?xml version="1.0"?> + +<!-- test that _event stays bound during the onexit and entry into the next state --> + +<scxml initial="s0" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" conf:datamodel="" name="machineName" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1"/> + </datamodel> + + <state id="s0"> + <onentry> + <raise event="foo"/> + </onentry> + <transition event="foo" target="s1"/> + </state> + + <state id="s1"> + <onentry> + <raise event="bar"/> + <!-- _event should still be bound to 'foo' at this point --> + <assign conf:location="1" conf:eventName=""/> + </onentry> + <transition conf:idQuoteVal="1=foo" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test319.txml b/test/w3c/txml/test319.txml new file mode 100644 index 0000000..50e4a97 --- /dev/null +++ b/test/w3c/txml/test319.txml @@ -0,0 +1,25 @@ +<?xml version="1.0"?> + +<!-- test that _event is not bound before any event has been raised --> + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" + name="machineName" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + <state id="s0"> + <onentry> + <if conf:systemVarIsBound="_event"> + <raise event="bound"/> + <else/> + <raise event="unbound"/> + </if> + </onentry> + <transition event="unbound" conf:targetpass=""/> + <transition event="bound" conf:targetfail=""/> + + </state> + + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test321.txml b/test/w3c/txml/test321.txml new file mode 100644 index 0000000..9cd6b02 --- /dev/null +++ b/test/w3c/txml/test321.txml @@ -0,0 +1,19 @@ +<?xml version="1.0"?> + +<!-- test that _sessionid is bound on startup --> + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" name="machineName" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:systemVarExpr="_sessionid"/> + </datamodel> + + <state id="s0"> +<transition conf:isBound="1" conf:targetpass=""/> + <transition conf:true="" conf:targetfail=""/> + </state> + + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test322.txml b/test/w3c/txml/test322.txml new file mode 100644 index 0000000..6900eef --- /dev/null +++ b/test/w3c/txml/test322.txml @@ -0,0 +1,37 @@ +<?xml version="1.0"?> + +<!-- test that _sessionid remains bound to the same value throught the session. this means that it can't +be assigned to --> + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" name="machineName" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:systemVarExpr="_sessionid"/> + <data conf:id="2"/> + </datamodel> + + <state id="s0"> + <transition target="s1"/> + + </state> + + <state id="s1"> + <onentry> + <assign conf:systemVarLocation="_sessionid" conf:quoteExpr="otherName"/> + <raise event="foo"/> + </onentry> + + <transition event="error.execution" target="s2"/> + <transition event="*" conf:targetfail=""/> + </state> + + <state id="s2"> + + <transition conf:idSystemVarVal="1=_sessionid" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test323.txml b/test/w3c/txml/test323.txml new file mode 100644 index 0000000..a16333c --- /dev/null +++ b/test/w3c/txml/test323.txml @@ -0,0 +1,19 @@ +<?xml version="1.0"?> + +<!-- test that _name is bound on startup --> + +<scxml initial="s0" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" conf:datamodel="" name="machineName" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:systemVarExpr="_name"/> + </datamodel> + + <state id="s0"> +<transition conf:isBound="1" conf:targetpass=""/> + <transition conf:true="" conf:targetfail=""/> + </state> + + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test324.txml b/test/w3c/txml/test324.txml new file mode 100644 index 0000000..d1b304d --- /dev/null +++ b/test/w3c/txml/test324.txml @@ -0,0 +1,25 @@ +<?xml version="1.0"?> + +<!-- test that _name stays bound till the session ends. This means that it cannot be assigned to --> + +<scxml initial="s0" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" conf:datamodel="" name="machineName" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + + <state id="s0"> + <transition conf:nameVarVal="machineName" target="s1"/> + <transition conf:targetfail=""/> + </state> + + <state id="s1"> + <onentry> + <assign conf:systemVarLocation="_name" expr="'otherName'"/> + </onentry> + <transition conf:nameVarVal="machineName" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test325.txml b/test/w3c/txml/test325.txml new file mode 100644 index 0000000..53623c3 --- /dev/null +++ b/test/w3c/txml/test325.txml @@ -0,0 +1,22 @@ +<?xml version="1.0"?> + +<!-- test that _ioprocessors is bound at startup. I'm not sure how to test for a set value or +how to test that the entries in it do represent I/O processors, since the set that each implementation +supports may be different. Suggestions welcome --> + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" name="machineName" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:systemVarExpr="_ioprocessors"/> + </datamodel> + + + <state id="s0"> + <transition conf:isBound="1" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test326.txml b/test/w3c/txml/test326.txml new file mode 100644 index 0000000..008e786 --- /dev/null +++ b/test/w3c/txml/test326.txml @@ -0,0 +1,38 @@ +<?xml version="1.0"?> + +<!-- test that _ioprocessors stays bound till the session ends. This means that it cannot be assigned to --> +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" name="machineName" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:systemVarExpr="_ioprocessors"/> + <data conf:id="2"/> + </datamodel> + + <state id="s0"> + <transition conf:isBound="1" target="s1"/> + <transition conf:true="" conf:targetfail=""/> + </state> + + + <state id="s1"> + <onentry> + <assign conf:systemVarLocation="_ioprocessors" conf:quoteExpr="otherName"/> + <raise event="foo"/> + </onentry> + + <transition event="error.execution" target="s2"/> + <transition event="*" conf:targetfail=""/> + </state> + + <state id="s2"> + <onentry> + <assign conf:location="2" conf:systemVarExpr="_ioprocessors"/> + </onentry> + <transition conf:VarEqVarStruct="1 2" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test329.txml b/test/w3c/txml/test329.txml new file mode 100644 index 0000000..2552e1f --- /dev/null +++ b/test/w3c/txml/test329.txml @@ -0,0 +1,55 @@ +<!-- test that none of the system variables can be modified --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" name="machineName" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <datamodel> + <data conf:id="1"/> + <data conf:id="2"/> + <data conf:id="3"/> + <data conf:id="4"/> + </datamodel> + + <state id="s0"> + <onentry> + <!-- get _event bound so we can use it in s1--> + <raise event="foo"/> + <assign conf:location="1" conf:systemVarExpr="_sessionid"/> + <assign conf:systemVarLocation="_sessionid" conf:invalidSessionID=""/> + </onentry> + + <transition event="foo" conf:idSystemVarVal="1=_sessionid" target="s1"/> + <transition event="*" conf:targetfail=""/> + </state> + + <state id="s1"> + <onentry> + <assign conf:location="2" conf:systemVarExpr="_event"/> + <assign conf:systemVarLocation="_event" expr="27"/> + </onentry> + <transition conf:idSystemVarVal="2=_event" target="s2"/> + <transition conf:targetfail=""/> + </state> + +<state id="s2"> + <onentry> + <assign conf:location="3" conf:systemVarExpr="_name"/> + <assign conf:systemVarLocation="_name" expr="27"/> + </onentry> + <transition conf:idSystemVarVal="3=_name" target="s3"/> + <transition conf:targetfail=""/> + </state> + + +<state id="s3"> + <onentry> + <assign conf:location="4" conf:systemVarExpr="_ioprocessors"/> + <assign conf:systemVarLocation="_ioprocessors" expr="27"/> + </onentry> + <transition conf:idSystemVarVal="4=_ioprocessors" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test330.txml b/test/w3c/txml/test330.txml new file mode 100644 index 0000000..7778fad --- /dev/null +++ b/test/w3c/txml/test330.txml @@ -0,0 +1,27 @@ +<?xml version="1.0"?> + +<!-- check that the required fields are present in both internal and external events --> + +<scxml initial="s0" conf:datamodel="" name="machineName" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + <state id="s0"> + <onentry> + <raise event="foo"/> + </onentry> + <transition event="foo" conf:eventFieldsAreBound="" target="s1"/> + <transition event="*" conf:targetfail=""/> + </state> + + <state id="s1"> + <onentry> + <send event="foo"/> + </onentry> + <transition event="foo" conf:eventFieldsAreBound="" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test331.txml b/test/w3c/txml/test331.txml new file mode 100644 index 0000000..a273b14 --- /dev/null +++ b/test/w3c/txml/test331.txml @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<scxml version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" name="machineName"> + +<!-- test that _event.type is set correctly for internal, platform, and external events --> +<datamodel> + <data conf:id="1"/> + </datamodel> + + <state id="s0"> + <onentry> + <!-- internal event --> + <raise event="foo"/> + </onentry> + <transition event="foo" target="s1"> + <assign conf:location="1" conf:eventType=""/> + </transition> + <transition event="*" target="fail"/> + </state> + +<state id="s1"> + <transition conf:idQuoteVal="1=internal" target="s2"/> + <transition conf:targetfail=""/> + </state> + +<state id="s2"> + <onentry> + <!-- this will generate an error, which is a platform event --> + <assign conf:location="2" conf:expr="1"/> + </onentry> + <transition event="error" target="s3"> + <assign conf:location="1" conf:eventType=""/> + </transition> + <transition event="*" target="fail"/> + </state> + +<state id="s3"> + <transition conf:idQuoteVal="1=platform" target="s4"/> + <transition conf:targetfail=""/> + </state> + + <state id="s4"> + <onentry> + <!-- external event --> + <send event="foo"/> + </onentry> + <transition event="foo" target="s5"> + <assign conf:location="1" conf:eventType=""/> + </transition> + <transition event="*" target="fail"/> + </state> + +<state id="s5"> + <transition conf:idQuoteVal="1=external" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + + <final xmlns="http://www.w3.org/2005/07/scxml" id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final xmlns="http://www.w3.org/2005/07/scxml" id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test332.txml b/test/w3c/txml/test332.txml new file mode 100644 index 0000000..0f87545 --- /dev/null +++ b/test/w3c/txml/test332.txml @@ -0,0 +1,33 @@ +<?xml version="1.0"?> + +<!-- test that sendid is present in error events triggered by send errors --> + +<scxml version="1.0" xmlns="http://www.w3.org/2005/07/scxml" initial="s0" conf:datamodel="" name="machineName" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <datamodel> + <data conf:id="1"/> + <data conf:id="2"/> + </datamodel> + + + <state id="s0"> + <onentry> + <!-- this will raise an error and also store the sendid in var1 --> + <send conf:illegalTarget="" event="foo" conf:idlocation="1"/> + </onentry> + <transition event="error" target="s1"> + <!-- get the sendid out of the error event --> + <assign conf:location="2" conf:eventSendid=""/> + </transition> + <transition event="*" conf:targetfail=""/> + </state> + +<state id="s1"> +<!-- make sure that the sendid in the error event matches the one generated when send executed --> + <transition conf:VarEqVar="1 2" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test333.txml b/test/w3c/txml/test333.txml new file mode 100644 index 0000000..38a5097 --- /dev/null +++ b/test/w3c/txml/test333.txml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> + +<!-- make sure sendid is blank in a non-error event --> + +<scxml version="1.0" xmlns="http://www.w3.org/2005/07/scxml" initial="s0" conf:datamodel="" name="machineName" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + <state id="s0"> + <onentry> + <send event="foo"/> + </onentry> + <transition event="foo" conf:eventFieldHasNoValue="sendid" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test335.txml b/test/w3c/txml/test335.txml new file mode 100644 index 0000000..e9c70b2 --- /dev/null +++ b/test/w3c/txml/test335.txml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> + +<!-- test that origin field is blank for internal events --> + +<scxml version="1.0" xmlns="http://www.w3.org/2005/07/scxml" initial="s0" conf:datamodel="" name="machineName" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + <state id="s0"> + <onentry> + <raise event="foo"/> + </onentry> + <transition event="foo" conf:eventFieldHasNoValue="origin" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test336.txml b/test/w3c/txml/test336.txml new file mode 100644 index 0000000..889cb94 --- /dev/null +++ b/test/w3c/txml/test336.txml @@ -0,0 +1,29 @@ +<?xml version="1.0"?> + +<!-- test that the origin field of an external event contains a URL that lets you send back to the originator. In +this case it's the same session, so if we get bar we succeed --> + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" name="machineName" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + <state id="s0"> + <onentry> + <send event="foo"/> + </onentry> + <transition event="foo" target="s1"> + <conf:sendToSender name="bar"/> + </transition> + <transition event="*" conf:targetfail=""/> + </state> + +<state id="s1"> + <onentry> + <send event="baz"/> + </onentry> + <transition event="bar" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test337.txml b/test/w3c/txml/test337.txml new file mode 100644 index 0000000..4d5e44f --- /dev/null +++ b/test/w3c/txml/test337.txml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> + +<!-- test that origintype is blank on internal events --> + +<scxml initial="s0" conf:datamodel="" version="1.0" name="machineName" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + <state id="s0"> + <onentry> + <raise event="foo"/> + </onentry> + <transition event="foo" conf:eventFieldHasNoValue="origintype" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test338.txml b/test/w3c/txml/test338.txml new file mode 100644 index 0000000..5f81086 --- /dev/null +++ b/test/w3c/txml/test338.txml @@ -0,0 +1,43 @@ +<?xml version="1.0"?> + +<!-- test that invokeid is set correctly in events received from an invoked process. timeout event catches the +case where the invoke doesn't work correctly --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1"/> + <data conf:id="2"/> + </datamodel> + + <state id="s0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <invoke conf:idlocation="1" type="http://www.w3.org/TR/scxml/" > + <content> + <scxml initial="sub0" version="1.0" conf:datamodel="" name="machineName"> + <final id="sub0"> + <onentry> + <send target="#_parent" event="event1"/> + </onentry> + </final> + </scxml> + </content> + </invoke> + <transition event="event1" target="s1"> + <assign conf:location="2" conf:eventField="invokeid"/> + </transition> + <transition event="event0" conf:targetfail=""/> + </state> + +<state id="s1"> + <transition conf:VarEqVar="1 2" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> + + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test339.txml b/test/w3c/txml/test339.txml new file mode 100644 index 0000000..7ea1081 --- /dev/null +++ b/test/w3c/txml/test339.txml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> + +<!-- test that invokeid is blank in an event that wasn't returned from an invoked process --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" name="machineName" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + <state id="s0"> + <onentry> + <raise event="foo"/> + </onentry> + <transition event="foo" conf:eventFieldHasNoValue="invokeid" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test342.txml b/test/w3c/txml/test342.txml new file mode 100644 index 0000000..d8f330a --- /dev/null +++ b/test/w3c/txml/test342.txml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> + +<!-- test that eventexpr works and sets the name field of the resulting event --> +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" name="machineName" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <datamodel> + <data conf:id="1" conf:quoteExpr="foo"/> + <data conf:id="2"/> + </datamodel> + + <state id="s0"> + <onentry> + <send conf:eventExpr="1"/> + </onentry> + <transition event="foo" target="s1"> + <assign conf:location="2" conf:eventField="name"/> + </transition> + <transition event="*" conf:targetfail=""/> + </state> + +<state id="s1"> + <transition conf:VarEqVar="1 2" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test343.txml b/test/w3c/txml/test343.txml new file mode 100644 index 0000000..1d13da6 --- /dev/null +++ b/test/w3c/txml/test343.txml @@ -0,0 +1,37 @@ +<?xml version="1.0"?> +<!-- test that illegal <param> produces error.execution and empty event.data --> + +<scxml version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" conf:datamodel="" initial="s0"> + + + <state id="s0" initial="s01"> + <!-- we should get the error before the done event --> + <transition event="error.execution" target="s1"/> + <transition event="done.state.s0" conf:targetfail=""/> + + <transition event="done.state.s0" conf:targetfail=""> + </transition> + + <state id="s01"> + <transition target="s02"/> + </state> + <final id="s02"> + <donedata> + <param conf:location="foo" name="someParam"/> + </donedata> + </final> + </state> + + + <!-- if we get here, we received the error event. Now check that the done + event has empty event.data --> + + <state id="s1"> + <transition event="done.state.s0" conf:emptyEventData="" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test344.txml b/test/w3c/txml/test344.txml new file mode 100644 index 0000000..7723f78 --- /dev/null +++ b/test/w3c/txml/test344.txml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- test that a cond expression that cannot be evaluated as a +boolean cond expression evaluates to false and causes error.execution to be raised. +In some languages, any valid expression/object can be converted to a boolean, so conf:nonBoolean will +have to be mapped onto something that produces a syntax error or something similarly invalid --> +<scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0" + conf:datamodel="" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0"> + +<state id="s0"> + <transition conf:nonBoolean="" conf:targetfail=""/> + <transition target="s1"/> + </state> + +<state id="s1"> + <onentry> + <raise event="foo"/> + </onentry> + <transition event="error.execution" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test346.txml b/test/w3c/txml/test346.txml new file mode 100644 index 0000000..10db614 --- /dev/null +++ b/test/w3c/txml/test346.txml @@ -0,0 +1,57 @@ +<?xml version="1.0"?> + +<!-- test that any attempt to change the value of a system variable causes error.execution to be raised. +Event1..4 are there to catch the case where the error event is not raised. In cases where it is, we have +to dispose of eventn in the next state, hence the targetless transitions (which simply throw away the event.) --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" name="machineName" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + + <state id="s0"> + <onentry> + <assign conf:systemVarLocation="_sessionid" conf:quoteExpr="otherName"/> + <raise event="event1"/> + </onentry> + + <transition event="error.execution" target="s1"/> + <transition event="*" conf:targetfail=""/> + </state> + + <state id="s1"> + <onentry> + <assign conf:systemVarLocation="_event" conf:quoteExpr="otherName"/> + <raise event="event2"/> + </onentry> + <!-- throw out event1 if it's still around --> + <transition event="event1"/> + <transition event="error.execution" target="s2"/> + <!-- event1 would trigger this transition if we didn't drop it. We want this transition to have + a very general trigger to catch cases where the wrong error event was raised --> + <transition event="*" conf:targetfail=""/> + </state> + +<state id="s2"> + <onentry> + <assign conf:systemVarLocation="_ioprocessors" conf:quoteExpr="otherName"/> + <raise event="event3"/> + </onentry> + <transition event="event2"/> + <transition event="error.execution" target="s3"/> + <transition event="*" conf:targetfail=""/> + </state> + +<state id="s3"> + <onentry> + <assign conf:systemVarLocation="_name" conf:quoteExpr="otherName"/> + <raise event="event4"/> + </onentry> + <transition event="event3"/> + <transition event="error.execution" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test347.txml b/test/w3c/txml/test347.txml new file mode 100644 index 0000000..4a87324 --- /dev/null +++ b/test/w3c/txml/test347.txml @@ -0,0 +1,44 @@ +<?xml version="1.0"?> + +<!-- test that the scxml event I/O processor works by sending events back and forth between an invoked child +and its parent process --> + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0" initial="s01"> + <invoke id="child" type="scxml" > + <content> + <scxml initial="sub0" version="1.0" conf:datamodel="" name="machineName" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <state id="sub0"> + <onentry> + <send type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" target="#_parent" event="childToParent"/> + </onentry> + <transition event="parentToChild" target="subFinal"/> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + <onentry> + <send delay="20s" event="timeout"/> + </onentry> + <transition event="timeout" conf:targetfail=""/> + + <state id="s01"> + <transition event="childToParent" target="s02"/> + </state> + + <state id="s02"> + <onentry> + <send type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" target="#_child" event="parentToChild"/> + </onentry> + <transition event="done.invoke" conf:targetpass=""/> + <transition event="error" conf:targetfail=""/> + </state> +</state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test348.txml b/test/w3c/txml/test348.txml new file mode 100644 index 0000000..c633a74 --- /dev/null +++ b/test/w3c/txml/test348.txml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + <!-- test that event param of send sets the name of the event --> + +<state id="s0"> + + <onentry> + <send type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" event="s0Event"/> + </onentry> + <transition event="s0Event" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + +</state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test349.txml b/test/w3c/txml/test349.txml new file mode 100644 index 0000000..6b1fff1 --- /dev/null +++ b/test/w3c/txml/test349.txml @@ -0,0 +1,33 @@ +<?xml version="1.0"?> + +<!-- test that value in origin field can be used to send an event back to the sender --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1"/> + </datamodel> + +<state id="s0"> + + <onentry> + <send type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" event="s0Event"/> + </onentry> + <transition event="s0Event" target="s2"> + <assign conf:location="1" conf:eventField="origin"/> + </transition> + <transition event="*" conf:targetfail=""/> + +</state> + +<state id="s2"> + <onentry> + <send type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" conf:targetVar="1" event="s0Event2"/> + </onentry> + <transition event="s0Event2" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> +</state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test350.txml b/test/w3c/txml/test350.txml new file mode 100644 index 0000000..b57e881 --- /dev/null +++ b/test/w3c/txml/test350.txml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> + +<!-- test that target value is used to decide what session to deliver the event to. A session should be +able to send an event to itself using its own session ID as the target --> + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:expr="'#_scxml_' + _sessionid"/> + </datamodel> + +<state id="s0"> + + <onentry> + <send delay="5s" event="timeout"/> + <send type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" conf:targetVar="1" event="s0Event"/> + </onentry> + <transition event="s0Event" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + +</state> + + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test351.txml b/test/w3c/txml/test351.txml new file mode 100644 index 0000000..de3bfcc --- /dev/null +++ b/test/w3c/txml/test351.txml @@ -0,0 +1,52 @@ +<?xml version="1.0"?> + +<!-- test that sendid is set in event if present in send, blank otherwise --> + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1"/> + <data conf:id="2"/> + </datamodel> + + +<state id="s0"> + + <onentry> + <send delay="5s" event="timeout"/> + <send type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" id="send1" event="s0Event"/> + </onentry> + <transition event="s0Event" target="s1"> + <assign conf:location="1" conf:eventField="sendid"/> + </transition> + <transition event="*" conf:targetfail=""> + </transition> + +</state> + +<state id="s1"> + <transition conf:idQuoteVal="1=send1" target="s2"/> + <transition conf:targetfail=""/> + </state> + +<state id="s2"> + + <onentry> + <send delay="5s" event="timeout"/> + <send event="s0Event2"/> + </onentry> + <transition event="s0Event2" target="s3"> + <assign conf:location="2" conf:eventField="sendid"/> + </transition> + <transition event="*" conf:targetfail=""/> +</state> + +<state id="s3"> + <transition conf:noValue="2" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test352.txml b/test/w3c/txml/test352.txml new file mode 100644 index 0000000..448a21e --- /dev/null +++ b/test/w3c/txml/test352.txml @@ -0,0 +1,32 @@ +<?xml version="1.0"?> + +<!-- test the origintype is 'http://www.w3.org/TR/scxml/#SCXMLEventProcessor' --> +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1"/> + </datamodel> + + +<state id="s0"> + <onentry> + <send delay="5s" event="timeout"/> + <send type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" event="s0Event"/> + </onentry> + <transition event="s0Event" target="s1"> + <assign conf:location="1" conf:eventField="origintype"/> + </transition> + <transition event="*" conf:targetfail=""> + </transition> + +</state> + +<state id="s1"> + <transition conf:idQuoteVal="1=http://www.w3.org/TR/scxml/#SCXMLEventProcessor" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test354.txml b/test/w3c/txml/test354.txml new file mode 100644 index 0000000..d9e643a --- /dev/null +++ b/test/w3c/txml/test354.txml @@ -0,0 +1,56 @@ +<?xml version="1.0"?> + +<!-- test that event.data can be populated using both namelist, param and <content> +and that correct values are used --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" expr="1"/> + <data conf:id="2"/> + <data conf:id="3"/> + </datamodel> + +<state id="s0"> + <onentry> + <send delay="5s" event="timeout"/> + <send event="event1" type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" namelist="Var1"> + <param name="param1" conf:expr="2"/> + </send> + </onentry> + <transition event="event1" target="s1"> + <assign conf:location="2" conf:eventDataNamelistValue="Var1"/> + <assign conf:location="3" conf:eventDataParamValue="param1"/> + </transition> + <transition event="*" conf:targetfail=""> + </transition> + +</state> + +<state id="s1"> + + <transition conf:idVal="2=1" target="s2"/> + <transition conf:targetfail=""/> + </state> + +<state id="s2"> + <transition conf:idVal="3=2" target="s3"/> + <transition conf:targetfail=""/> + </state> + +<state id="s3"> + <onentry> + <send delay="5s" event="timeout"/> + <send event="event2"> + <content>foo</content> + </send> + </onentry> + <transition event="event2" conf:eventdataVal="foo" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + +</state> + + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test355.txml b/test/w3c/txml/test355.txml new file mode 100644 index 0000000..4136801 --- /dev/null +++ b/test/w3c/txml/test355.txml @@ -0,0 +1,18 @@ +<?xml version="1.0"?> +<!-- test that default initial state is first in document order. If we enter s0 first we succeed, if s1, failure. --> + + +<scxml conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> + <transition conf:targetpass=""/> +</state> + +<state id="s1"> + <transition conf:targetfail=""/> +</state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test364.txml b/test/w3c/txml/test364.txml new file mode 100644 index 0000000..a302f54 --- /dev/null +++ b/test/w3c/txml/test364.txml @@ -0,0 +1,77 @@ +<?xml version="1.0"?> +<!-- test that default initial states are entered when a compound state is entered. First we test +the 'initial' attribute, then the initial element, then default to the first child in document order. +If we get to s01111 we succeed, if any other state, failure. --> + + +<scxml conf:datamodel="" initial="s1" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + +<state id="s1" initial="s11p112 s11p122"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="timeout" conf:targetfail=""/> + <state id="s11" initial="s111"> + <state id="s111"/> + <parallel id="s11p1"> + <state id="s11p11" initial="s11p111"> + <state id="s11p111"/> + <state id="s11p112"> + <onentry> + <raise event="In-s11p112"/> + </onentry> + </state> + </state> + <state id="s11p12" initial="s11p121"> + <state id="s11p121"/> + <state id="s11p122"> + <transition event="In-s11p112" target="s2"/> + </state> + </state> + </parallel> + </state> +</state> + +<state id="s2"> + <initial> + <transition target="s21p112 s21p122"/> + </initial> + <transition event="timeout" conf:targetfail=""/> + <state id="s21" initial="s211"> + <state id="s211"/> + <parallel id="s21p1"> + <state id="s21p11" initial="s21p111"> + <state id="s21p111"/> + <state id="s21p112"> + <onentry> + <raise event="In-s21p112"/> + </onentry> + </state> + </state> + <state id="s21p12" initial="s21p121"> + <state id="s21p121"/> + <state id="s21p122"> + <transition event="In-s21p112" target="s3"/> + </state> + </state> + </parallel> + </state> +</state> + +<state id="s3"> + <transition conf:targetfail=""/> + <state id="s31"> + <state id="s311"> + <state id="s3111"> + <transition conf:targetpass=""/> + </state> + <state id="s3112"/> + <state id="s312"/> + <state id="s32"/> +</state> +</state> +</state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test372.txml b/test/w3c/txml/test372.txml new file mode 100644 index 0000000..84cb8f6 --- /dev/null +++ b/test/w3c/txml/test372.txml @@ -0,0 +1,32 @@ +<?xml version="1.0"?> +<!-- test that entering a final state generates done.state.parentid after executing the onentry elements. +Var1 should be set to 2 (but not 3) by the time the event is raised --> + + +<scxml conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + +<datamodel> + <data conf:id="1" conf:expr="1"/> + </datamodel> + +<state id="s0" initial="s0final"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="done.state.s0" conf:idVal="1=2" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + + <final id="s0final"> + <onentry> + <assign conf:location="1" conf:expr="2"/> + </onentry> + <onexit> + <assign conf:location="1" conf:expr="3"/> + </onexit> + </final> +</state> + + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test375.txml b/test/w3c/txml/test375.txml new file mode 100644 index 0000000..47d42c5 --- /dev/null +++ b/test/w3c/txml/test375.txml @@ -0,0 +1,30 @@ +<?xml version="1.0"?> +<!-- test that onentry handlers are executed in document order. event1 should be raised before event2 --> + + +<scxml conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + + +<state id="s0"> + <onentry> + <raise event="event1"/> + </onentry> + <onentry> + <raise event="event2"/> + </onentry> + + <transition event="event1" target="s1"/> + <transition event="*" conf:targetfail=""/> + +</state> + +<state id="s1"> + <transition event="event2" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test376.txml b/test/w3c/txml/test376.txml new file mode 100644 index 0000000..86c2c2c --- /dev/null +++ b/test/w3c/txml/test376.txml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<!-- test that each onentry handler is a separate block. The <send> of event1 will cause an error but + the increment to var1 should happen anyways --> + + +<scxml conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:expr="1"/> + </datamodel> + +<state id="s0"> + <onentry> + <send conf:illegalTarget="" event="event1"/> + </onentry> + <onentry> + <conf:incrementID id="1"/> + </onentry> + + <transition conf:idVal="1=2" conf:targetpass=""/> + <transition conf:targetfail=""/> + +</state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test377.txml b/test/w3c/txml/test377.txml new file mode 100644 index 0000000..bca44ca --- /dev/null +++ b/test/w3c/txml/test377.txml @@ -0,0 +1,35 @@ +<?xml version="1.0"?> +<!-- test that onexit handlers are executed in document order. event1 should be raised before event2 --> + + +<scxml conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + + +<state id="s0"> + <onexit> + <raise event="event1"/> + </onexit> + <onexit> + <raise event="event2"/> + </onexit> + + <transition target="s1"/> + </state> + + <state id="s1"> + + <transition event="event1" target="s2"/> + <transition event="*" conf:targetfail=""/> + +</state> + +<state id="s2"> + <transition event="event2" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> +</state> + + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test378.txml b/test/w3c/txml/test378.txml new file mode 100644 index 0000000..0e553c4 --- /dev/null +++ b/test/w3c/txml/test378.txml @@ -0,0 +1,29 @@ +<?xml version="1.0"?> +<!-- test that each onexithandler is a separate block. The <send> of event1 will cause an error but + the increment to var1 should happen anyways --> + + +<scxml version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:expr="1"/> + </datamodel> + +<state id="s0"> + <onexit> + <send conf:illegalTarget="" event="event1"/> + </onexit> + <onexit> + <conf:incrementID id="1"/> + </onexit> + +<transition target="s1"/> +</state> + +<state id="s1"> + <transition conf:idVal="1=2" conf:targetpass=""/> + <transition conf:targetfail=""/> +</state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test387.txml b/test/w3c/txml/test387.txml new file mode 100644 index 0000000..8997580 --- /dev/null +++ b/test/w3c/txml/test387.txml @@ -0,0 +1,101 @@ +<?xml version="1.0"?> +<!-- test that the default history state works correctly. From initial state s3 we take a transition to s0's default +shallow history state. That should generate "enteringS011", which takes us to s4. In s4, we +transition to s1's default deep history state. We should end up in s122, generating "enteringS122". Otherwise failure.--> + + +<scxml initial="s3" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0" initial="s01"> + + <transition event="enteringS011" target="s4"/> + <transition event="*" conf:targetfail=""/> + + <history type="shallow" id="s0HistShallow"> + <transition target="s01"/> + </history> + <history type="deep" id="s0HistDeep"> + <transition target="s022"/> + </history> + <state id="s01" initial="s011"> + <state id="s011"> + <onentry> + <raise event="enteringS011"/> + </onentry> + </state> + <state id="s012"> + <onentry> + <raise event="enteringS012"/> + </onentry> + </state> + </state> + <state id="s02" initial="s021"> + <state id="s021"> + <onentry> + <raise event="enteringS021"/> + </onentry> + </state> + <state id="s022"> + <onentry> + <raise event="enteringS022"/> + </onentry> + </state> + </state> + +</state> + +<state id="s1" initial="s11"> + + <transition event="enteringS122" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + + <history type="shallow" id="s1HistShallow"> + <transition target="s11"/> + </history> + <history type="deep" id="s1HistDeep"> + <transition target="s122"/> + </history> + <state id="s11" initial="s111"> + <state id="s111"> + <onentry> + <raise event="enteringS111"/> + </onentry> + </state> + <state id="s112"> + <onentry> + <raise event="enteringS112"/> + </onentry> + </state> + </state> + <state id="s12" initial="s121"> + <state id="s121"> + <onentry> + <raise event="enteringS121"/> + </onentry> + </state> + <state id="s122"> + <onentry> + <raise event="enteringS122"/> + </onentry> + </state> + </state> + +</state> + + +<state id="s3"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <transition target="s0HistShallow"/> +</state> + +<state id="s4"> + <transition target="s1HistDeep"/> +</state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test388.txml b/test/w3c/txml/test388.txml new file mode 100644 index 0000000..36d58cc --- /dev/null +++ b/test/w3c/txml/test388.txml @@ -0,0 +1,80 @@ +<?xml version="1.0"?> +<!-- test that history states works correctly. The counter Var1 counts how many times +we have entered s0. The initial state is s012. We then transition to s1, which transitions +to s0's deep history state. entering.s012 should be raised, otherwise failure. Then we transition +to s02, which transitions to s0's shallow history state. That should have value s01, and its initial +state is s011, so we should get entering.s011, otherwise failure.--> + + +<scxml version="1.0" initial="s012" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:expr="0"/> + </datamodel> + +<state id="s0" initial="s01"> + <onentry> + <conf:incrementID id="1"/> + </onentry> + + <!-- the first time through, go to s1, setting a timer just in case something hangs --> + <transition event="entering.s012" conf:idVal="1=1" target="s1"> + <send event="timeout" delay="2s"/> + </transition> + + <!-- the second time, we should get entering.s012. If so, go to s2, otherwise fail --> + <transition event="entering.s012" conf:idVal="1=2" target="s2"/> + <transition event="entering" conf:idVal="1=2" conf:targetfail=""/> + + <!-- the third time we should get entering-s011. If so, pass, otherwise fail --> + <transition event="entering.s011" conf:idVal="1=3" conf:targetpass=""/> + <transition event="entering" conf:idVal="1=3" conf:targetfail=""/> + + <!-- if we timeout, the state machine is hung somewhere, so fail --> + <transition event="timeout" conf:targetfail=""/> + + <history type="shallow" id="s0HistShallow"> + <transition target="s02"/> + </history> + <history type="deep" id="s0HistDeep"> + <transition target="s022"/> + </history> + <state id="s01" initial="s011"> + <state id="s011"> + <onentry> + <raise event="entering.s011"/> + </onentry> + </state> + <state id="s012"> + <onentry> + <raise event="entering.s012"/> + </onentry> + </state> + </state> + <state id="s02" initial="s021"> + <state id="s021"> + <onentry> + <raise event="entering.s021"/> + </onentry> + </state> + <state id="s022"> + <onentry> + <raise event="entering.s022"/> + </onentry> + </state> + </state> + +</state> + + +<state id="s1"> + <transition target="s0HistDeep"/> +</state> + +<state id="s2"> + <transition target="s0HistShallow"/> +</state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test396.txml b/test/w3c/txml/test396.txml new file mode 100644 index 0000000..3af03c9 --- /dev/null +++ b/test/w3c/txml/test396.txml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<!-- test that the value in _event.name matches the event name used to match against transitions --> + + +<scxml conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + +<state id="s0"> + <onentry> + <raise event="foo"/> + </onentry> + + + <transition event="foo" conf:eventNameVal="foo" conf:targetpass=""/> + <transition event="foo" conf:targetfail=""/> + +</state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test399.txml b/test/w3c/txml/test399.txml new file mode 100644 index 0000000..9eeced2 --- /dev/null +++ b/test/w3c/txml/test399.txml @@ -0,0 +1,70 @@ +<?xml version="1.0"?> +<!-- test that the event name matching works correctly, including prefix matching and the fact +that the event attribute of transition may contain multiple event designators. --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + + <!-- this will catch the failure case --> + <transition event="timeout" conf:targetfail=""/> + + <state id="s01"> + <onentry> + <raise event="foo"/> + </onentry> + <!-- test that an event can match against a transition with multiple descriptors --> + <transition event="foo bar" target="s02"/> + </state> + + <state id="s02"> + <onentry> + <raise event="bar"/> + </onentry> + <!-- test that an event can match the second descriptor as well --> + <transition event="foo bar" target="s03"/> + </state> + + <state id="s03"> + <onentry> + <raise event="foo.zoo"/> + </onentry> + <!-- test that a prefix descriptor matches --> + <transition event="foo bar" target="s04"/> + </state> + +<state id="s04"> + <onentry> + <raise event="foos"/> + </onentry> + <!-- test that only token prefixes match --> + <transition event="foo" conf:targetfail=""/> + <transition event="foos" target="s05"/> +</state> + +<state id="s05"> + <onentry> + <raise event="foo.zoo"/> + </onentry> + <!-- test that .* works at the end of a descriptor --> + <transition event="foo.*" target="s06"/> + </state> + + <state id="s06"> + <onentry> + <raise event="foo"/> + </onentry> + <!-- test that "*" works by itself --> + <transition event="*" conf:targetpass=""/> + </state> + +</state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test401.txml b/test/w3c/txml/test401.txml new file mode 100644 index 0000000..a42b719 --- /dev/null +++ b/test/w3c/txml/test401.txml @@ -0,0 +1,25 @@ +<?xml version="1.0"?> +<!-- test that errors go in the internal event queue. We send ourselves an external event foo, then perform +and operation that raises an error. Then check that the error event is processed first, even though +it was raised second --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> + <onentry> + <send event="foo"/> + <!-- assigning to a non-existent location should raise an error --> + <assign conf:location="1" conf:expr="2"/> + </onentry> + + + <transition event="foo" conf:targetfail=""/> + <transition event="error" conf:targetpass=""/> + +</state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test402.txml b/test/w3c/txml/test402.txml new file mode 100644 index 0000000..24e84e1 --- /dev/null +++ b/test/w3c/txml/test402.txml @@ -0,0 +1,44 @@ +<?xml version="1.0"?> +<!-- the assertion that errors are 'like any other event' is pretty broad, but we can check that they +are pulled off the internal queue in order, and that prefix matching works on them. --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0" initial="s01"> + <onentry> + <!-- catch the failure case --> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="timeout" conf:targetfail=""/> + + <state id="s01"> + <onentry> + <!-- the first internal event. The error will be the second, and event2 will be the third --> + <raise event="event1"/> + <!-- assigning to a non-existent location should raise an error --> + <assign conf:location="1" conf:expr="2"/> + </onentry> + + <transition event="event1" target="s02"> + <raise event="event2"/> + </transition> + <transition event="*" conf:targetfail=""/> + </state> + +<state id="s02"> + <transition event="error" target="s03"/> + <transition event="*" conf:targetfail=""/> + </state> + +<state id="s03"> + <transition event="event2" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + +</state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test403a.txml b/test/w3c/txml/test403a.txml new file mode 100644 index 0000000..88bc4dc --- /dev/null +++ b/test/w3c/txml/test403a.txml @@ -0,0 +1,47 @@ +<?xml version="1.0"?> +<!-- we test one part of 'optimal enablement' meaning that of all transitions that are enabled, we chose the ones +in child states over parent states, and use document order to break ties. We have +a parent state s0 with two children, s01 and s02. In s01, we test that a) if +a transition in the child matches, we don't consider matches in the parent and b) +that if two transitions match in any state, we take the first in document order. +In s02 we test that we take a transition in the parent if there is no +matching transition in the child. --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0" initial="s01"> + <onentry> + <!-- catch the failure case --> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="timeout" conf:targetfail=""/> + <transition event="event1" conf:targetfail=""/> + <transition event="event2" conf:targetpass=""/> + + <state id="s01"> + <onentry> + <!-- this should be caught by the first transition in this state, taking us to S02 --> + <raise event="event1"/> + </onentry> + + <transition event="event1" target="s02"/> + <transition event="*" conf:targetfail=""/> + </state> + +<state id="s02"> + <onentry> + <!-- since the local transition has a cond that evaluates to false this should be caught by a + transition in the parent state, taking us to pass --> + <raise event="event2"/> + </onentry> + <transition event="event1" conf:targetfail=""/> + <transition event="event2" conf:false="" conf:targetfail=""/> + </state> + +</state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test403b.txml b/test/w3c/txml/test403b.txml new file mode 100644 index 0000000..c3ee1f8 --- /dev/null +++ b/test/w3c/txml/test403b.txml @@ -0,0 +1,44 @@ +<?xml version="1.0"?> +<!-- we test that 'optimally enabled set' really is a set, specifically that if a transition is optimally enabled in +two different states, it is taken only once. --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <datamodel> + <data conf:id="1" conf:expr="0"/> + </datamodel> + +<state id="s0" initial="p0"> + <!-- this transition should never be taken because a transition in a lower state should + always be selected --> + <transition event="event1"> + <conf:incrementID id="1"/> + </transition> + + + + <parallel id="p0"> + + <onentry> + <raise event="event1"/> + <raise event="event2"/> + </onentry> + + <!-- this transition will be selected by both states p0s1 and p0s2, but should be executed only once --> + <transition event="event1"> + <conf:incrementID id="1"/> + </transition> + + <state id="p0s1"> + <transition event="event2" conf:idVal="1=1" conf:targetpass=""/> + <transition event="event2" conf:targetfail=""/> + </state> + + <state id="p0s2"/> + +</parallel> +</state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test403c.txml b/test/w3c/txml/test403c.txml new file mode 100644 index 0000000..8af1aac --- /dev/null +++ b/test/w3c/txml/test403c.txml @@ -0,0 +1,58 @@ +<?xml version="1.0"?> +<!-- we test 'optimally enabled set', specifically that preemption works correctly --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <datamodel> + <data conf:id="1" expr="0"/> + </datamodel> + +<state id="s0" initial="p0"> + <onentry> + <raise event="event1"/> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="event2" conf:targetfail=""/> + <transition event="timeout" conf:targetfail=""/> + + <parallel id="p0"> + + <state id="p0s1"> + <transition event="event1"/> + <transition event="event2"/> + </state> + + <state id="p0s2"> + <transition event="event1" target="p0s1"> + <raise event="event2"/> + </transition> + + </state> + + <state id="p0s3"> + <!-- this transition should be blocked by the one in p0s2--> + <transition event="event1" conf:targetfail=""/> + <!-- this transition will preempt the one that p0s2 inherits + from an ancestor --> + <transition event="event2" target="s1"/> + + </state> + +<state id="p0s4"> + <!-- this transition never gets preempted, should fire twice --> + <transition event="*"> + <conf:incrementID id="1"/> + </transition> + </state> + +</parallel> +</state> + +<state id="s1"> + <transition conf:idVal="1=2" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test404.txml b/test/w3c/txml/test404.txml new file mode 100644 index 0000000..6734dbd --- /dev/null +++ b/test/w3c/txml/test404.txml @@ -0,0 +1,64 @@ +<?xml version="1.0"?> +<!-- test that states are exited in exit order (children before parents with reverse doc order used to break ties + before the executable content in the transitions. event1, event2, event3, event4 should be raised in that + order when s01p is exited --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0" initial="s01p"> + + + +<parallel id="s01p"> + <onexit> + <!-- this should be the 3rd event raised --> + <raise event="event3"/> + </onexit> + <transition target="s02"> + <!-- this should be the fourth event raised --> + <raise event="event4"/> + </transition> + + <state id="s01p1"> + <onexit> + <!-- this should be the second event raised --> + <raise event="event2"/> + </onexit> + </state> + + <state id="s01p2"> + <!-- this should be the first event raised --> + <onexit> + <raise event="event1"/> + </onexit> + </state> + </parallel> + + <state id="s02"> + <transition event="event1" target="s03"/> + <transition event="*" conf:targetfail=""/> + </state> + + <state id="s03"> + <transition event="event2" target="s04"/> + <transition event="*" conf:targetfail=""/> + </state> + + <state id="s04"> + <transition event="event3" target="s05"/> + <transition event="*" conf:targetfail=""/> + </state> + + <state id="s05"> + <transition event="event4" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + </state> + + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test405.txml b/test/w3c/txml/test405.txml new file mode 100644 index 0000000..ca8254e --- /dev/null +++ b/test/w3c/txml/test405.txml @@ -0,0 +1,71 @@ +<?xml version="1.0"?> +<!-- test that the executable content in the transitions is executed in document order after +the states are exited. event1, event2, event3, event4 should be raised in that order when the +state machine is entered --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" + xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + +<state id="s0" initial="s01p"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="timeout" conf:targetfail=""/> + +<parallel id="s01p"> + <transition event="event1" target="s02"/> + + + <state id="s01p1" initial="s01p11"> + <state id="s01p11"> + <onexit> + <!-- this should be the second event raised --> + <raise event="event2"/> + </onexit> + <transition target="s01p12"> + <!-- this should be the third event raised --> + <raise event="event3"/> + </transition> + </state> + <state id="s01p12"/> + </state> <!-- end s01p1 --> + + <state id="s01p2" initial="s01p21"> + <state id="s01p21"> + <onexit> + <!-- this should be the first event raised --> + <raise event="event1"/> + </onexit> + <transition target="s01p22"> + <!-- this should be the fourth event raised --> + <raise event="event4"/> + </transition> + </state> + <state id="s01p22"/> + + </state> <!-- end s01p2 --> + </parallel> + + + <state id="s02"> + <transition event="event2" target="s03"/> + <transition event="*" conf:targetfail=""/> + </state> + + <state id="s03"> + <transition event="event3" target="s04"/> + <transition event="*" conf:targetfail=""/> + </state> + + + <state id="s04"> + <transition event="event4" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + </state> <!-- end s01 --> + + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test406.txml b/test/w3c/txml/test406.txml new file mode 100644 index 0000000..9504381 --- /dev/null +++ b/test/w3c/txml/test406.txml @@ -0,0 +1,68 @@ +<?xml version="1.0"?> +<!-- Test that states are entered in entry order (parents before children with document order used to break ties) +after the executable content in the transition is executed. event1, event2, event3, event4 should be raised in that +order when the transition in s01 is taken --> + +<scxml version="1.0" initial="s0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" + xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="timeout" conf:targetfail=""/> + + <state id="s01"> + <transition target="s0p2"> + <!-- this should be the first event raised --> + <raise event="event1"/> + </transition> + </state> + +<parallel id="s0p2"> + + <transition event="event1" target="s03"/> + + <state id="s01p21" > + <onentry> + <!-- third event --> + <raise event="event3"/> + </onentry> + </state> + + <state id="s01p22"> + <onentry> + <!-- the fourth event --> + <raise event="event4"/> + </onentry> + </state> + + <onentry> + <!-- this should be the second event raised --> + <raise event="event2"/> + </onentry> + </parallel> + + + <state id="s03"> + <transition event="event2" target="s04"/> + <transition event="*" conf:targetfail=""/> + </state> + + <state id="s04"> + <transition event="event3" target="s05"/> + <transition event="*" conf:targetfail=""/> + </state> + + + <state id="s05"> + <transition event="event4" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + </state> <!-- end s0 --> + + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test407.txml b/test/w3c/txml/test407.txml new file mode 100644 index 0000000..fdef966 --- /dev/null +++ b/test/w3c/txml/test407.txml @@ -0,0 +1,24 @@ +<?xml version="1.0"?> +<!-- a simple test that onexit handlers work. var1 should be incremented when we leave s0 --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:expr="0"/> + </datamodel> + +<state id="s0"> + <onexit> + <conf:incrementID id="1"/> + </onexit> + <transition target="s1"/> +</state> + +<state id="s1"> + <transition conf:idVal="1=1" conf:targetpass=""/> + <transition conf:targetfail=""/> +</state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test409.txml b/test/w3c/txml/test409.txml new file mode 100644 index 0000000..abc92ee --- /dev/null +++ b/test/w3c/txml/test409.txml @@ -0,0 +1,36 @@ +<?xml version="1.0"?> +<!-- we test that states are removed from the active states list as they are exited. When s01's onexit handler +fires, s011 should not be on the active state list, so in(S011) should be false, and event1 should not +be raised. Therefore the timeout should fire to indicate success --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + + <transition event="timeout" conf:targetpass=""/> + <transition event="event1" conf:targetfail=""/> + + <state id="s01" initial="s011"> + <onexit> + <if conf:inState="s011"> + <raise event="event1"/> + </if> + </onexit> + + <state id="s011"> + <transition target="s02"/> + </state> + </state> <!-- end s01 --> + +<state id="s02"/> + +</state> <!-- end s0 --> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test411.txml b/test/w3c/txml/test411.txml new file mode 100644 index 0000000..149e21e --- /dev/null +++ b/test/w3c/txml/test411.txml @@ -0,0 +1,36 @@ +<?xml version="1.0"?> +<!-- we test that states are added to the active states list as they are entered and before onentry handlers +are executed. When s0's onentry handler fires we should not be in s01. But when s01's onentry handler +fires, we should be in s01. Therefore event1 should not fire, but event2 should. Either event1 or +timeout also indicates failure --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="1s"/> + <if conf:inState="s01"> + <raise event="event1"/> + </if> + </onentry> + + <transition event="timeout" conf:targetfail=""/> + <transition event="event1" conf:targetfail=""/> + <transition event="event2" conf:targetpass=""/> + + <state id="s01" > + <onentry> + <if conf:inState="s01"> + <raise event="event2"/> + </if> + </onentry> + </state> + +</state> <!-- end s0 --> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test412.txml b/test/w3c/txml/test412.txml new file mode 100644 index 0000000..6eb703f --- /dev/null +++ b/test/w3c/txml/test412.txml @@ -0,0 +1,56 @@ +<?xml version="1.0"?> +<!-- test that executable content in the <initial> transition executes after the onentry handler on the state +and before the onentry handler of the child states. Event1, event2, and event3 should occur in that order. --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + + <transition event="timeout" conf:targetfail=""/> + <transition event="event1" conf:targetfail=""/> + <transition event="event2" conf:targetpass=""/> + + <state id="s01" > + <onentry> + <raise event="event1"/> + </onentry> + <initial> + <transition target="s011"> + <raise event="event2"/> + </transition> + </initial> + + <state id="s011"> + <onentry> + <raise event="event3"/> + </onentry> + <transition target="s02"/> + </state> + </state> + +<state id="s02"> + <transition event="event1" target="s03"/> + <transition event="*" conf:targetfail=""/> + </state> + +<state id="s03"> + <transition event="event2" target="s04"/> + <transition event="*" conf:targetfail=""/> + </state> + +<state id="s04"> + <transition event="event3" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + +</state> <!-- end s0 --> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test413.txml b/test/w3c/txml/test413.txml new file mode 100644 index 0000000..0ac00e3 --- /dev/null +++ b/test/w3c/txml/test413.txml @@ -0,0 +1,49 @@ +<?xml version="1.0"?> +<!-- test that the state machine is put into the configuration specified by the initial element, without regard +to any other defaults. we should start off in s2p111 and s2p122. the atomic +states we should not enter all have immediate transitions to failure in them --> + + +<scxml initial="s2p112 s2p122" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + <state id="s1"> + <transition conf:targetfail=""/> + </state> + +<state id="s2" initial="s2p1"> + +<parallel id="s2p1"> + <!-- this transition will be triggered only if we end up in an illegal configuration where we're in + either s2p112 or s2p122, but not both of them --> + <transition conf:targetfail=""/> + + <state id="s2p11" initial="s2p111" > + <state id="s2p111"> + <transition conf:targetfail=""/> + </state> + + <state id="s2p112"> + <transition conf:inState="s2p122" conf:targetpass=""/> + </state> + + </state> <!-- end s2p11 --> + + <state id="s2p12" initial="s2p121"> + <state id="s2p121"> + <transition conf:targetfail=""/> + </state> + + <state id="s2p122"> + <transition conf:inState="s2p112" conf:targetpass=""/> + </state> + </state> + +</parallel> + +</state> <!-- end s2 --> + + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test415.txml b/test/w3c/txml/test415.txml new file mode 100644 index 0000000..5bb3343 --- /dev/null +++ b/test/w3c/txml/test415.txml @@ -0,0 +1,15 @@ +<?xml version="1.0"?> +<!-- Test that the state machine halts when it enters a top-level final state. Since + the initial state is a final state, this machine should halt immediately without + processing "event1" which is raised in the final state's on-entry handler. This + is a manual test since there is no platform-independent way to test that event1 + is not processed --> + +<scxml initial="final" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <final id="final"> + <onentry> + <raise event="event1"/> + </onentry> + </final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test416.txml b/test/w3c/txml/test416.txml new file mode 100644 index 0000000..bb0b6f5 --- /dev/null +++ b/test/w3c/txml/test416.txml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<!-- test that the done.state.id gets generated when we enter the final state of a compound state --> + + +<scxml version="1.0" initial="s1" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + <state id="s1" initial="s11"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="timeout" conf:targetfail=""/> + + <state id="s11" initial="s111"> + <transition event="done.state.s11" conf:targetpass=""/> + <state id="s111"> + <transition target="s11final"/> + </state> + <final id="s11final"/> + </state> + </state> + + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test417.txml b/test/w3c/txml/test417.txml new file mode 100644 index 0000000..5963d68 --- /dev/null +++ b/test/w3c/txml/test417.txml @@ -0,0 +1,39 @@ +<?xml version="1.0"?> +<!-- test that we get the done.state.id event when all of a +parallel elements children enter final states. --> + + + +<scxml version="1.0" initial="s1" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + <state id="s1" initial="s1p1"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="timeout" conf:targetfail=""/> + + <parallel id="s1p1"> + <transition event="done.state.s1p1" conf:targetpass=""/> + + <state id="s1p11" initial="s1p111"> + <state id="s1p111"> + <transition target="s1p11final"/> + </state> + <final id="s1p11final"/> + </state> + + <state id="s1p12" initial="s1p121"> + <state id="s1p121"> + <transition target="s1p12final"/> + </state> + <final id="s1p12final"/> + </state> + + </parallel> +</state> + + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test419.txml b/test/w3c/txml/test419.txml new file mode 100644 index 0000000..2d8fab7 --- /dev/null +++ b/test/w3c/txml/test419.txml @@ -0,0 +1,22 @@ +<?xml version="1.0"?> +<!-- test that eventless transitions take precedence over event-driven ones --> + + + +<scxml version="1.0" initial="s1" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + <state id="s1"> + <onentry> + <raise event="internalEvent"/> + <send event="externalEvent"/> + </onentry> + + <transition event="*" conf:targetfail=""/> + <transition conf:targetpass=""/> + +</state> + + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test421.txml b/test/w3c/txml/test421.txml new file mode 100644 index 0000000..4f92719 --- /dev/null +++ b/test/w3c/txml/test421.txml @@ -0,0 +1,33 @@ +<?xml version="1.0"?> +<!-- test that internal events take priority over external ones, and that the processor +keeps pulling off internal events until it finds one that triggers a transition --> + + + +<scxml version="1.0" initial="s1" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + <state id="s1" initial="s11"> + <onentry> + <send event="externalEvent"/> + <raise event="internalEvent1"/> + <raise event="internalEvent2"/> + <raise event="internalEvent3"/> + <raise event="internalEvent4"/> + </onentry> + + <transition event="externalEvent" conf:targetfail=""/> + + <state id="s11"> + <transition event="internalEvent3" target="s12"/> + </state> + + <state id="s12"> + <transition event="internalEvent4" conf:targetpass=""/> + </state> + +</state> + + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test422.txml b/test/w3c/txml/test422.txml new file mode 100644 index 0000000..2e830d9 --- /dev/null +++ b/test/w3c/txml/test422.txml @@ -0,0 +1,78 @@ +<?xml version="1.0"?> +<!-- 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 version="1.0" initial="s1" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:expr="0"/> + </datamodel> + <state id="s1" initial="s11"> + <onentry> + <send event="timeout" delay="5s"/> + </onentry> + <transition event="invokeS1 invokeS12"> + <conf:incrementID id="1"/> + </transition> + <transition event="invokeS11" conf:targetfail=""/> + + <transition event="timeout" conf:idVal="1=2" conf:targetpass=""/> + <transition event="timeout" conf:targetfail=""/> + <invoke> + <content> + <!-- when invoked, send 'foo' to parent, then terminate. --> + <scxml initial="sub0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <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" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <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" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <state id="sub2"> + <onentry> + <send target="#_parent" event="invokeS12"/> + </onentry> + <transition target="subFinal2"/> + </state> + <final id="subFinal2"/> + </scxml> + </content> + </invoke> + </state> + </state> + + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test423.txml b/test/w3c/txml/test423.txml new file mode 100644 index 0000000..fd64587 --- /dev/null +++ b/test/w3c/txml/test423.txml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<!-- test that we keep pulling external events off the queue till we find one that matches a transition. --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + + <state id="s0"> + <onentry> + <send event="externalEvent1"/> + <send event="externalEvent2" delay="1s"/> + <raise event="internalEvent"/> + </onentry> + <!-- in this state we should process only internalEvent --> + <transition event="internalEvent" target="s1"/> + <transition event="*" conf:targetfail=""/> + </state> + + <state id="s1"> + <!-- in this state we ignore externalEvent1 and wait for externalEvent2 --> + <transition event="externalEvent2" conf:targetpass=""/> + <transition event="internalEvent" conf:targetfail=""/> + </state> + + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test436.txml b/test/w3c/txml/test436.txml new file mode 100644 index 0000000..5d403a2 --- /dev/null +++ b/test/w3c/txml/test436.txml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- test that in() predicate works in null data model --> +<scxml xmlns="http://www.w3.org/2005/07/scxml" datamodel="null" +xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" initial="p"> + + + <parallel id="p"> + + <state id="ps0"> + <transition conf:inState="s1" conf:targetfail=""/> + <transition conf:inState="ps1" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + <state id="ps1"/> + </parallel> + + <state id="s1"/> + +<conf:pass/> +<conf:fail/> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test444.txml b/test/w3c/txml/test444.txml new file mode 100644 index 0000000..2483bdf --- /dev/null +++ b/test/w3c/txml/test444.txml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<!-- test that <data> creates a new ecmascript variable. --> + + +<scxml datamodel="ecmascript" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <datamodel> + <data id="var1" expr="1"/> + </datamodel> + +<state id="s0"> +<!-- test that var1 can be used as an ecmascript variable --> + <transition cond="++var1==2" conf:targetpass=""/> + <transition conf:targetfail=""/> +</state> + + + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test445.txml b/test/w3c/txml/test445.txml new file mode 100644 index 0000000..0e12064 --- /dev/null +++ b/test/w3c/txml/test445.txml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<!-- test that ecmascript objects defined by <data> have value undefined if <data> does not assign a value --> + + +<scxml datamodel="ecmascript" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <datamodel> + <data id="var1"/> + </datamodel> + +<state id="s0"> + + <transition cond="var1==undefined" conf:targetpass=""/> + <transition conf:targetfail=""/> +</state> + + + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test448.txml b/test/w3c/txml/test448.txml new file mode 100644 index 0000000..594064a --- /dev/null +++ b/test/w3c/txml/test448.txml @@ -0,0 +1,35 @@ +<?xml version="1.0"?> +<!-- test that all ecmascript objects are placed in a single global scope --> + + +<scxml datamodel="ecmascript" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> +<!-- test that a parent state can access a variable defined in a child --> + <transition cond="var1==1" target="s1"/> + <transition conf:targetfail=""/> + <state id="s01"> + <datamodel> + <data id="var1" expr="1"/> + </datamodel> + </state> + </state> + <state id="s1" initial="s01p"> + <parallel id="s01p"> + <state id="s01p1"> + <!-- test that we can access a variable defined in a parallel sibling state --> + <transition cond="var2==1" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + <state id="s01p2"> + <datamodel> + <data id="var2" expr="1"/> + </datamodel> + </state> + </parallel> + </state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test449.txml b/test/w3c/txml/test449.txml new file mode 100644 index 0000000..3b5e183 --- /dev/null +++ b/test/w3c/txml/test449.txml @@ -0,0 +1,15 @@ +<?xml version="1.0"?> +<!-- test that ecmascript objects are converted to booleans inside cond --> + + +<scxml datamodel="ecmascript" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> + <transition cond="'foo'" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test451.txml b/test/w3c/txml/test451.txml new file mode 100644 index 0000000..cfb7f53 --- /dev/null +++ b/test/w3c/txml/test451.txml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- simple test of the in() predicate --> + +<scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0" datamodel="ecmascript" +xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="p"> + + + <parallel id="p"> + + <state id="s0"> + <transition conf:inState="s1" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + <state id="s1"/> + </parallel> + +<conf:pass/> +<conf:fail/> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test452.txml b/test/w3c/txml/test452.txml new file mode 100644 index 0000000..a7d0ed0 --- /dev/null +++ b/test/w3c/txml/test452.txml @@ -0,0 +1,27 @@ +<!-- test that we can assign to any location in the datamodel. In this case, we just test that we can assign +to a substructure (not the top level variable). This may not be the most idiomatic way to write the test --> + + +<scxml datamodel="ecmascript" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <datamodel> + <data id="foo" expr="0"/> + </datamodel> + <script> + function testobject() { + this.bar = 0;} + </script> +<state id="s0"> + <onentry> + <assign location="foo" expr="new testobject();"/> +<!-- try to assign to foo's bar property --> + <assign location="foo.bar" expr="1"/> + <raise event="event1"/> + </onentry> +<!-- test that we have assigned to foo's bar property --> + <transition event="event1" cond="foo.bar == 1" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test453.txml b/test/w3c/txml/test453.txml new file mode 100644 index 0000000..e4e3fdd --- /dev/null +++ b/test/w3c/txml/test453.txml @@ -0,0 +1,22 @@ +<!-- test that we can use any ecmascript expression as a value expression. +In this case, we just test that we can assign +a function to a variable and then call it. --> + + +<scxml datamodel="ecmascript" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <datamodel> + <data id="var1" expr="function(invar) {return invar + 1;}"/> + </datamodel> + +<state id="s0"> + <onentry> + <raise event="event1"/> + </onentry> +<!-- test that we can call the function --> + <transition event="event1" cond="var1(2) == 3" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test456.txml b/test/w3c/txml/test456.txml new file mode 100644 index 0000000..e1365e0 --- /dev/null +++ b/test/w3c/txml/test456.txml @@ -0,0 +1,22 @@ +<!-- we can't test that _any_ ecmascript is valid inside <script>, so we +just run a simple one and check that it can update the data model. --> + +<scxml initial="s0" version="1.0" datamodel="ecmascript" xmlns="http://www.w3.org/2005/07/scxml" +xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:expr="0"/> + </datamodel> + + <state id="s0"> + <onentry> + <script> + Var1+=1 + </script> + </onentry> + <transition conf:idVal="1=1" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> +</scxml> diff --git a/test/w3c/txml/test457.txml b/test/w3c/txml/test457.txml new file mode 100644 index 0000000..5bb856f --- /dev/null +++ b/test/w3c/txml/test457.txml @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- test that an the legal iterable collections are arrays, namely objects that satisfy instanceof(Array) in ECMAScript. + the legal values for the 'item' attribute on foreach are legal ECMAScript variable names.. --> + +<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"> +<datamodel> + <data id="Var1" expr="0"/> + <data id="Var2"/> + <data id="Var3"/> + <data id="Var4" expr="7"/> + <data id="Var5" expr="[1,2,3]"/> + <data id="Var6"/> + </datamodel> + + <state id="s0"> + <onentry> +<!-- invalid array, legal item --> + <foreach item="Var2" index="Var3" array="Var4"> + <assign location="Var1" expr="Var1 + 1"/> + </foreach> + <raise event="foo"/> + </onentry> + <transition event="error.execution" target="s1"/> + <transition event="*" target="fail"/> + </state> + + <state id="s1"> + <onentry> +<!-- illegal item, legal array --> + <foreach item="'continue'" index="Var3" array="Var5"> + <assign location="Var1" expr="Var1 + 1"/> + </foreach> + <raise event="bar"/> + </onentry> + <transition event="error.execution" target="s2"/> + <transition event="bar" target="fail"/> + </state> + +<state id="s2"> + <!-- check that var1 has its original value (so executable content never got executed --> + <transition cond="Var1==0" target="s3"/> + <transition target="fail"/> + </state> + + +<!-- finally check that a legal array works properly --> +<state id="s3"> + <onentry> + <assign location="Var6" expr="0"/> + <foreach item="Var2" array="Var5"> + <assign location="Var6" expr="Var6 + Var2"/> + </foreach> + </onentry> + <transition cond="Var6==6" target="pass"/> + <transition target="fail"/> + </state> + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test460.txml b/test/w3c/txml/test460.txml new file mode 100644 index 0000000..10d1ce5 --- /dev/null +++ b/test/w3c/txml/test460.txml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that <foreach> does a shallow copy, so that modifying the array does not change +the iteration behavior. --> + +<scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="ecmascript" version="1.0"> + <datamodel> + <data id="Var1" expr="[1,2,3]"/> + <data id="Var2" expr="0"/> <!-- counts the number of iterations --> + </datamodel> + +<state id="s0"> + <onentry> + <foreach item="Var3" array="Var1"> + <assign location="Var1" expr="[].concat(Var1, [4])"/> + <assign location="Var2" expr="Var2 + 1"/> + </foreach> + </onentry> + + <transition cond="Var2==3" target="pass"/> + <transition target="fail"/> +</state> + + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test463.txml b/test/w3c/txml/test463.txml new file mode 100644 index 0000000..dd7836b --- /dev/null +++ b/test/w3c/txml/test463.txml @@ -0,0 +1,22 @@ +<?xml version="1.0"?> + +<!-- test that the <data> tag creates an element in the XML datamodel with the correct name and id attr +and binds an XPath variable to it --> + +<scxml initial="s0" version="1.0" datamodel="xpath" + xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data id="foo" expr="2"/> + </datamodel> + +<state id="s0"> + + + <transition cond="local-name($foo)='data'and $foo/@id ='foo'" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test464.txml b/test/w3c/txml/test464.txml new file mode 100644 index 0000000..7781b8e --- /dev/null +++ b/test/w3c/txml/test464.txml @@ -0,0 +1,21 @@ +<?xml version="1.0"?> + +<!-- test that an unassigned variable creates an empty <data> element --> + +<scxml initial="s0" version="1.0" datamodel="xpath" + xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data id="foo"/> + </datamodel> + +<state id="s0"> + + + <transition cond="count($foo) = 1 and count($foo/*) = 0" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test465.txml b/test/w3c/txml/test465.txml new file mode 100644 index 0000000..d7e1941 --- /dev/null +++ b/test/w3c/txml/test465.txml @@ -0,0 +1,27 @@ +<?xml version="1.0"?> + +<!-- test that all xpath variables are in a single global scope--> + +<scxml initial="s0" version="1.0" datamodel="xpath" + xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data id="foo" expr="2"/> + </datamodel> + +<state id="s0"> + <transition cond="count($foo) = 1 and count($bar) = 1" target="s1"/> + <transition conf:targetfail=""/> + </state> + + +<state id="s1"> + <datamodel> + <data id="bar" expr="1"/> + </datamodel> + <transition conf:targetpass=""/> + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test466.txml b/test/w3c/txml/test466.txml new file mode 100644 index 0000000..251743e --- /dev/null +++ b/test/w3c/txml/test466.txml @@ -0,0 +1,19 @@ +<?xml version="1.0"?> + +<!-- test that xpath expressions are converted to boolean when used as conditional expressions--> + +<scxml initial="s0" version="1.0" datamodel="xpath" + xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data id="foo" expr="2"/> + </datamodel> + +<state id="s0"> + <transition cond="$foo" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test467.txml b/test/w3c/txml/test467.txml new file mode 100644 index 0000000..21ba39c --- /dev/null +++ b/test/w3c/txml/test467.txml @@ -0,0 +1,17 @@ +<?xml version="1.0"?> + +<!-- test that in() is available --> + +<scxml initial="s0" version="1.0" datamodel="xpath" + xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> + <transition cond="In('s0')" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test468.txml b/test/w3c/txml/test468.txml new file mode 100644 index 0000000..cefba19 --- /dev/null +++ b/test/w3c/txml/test468.txml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> + <!-- test that XPath expressions can be used as location expressions. + This example is taken from the spec --> + + <scxml xmlns="http://www.w3.org/2005/07/scxml" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cities"> + <list xmlns=""> + <city id="nyc" count="0">New York</city> + <city id="bos" count="0">Boston</city> + </list> + </data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cities/list/city[@id='nyc']/@count" expr="1"/> + </onentry> + <transition cond="$cities/list/city[@id='nyc']/@count = 1" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml> + diff --git a/test/w3c/txml/test469.txml b/test/w3c/txml/test469.txml new file mode 100644 index 0000000..cdd5ef5 --- /dev/null +++ b/test/w3c/txml/test469.txml @@ -0,0 +1,29 @@ +<?xml version="1.0"?> + <!-- test that XPath expressions can be used as value expressions. --> + + <scxml xmlns="http://www.w3.org/2005/07/scxml" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="copyOfEventData"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="event1"> + <param name="param1" expr="1"/> + </send> + </onentry> + <transition event="event1" target="s1"> + <assign location="$copyOfEventData" expr="$_event/data"/> + </transition> + </state> + +<state id="s1"> + <transition cond="$copyOfEventData/data/data[@id='param1'] =1" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml> diff --git a/test/w3c/txml/test470.txml b/test/w3c/txml/test470.txml new file mode 100644 index 0000000..556a670 --- /dev/null +++ b/test/w3c/txml/test470.txml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> + <!-- test that the processor makes a deep copy of a node set when assigning. --> + + <scxml xmlns="http://www.w3.org/2005/07/scxml" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="var1"> + <foo xmlns=""> + <bar>2</bar> + </foo> + </data> + <data id="var2"/> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$var2" expr="$var1/foo"/> + <assign location="$var1/foo/bar" expr="3"/> + </onentry> + <transition cond="$var2/foo/bar=2" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + +<conf:pass/> +<conf:fail/> + +</scxml> diff --git a/test/w3c/txml/test473.txml b/test/w3c/txml/test473.txml new file mode 100644 index 0000000..1b76058 --- /dev/null +++ b/test/w3c/txml/test473.txml @@ -0,0 +1,44 @@ +<?xml version="1.0"?> + <!-- test that 'replacechildren' in <assign> replaces all children with the new value. + This example is taken from the doc --> + + <scxml xmlns="http://www.w3.org/2005/07/scxml" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cart/myCart/books/book[1]"> + <bookinfo xmlns=""> + <isdn>12334455</isdn> + <author>some author</author> + </bookinfo> +</assign> + </onentry> + <transition + cond="$cart/myCart/books/book[1]/bookinfo/isdn/text() = '12334455' + and not($cart/myCart/books/book[1]/title)" + conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test474.txml b/test/w3c/txml/test474.txml new file mode 100644 index 0000000..aab489b --- /dev/null +++ b/test/w3c/txml/test474.txml @@ -0,0 +1,43 @@ +<?xml version="1.0"?> + <!-- test that 'firstchild' in <assign> inserts the new value before the other children. --> + + <scxml xmlns="http://www.w3.org/2005/07/scxml" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cart/myCart/books/book[1]" type="firstchild"> + <bookinfo xmlns=""> + <isdn>12334455</isdn> + <author>some author</author> + </bookinfo> +</assign> + </onentry> + <transition + cond="$cart/myCart/books/book[1]/*[1]/isdn/text() = '12334455' + and $cart/myCart/books/book[1]/*[2]/text() = 'The Zen Mind'" + conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test475.txml b/test/w3c/txml/test475.txml new file mode 100644 index 0000000..c7f860a --- /dev/null +++ b/test/w3c/txml/test475.txml @@ -0,0 +1,43 @@ +<?xml version="1.0"?> + <!-- test that 'lastchild' in <assign> inserts the new value after the other children. --> + + <scxml xmlns="http://www.w3.org/2005/07/scxml" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cart/myCart/books/book[1]" type="lastchild"> + <bookinfo xmlns=""> + <isdn>12334455</isdn> + <author>some author</author> + </bookinfo> +</assign> + </onentry> + <transition + cond="$cart/myCart/books/book[1]/*[2]/isdn/text() = '12334455' + and $cart/myCart/books/book[1]/*[1]/text() = 'The Zen Mind'" + conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test476.txml b/test/w3c/txml/test476.txml new file mode 100644 index 0000000..59e620b --- /dev/null +++ b/test/w3c/txml/test476.txml @@ -0,0 +1,43 @@ +<?xml version="1.0"?> + <!-- test that 'nextsibling' in <assign> inserts the new value after the location. --> + + <scxml xmlns="http://www.w3.org/2005/07/scxml" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cart/myCart/books/book[1]/title" type="nextsibling"> + <bookinfo xmlns=""> + <isdn>12334455</isdn> + <author>some author</author> + </bookinfo> +</assign> + </onentry> + <transition + cond="$cart/myCart/books/book[1]/*[2]/isdn/text() = '12334455' + and $cart/myCart/books/book[1]/*[1]/text() = 'The Zen Mind'" + conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test477.txml b/test/w3c/txml/test477.txml new file mode 100644 index 0000000..e5a7b5b --- /dev/null +++ b/test/w3c/txml/test477.txml @@ -0,0 +1,43 @@ +<?xml version="1.0"?> + <!-- test that 'previoussibling' in <assign> inserts the new value before the location. --> + + <scxml xmlns="http://www.w3.org/2005/07/scxml" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cart/myCart/books/book[1]/title" type="previoussibling"> + <bookinfo xmlns=""> + <isdn>12334455</isdn> + <author>some author</author> + </bookinfo> +</assign> + </onentry> + <transition + cond="$cart/myCart/books/book[1]/*[1]/isdn/text() = '12334455' + and $cart/myCart/books/book[1]/*[2]/text() = 'The Zen Mind'" + conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test478.txml b/test/w3c/txml/test478.txml new file mode 100644 index 0000000..ecb23fc --- /dev/null +++ b/test/w3c/txml/test478.txml @@ -0,0 +1,40 @@ +<?xml version="1.0"?> + <!-- test that 'replace' in <assign> replaces the value at the location. --> + + <scxml xmlns="http://www.w3.org/2005/07/scxml" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cart/myCart/books/book[2]" type="replace"> + <cd xmlns=""> + <title>This is not a book</title> + </cd> +</assign> + </onentry> + + <transition cond="$cart/myCart/books/cd/title = 'This is not a book'" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test479.txml b/test/w3c/txml/test479.txml new file mode 100644 index 0000000..62c2e96 --- /dev/null +++ b/test/w3c/txml/test479.txml @@ -0,0 +1,40 @@ +<?xml version="1.0"?> + <!-- test that 'delete' in <assign> deletes the value at the location. --> + + <scxml xmlns="http://www.w3.org/2005/07/scxml" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cart/myCart/cds" type="delete"> + <cd xmlns=""> + <title>This is not a book</title> + </cd> +</assign> + </onentry> + + <transition cond="not($cart/myCart/cds)" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test480.txml b/test/w3c/txml/test480.txml new file mode 100644 index 0000000..88687a6 --- /dev/null +++ b/test/w3c/txml/test480.txml @@ -0,0 +1,36 @@ +<?xml version="1.0"?> + <!-- test that 'addattr' in <assign> adds an attribute to the specified node. --> + + <scxml xmlns="http://www.w3.org/2005/07/scxml" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cart/myCart/books/book[1]" type="addattribute" attr="author" expr="'somebody'"/> + </onentry> + + <transition cond="$cart/myCart/books/book[1]/@author = 'somebody'" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test481.txml b/test/w3c/txml/test481.txml new file mode 100644 index 0000000..48f73e8 --- /dev/null +++ b/test/w3c/txml/test481.txml @@ -0,0 +1,41 @@ +<?xml version="1.0"?> + <!-- test that illegal assignments fail and have no side effects. --> + + <scxml xmlns="http://www.w3.org/2005/07/scxml" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="3s"/> + <assign location="$cart/myCart/cds/cd/@name" > + <foo> + <bar/> + </foo> +</assign> + </onentry> + + <transition event="error.execution" cond="$cart/myCart/cds/cd/@name = 'Something'" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test482.txml b/test/w3c/txml/test482.txml new file mode 100644 index 0000000..9e3c2ff --- /dev/null +++ b/test/w3c/txml/test482.txml @@ -0,0 +1,23 @@ +<?xml version="1.0"?> + <!-- test that system vars are created and bound to XPath variables --> + + <scxml xmlns="http://www.w3.org/2005/07/scxml" name="scxmltest" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <onentry> + <!-- event isn't bound until an event is raised --> + <raise event="someevent"/> + </onentry> + <transition event="*" cond="local-name($_event) = 'data' + and local-name($_sessionid) = 'data' + and local-name($_name) = 'data' + and local-name($_ioprocessors) = 'data'" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test483.txml b/test/w3c/txml/test483.txml new file mode 100644 index 0000000..7eab75b --- /dev/null +++ b/test/w3c/txml/test483.txml @@ -0,0 +1,31 @@ +<?xml version="1.0"?> + <!-- test that foreach works correctly, iterating over node set in document order. + This tests assertions 483-485 --> + + <scxml xmlns="http://www.w3.org/2005/07/scxml" name="scxmltest" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="var1"> + <nodes xmlns=""> + <node/> + <node/> + <node/> + </nodes> + </data> + </datamodel> + +<state id="s0"> + <onentry> + <foreach array="$var1/nodes/node" item="item" index="pos"> + <assign location="$item" type="addattribute" attr="position" expr="$pos"/> + </foreach> + </onentry> + + <transition cond="$var1/nodes/node[1]/@position = 1 and $var1/nodes/node[2]/@position = 2 and $var1/nodes/node[3]/@position = 3" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test487.txml b/test/w3c/txml/test487.txml new file mode 100644 index 0000000..7210c2b --- /dev/null +++ b/test/w3c/txml/test487.txml @@ -0,0 +1,21 @@ +<?xml version="1.0"?> +<!-- test illegal assignment. error.execution should be raised. --> + + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:illegalExpr=""/> + </datamodel> + +<state id="s0"> + <onentry> + <raise event="event"/> + </onentry> + + <transition event="error.execution" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> +</state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test488.txml b/test/w3c/txml/test488.txml new file mode 100644 index 0000000..49c338a --- /dev/null +++ b/test/w3c/txml/test488.txml @@ -0,0 +1,37 @@ +<?xml version="1.0"?> +<!-- test that illegal expr in <param> produces error.execution and empty event.data --> + +<scxml version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" conf:datamodel="" initial="s0"> + + + <state id="s0" initial="s01"> + <!-- we should get the error before the done event --> + <transition event="error.execution" target="s1"/> + <transition event="done.state.s0" conf:targetfail=""/> + + <transition event="done.state.s0" conf:targetfail=""> + </transition> + + <state id="s01"> + <transition target="s02"/> + </state> + <final id="s02"> + <donedata> + <param conf:illegalExpr="" name="someParam"/> + </donedata> + </final> + </state> + + + <!-- if we get here, we received the error event. Now check that the done + event has empty event.data --> + + <state id="s1"> + <transition event="done.state.s0" conf:emptyEventData="" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test495.txml b/test/w3c/txml/test495.txml new file mode 100644 index 0000000..a2cf76c5 --- /dev/null +++ b/test/w3c/txml/test495.txml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<!-- test that the scxml event i/o processor puts events in the correct queues.--> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> + <onentry> + <!-- default target is external queue --> + <send event="event1" type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor"/> + <send event="event2" target="#_internal" type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor"/> + </onentry> + <!-- we should get the internal event first --> + <transition event="event1" conf:targetfail=""/> + <transition event="event2" target="s1"/> + </state> + +<state id="s1"> + <transition event="event1" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test500.txml b/test/w3c/txml/test500.txml new file mode 100644 index 0000000..21ed2ff --- /dev/null +++ b/test/w3c/txml/test500.txml @@ -0,0 +1,19 @@ +<?xml version="1.0"?> + +<!-- test that location field is found inside entry for SCXML Event I/O processor --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:scxmlEventIOLocation=""/> + </datamodel> + +<state id="s0"> + <transition conf:isBound="1" conf:targetpass=""/> + <transition conf:targetfail=""/> + + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test501.txml b/test/w3c/txml/test501.txml new file mode 100644 index 0000000..772edc8 --- /dev/null +++ b/test/w3c/txml/test501.txml @@ -0,0 +1,23 @@ +<?xml version="1.0"?> + +<!-- test that the location entry for the SCXML Event I/O processor can be used as the target for an event --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:scxmlEventIOLocation=""/> + </datamodel> + +<state id="s0"> + <onentry> + <send conf:targetVar="1" event="foo"/> + <send event="timeout" delay="2s"/> + </onentry> + <transition event="foo" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test503.txml b/test/w3c/txml/test503.txml new file mode 100644 index 0000000..d15bb7e --- /dev/null +++ b/test/w3c/txml/test503.txml @@ -0,0 +1,41 @@ +<?xml version="1.0"?> + +<!-- test that a targetless transition does not exit and reenter its source state --> + +<scxml initial="s1" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:expr="0"/> <!-- how often we have exited s2 --> + <data conf:id="2" conf:expr="0"/> <!-- how often the targetless transition in s2 has been executed --> + </datamodel> + + <state id="s1"> + <onentry> + <raise event="foo"/> + <raise event="bar"/> + </onentry> + <transition target="s2"/> + </state> + + <state id="s2"> + <onexit> + <conf:incrementID id="1"/> + </onexit> + <transition event="foo"> + <conf:incrementID id="2"/> + </transition> + <!-- make sure the transition on foo was actually taken --> + <transition event="bar" conf:idVal="2=1" target="s3"/> + <transition event="bar" conf:targetfail=""/> + </state> + + <state id="s3"> + <!-- make sure that s2 was exited only once --> + <transition conf:idVal="1=1" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test504.txml b/test/w3c/txml/test504.txml new file mode 100644 index 0000000..62f601b --- /dev/null +++ b/test/w3c/txml/test504.txml @@ -0,0 +1,79 @@ +<?xml version="1.0"?> + +<!-- test that an external transition exits all states up the the LCCA --> + +<scxml initial="s1" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:expr="0"/> <!-- how often we have exited p --> + <data conf:id="2" conf:expr="0"/> <!-- how often we have exited ps1 --> + <data conf:id="3" conf:expr="0"/> <!-- how often we have exited ps2 --> + <data conf:id="4" conf:expr="0"/> <!-- how often the transition for foo has been taken --> + <data conf:id="5" conf:expr="0"/> <!-- how often we have exited s2 --> + </datamodel> + + <state id="s1"> + <onentry> + <raise event="foo"/> + <raise event="bar"/> + </onentry> + <transition target="p"/> + </state> + +<state id="s2"> + <onexit> + <conf:incrementID id="5"/> + </onexit> + +<parallel id="p"> + <onexit> + <conf:incrementID id="1"/> + </onexit> + <transition event="foo" target="ps1"> + <conf:incrementID id="4"/> + </transition> + + <!-- make sure the transition on foo was actually taken --> + <transition event="bar" conf:idVal="4=1" target="s3"/> + <transition event="bar" conf:targetfail=""/> + + <state id="ps1"> + <onexit> + <conf:incrementID id="2"/> + </onexit> + </state> + <state id="ps2"> + <onexit> + <conf:incrementID id="3"/> + </onexit> + </state> +</parallel> +</state> + +<state id="s3"> + <!-- make sure that p was exited twice --> + <transition conf:idVal="1=2" target="s4"/> + <transition conf:targetfail=""/> + </state> + +<state id="s4"> + <!-- make sure that ps1 was exited twice --> + <transition conf:idVal="2=2" target="s5"/> + <transition conf:targetfail=""/> + </state> + +<state id="s5"> + <!-- make sure that ps2 was exited twice --> + <transition conf:idVal="3=2" target="s6"/> + <transition conf:targetfail=""/> + </state> + +<state id="s6"> + <!-- make sure that s1 was exited once --> + <transition conf:idVal="5=1" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test505.txml b/test/w3c/txml/test505.txml new file mode 100644 index 0000000..b141186 --- /dev/null +++ b/test/w3c/txml/test505.txml @@ -0,0 +1,51 @@ +<?xml version="1.0"?> + +<!-- test that an internal transition does not exit its source state --> + +<scxml initial="s1" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:expr="0"/> <!-- how often we have exited s1 --> + <data conf:id="2" conf:expr="0"/> <!-- how often we have exited s11 --> + <data conf:id="3" conf:expr="0"/> <!-- how often the transition for foo has been taken --> + </datamodel> + + <state id="s1"> + <onentry> + <raise event="foo"/> + <raise event="bar"/> + </onentry> + <onexit> + <conf:incrementID id="1"/> + </onexit> + <transition event="foo" type="internal" target="s11"> + <conf:incrementID id="3"/> + </transition> + + <!-- make sure the transition on foo was actually taken --> + <transition event="bar" conf:idVal="3=1" target="s2"/> + <transition event="bar" conf:targetfail=""/> + + <state id="s11"> + <onexit> + <conf:incrementID id="2"/> + </onexit> + </state> + </state> + +<state id="s2"> + <!-- make sure that s1 was exited once --> + <transition conf:idVal="1=1" target="s3"/> + <transition conf:targetfail=""/> + </state> + + +<state id="s3"> + <!-- make sure that s11 was exited twice --> + <transition conf:idVal="2=2" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test506.txml b/test/w3c/txml/test506.txml new file mode 100644 index 0000000..b820ad5 --- /dev/null +++ b/test/w3c/txml/test506.txml @@ -0,0 +1,57 @@ +<?xml version="1.0"?> + +<!-- test that an internal transition whose targets are not proper descendants of its source state +behaves like an external transition --> + +<scxml initial="s1" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:expr="0"/> <!-- how often we have exited s2 --> + <data conf:id="2" conf:expr="0"/> <!-- how often we have exited s21 --> + <data conf:id="3" conf:expr="0"/> <!-- how often the transition for foo has been taken --> + </datamodel> + + <state id="s1"> + <onentry> + <raise event="foo"/> + <raise event="bar"/> + </onentry> + <transition target="s2"/> + </state> + +<state id="s2" initial="s21"> + <onexit> + <conf:incrementID id="1"/> + </onexit> + <transition event="foo" type="internal" target="s2"> + <conf:incrementID id="3"/> + </transition> + + <!-- make sure the transition on foo was actually taken --> + <transition event="bar" conf:idVal="3=1" target="s3"/> + <transition event="bar" conf:targetfail=""/> + + <state id="s21"> + <onexit> + <conf:incrementID id="2"/> + </onexit> + </state> + +</state> + +<state id="s3"> + <!-- make sure that s2 was exited twice --> + <transition conf:idVal="1=2" target="s4"/> + <transition conf:targetfail=""/> + </state> + +<state id="s4"> + <!-- make sure that s21 was exited twice --> + <transition conf:idVal="2=2" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test509.txml b/test/w3c/txml/test509.txml new file mode 100644 index 0000000..3140456 --- /dev/null +++ b/test/w3c/txml/test509.txml @@ -0,0 +1,21 @@ +<?xml version="1.0"?> + +<!-- test that Basic HTTP Event I/O processor uses POST method and that it can receive messages +at the accessURI --> + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + +<state id="s0"> + <onentry> + <send event="timeout" delay="30s"/> + <send event="test" conf:basicHTTPAccessURITarget="" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"/> + </onentry> + <!-- if the event was send by http and we get it, we succeed --> + <transition event="test" conf:methodIsPost="" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test510.txml b/test/w3c/txml/test510.txml new file mode 100644 index 0000000..9ffa2ea --- /dev/null +++ b/test/w3c/txml/test510.txml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> + +<!-- test that Basic HTTP messages go into external queue. --> + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + +<state id="s0"> + <onentry> + <send event="timeout" delay="30s"/> + <send event="test" conf:basicHTTPAccessURITarget="" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"/> + <!-- this creates an internal event --> + <raise event="internal"/> + + </onentry> + <!-- we should get 'internal' first, then 'test' --> + <transition event="internal" target="s1"/> + <transition event="*" conf:targetfail=""/> + </state> + + <state id="s1"> + <transition event="test" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test513.txml b/test/w3c/txml/test513.txml new file mode 100644 index 0000000..65dda29 --- /dev/null +++ b/test/w3c/txml/test513.txml @@ -0,0 +1,54 @@ +<?xml version="1.0"?> + +<!-- test that we get an HTTP success code back on successful delivery. To run this test, implementations +must support an extension to send: if the parameter httpResponse is present with value 'true', then when +the processor gets an http response code back, it must raise an event 'http.n1.nrest' where 'ni' is +the first digit of the response code and 'nrest' are the remaining digits--> + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + +<state id="s0" initial="s01"> + <datamodel> + <data conf:id="1"/> + </datamodel> + + <onentry> + <send event="timeout" delay="30s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <!-- child script. Once we're running send childRunning to parent and include basicHTTPAccess URI --> + <scxml initial="child0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <state id="child0"> + <onentry> + <send target="#_parent" event="childRunning"> + <param name="uri" conf:basicHTTPAccessURI=""/> + </send> + </onentry> + </state> + </scxml> + </content> + </invoke> + + <transition event="*" conf:targetfail=""/> + + <state id="s01"> + <!-- when we get the event from the child, extract the access uri and use + the basicHTTP event i/o processor to send it an event --> + <transition event="childRunning" target="s02"> + <assign conf:location="1" conf:eventDataFieldValue="uri"/> + <send event="test" conf:targetExpr="1" httpResponse="true" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"/> + </transition> + </state> + + <state id="s02"> + <!-- the child should send this back automatically. It does not need to take + any transition on the event --> + <transition event="HTTP.2" conf:targetpass=""/> + </state> + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test518.txml b/test/w3c/txml/test518.txml new file mode 100644 index 0000000..b1314ee --- /dev/null +++ b/test/w3c/txml/test518.txml @@ -0,0 +1,25 @@ +<?xml version="1.0"?> + +<!-- test that that namelist values get encoded as POST parameters. --> + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:expr="2"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="30s"/> + <send event="test" conf:basicHTTPAccessURITarget="" conf:namelist="1" + type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"/> + </onentry> + + <transition event="test" conf:eventIdParamHasValue="1 2" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test519.txml b/test/w3c/txml/test519.txml new file mode 100644 index 0000000..67b64cc --- /dev/null +++ b/test/w3c/txml/test519.txml @@ -0,0 +1,21 @@ +<!-- test that that <param> values get encoded as POST parameters. . --> + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="30s"/> + <send event="test" conf:basicHTTPAccessURITarget="" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"> + <param name="param1" conf:expr="1"/> + </send> + </onentry> + + <!-- if other end sends us back this event, we succeed --> + <transition event="test" conf:eventNamedParamHasValue="param1 1" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test520.txml b/test/w3c/txml/test520.txml new file mode 100644 index 0000000..32ada62 --- /dev/null +++ b/test/w3c/txml/test520.txml @@ -0,0 +1,21 @@ +<!-- test that that <content> gets sent as the body of the message. --> + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="30s"/> + <send conf:basicHTTPAccessURITarget="" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"> + <content>this is some content</content> + </send> + </onentry> + + <!-- if other end sends us back this event, we succeed --> + <transition event="HTTP.POST" conf:messageBodyEquals="this is some content" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test521.txml b/test/w3c/txml/test521.txml new file mode 100644 index 0000000..75743ef --- /dev/null +++ b/test/w3c/txml/test521.txml @@ -0,0 +1,27 @@ +<?xml version="1.0"?> +<!-- we test that the processor raises error.communication if it cannot dispatch the event. +(To create an undispatchable event, we choose a non-existent session as target). If it raises +the error event, we succeed. Otherwise we eventually timeout and fail. --> + + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> + <onentry> + <!-- should cause an error --> + <send conf:unreachableTarget="" event="event2"/> + <!-- this will get added to the external event queue after the error has been raised --> + <send event="timeout"/> + </onentry> + + <!-- once we've entered the state, we should check for internal events first --> + <transition event="error.communication" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test522.txml b/test/w3c/txml/test522.txml new file mode 100644 index 0000000..2d7b35d --- /dev/null +++ b/test/w3c/txml/test522.txml @@ -0,0 +1,27 @@ +<?xml version="1.0"?> + +<!-- test that location field the entry for Basic HTTP Event I/O processor can be used +to send a message to the processor --> + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + +<state id="s0"> + <onentry> + <send event="timeout" delay="30s"/> + <send event="test" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor" +conf:basicHTTPAccessURITarget=""/> + + </onentry> + <!-- the event we receive should be called 'test', but that's not actually + required for this test. Only that the send deliver some event to us. So if + we get something other than timeout or error, we call it success --> + <transition event="timeout" conf:targetfail=""/> + <transition event="error" conf:targetfail=""/> + <transition event="*" conf:targetpass=""/> + + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test525.txml b/test/w3c/txml/test525.txml new file mode 100644 index 0000000..4b367eb --- /dev/null +++ b/test/w3c/txml/test525.txml @@ -0,0 +1,30 @@ +<?xml version="1.0"?> +<!-- test that <foreach> does a shallow copy, so that modifying the array does not change +the iteration behavior. --> + + +<scxml conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <datamodel> + <data conf:id="1"> + <conf:array123/> + </data> + <data conf:id="2" conf:expr="0"/> <!-- counts the number of iterations --> + </datamodel> + +<state id="s0"> + <onentry> + <foreach conf:item="3" conf:arrayVar="1"> + <conf:extendArray id="1"/> + <conf:incrementID id="2"/> + </foreach> + </onentry> + + <transition conf:idVal="2=3" conf:targetpass=""/> + <transition conf:targetfail=""/> +</state> + + + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test527.txml b/test/w3c/txml/test527.txml new file mode 100644 index 0000000..80894a7 --- /dev/null +++ b/test/w3c/txml/test527.txml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<!-- simple test that 'expr' works with <content> --> + +<scxml version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" conf:datamodel="" initial="s0"> + + + <state id="s0" initial="s01"> + + <transition event="done.state.s0" conf:eventdataVal="foo" conf:targetpass=""> + </transition> + + <transition event="done.state.s0" conf:targetfail=""> + </transition> + + <state id="s01"> + <transition target="s02"/> + </state> + <final id="s02"> + <donedata> + <content conf:quoteExpr="foo"/> + </donedata> + </final> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test528.txml b/test/w3c/txml/test528.txml new file mode 100644 index 0000000..271bb1c --- /dev/null +++ b/test/w3c/txml/test528.txml @@ -0,0 +1,36 @@ +<?xml version="1.0"?> +<!-- test that illegal 'expr' produces error.execution and empty event.data --> + +<scxml version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" conf:datamodel="" initial="s0"> + + + <state id="s0" initial="s01"> + <!-- we should get the error before the done event --> + <transition event="error.execution" target="s1"/> + <transition event="done.state.s0" conf:targetfail=""/> + + <transition event="done.state.s0" conf:targetfail=""/> + + <state id="s01"> + <transition target="s02"/> + </state> + <final id="s02"> + <donedata> + <content conf:illegalExpr=""/> + </donedata> + </final> + </state> + + + <!-- if we get here, we received the error event. Now check that the done + event has empty event.data --> + + <state id="s1"> + <transition event="done.state.s0" conf:emptyEventData="" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test529.txml b/test/w3c/txml/test529.txml new file mode 100644 index 0000000..6a6656c --- /dev/null +++ b/test/w3c/txml/test529.txml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<!-- simple test that children workn with <content> --> + +<scxml version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" conf:datamodel="" initial="s0"> + + + <state id="s0" initial="s01"> + + <transition event="done.state.s0" conf:eventdataVal="21" conf:targetpass=""> + </transition> + + <transition event="done.state.s0" conf:targetfail=""> + </transition> + + <state id="s01"> + <transition target="s02"/> + </state> + <final id="s02"> + <donedata> + <content>21</content> + </donedata> + </final> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test530.txml b/test/w3c/txml/test530.txml new file mode 100644 index 0000000..d64a8d8 --- /dev/null +++ b/test/w3c/txml/test530.txml @@ -0,0 +1,30 @@ +<?xml version="1.0"?> +<!-- test that <content> child is evaluated when <invoke> is. Var1 is initialized +with an integer value, then set to an scxml script in the onentry to s0. If <content> +is evaluated at the right time, we should get invoke.done, otherwise an error --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <datamodel> + <data conf:id="1" conf:expr="1"/> + </datamodel> + + <state id="s0"> + <onentry> + <assign conf:location="1"> + <scxml version="1.0"><final/></scxml> + </assign> + <send event="timeout" delay="2s"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/"> + <content conf:varChildExpr="1"/> + </invoke> + + <transition event="done.invoke" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> + </scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test531.txml b/test/w3c/txml/test531.txml new file mode 100644 index 0000000..cffe7b5 --- /dev/null +++ b/test/w3c/txml/test531.txml @@ -0,0 +1,22 @@ +<!-- test that that the value of the <param> _scxmleventname gets used as the name +of the raised event. --> + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="3s"/> + <send conf:basicHTTPAccessURITarget="" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"> + <content>_scxmleventname=test</content> + </send> + </onentry> + + <!-- if we get an event named 'test' we succeed. Otherwise fail --> + <transition event="test" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test532.txml b/test/w3c/txml/test532.txml new file mode 100644 index 0000000..e8de172 --- /dev/null +++ b/test/w3c/txml/test532.txml @@ -0,0 +1,22 @@ +<!-- test that that if _scxmleventname is not present, the name of the HTTP method is used +as the name of the resulting event. --> + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="3s"/> + <send conf:basicHTTPAccessURITarget="" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"> + <!-- this content will be ignored, but it's here to make sure we have a message body --> + <content>some content</content> + </send> + </onentry> + + <transition event="HTTP.POST" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test533.txml b/test/w3c/txml/test533.txml new file mode 100644 index 0000000..7a6c82a --- /dev/null +++ b/test/w3c/txml/test533.txml @@ -0,0 +1,66 @@ +<?xml version="1.0"?> + +<!-- test that an internal transition whose source state is not compound does exit its source state --> + +<scxml initial="s1" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:expr="0"/> <!-- how often we have exited p --> + <data conf:id="2" conf:expr="0"/> <!-- how often we have exited ps1 --> + <data conf:id="3" conf:expr="0"/> <!-- how often we have exited ps2 --> + <data conf:id="4" conf:expr="0"/> <!-- how often the transition for foo has been taken --> + </datamodel> + + <state id="s1"> + <onentry> + <raise event="foo"/> + <raise event="bar"/> + </onentry> + <transition target="p"/> + </state> + +<parallel id="p"> + <onexit> + <conf:incrementID id="1"/> + </onexit> + <transition event="foo" type="internal" target="ps1"> + <conf:incrementID id="4"/> + </transition> + + <!-- make sure the transition on foo was actually taken --> + <transition event="bar" conf:idVal="4=1" target="s2"/> + <transition event="bar" conf:targetfail=""/> + + <state id="ps1"> + <onexit> + <conf:incrementID id="2"/> + </onexit> + </state> + <state id="ps2"> + <onexit> + <conf:incrementID id="3"/> + </onexit> + </state> +</parallel> + +<state id="s2"> + <!-- make sure that p was exited twice --> + <transition conf:idVal="1=2" target="s3"/> + <transition conf:targetfail=""/> + </state> + +<state id="s3"> + <!-- make sure that ps1 was exited twice --> + <transition conf:idVal="2=2" target="s4"/> + <transition conf:targetfail=""/> + </state> + +<state id="s4"> + <!-- make sure that ps2 was exited twice --> + <transition conf:idVal="3=2" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test534.txml b/test/w3c/txml/test534.txml new file mode 100644 index 0000000..e02123d --- /dev/null +++ b/test/w3c/txml/test534.txml @@ -0,0 +1,20 @@ +<!-- test that that <send> 'event' value gets sent as the param _scxmleventname . --> + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="30s"/> + <send event="test" conf:basicHTTPAccessURITarget="" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"> + </send> + </onentry> + + <!-- if other end sends us back this event, we succeed --> + <transition event="test" conf:eventNamedParamHasValue="_scxmleventname test" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test537.txml b/test/w3c/txml/test537.txml new file mode 100644 index 0000000..55ea102 --- /dev/null +++ b/test/w3c/txml/test537.txml @@ -0,0 +1,22 @@ +<?xml version="1.0"?> + +<!-- test that the root element of the datamodel is <datamodel> and that <data> elements are its +children--> + +<scxml initial="s0" version="1.0" datamodel="xpath" + xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data id="foo" expr="2"/> + </datamodel> + +<state id="s0"> + + + <transition cond="local-name($foo/..)='datamodel'" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test539.txml b/test/w3c/txml/test539.txml new file mode 100644 index 0000000..3f0bd00 --- /dev/null +++ b/test/w3c/txml/test539.txml @@ -0,0 +1,30 @@ +<?xml version="1.0"?> + <!-- test that if the child of <data> is XML, or if XML is loaded via src=, the processor + assigns it as the value of the var --> + + <scxml xmlns="http://www.w3.org/2005/07/scxml" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="var1"> + <books xmlns=""> + <book title="title1"/> + <book title="title2"/> + </books> +</data> + <data id="var2" src="file:test539.txt"/> + </datamodel> + +<state id="s0"> + <transition cond="$var1/books/book[2]/@title = 'title2'" target="s1"/> + <transition conf:targetfail=""/> + </state> + +<state id="s1"> + <transition cond="$var2/books/book[2]/@title = 'title2'" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test539.txt b/test/w3c/txml/test539.txt new file mode 100644 index 0000000..de1b0a1 --- /dev/null +++ b/test/w3c/txml/test539.txt @@ -0,0 +1,4 @@ + <books xmlns=""> + <book title="title1"/> + <book title="title2"/> + </books>
\ No newline at end of file diff --git a/test/w3c/txml/test540.txml b/test/w3c/txml/test540.txml new file mode 100644 index 0000000..865bb24 --- /dev/null +++ b/test/w3c/txml/test540.txml @@ -0,0 +1,25 @@ +<?xml version="1.0"?> + <!-- test that if the child of <data> is a string or if a string is loaded via src=, the processor + does white space normalization on it and assigns it as the value of the var --> + + <scxml xmlns="http://www.w3.org/2005/07/scxml" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="var1">123 +4 5 +</data> + <data id="var2" src="file:test540.txt"/> + </datamodel> + +<state id="s0"> + <onentry> + <log label="var1 " expr="$var1"/> + </onentry> + <transition cond="$var1 = '123 4 5' and $var2 = '123 4 5'" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test540.txt b/test/w3c/txml/test540.txt new file mode 100644 index 0000000..2191239 --- /dev/null +++ b/test/w3c/txml/test540.txt @@ -0,0 +1,3 @@ +123 +4 5 +
\ No newline at end of file diff --git a/test/w3c/txml/test542.txml b/test/w3c/txml/test542.txml new file mode 100644 index 0000000..95ea8e6 --- /dev/null +++ b/test/w3c/txml/test542.txml @@ -0,0 +1,38 @@ +<?xml version="1.0"?> + <!-- test that <content> inside <donedata> handles XML and strings, + including white space normalization. --> + + <scxml xmlns="http://www.w3.org/2005/07/scxml" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + +<state id="s0" initial="s01"> + <transition event="done.state.s0" cond="$_event/data/books/book[1]/@title = 'title1'" target="s1"/> + <transition event="done" conf:targetfail=""/> + <final id="s01"> + <donedata> + <content> + <books xmlns=""> + <book title="title1"/> + <book title="title2"/> + </books> + </content> + </donedata> + </final> + </state> + +<state id="s1" initial="s11"> + <transition event="done.state.s1" cond="$_event/data = '123 4 5'" conf:targetpass=""/> + <transition event="done" conf:targetfail=""/> + <final id="s11"> + <donedata> + <content>123 +4 5 + </content> + </donedata> + </final> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test543.txml b/test/w3c/txml/test543.txml new file mode 100644 index 0000000..d179749 --- /dev/null +++ b/test/w3c/txml/test543.txml @@ -0,0 +1,22 @@ +<?xml version="1.0"?> + <!-- test that event fields are present as children of _event --> + + <scxml xmlns="http://www.w3.org/2005/07/scxml" name="scxmltest" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <onentry> + <!-- event isn't bound until an event is raised --> + <raise event="someevent"/> + </onentry> + <!-- origintype sendid, invokeid and data will not be bound in this event. name, type, and origin + are guaranteed to be there. --> + <transition event="*" cond="$_event/name and $_event/origin and $_event/type" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test544.txml b/test/w3c/txml/test544.txml new file mode 100644 index 0000000..e0ab1da --- /dev/null +++ b/test/w3c/txml/test544.txml @@ -0,0 +1,21 @@ +<?xml version="1.0"?> + <!-- test that kvps are represented as <data> elements under event/data --> + + <scxml xmlns="http://www.w3.org/2005/07/scxml" name="scxmltest" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + +<state id="s0"> + <onentry> + <send event="someevent"> + <param name="key1" expr="2"/> + </send> + </onentry> + + <transition event="*" cond="$_event/data/data[@id='key1'] = 2" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test546.txml b/test/w3c/txml/test546.txml new file mode 100644 index 0000000..b8f0762 --- /dev/null +++ b/test/w3c/txml/test546.txml @@ -0,0 +1,21 @@ +<?xml version="1.0"?> + <!-- test that string content in send is place as a string under event/data --> + + <scxml xmlns="http://www.w3.org/2005/07/scxml" name="scxmltest" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + +<state id="s0"> + <onentry> + <send event="someevent"> + <content>some string</content> + </send> + </onentry> + + <transition event="*" cond="$_event/data = 'some string'" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test547.txml b/test/w3c/txml/test547.txml new file mode 100644 index 0000000..35c415d --- /dev/null +++ b/test/w3c/txml/test547.txml @@ -0,0 +1,38 @@ +<?xml version="1.0"?> + <!-- test that assiging to a node set performs the assignment to each node. + This example is taken from the spec. --> + + <scxml xmlns="http://www.w3.org/2005/07/scxml" name="scxmltest" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cart/myCart/books/book" expr="'The Zen Mind'"/> + </onentry> + + <transition cond="$cart/myCart/books/book[1] = 'The Zen Mind' and $cart/myCart/books/book[2] = 'The Zen Mind'" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml> + diff --git a/test/w3c/txml/test550.txml b/test/w3c/txml/test550.txml new file mode 100644 index 0000000..89f55a7 --- /dev/null +++ b/test/w3c/txml/test550.txml @@ -0,0 +1,24 @@ +<?xml version="1.0"?> + +<!-- test that expr can be used to assign a value to a var. This test uses early binding --> + +<scxml initial="s0" version="1.0" conf:datamodel="" binding="early" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + <state id="s0"> + + <transition conf:idVal="1=2" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + <state id="s1"> + <datamodel> + <data conf:id="1" conf:expr="2"/> + </datamodel> + </state> + + <conf:pass/> + <conf:fail/> + + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test551.txml b/test/w3c/txml/test551.txml new file mode 100644 index 0000000..45c6bf8 --- /dev/null +++ b/test/w3c/txml/test551.txml @@ -0,0 +1,27 @@ +<?xml version="1.0"?> + +<!-- test that inline content can be used to assign a value to a var. --> + +<scxml initial="s0" version="1.0" binding="early" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + + <state id="s0"> + + <transition conf:isBound="1" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<state id="s1"> + <datamodel> + <data conf:id="1"> + <conf:array123/> + </data> + </datamodel> + </state> + + <conf:pass/> + <conf:fail/> + + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test552.txml b/test/w3c/txml/test552.txml new file mode 100644 index 0000000..9489b3e --- /dev/null +++ b/test/w3c/txml/test552.txml @@ -0,0 +1,22 @@ +<?xml version="1.0"?> + +<!-- test that src content can be used to assign a value to a var. Edit +test552.txt to have a value that's legal for the datamodel in question --> + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <datamodel> + <data conf:id="1" src="file:test552.txt"/> + </datamodel> + + <state id="s0"> + + <transition conf:isBound="1" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + + <conf:pass/> + <conf:fail/> + + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test552.txt b/test/w3c/txml/test552.txt new file mode 100644 index 0000000..d8263ee --- /dev/null +++ b/test/w3c/txml/test552.txt @@ -0,0 +1 @@ +2
\ No newline at end of file diff --git a/test/w3c/txml/test553.txml b/test/w3c/txml/test553.txml new file mode 100644 index 0000000..322d4bb --- /dev/null +++ b/test/w3c/txml/test553.txml @@ -0,0 +1,27 @@ +<?xml version="1.0"?> +<!-- we test that the processor does not dispatch the event if evaluation +of <send>'s args causes an error.. --> + + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> + <onentry> + <!-- timeout event --> + <send event="timeout" delay="3s"/> + <!-- include a non-existing var in the namelist --> + <send event="event1" conf:namelist="2"/> + </onentry> + + <!-- if we get the timeout before event1, we assume that event1 hasn't been sent + We ignore the error event here because this assertion doesn't mention it --> + <transition event="timeout" conf:targetpass=""/> + <transition event="event1" conf:targetfail=""/> + </state> + + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test554.txml b/test/w3c/txml/test554.txml new file mode 100644 index 0000000..d9ad55b --- /dev/null +++ b/test/w3c/txml/test554.txml @@ -0,0 +1,29 @@ +<?xml version="1.0"?> +<!-- test that if the evaluation of <invoke>'s args causes an error, the +invocation is cancelled. In this test, that means that we don't get done.invoke +before the timer goes off. --> + + +<scxml initial="s0" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> + <onentry> + <send event="timer" delay="2s"/> + </onentry> + + <!-- namelist references an undeclared variable --> + <invoke type="http://www.w3.org/TR/scxml/" conf:namelist="2"> + <content> + <scxml initial="subFinal" version="1.0" conf:datamodel="" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + <transition event="timer" conf:targetpass=""/> + <transition event="done.invoke" conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test555.txml b/test/w3c/txml/test555.txml new file mode 100644 index 0000000..12fc459 --- /dev/null +++ b/test/w3c/txml/test555.txml @@ -0,0 +1,31 @@ +<?xml version="1.0"?> + <!-- in the XPATH data model, test that processor coerces types to produce a string + where it's needed --> + + <scxml xmlns="http://www.w3.org/2005/07/scxml" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="var1"> + <books xmlns=""> + <book title="title1"/> + <book title="title2"/> + </books> +</data> + + </datamodel> + +<state id="s0"> + <onentry> + <send eventexpr="$var1"/> + </onentry> + <transition event="error" conf:targetfail=""/> + <!-- don't really know what the stringification of that xml structure should be, but if + we get something other than an error, we assume that it worked. --> + <transition event="*" conf:targetpass=""/> + </state> + + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test557.txml b/test/w3c/txml/test557.txml new file mode 100644 index 0000000..560c9db --- /dev/null +++ b/test/w3c/txml/test557.txml @@ -0,0 +1,30 @@ +<?xml version="1.0"?> + <!-- in the ECMA data model, test that if the child of <data> is XML, or if XML is loaded via src=, the processor + assigns it as the value of the var --> + + <scxml xmlns="http://www.w3.org/2005/07/scxml" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + <datamodel> + <data id="var1"> + <books xmlns=""> + <book title="title1"/> + <book title="title2"/> + </books> +</data> + <data id="var2" src="file:test557.txt"/> + </datamodel> + +<state id="s0"> + <transition cond="var1.getElementsByTagName('book')[0].getAttribute('title') == 'title1'" target="s1"/> + <transition conf:targetfail=""/> + </state> + +<state id="s1"> + <transition cond="var2.getElementsByTagName('book')[1].getAttribute('title') == 'title2'" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test557.txt b/test/w3c/txml/test557.txt new file mode 100644 index 0000000..a8e51da --- /dev/null +++ b/test/w3c/txml/test557.txt @@ -0,0 +1,4 @@ +<books xmlns=""> + <book title="title1"/> + <book title="title2"/> + </books>
\ No newline at end of file diff --git a/test/w3c/txml/test558.txml b/test/w3c/txml/test558.txml new file mode 100644 index 0000000..a2491e2 --- /dev/null +++ b/test/w3c/txml/test558.txml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> + <!-- in the ECMA data model, test that if the child of <data> is not XML, or if XML is loaded via src=, + the processor treats the value as a string, does whitespace normalization and assigns it to the var.--> + + <scxml xmlns="http://www.w3.org/2005/07/scxml" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + <datamodel> + <data id="var1"> +this is +a string +</data> + <data id="var2" src="file:test558.txt"/> + </datamodel> + +<state id="s0"> + <transition cond="var1 == 'this is a string'" target="s1"/> + <transition conf:targetfail=""/> + </state> + +<state id="s1"> + <transition cond="var2 == 'this is a string'" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test558.txt b/test/w3c/txml/test558.txt new file mode 100644 index 0000000..bb2bcc7 --- /dev/null +++ b/test/w3c/txml/test558.txt @@ -0,0 +1,3 @@ + +this is +a string
\ No newline at end of file diff --git a/test/w3c/txml/test560.txml b/test/w3c/txml/test560.txml new file mode 100644 index 0000000..579422a --- /dev/null +++ b/test/w3c/txml/test560.txml @@ -0,0 +1,23 @@ +<?xml version="1.0"?> + <!-- in the ECMA data model, test that processor creates correct structure in + _event.data when receiving KVPs in an event --> + + <scxml xmlns="http://www.w3.org/2005/07/scxml" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <send event="foo"> + <param name="aParam" expr="1"/> + </send> + </onentry> + <transition event="foo" cond="_event.data.aParam == 1" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test561.txml b/test/w3c/txml/test561.txml new file mode 100644 index 0000000..4b7ec8e --- /dev/null +++ b/test/w3c/txml/test561.txml @@ -0,0 +1,29 @@ +<?xml version="1.0"?> + <!-- in the ECMA data model, test that processor creates an ECMAScript object + _event.data when receiving JSON in an event --> + + <scxml xmlns="http://www.w3.org/2005/07/scxml" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <send event="foo"> + <content> +<books xmlns=""> +<book title="title1"/> +<book title="title2"/> +</books> +</content> + </send> + </onentry> + <transition event="foo" cond="_event.data.getElementsByTagName('book')[1].getAttribute('title') == 'title2'" + conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test562.txml b/test/w3c/txml/test562.txml new file mode 100644 index 0000000..a006018 --- /dev/null +++ b/test/w3c/txml/test562.txml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> + <!-- in the ECMA data model, test that processor creates space normalized string in + _event.data when receiving anything other than KVPs or XML in an event --> + + <scxml xmlns="http://www.w3.org/2005/07/scxml" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <send event="foo"> + <content> +this is a +string +</content> + </send> + </onentry> + <transition event="foo" cond="_event.data == 'this is a string'" conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test567.txml b/test/w3c/txml/test567.txml new file mode 100644 index 0000000..d15953f --- /dev/null +++ b/test/w3c/txml/test567.txml @@ -0,0 +1,32 @@ +<!-- test that that any content in the message other than _scxmleventname is used to populate +_event.data. --> + +<scxml initial="s0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> +<datamodel> + <data conf:id="1" conf:expr="2"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="3s"/> + <!-- in this case, 'test' will be placed in _scxmleventname. The <param> should + be used to populate _event.data --> + <send event="test" conf:basicHTTPAccessURITarget="" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"> + <param name="param1" conf:expr="2"/> + </send> + </onentry> + + <!-- if we get this event, we succeed --> + <transition event="test" target="s1"> + <assign conf:location="1" conf:eventDataParamValue="param1"/> + </transition> + <transition event="*" conf:targetfail=""/> + </state> + + <state id="s1"> + <transition conf:idVal="1=2" conf:targetpass=""/> + <transition conf:targetfail=""/> + </state> + <conf:pass/> + <conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test568.txml b/test/w3c/txml/test568.txml new file mode 100644 index 0000000..89efe73 --- /dev/null +++ b/test/w3c/txml/test568.txml @@ -0,0 +1,19 @@ +<?xml version="1.0"?> + +<!-- test that location field is found inside entry for SCXML Event I/O processor in the XPath +data model. The tests for the relevant event i/o processors will test that it can be used to +send events. --> + +<scxml initial="s0" version="1.0" datamodel="xpath" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> + <transition cond="$_ioprocessors/[@name='http://www.w3.org/TR/scxml/#SCXMLEventProcessor']/location/text()" conf:targetpass=""/> + <transition conf:targetfail=""/> + + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test569.txml b/test/w3c/txml/test569.txml new file mode 100644 index 0000000..276bd47 --- /dev/null +++ b/test/w3c/txml/test569.txml @@ -0,0 +1,19 @@ +<?xml version="1.0"?> + +<!-- test that location field is found inside entry for SCXML Event I/O processor in the ECMAScript +data model. The tests for the relevant event i/o processors will test that it can be used to +send events. --> + +<scxml initial="s0" version="1.0" datamodel="ecmascript" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> + <transition cond="_ioprocessors['scxml'].location" conf:targetpass=""/> + <transition conf:targetfail=""/> + + </state> + + <conf:pass/> + <conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test570.txml b/test/w3c/txml/test570.txml new file mode 100644 index 0000000..6584d9a --- /dev/null +++ b/test/w3c/txml/test570.txml @@ -0,0 +1,49 @@ +<?xml version="1.0"?>
+
+<!-- test that we generate done.state.id when all a parallel state's children are in final states -->
+
+<scxml initial="p0" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance">
+ <datamodel>
+ <data conf:id="1" conf:expr="0"/>
+ </datamodel>
+<parallel id="p0">
+ <onentry>
+ <send event="timeout" delay="2s"/>
+ <raise event="e1"/>
+ <raise event="e2"/>
+ </onentry>
+ <!-- record that we get the first done event -->
+ <transition event="done.state.p0s1">
+ <assign conf:location="1" conf:expr="1"/>
+ </transition>
+ <!-- we should get the second done event before done.state.p0 -->
+ <transition event="done.state.p0s2" target="s1"/>
+ <transition event="timeout" conf:targetfail=""/>
+
+
+ <state id="p0s1" initial="p0s11">
+ <state id="p0s11">
+ <transition event="e1" target="p0s1final"/>
+ </state>
+ <final id="p0s1final"/>
+ </state>
+
+ <state id="p0s2" initial="p0s21">
+ <state id="p0s21">
+ <transition event="e2" target="p0s2final"/>
+ </state>
+ <final id="p0s2final"/>
+ </state>
+
+ </parallel>
+
+ <state id="s1">
+ <!-- if we get done.state.p0, success -->
+ <transition event="done.state.p0" conf:idVal="1=1" conf:targetpass=""/>
+ <transition event="*" conf:targetfail=""/>
+ </state>
+
+ <conf:pass/>
+ <conf:fail/>
+
+</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test576.txml b/test/w3c/txml/test576.txml new file mode 100644 index 0000000..4c4b34a --- /dev/null +++ b/test/w3c/txml/test576.txml @@ -0,0 +1,41 @@ +<?xml version="1.0"?> +<!-- test that the 'initial' value of scxml is respected. We set the value to deeply nested non-default parallel siblings and +test that both are entered. --> + + +<scxml initial="s11p112 s11p122" conf:datamodel="" version="1.0" xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance"> + + +<state id="s0"> + <transition conf:targetfail=""/> +</state> + +<state id="s1"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="timeout" conf:targetfail=""/> + <state id="s11" initial="s111"> + <state id="s111"/> + <parallel id="s11p1"> + <state id="s11p11" initial="s11p111"> + <state id="s11p111"/> + <state id="s11p112"> + <onentry> + <raise event="In-s11p112"/> + </onentry> + </state> + </state> + <state id="s11p12" initial="s11p121"> + <state id="s11p121"/> + <state id="s11p122"> + <transition event="In-s11p112" conf:targetpass=""/> + </state> + </state> + </parallel> + </state> +</state> + +<conf:pass/> +<conf:fail/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/txml/test578.txml b/test/w3c/txml/test578.txml new file mode 100644 index 0000000..a4de932 --- /dev/null +++ b/test/w3c/txml/test578.txml @@ -0,0 +1,24 @@ +<?xml version="1.0"?> + <!-- in the ECMA data model, test that processor creates an ECMAScript object + _event.data when receiving JSON in an event --> + + <scxml xmlns="http://www.w3.org/2005/07/scxml" + xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <send event="foo"> + <content>{ productName : "bar", size : 27 }</content> + </send> + </onentry> + <transition event="foo" cond="_event.data.productName == 'bar'" + conf:targetpass=""/> + <transition event="*" conf:targetfail=""/> + </state> + + +<conf:pass/> +<conf:fail/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/update-txml.sh b/test/w3c/update-txml.sh new file mode 100755 index 0000000..074318d --- /dev/null +++ b/test/w3c/update-txml.sh @@ -0,0 +1,7 @@ +#!/bin/bash +wget -rl1 -Atxml,txt,xsl http://www.w3.org/Voice/2013/scxml-irp/ + +find ./www.w3.org -name "*.txml" -exec cp {} ./txml \; +find ./www.w3.org -name "*.txt" -exec cp {} ./txml \; +find ./www.w3.org -name "*.xsl" -exec cp {} . \; +rm -rf www.w3.org
\ No newline at end of file diff --git a/test/w3c/xpath/robots.txt b/test/w3c/xpath/robots.txt new file mode 100644 index 0000000..54f3e01 --- /dev/null +++ b/test/w3c/xpath/robots.txt @@ -0,0 +1,96 @@ +# +# robots.txt for http://www.w3.org/ +# +# $Id: robots.txt,v 1.66 2012/07/17 21:30:56 gerald Exp $ +# + +# For use by search.w3.org +User-agent: W3C-gsa +Disallow: /Out-Of-Date + +User-agent: W3T_SE +Disallow: /Out-Of-Date + +User-agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT; MS Search 4.0 Robot) +Disallow: / + +# W3C Link checker +User-agent: W3C-checklink +Disallow: + +# the following settings apply to all bots +User-agent: * +# Blogs - WordPress +# https://codex.wordpress.org/Search_Engine_Optimization_for_WordPress#Robots.txt_Optimization +Disallow: /*/wp-admin/ +Disallow: /*/wp-includes/ +Disallow: /*/wp-content/plugins/ +Disallow: /*/wp-content/cache/ +Disallow: /*/wp-content/themes/ +Disallow: /blog/*/trackback/ +Disallow: /blog/*/feed/ +Disallow: /blog/*/comments/ +Disallow: /blog/*/category/*/* +Disallow: /blog/*/*/trackback/ +Disallow: /blog/*/*/feed/ +Disallow: /blog/*/*/comments/ +Disallow: /blog/*/*? +Disallow: /community/trackback/ +Disallow: /community/feed/ +Disallow: /community/comments/ +Disallow: /community/category/*/* +Disallow: /community/*/trackback/ +Disallow: /community/*/feed/ +Disallow: /community/*/comments/ +Disallow: /community/*/category/*/* +Disallow: /community/*? +Disallow: /Consortium/Offices/trackback/ +Disallow: /Consortium/Offices/feed/ +Disallow: /Consortium/Offices/comments/ +Disallow: /Consortium/Offices/category/*/* +Disallow: /Consortium/Offices/*/trackback/ +Disallow: /Consortium/Offices/*/feed/ +Disallow: /Consortium/Offices/*/comments/ +Disallow: /Consortium/Offices/*? +# Wikis - Mediawiki +# https://www.mediawiki.org/wiki/Manual:Robots.txt +Disallow: /wiki/index.php? +Disallow: /wiki/index.php/Help +Disallow: /wiki/index.php/MediaWiki +Disallow: /wiki/index.php/Special: +Disallow: /wiki/index.php/Template +Disallow: /wiki/skins/ +Disallow: /*/wiki/index.php? +Disallow: /*/wiki/index.php/Help +Disallow: /*/wiki/index.php/MediaWiki +Disallow: /*/wiki/index.php/Special: +Disallow: /*/wiki/index.php/Template +# various other access-controlled or expensive areas +Disallow: /2004/ontaria/basic +Disallow: /Team/ +Disallow: /Project +Disallow: /Web +Disallow: /Systems +Disallow: /History +Disallow: /Out-Of-Date +Disallow: /2002/02/mid +Disallow: /mid/ +Disallow: /2005/06/blog/ +Disallow: /2004/08/W3CTalks +Disallow: /2007/11/Talks/search +Disallow: /People/all/ +Disallow: /RDF/Validator/ARPServlet +Disallow: /2003/03/Translations/byLanguage +Disallow: /2003/03/Translations/byTechnology +Disallow: /2005/11/Translations/Query +Disallow: /2000/06/webdata/xslt +Disallow: /2000/09/webdata/xslt +Disallow: /2005/08/online_xslt/xslt +Disallow: /Bugs/ +Disallow: /Search/Mail/Public/ +Disallow: /2006/02/chartergen +Disallow: /2004/01/pp-impl +Disallow: /Consortium/supporters +Disallow: /2007/08/pyRdfa/ +Disallow: /WAI/PF/comments/ + diff --git a/test/w3c/xpath/test144.scxml b/test/w3c/xpath/test144.scxml new file mode 100644 index 0000000..612f793 --- /dev/null +++ b/test/w3c/xpath/test144.scxml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that events are inserted into the queue in the order in which they are raised. If +foo occurs before bar, success, otherwise failure --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <onentry> + <raise event="foo"/> + <raise event="bar"/> + </onentry> + <transition event="foo" target="s1"/> + <transition event="*" target="fail"/> + + </state> + +<state id="s1"> + <transition event="bar" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test147.scxml b/test/w3c/xpath/test147.scxml new file mode 100644 index 0000000..d07b56d --- /dev/null +++ b/test/w3c/xpath/test147.scxml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the first clause that evaluates to true - and only that clause - is executed. +Only one event should be raised, and it should be bar --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1" expr="0"/> + </datamodel> + +<state id="s0"> + <onentry> + <if cond="0>1"> + <raise event="foo"/> + <assign location="$Var1" expr="$Var1 + 1"/> + <elseif cond="true()"/> + <raise event="bar"/> + <assign location="$Var1" expr="$Var1 + 1"/> + <else/> + <raise event="baz"/> + <assign location="$Var1" expr="$Var1 + 1"/> + </if> + <raise event="bat"/> + </onentry> + <transition event="bar" cond="$Var1/text() =1" target="pass"/> + <transition event="*" target="fail"/> + + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test148.scxml b/test/w3c/xpath/test148.scxml new file mode 100644 index 0000000..805c223 --- /dev/null +++ b/test/w3c/xpath/test148.scxml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the else clause executes if <if> and <elseif> evaluate to false. +Baz should be the only event generated by the <if>. bat is raised to catch the case where the <else> clause +fails and baz is not generated, i.e. it makes sure that the test doesn't hang. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1" expr="0"/> + </datamodel> + +<state id="s0"> + <onentry> + <if cond="0>1"> + <raise event="foo"/> + <assign location="$Var1" expr="$Var1 + 1"/> + <elseif cond="0>1"/> + <raise event="bar"/> + <assign location="$Var1" expr="$Var1 + 1"/> + <else/> + <raise event="baz"/> + <assign location="$Var1" expr="$Var1 + 1"/> + </if> + <raise event="bat"/> + </onentry> + <transition event="baz" cond="$Var1/text() =1" target="pass"/> + <transition event="*" target="fail"/> + + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test149.scxml b/test/w3c/xpath/test149.scxml new file mode 100644 index 0000000..547fdc3 --- /dev/null +++ b/test/w3c/xpath/test149.scxml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that neither if clause executes, so that bat is the only event raised. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1" expr="0"/> + </datamodel> + +<state id="s0"> + <onentry> + <if cond="0>1"> + <raise event="foo"/> + <assign location="$Var1" expr="$Var1 + 1"/> + <elseif cond="0>1"/> + <raise event="bar"/> + <assign location="$Var1" expr="$Var1 + 1"/> + </if> + <raise event="bat"/> + </onentry> + <transition event="bat" cond="$Var1/text() =0" target="pass"/> + <transition event="*" target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test150.scxml b/test/w3c/xpath/test150.scxml new file mode 100644 index 0000000..afa8909 --- /dev/null +++ b/test/w3c/xpath/test150.scxml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that foreach causes a new variable to be declared if 'item' doesn't already exist. Also +test that it will use an existing var if it does exist. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> +<datamodel> + <data id="Var1"/> + <data id="Var2"/> + <data id="Var3"> + <node xmlns="">1</node><node xmlns="">2</node><node xmlns="">3</node> + </data> + </datamodel> + + <state id="s0"> + <onentry> +<!-- first use declared variables --> + <foreach item="Var1" index="Var2" array="$Var3/*"/> + <raise event="foo"/> + </onentry> + <transition event="error" target="fail"/> + <transition event="*" target="s1"/> + </state> + +<state id="s1"> + <onentry> +<!-- now use undeclared variables --> + <foreach item="Var4" index="Var5" array="$Var3/*"/> + <raise event="bar"/> + </onentry> + <transition event="error" target="fail"/> + <transition event="*" target="s2"/> + </state> + +<state id="s2"> + <!-- check that var4 is bound --> + <transition cond="$Var4/* or $Var4/text()" target="pass"/> + <transition target="fail"/> + </state> + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test151.scxml b/test/w3c/xpath/test151.scxml new file mode 100644 index 0000000..5933b09 --- /dev/null +++ b/test/w3c/xpath/test151.scxml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that foreach causes a new variable to be declared if 'item' doesn't already exist. Also +test that it will use an existing var if it does exist. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> +<datamodel> + <data id="Var1"/> + <data id="Var2"/> + <data id="Var3"> + <node xmlns="">1</node><node xmlns="">2</node><node xmlns="">3</node> + </data> + </datamodel> + + <state id="s0"> + <onentry> +<!-- first use declared variables --> + <foreach item="Var1" index="Var2" array="$Var3/*"/> + <raise event="foo"/> + </onentry> + <transition event="error" target="fail"/> + <transition event="*" target="s1"/> + </state> + +<state id="s1"> + <onentry> +<!-- now use undeclared variables --> + <foreach item="Var4" index="Var5" array="$Var3/*"/> + <raise event="bar"/> + </onentry> + <transition event="error" target="fail"/> + <transition event="*" target="s2"/> + </state> + +<state id="s2"> + <!-- check that var5 is bound --> + <transition cond="$Var5/* or $Var5/text()" target="pass"/> + <transition target="fail"/> + </state> + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test152.scxml b/test/w3c/xpath/test152.scxml new file mode 100644 index 0000000..1ebbf38 --- /dev/null +++ b/test/w3c/xpath/test152.scxml @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that an illegal array or item value causes error.execution and results in executable content +not being executed. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> +<datamodel> + <data id="Var1" expr="0"/> + <data id="Var2"/> + <data id="Var3"/> + <data id="Var4" expr="("/> + <data id="Var5"> + <node xmlns="">1</node><node xmlns="">2</node><node xmlns="">3</node> + </data> + </datamodel> + + <state id="s0"> + <onentry> +<!-- invalid array, legal item --> + <foreach item="Var2" index="Var3" array="$Var4/text()"> + <assign location="$Var1" expr="$Var1 + 1"/> + </foreach> + <raise event="foo"/> + </onentry> + <transition event="error.execution" target="s1"/> + <transition event="*" target="fail"/> + </state> + + <state id="s1"> + <onentry> +<!-- illegal item, legal array --> + <foreach item=".." index="Var3" array="$Var5/*"> + <assign location="$Var1" expr="$Var1 + 1"/> + </foreach> + <raise event="bar"/> + </onentry> + <transition event="error.execution" target="s2"/> + <transition event="bar" target="fail"/> + </state> + +<state id="s2"> + <!-- check that var1 has its original value (so executable content never got executed --> + <transition cond="$Var1/text() =0" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test153.scxml b/test/w3c/xpath/test153.scxml new file mode 100644 index 0000000..35b22bc --- /dev/null +++ b/test/w3c/xpath/test153.scxml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that foreach goes over the array in the right order. since the array contains 1 2 3, we compare the current +value with the previous value, which is stored in var1. The current value should always be larger. If +it ever isn't, set Var4 to 0, indicating failure --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1" expr="0"/> <!-- contains the previous value --> + <data id="Var2"/> <!-- the item which will contain the current value --> + <data id="Var3"> + <node xmlns="">1</node><node xmlns="">2</node><node xmlns="">3</node> + </data> + <data id="Var4" expr="1"/> <!-- 1 if success, 0 if failure --> + </datamodel> + + <state id="s0"> + <onentry> + <foreach item="Var2" array="$Var3/*"> + <if cond="$Var1/text() <$Var2/text() "> + <assign location="$Var1" expr="$Var2/text()"/> + <else/> + <!-- values are out of order, record failure --> + <assign location="$Var4" expr="0"/> + </if> + </foreach> + </onentry> + + <!-- check that var1 has its original value --> + <transition cond="$Var4/text() =0" target="fail"/> + <transition 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>
\ No newline at end of file diff --git a/test/w3c/xpath/test155.scxml b/test/w3c/xpath/test155.scxml new file mode 100644 index 0000000..553861e --- /dev/null +++ b/test/w3c/xpath/test155.scxml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that foreach executes the executable content once for each item in the list '(1,2,3)'. The executable +content sums the items into var1 so it should be 6 at the end --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + +<datamodel> + <data id="Var1" expr="0"/> + <data id="Var2"/> + <data id="Var3"> + <node xmlns="">1</node><node xmlns="">2</node><node xmlns="">3</node> + </data> + </datamodel> + + <state id="s0"> + <onentry> + <foreach item="Var2" array="$Var3/*"> + <assign location="$Var1" expr="$Var1/text() + $Var2/text()"/> + </foreach> + </onentry> + + <transition cond="$Var1/text() =6" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test156.scxml b/test/w3c/xpath/test156.scxml new file mode 100644 index 0000000..3ed65b4 --- /dev/null +++ b/test/w3c/xpath/test156.scxml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that an error causes the foreach to stop execution. The second piece of executable content +should cause an error, so var1 should be incremented only once --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + +<datamodel> + <data id="Var1" expr="0"/> + <data id="Var2"/> + <data id="Var3"> + <node xmlns="">1</node><node xmlns="">2</node><node xmlns="">3</node> + </data> + </datamodel> + + <state id="s0"> + <onentry> + <foreach item="Var2" array="$Var3/*"> + <assign location="$Var1" expr="$Var1 + 1"/> + <!-- assign an illegal value to a non-existent var --> + <assign location="$Var5" expr="!1"/> + </foreach> + </onentry> + + <transition cond="$Var1/text() =1" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test158.scxml b/test/w3c/xpath/test158.scxml new file mode 100644 index 0000000..c682c5f --- /dev/null +++ b/test/w3c/xpath/test158.scxml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that executable content executes in document order. if event1 occurs then event2, succeed, otherwise fail --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> +<datamodel> + <data id="Var1" expr="0"/> + </datamodel> + +<state id="s0"> + <onentry> + <raise event="event1"/> + <raise event="event2"/> + </onentry> + <transition event="event1" target="s1"/> + <transition event="*" target="fail"/> + </state> + +<state id="s1"> + <transition event="event2" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test159.scxml b/test/w3c/xpath/test159.scxml new file mode 100644 index 0000000..1f2af35 --- /dev/null +++ b/test/w3c/xpath/test159.scxml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that any error raised by an element of executable content causes all subsequent elements to be skipped. +The send tag will raise an error so var1 should not be incremented. If it is fail, otherwise succeed --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> +<datamodel> + <data id="Var1" expr="0"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="thisWillFail" conf:illegaltarget=""/> + <assign location="$Var1" expr="$Var1 + 1"/> + </onentry> + <transition cond="$Var1/text() =1" target="fail"/> + <transition 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>
\ No newline at end of file diff --git a/test/w3c/xpath/test172.scxml b/test/w3c/xpath/test172.scxml new file mode 100644 index 0000000..9a8e019 --- /dev/null +++ b/test/w3c/xpath/test172.scxml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that eventexpr uses the current value of var1, not its initial value --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> +<datamodel> + <data id="Var1" expr="'event1'"/> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$Var1" expr="'event2'"/> + <send eventexpr="$Var1"/> + </onentry> + + <transition event="event2" target="pass"/> + <transition event="*" target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test173.scxml b/test/w3c/xpath/test173.scxml new file mode 100644 index 0000000..3e4a97d --- /dev/null +++ b/test/w3c/xpath/test173.scxml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that targetexpr uses the current value of var1, not its initial value +(If it uses the initial value, it will generate an error. If it uses the current value, event1 will be raised --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1" expr="27"/> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$Var1" expr="'#_internal'"/> + <send targetexpr="$Var1" event="event1"/> + </onentry> + + <transition event="event1" target="pass"/> + <transition event="*" target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test174.scxml b/test/w3c/xpath/test174.scxml new file mode 100644 index 0000000..5a7254e --- /dev/null +++ b/test/w3c/xpath/test174.scxml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that typeexpr uses the current value of var1, not its initial value +(If it uses the initial value, it will generate an error. If it uses the current value, event1 will be raised --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> +<datamodel> + <data id="Var1" expr="27"/> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$Var1" expr="'http://www.w3.org/TR/scxml/#SCXMLEventProcessor'"/> + <send typeexpr="$Var1" event="event1"/> + </onentry> + + <transition event="event1" target="pass"/> + <transition event="*" target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test175.scxml b/test/w3c/xpath/test175.scxml new file mode 100644 index 0000000..8dfd670 --- /dev/null +++ b/test/w3c/xpath/test175.scxml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that delayexpr uses the current value of var1, not its initial value +(If it uses the initial value, event2 will be generated first, before event1. If it uses the current value, +event1 will be raised first. Succeed if event1 occurs before event2, otherwise fail --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1" expr="'0s'"/> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$Var1" expr="'3s'"/> + <send delayexpr="$Var1" event="event2"/> + <send delay="1s" event="event1"/> + </onentry> + + <transition event="event1" target="s1"/> + <transition event="event2" target="fail"/> + </state> + +<state id="s1"> + <transition event="event2" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test176.scxml b/test/w3c/xpath/test176.scxml new file mode 100644 index 0000000..7b59453 --- /dev/null +++ b/test/w3c/xpath/test176.scxml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that <param> uses the current value of var1, not its initial value. If the value of +aParam in event1 is 2 so that var2 gets set to 2, success, otherwise failure --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1" expr="1"/> + <data id="Var2"/> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$Var1" expr="2"/> + <send event="event1"> + <param name="aParam" expr="$Var1/text()"/> + </send> + </onentry> + + <transition event="event1" target="s1"> + <assign location="$Var2" expr="$_event/data/data[@id='aParam']/text()"/> + </transition> + <transition event="*" target="fail"/> + </state> + +<state id="s1"> + <transition cond="$Var2/text() =2" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test178.scxml b/test/w3c/xpath/test178.scxml new file mode 100644 index 0000000..86922d1 --- /dev/null +++ b/test/w3c/xpath/test178.scxml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that multiple key/value pairs are included, even when the keys are the same. +This is a manual test. The tester must look at the log output and verify that both +keys are there. (This test uses the SCXML Event I/O processor, which is the only +one that all platforms must support. It does not specify the message format, so +we cannot test _event.raw directly. Therefore we print it out for visual +inspection.) --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + +<state id="s0"> + <onentry> + <send event="event1"> + <param name="Var1" expr="2"/> + <param name="Var1" expr="3"/> + </send> + </onentry> + + <transition event="event1" target="final"> + <log label="_event " expr="$_event/raw/text()"/> + </transition> + <transition event="*" target="fail"/> + + </state> + + +<final id="final"/> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test179.scxml b/test/w3c/xpath/test179.scxml new file mode 100644 index 0000000..1c281b5 --- /dev/null +++ b/test/w3c/xpath/test179.scxml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that <content> can be used to populate body of a message --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <onentry> + <send event="event1"> + <content>123</content> + </send> + </onentry> + + <transition event="event1" cond="$_event/data = '123'" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test183.scxml b/test/w3c/xpath/test183.scxml new file mode 100644 index 0000000..dcb5bb3 --- /dev/null +++ b/test/w3c/xpath/test183.scxml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that <send> stores the value of the sendid in idlocation. If it does, +var1 has a value and we pass. Otherwise we fail --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> +<datamodel> + <data id="Var1"/> + + </datamodel> + +<state id="s0"> + <onentry> + <send event="event1" idlocation="$Var1"/> + </onentry> + + <transition cond="$Var1/* or $Var1/text()" target="pass"/> + <transition target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test185.scxml b/test/w3c/xpath/test185.scxml new file mode 100644 index 0000000..c6b4b48 --- /dev/null +++ b/test/w3c/xpath/test185.scxml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that <send> respects the delay specification. If it does, event1 arrives before event2 + and we pass. Otherwise we fail --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <onentry> + <send event="event2" delay="2s"/> + <send event="event1"/> + </onentry> + + <transition event="event1" target="s1"/> + <transition event="*" target="fail"/> + </state> + +<state id="s1"> + <transition event="event2" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test186.scxml b/test/w3c/xpath/test186.scxml new file mode 100644 index 0000000..8353bf2 --- /dev/null +++ b/test/w3c/xpath/test186.scxml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that <send> evals its args when it is evaluated, not when the delay interval expires and the +message is actually sent. If it does, aParam will have the value of 1 (even though var1 has been incremented +in the interval.) If var2 ends up == 1, we pass. Otherwise we fail --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1" expr="1"/> + <data id="Var2"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="event1" delay="2s"> + <param name="aParam" expr="$Var1/text()"/> + </send> + <assign location="$Var1" expr="2"/> + </onentry> + + <transition event="event1" target="s1"> + <assign location="$Var2" expr="$_event/data/data[@id='aParam']/text()"/> + </transition> + <transition event="*" target="fail"/> + </state> + +<state id="s1"> + <transition cond="$Var2/text() =1" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test187.scxml b/test/w3c/xpath/test187.scxml new file mode 100644 index 0000000..12cbb8b --- /dev/null +++ b/test/w3c/xpath/test187.scxml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that delayed <send> is not sent if the sending session terminates. In this case, +a subscript is invoked which sends the event childToParent delayed by 1 second, and then terminates. The +parent session, should not receive childToParent. If it does, we fail. Otherwise the +10 sec timer expires and we pass --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="10s"/> + </onentry> + <invoke type="scxml"> + <content> + <!-- exit before the delayed send can execute --> + <scxml initial="sub0" version="1.0" datamodel="xpath"> + <state id="sub0"> + <onentry> + <send event="childToParent" target="#_parent" delay="1s"/> + </onentry> + <transition target="subFinal"/> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <transition event="childToParent" 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>
\ No newline at end of file diff --git a/test/w3c/xpath/test189.scxml b/test/w3c/xpath/test189.scxml new file mode 100644 index 0000000..3b5d34e --- /dev/null +++ b/test/w3c/xpath/test189.scxml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that #_internal as a target of <send> puts the event on the internal queue. If it does, +event1 will be processed before event2, because event1 is added to the internal queue while event2 is +added to the external queue (event though event2 is generated first) --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <onentry> + <!-- goes to the external queue --> + <send event="event2"/> + <!-- to the internal queue --> + <send event="event1" target="#_internal"/> + </onentry> + + <!-- once we've entered the state, we should check for internal events first --> + <transition event="event1" target="pass"/> + <transition event="event2" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test190.scxml b/test/w3c/xpath/test190.scxml new file mode 100644 index 0000000..7458f66 --- /dev/null +++ b/test/w3c/xpath/test190.scxml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that #_scxml_sessionid as a target of <send> puts the event on the external queue. If it does, +event1 will be processed before event2, because event1 is added to the internal queue while event2 is +added to the external queue (event though event2 is generated first). we have to make sure that event2 +is actually delivered. The delayed <send> makes sure another event is generated (so the test doesn't hang) --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1" expr="'#_scxml_'"/> + <data id="Var2" expr="$_sessionid"/> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$Var1" expr="concat($Var1, $Var2)"/> + <!-- goes to the external queue --> + <send event="event2" targetexpr="$Var1"/> + <!-- to the internal queue --> + <raise event="event1"/> + <!-- this should get added to the external queue after event2 --> + <send event="timeout"/> + </onentry> + + <!-- once we've entered the state, we should check for internal events first --> + <transition event="event1" target="s1"/> + <transition event="*" target="fail"/> + </state> + +<!-- now check that we get event2 and not a timeout --> +<state id="s1"> + <transition event="event2" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test191.scxml b/test/w3c/xpath/test191.scxml new file mode 100644 index 0000000..1910eaf --- /dev/null +++ b/test/w3c/xpath/test191.scxml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that #_parent works as a target of <send> . a subscript is invoked and sends the event +childToParent to its parent session (ths session) using #_parent as the target. If we get this event, we +pass, otherwise we fail. The timer insures that some event is generated and that the test does not hang. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="5s"/> + </onentry> + <invoke type="scxml"> + <content> + <!-- send an event to the parent session using #_parent as the target --> + <scxml initial="sub0" version="1.0" datamodel="xpath"> + <state id="sub0"> + <onentry> + <send event="childToParent" target="#_parent"/> + </onentry> + <transition target="subFinal"/> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + <transition event="childToParent" target="pass"/> + <transition event="*" target="fail"/> +</state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test192.scxml b/test/w3c/xpath/test192.scxml new file mode 100644 index 0000000..81d185d --- /dev/null +++ b/test/w3c/xpath/test192.scxml @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that #_invokeid works as a target of <send> . A child script is invoked and sends us +childToParent once its running. Then we send it the event parentToChild using its invokeid as the target. +If it receives this event, it sends sends the event eventReceived to its parent session (ths session). +If we get this event, we pass, otherwise the child script eventually times out sends invoke.done and we fail. +We also set a timeout in this process to make sure the test doesn't hang --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="5s"/> + </onentry> + + <invoke type="scxml" id="invokedChild"> + <content> + <!-- let the parent session know we're running by sending childToParent, then wait for parentToChild. + If we get it, send eventReceived. If we don't we eventually time out --> + <scxml initial="sub0" version="1.0" datamodel="xpath"> + + <state id="sub0"> + <onentry> + <send event="childToParent" target="#_parent"/> + <send event="timeout" delay="3s"/> + </onentry> + + <transition event="parentToChild" target="subFinal"> + <send target="#_parent" event="eventReceived"/> + </transition> + + <transition event="timeout" target="subFinal"/> + </state> + + <final id="subFinal"/> + + </scxml> + </content> + </invoke> + + <transition event="timeout" target="fail"/> + <transition event="done.invoke" target="fail"/> + +<state id="s01"> + <transition event="childToParent" target="s02"> + <send target="#_invokedChild" event="parentToChild"/> + </transition> +</state> + +<state id="s02"> + <transition event="eventReceived" target="pass"/> + </state> + +</state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test193.scxml b/test/w3c/xpath/test193.scxml new file mode 100644 index 0000000..58a5c67 --- /dev/null +++ b/test/w3c/xpath/test193.scxml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that omitting target and targetexpr of <send> when using the +basichttp event i/o processor puts error.communication on the internal queue. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <onentry> + <!-- this should put an error in the internal queue --> + <send event="event1" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"/> + <send event="fail"/> + </onentry> + + <transition event="error.communication" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test194.scxml b/test/w3c/xpath/test194.scxml new file mode 100644 index 0000000..523400b --- /dev/null +++ b/test/w3c/xpath/test194.scxml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that specifying an illegal target for <send> causes the event error.execution to be raised. If it does, +we succeed. Otherwise we eventually timeout and fail. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <onentry> + <!-- should cause an error --> + <send target="baz" event="event2"/> + <!-- this will get added to the external event queue after the error has been raised --> + <send event="timeout"/> + </onentry> + + <!-- once we've entered the state, we should check for internal events first --> + <transition event="error.execution" target="pass"/> + <transition event="*" target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test198.scxml b/test/w3c/xpath/test198.scxml new file mode 100644 index 0000000..23ca478 --- /dev/null +++ b/test/w3c/xpath/test198.scxml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that if type is not provided <send> uses the scxml event i/o processor. The only way to tell +what processor was used is to look at the origintype of the resulting event --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + +<state id="s0"> + <onentry> + <send event="event1"/> + <send event="timeout"/> + </onentry> + + + <transition event="event1" cond="$_event/origintype/text() = 'http://www.w3.org/TR/scxml/#SCXMLEventProcessor'" target="pass"/> + <transition event="*" target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test199.scxml b/test/w3c/xpath/test199.scxml new file mode 100644 index 0000000..9c8f734 --- /dev/null +++ b/test/w3c/xpath/test199.scxml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that using an invalid send type results in error.execution --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + +<state id="s0"> + <onentry> + <send type="27" event="event1"/> + <send event="timeout"/> + </onentry> + + + <transition event="error.execution" target="pass"/> + <transition event="*" target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test200.scxml b/test/w3c/xpath/test200.scxml new file mode 100644 index 0000000..182ada4 --- /dev/null +++ b/test/w3c/xpath/test200.scxml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that the processor supports the scxml event i/o processor --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> + +<state id="s0"> + <onentry> + <send type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" event="event1"/> + <send event="timeout"/> + </onentry> + + + <transition event="event1" target="pass"/> + <transition event="*" target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test201.scxml b/test/w3c/xpath/test201.scxml new file mode 100644 index 0000000..8f4e285 --- /dev/null +++ b/test/w3c/xpath/test201.scxml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that the processor supports the basic http event i/o processor. This is an optional +test since platforms are not required to support basic http event i/o --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + +<state id="s0"> + <onentry> + <send type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor" targetexpr="$_ioprocessors/processor[@name="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"]/location/text()" event="event1"/> + <send event="timeout"/> + </onentry> + + + <transition event="event1" target="pass"/> + <transition event="*" target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test205.scxml b/test/w3c/xpath/test205.scxml new file mode 100644 index 0000000..d6a02e2 --- /dev/null +++ b/test/w3c/xpath/test205.scxml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that the processor doesn't change the message. We can't test that it never does this, but +at least we can check that the event name and included data are the same as we sent. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="event1"> + <param name="aParam" expr="1"/> + </send> + <send event="timeout"/> + </onentry> + + + <transition event="event1" target="s1"> + <assign location="$Var1" expr="$_event/data/data[@id='aParam']/text()"/> + </transition> + <transition event="*" target="fail"/> + </state> + +<state id="s1"> + <transition cond="$Var1/text() =1" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test207.scxml b/test/w3c/xpath/test207.scxml new file mode 100644 index 0000000..e74ec8f --- /dev/null +++ b/test/w3c/xpath/test207.scxml @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that that we can't cancel an event in another session. We invoke a child process. It notifies +us when it has generated a delayed event with sendid foo. We try to cancel foo. The child process sends us event + event success if the event is not cancelled, event fail otherwise. This doesn't test that there is absolutely no way to cancel an event +raised in another session, but the spec doesn't define any way to refer to an event in another process --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="10s"/> + </onentry> + <invoke type="scxml"> + <content> + <!-- when invoked, we raise a delayed event1 with sendid 'foo' and notify our parent. Then we wait. + If event1 occurs, the parent hasn't succeeded in canceling it and we return pass. If event2 occurs + it means event1 was canceled (because event2 is delayed longer than event1) and we return 'fail'. --> + + + <scxml initial="sub0" version="1.0" datamodel="xpath"> + <state id="sub0"> + <onentry> + <send event="event1" id="foo" delay="3s"/> + <send event="event2" delay="5s"/> + <send target="#_parent" event="childToParent"/> + </onentry> + + <transition event="event1" target="subFinal"> + <send target="#_parent" event="pass"/> + </transition> + <transition event="*" target="subFinal"> + <send target="#_parent" event="fail"/> + </transition> + + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <state id="s01"> + <transition event="childToParent" target="s02"> + <cancel sendid="foo"/> + </transition> + </state> + + <state id="s02"> + <transition event="pass" target="pass"/> + <transition event="fail" target="fail"/> + <transition event="timeout" target="fail"/> + </state> + +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test208.scxml b/test/w3c/xpath/test208.scxml new file mode 100644 index 0000000..e768e7c --- /dev/null +++ b/test/w3c/xpath/test208.scxml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that cancel works. We cancel delayed event1. If cancel works, we get event2 first and pass. If +we get event1 or an error first, cancel didn't work and we fail. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <onentry> + <send id="foo" event="event1" delay="1s"/> + <send event="event2" delay="5s"/> + <cancel sendid="foo"/> + </onentry> + + <transition event="event2" target="pass"/> + <transition event="*" target="fail"/> + + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test210.scxml b/test/w3c/xpath/test210.scxml new file mode 100644 index 0000000..5ec8f23 --- /dev/null +++ b/test/w3c/xpath/test210.scxml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that sendidexpr works with cancel. If it takes the most recent value of var1, it should cancel +delayed event1. Thus we get event2 first and pass. If we get event1 or an error first, cancel didn't work and we fail. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1" expr="'bar'"/> + </datamodel> + +<state id="s0"> + <onentry> + <send id="foo" event="event1" delay="1s"/> + <send event="event2" delay="5s"/> + <assign location="$Var1" expr="'foo'"/> + <cancel sendidexpr="$Var1"/> + </onentry> + + <transition event="event2" target="pass"/> + <transition event="*" target="fail"/> + + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test215.scxml b/test/w3c/xpath/test215.scxml new file mode 100644 index 0000000..4aebe84 --- /dev/null +++ b/test/w3c/xpath/test215.scxml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that typexpr is evaluated at runtime. If the original value of var1 is used, the invocation +will fail (test215sub1.scxml is not of type 'foo', even if the platform supports foo as a type). If +the runtime value is used, the invocation will succeed --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> + +<datamodel> + <data id="Var1" expr="'foo'"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="5s"/> + <assign location="$Var1" expr="'http://www.w3.org/TR/scxml/'"/> + </onentry> + <invoke typeexpr="$Var1"> + <content> + <!-- when invoked, terminate returning done.invoke. This proves that the invocation succeeded. --> + <scxml initial="subFinal" datamodel="xpath" version="1.0"> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + <transition event="done.invoke" target="pass"/> + <transition event="*" target="fail"/> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test216.scxml b/test/w3c/xpath/test216.scxml new file mode 100644 index 0000000..901ad6f --- /dev/null +++ b/test/w3c/xpath/test216.scxml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that srcexpr is evaluated at runtime. If the original value of var1 is used, the invocation +will fail (assuming that there is no script named 'foo'). If +the runtime value is used, the invocation will succeed --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + +<datamodel> + <data id="Var1" expr="'foo'"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="5s"/> + <assign location="$Var1" expr="'file:test216sub1.scxml'"/> + </onentry> + <invoke srcexpr="$Var1" type="http://www.w3.org/TR/scxml"/> + <transition event="done.invoke" target="pass"/> + <transition event="*" target="fail"/> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test216sub1.scxml b/test/w3c/xpath/test216sub1.scxml new file mode 100644 index 0000000..f5c49a1 --- /dev/null +++ b/test/w3c/xpath/test216sub1.scxml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- when invoked, terminate returning done.invoke. This proves that the invocation succeeded. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="final" version="1.0" datamodel="xpath"> + +<final id="final"/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test220.scxml b/test/w3c/xpath/test220.scxml new file mode 100644 index 0000000..15f66ba --- /dev/null +++ b/test/w3c/xpath/test220.scxml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that the scxml type is supported. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + +<state id="s0"> + <onentry> + <send event="timeout" delay="5s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <!-- when invoked, terminate returning done.invoke. This proves that the invocation succeeded. --> + <scxml initial="subFinal" version="1.0" datamodel="xpath"> + <final id="subFinal"/> + </scxml></content> + </invoke> + <transition event="done.invoke" target="pass"/> + <transition event="*" target="fail"/> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test223.scxml b/test/w3c/xpath/test223.scxml new file mode 100644 index 0000000..08f2ee4 --- /dev/null +++ b/test/w3c/xpath/test223.scxml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that idlocation is supported. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="Var1"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/" idlocation="$Var1"> + <content> + <!-- when invoked, terminate returning done.invoke. This proves that the invocation succeeded. --> + <scxml initial="subFinal" version="1.0" datamodel="xpath"> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + <transition event="*" target="s1"/> +</state> + +<state id="s1"> + <transition cond="$Var1/* or $Var1/text()" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test224.scxml b/test/w3c/xpath/test224.scxml new file mode 100644 index 0000000..8c74c4e --- /dev/null +++ b/test/w3c/xpath/test224.scxml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that the automatically generated id has the form stateid.platformid. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="Var1"/> + <data id="Var2" expr="'s0.'"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/" idlocation="$Var1"> + <content> + <!-- when invoked, terminate returning done.invoke. This proves that the invocation succeeded. --> + <scxml version="1.0" initial="subFinal" datamodel="xpath"> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <transition event="*" target="s1"/> +</state> + +<state id="s1"> + <transition cond="
contains($Var1, $Var2)" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test225.scxml b/test/w3c/xpath/test225.scxml new file mode 100644 index 0000000..a43cdab --- /dev/null +++ b/test/w3c/xpath/test225.scxml @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that the automatically generated id is unique, we call invoke twice and compare the ids. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="Var1"/> + <data id="Var2"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/" idlocation="$Var1"> + <content> + <scxml initial="subFinal1" version="1.0" datamodel="xpath"> + <final id="subFinal1"/> + </scxml> + </content> + </invoke> + <invoke type="http://www.w3.org/TR/scxml/" idlocation="$Var2"> + <content> + <scxml initial="subFinal2" version="1.0" datamodel="xpath"> + <final id="subFinal2"/> + </scxml> + </content> + </invoke> + + <transition event="*" target="s1"/> +</state> + +<state id="s1"> + <transition cond="$Var1/text()=$Var2/text()" target="fail"/> + <transition 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>
\ No newline at end of file diff --git a/test/w3c/xpath/test226.scxml b/test/w3c/xpath/test226.scxml new file mode 100644 index 0000000..4b717b2 --- /dev/null +++ b/test/w3c/xpath/test226.scxml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- this is basically just a test that invoke works correctly and that you can pass data +to the invoked process. If the invoked session finds aParam==1, it exits, signalling +success. otherwise it will hang and the timeout in this doc signifies failure. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="3s"/> + </onentry> + + + <invoke type="http://www.w3.org/TR/scxml/" src="file:test226sub1.scxml"> + <param name="Var1" expr="1"/> + </invoke> + + <transition event="varBound" target="pass"/> + <transition event="*" target="fail"/> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test226sub1.scxml b/test/w3c/xpath/test226sub1.scxml new file mode 100644 index 0000000..9ac7b9a --- /dev/null +++ b/test/w3c/xpath/test226sub1.scxml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- when invoked, if var1 has a value notify parent. Then terminate. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> + +<datamodel> + <data id="Var1"/> + </datamodel> + +<state id="s0"> + <transition cond="$Var1/* or $Var1/text()" target="final"> + <send target="#_parent" event="varBound"/> + </transition> + <transition target="final"/> + </state> + +<final id="final"/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test228.scxml b/test/w3c/xpath/test228.scxml new file mode 100644 index 0000000..9afa343 --- /dev/null +++ b/test/w3c/xpath/test228.scxml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the invokeid is included in events returned from the invoked process. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="Var1"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="3s"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/" id="foo"> + <content> + <scxml initial="subFinal" version="1.0" datamodel="xpath"> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <transition event="done.invoke" target="s1"> + <assign location="$Var1" expr="$_event/invokeid/text()"/> + </transition> + <transition event="*" target="fail"/> +</state> + +<state id="s1"> + <transition cond="$Var1='foo'" target="pass"/> + <transition target="fail"/> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test229.scxml b/test/w3c/xpath/test229.scxml new file mode 100644 index 0000000..747f77c --- /dev/null +++ b/test/w3c/xpath/test229.scxml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that autofoward works. If the child process receives back a copy of the +childToParent event that it sends to this doc, it sends eventReceived, signalling success. (Note +that this doc is not required to process that event explicitly. It should be forwarded in any case.) Otherwise +it eventually times out and the done.invoke signals failure --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="3s"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/" autoforward="true"> + <content> + <!-- when invoked, send childToParent to parent. + If it is forwarded back to us, send + eventReceived to signal success and terminate. + Otherwise wait for timer to expire and terminate. --> + <scxml initial="sub0" version="1.0" datamodel="xpath"> + <state id="sub0"> + <onentry> + <send target="#_parent" event="childToParent"/> + <send event="timeout" delay="3s"/> + </onentry> + <transition event="childToParent" target="subFinal"> + <send target="#_parent" event="eventReceived"/> + </transition> + <transition event="*" target="subFinal"/> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <transition event="childToParent"/> + <transition event="eventReceived" target="pass"/> + <transition event="*" target="fail"/> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test230.scxml b/test/w3c/xpath/test230.scxml new file mode 100644 index 0000000..51f8529 --- /dev/null +++ b/test/w3c/xpath/test230.scxml @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- a manual test that an autofowarded event has the same fields and values as the original event. +the child process sends the parent process an event which is forwarded back to it. +Both the parent and child process print out the contents of the event. The tester +must check if they are the same and report his result. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="3s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/" autoforward="true"> + <content> + <!-- when invoked, send childToParent to parent. If it is forwarded back to us, print out its + fields and terminate. --> + <scxml initial="sub0" version="1.0" datamodel="xpath"> + <state id="sub0"> + <onentry> + <send target="#_parent" event="childToParent"/> + <send event="timeout" delay="2s"/> + </onentry> + <transition event="childToParent" target="subFinal"> + <log label="name is " expr="$_event/name/text()"/> + <log label="type is " expr="$_event/type/text()"/> + <log label="sendid is " expr="$_event/sendid/text()"/> + <log label="origin is " expr="$_event/origin/text()"/> + <log label="origintype is " expr="$_event/origintype/text()"/> + <log label="invokeid is " expr="$_event/invokeid/text()"/> + <log label="data is " expr="$_event/data/text()"/> + </transition> + <transition event="*" target="subFinal"/> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + <transition event="timeout" target="final"/> + + + <state id="s01"> + <transition event="childToParent" target="s02"> + <log label="name is " expr="$_event/name/text()"/> + <log label="type is " expr="$_event/type/text()"/> + <log label="sendid is " expr="$_event/sendid/text()"/> + <log label="origin is " expr="$_event/origin/text()"/> + <log label="origintype is " expr="$_event/origintype/text()"/> + <log label="invokeid is " expr="$_event/invokeid/text()"/> + <log label="data is " expr="$_event/data/text()"/> + </transition> + <transition event="*" target="fail"/> + </state> + + <state id="s02"> + <!-- wait till we get the done event to ensure that the child process has time to print out its results --> + <transition event="done.invoke" target="final"/> + </state> + +</state> + +<final id="final"/> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test232.scxml b/test/w3c/xpath/test232.scxml new file mode 100644 index 0000000..f40627b --- /dev/null +++ b/test/w3c/xpath/test232.scxml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that a parent process can receive multiple events from a child process --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="3s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <scxml initial="subFinal" version="1.0" datamodel="xpath"> + <final id="subFinal"> + <onentry> + <send target="#_parent" event="childToParent1"/> + <send target="#_parent" event="childToParent2"/> + </onentry> + </final> + </scxml> + </content> + </invoke> + <transition event="timeout" target="fail"/> + + + <state id="s01"> + <transition event="childToParent1" target="s02"/> + </state> + + <state id="s02"> + <transition event="childToParent2" target="s03"/> + </state> + +<state id="s03"> + <transition event="done.invoke" target="pass"/> + </state> + +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test233.scxml b/test/w3c/xpath/test233.scxml new file mode 100644 index 0000000..c4d7eb7 --- /dev/null +++ b/test/w3c/xpath/test233.scxml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that finalize markup runs before the event is processed. The invoked process will +return 2 in _event.data.aParam, so that new value should be in force when we select +the transtitions. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1" expr="1"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="3s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <scxml initial="subFinal" version="1.0" datamodel="xpath"> + <final id="subFinal"> + <onentry> + <send target="#_parent" event="childToParent"> + <param name="aParam" expr="2"/> + </send> + </onentry> + </final> + </scxml> + </content> + <finalize> + <assign location="$Var1" expr="$_event/data/data[@id='aParam']/text()"/> + </finalize> + </invoke> + + <transition event="childToParent" cond="" target="pass"/> + <transition event="*" target="fail"/> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test234.scxml b/test/w3c/xpath/test234.scxml new file mode 100644 index 0000000..bf06eba --- /dev/null +++ b/test/w3c/xpath/test234.scxml @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that only finalize markup in the invoking state runs. the first invoked process will +return 2 in _event.data.aParam, while second invoked process sleeps without returning any events. +Only the first finalize should execute. So when we get to s1 var1 should have value 2 but +var2 should still be set to 1 --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="p0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1" expr="1"/> + <data id="Var2" expr="1"/> + </datamodel> +<parallel id="p0"> + <onentry> + <send event="timeout" delay="3s"/> + </onentry> + <transition event="timeout" target="fail"/> + + <state id="p01"> + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <scxml version="1.0" initial="subFinal1" datamodel="xpath"> + <final id="subFinal1"> + <onentry> + <send target="#_parent" event="childToParent"> + <param name="aParam" expr="2"/> + </send> + </onentry> + </final> + </scxml> + </content> + <finalize> + <assign location="$Var1" expr="$_event/data/data[@id='aParam']/text()"/> + </finalize> + </invoke> + + <transition event="childToParent" cond="$Var1/text() =2" target="s1"/> + <transition event="childToParent" target="fail"/> + </state> + + <state id="p02"> + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <scxml version="1.0" initial="sub0" datamodel="xpath"> + <state id="sub0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <transition event="timeout" target="subFinal2"/> + </state> + <final id="subFinal2"/> + </scxml> + </content> + <finalize> + <assign location="$Var2" expr="$_event/data/data[@id='aParam']/text()"/> + </finalize> + </invoke> + </state> + +</parallel> + + +<state id="s1"> + <transition cond="$Var2/text() =1" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test235.scxml b/test/w3c/xpath/test235.scxml new file mode 100644 index 0000000..1b06a4c --- /dev/null +++ b/test/w3c/xpath/test235.scxml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that done.invoke.id event has the right id. the invoked child terminates immediately +and should generate done.invoke.foo --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/" id="foo"> + <content> + <scxml initial="subFinal" version="1.0" datamodel="xpath"> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <transition event="done.invoke.foo" target="pass"/> + <transition event="*" target="fail"/> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test236.scxml b/test/w3c/xpath/test236.scxml new file mode 100644 index 0000000..2c2d41a --- /dev/null +++ b/test/w3c/xpath/test236.scxml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that done.invoke.id event is the last event we receive. the invoked process sends childToParent +in the exit handler of its final state. We should get it before the done.invoke, and we should get no +events after the done.invoke. Hence timeout indicates success --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <scxml initial="subFinal" version="1.0" datamodel="xpath"> + <final id="subFinal"> + <onexit> + <send target="#_parent" event="childToParent"/> + </onexit> + </final> + </scxml> + </content> + </invoke> + + <transition event="childToParent" target="s1"/> + <transition event="done.invoke" target="fail"/> +</state> + +<state id="s1"> + <!-- here we should get done.invoke --> + <transition event="done.invoke" target="s2"/> + <transition event="*" target="fail"/> + </state> + +<state id="s2"> + <transition event="timeout" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test237.scxml b/test/w3c/xpath/test237.scxml new file mode 100644 index 0000000..19c2480 --- /dev/null +++ b/test/w3c/xpath/test237.scxml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that cancelling works. invoked child sleeps for two seconds, then terminates. We +sleep for 1 sec in s0, then move to s1. This should cause the invocation to get cancelled. +If we receive done.invoke, the invocation wasn't cancelled, and we fail. If we receive no events by +the time timeout2 fires, success --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <onentry> + <send event="timeout1" delay="1s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <!-- when invoked, sleep for 2 secs then terminate. Parent will try to cancel this session --> + <scxml initial="sub0" version="1.0" datamodel="xpath"> + <state id="sub0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <transition event="timeout" target="subFinal"/> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <transition event="timeout1" target="s1"/> + +</state> + +<state id="s1"> + <onentry> + <send event="timeout2" delay="2s"/> + </onentry> + <!-- here we should NOT get done.invoke --> + <transition event="done.invoke" target="fail"/> + <transition event="*" 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>
\ No newline at end of file diff --git a/test/w3c/xpath/test239.scxml b/test/w3c/xpath/test239.scxml new file mode 100644 index 0000000..b7fcfc2 --- /dev/null +++ b/test/w3c/xpath/test239.scxml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that markup can be specified both by 'src' and by <content> --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <transition event="timeout" target="fail"/> + + <state id="s01"> + <invoke type="http://www.w3.org/TR/scxml/" src="file:test239sub1.scxml"/> + <transition event="done.invoke" target="s02"/> + </state> + +<state id="s02"> + <invoke type="http://www.w3.org/TR/scxml/"> + <!-- identical to test239sub1.scxml. --> + <content> + <scxml version="1.0" initial="final" datamodel="xpath"> + <final id="final"/> + </scxml> + </content> + </invoke> + + <transition event="done.invoke" target="pass"/> + </state> + +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test239sub1.scxml b/test/w3c/xpath/test239sub1.scxml new file mode 100644 index 0000000..510f4a0 --- /dev/null +++ b/test/w3c/xpath/test239sub1.scxml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- when invoked, just terminate. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="final" version="1.0" datamodel="xpath"> + + <final id="final"/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test240.scxml b/test/w3c/xpath/test240.scxml new file mode 100644 index 0000000..ddf92c6 --- /dev/null +++ b/test/w3c/xpath/test240.scxml @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that datamodel values can be specified both by 'namelist' and by <param>. +invoked child will return success if its Var1 is set to 1, failure otherwise. This +test will fail schema validation because of the multiple occurences of Var1, but +should run correctly. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1" expr="1"/> + </datamodel> + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <transition event="timeout" target="fail"/> + + <state id="s01"> + <invoke type="http://www.w3.org/TR/scxml/" namelist="$Var1"> + <content> + <scxml initial="sub01" version="1.0" datamodel="xpath"> + <datamodel> + <data id="Var1" expr="0"/> + </datamodel> + <state id="sub01"> + <transition cond="$Var1/data/text() =1" target="subFinal1"> + <send target="#_parent" event="success"/> + </transition> + <transition target="subFinal1"> + <send target="#_parent" event="failure"/> + </transition> + </state> + <final id="subFinal1"/> + </scxml> + </content> + </invoke> + <transition event="success" target="s02"/> + <transition event="failure" target="fail"/> + </state> + +<state id="s02"> + <invoke type="http://www.w3.org/TR/scxml/"> + <param name="Var1" expr="1"/> + <content> + <scxml initial="sub02" version="1.0" datamodel="xpath"> + <datamodel> + <data id="Var1" expr="0"/> + </datamodel> + + <state id="sub02"> + <transition cond="$Var1/text() =1" target="subFinal2"> + <send target="#_parent" event="success"/> + </transition> + <transition target="subFinal1"> + <send target="#_parent" event="failure"/> + </transition> + </state> + <final id="subFinal2"/> + </scxml> + </content> + </invoke> + <transition event="success" target="pass"/> + <transition event="failure" target="fail"/> + </state> + +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test241.scxml b/test/w3c/xpath/test241.scxml new file mode 100644 index 0000000..377aa4d --- /dev/null +++ b/test/w3c/xpath/test241.scxml @@ -0,0 +1,98 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- The child process will return success ifits Var1 is set to 1, failure otherwise. For this test +we try passing in Var1 by param and by namelist and check that we either get two successes +or two failures. This test will fail schema validation due to multiple declarations of +Var1, but should run correctly. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1" expr="1"/> + </datamodel> + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <transition event="timeout" target="fail"/> + + <state id="s01"> + <invoke type="http://www.w3.org/TR/scxml/" namelist="$Var1"> + <content> + <scxml initial="sub01" version="1.0" datamodel="xpath"> + <datamodel> + <data id="Var1" expr="0"/> + </datamodel> + + <state id="sub01"> + <transition cond="$Var1/text() =1" target="subFinal1"> + <send target="#_parent" event="success"/> + </transition> + <transition target="subFinal1"> + <send target="#_parent" event="failure"/> + </transition> + </state> + + <final id="subFinal1"/> + </scxml> + </content> + </invoke> + <transition event="success" target="s02"/> + <transition event="failure" target="s03"/> + </state> + +<state id="s02"> + <invoke type="http://www.w3.org/TR/scxml/"> + <param name="Var1" expr="1"/> + <content> + <scxml initial="sub02" version="1.0" datamodel="xpath"> + <datamodel> + <data id="Var1" expr="0"/> + </datamodel> + + <state id="sub02"> + <transition cond="$Var1/text() =1" target="subFinal2"> + <send target="#_parent" event="success"/> + </transition> + <transition target="subFinal2"> + <send target="#_parent" event="failure"/> + </transition> + </state> + + <final id="subFinal2"/> + </scxml> + </content> + </invoke> + <!-- we got success in s01, so we need to do so here --> + <transition event="success" target="pass"/> + <transition event="failure" target="fail"/> + </state> + +<state id="s03"> + <invoke type="http://www.w3.org/TR/scxml/"> + <param name="Var1" expr="1"/> + <content> + <scxml initial="sub03" version="1.0" datamodel="xpath"> + <datamodel> + <data id="Var1" expr="0"/> + </datamodel> + + <state id="sub03"> + <transition cond="$Var1/text() =1" target="subFinal3"> + <send target="#_parent" event="success"/> + </transition> + <transition target="subFinal3"> + <send target="#_parent" event="failure"/> + </transition> + </state> + + <final id="subFinal3"/> + </scxml> + </content> + </invoke> + <!-- we got failure in s01, so we need to do so here --> + <transition event="failure" target="pass"/> + <transition event="success" target="fail"/> + </state> + +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test242.scxml b/test/w3c/xpath/test242.scxml new file mode 100644 index 0000000..a6f1798 --- /dev/null +++ b/test/w3c/xpath/test242.scxml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that markup specified by 'src' and by <content> is treated the same way. That means that +either we get done.invoke in both cases or in neither case (in which case we timeout) --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <onentry> + <send event="timeout1" delay="1s"/> + </onentry> + <transition event="timeout" target="fail"/> + + <invoke type="http://www.w3.org/TR/scxml/" src="file:test242sub1.scxml"/> + <transition event="done.invoke" target="s02"/> + <transition event="timeout1" target="s03"/> + </state> + +<state id="s02"> + <onentry> + <send event="timeout2" delay="1s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/"> + <!-- identical to test242sub1.scxml. --> + <content> + <scxml version="1.0" initial="subFinal1" datamodel="xpath"> + <final id="subFinal1"/> + </scxml> + </content> + </invoke> + <!-- we got done.invoke last time, so we need it this time too --> + <transition event="done.invoke" target="pass"/> + <transition event="timeout2" target="fail"/> + </state> + +<state id="s03"> + <onentry> + <send event="timeout3" delay="1s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/"> + <!-- identical to test242sub1.scxml. --> + <content> + <scxml version="1.0" initial="subFinal2" datamodel="xpath"> + <final id="subFinal2"/> + </scxml> + </content> + </invoke> + <!-- we got timeout last time, so we need it this time too --> + <transition event="timeout3" target="pass"/> + <transition event="done.invoke" target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test242sub1.scxml b/test/w3c/xpath/test242sub1.scxml new file mode 100644 index 0000000..510f4a0 --- /dev/null +++ b/test/w3c/xpath/test242sub1.scxml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- when invoked, just terminate. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="final" version="1.0" datamodel="xpath"> + + <final id="final"/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test243.scxml b/test/w3c/xpath/test243.scxml new file mode 100644 index 0000000..dceb40e --- /dev/null +++ b/test/w3c/xpath/test243.scxml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that datamodel values can be specified by param. +test240sub1 will return success ifits Var1 is set to 1, failure otherwise. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/"> + <param name="Var1" expr="1"/> + <content> + <scxml version="1.0" initial="sub0" datamodel="xpath"> + <datamodel> + <data id="Var1" expr="0"/> + </datamodel> + + <state id="sub0"> + <transition cond="$Var1/text() =1" target="subFinal"> + <send target="#_parent" event="success"/> + </transition> + <transition target="subFinal"> + <send target="#_parent" event="failure"/> + </transition> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + <transition event="success" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test244.scxml b/test/w3c/xpath/test244.scxml new file mode 100644 index 0000000..307e556 --- /dev/null +++ b/test/w3c/xpath/test244.scxml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that datamodel values can be specified by namelist. +invoked child will return success ifits Var1 is set to 1, failure otherwise. +This test will fail schema validation due to multiple occurrences of Var1, +but should run correctly. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1" expr="1"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/" namelist="$Var1"> + <content> + <scxml initial="sub0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="Var1" expr="0"/> + </datamodel> + + <state id="sub0"> + <transition cond="$Var1/text() =1" target="subFinal"> + <send target="#_parent" event="success"/> + </transition> + <transition target="subFinal"> + <send target="#_parent" event="failure"/> + </transition> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + <transition event="success" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test245.scxml b/test/w3c/xpath/test245.scxml new file mode 100644 index 0000000..b9cbddb --- /dev/null +++ b/test/w3c/xpath/test245.scxml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that non-existent datamodel values are not set. Var2 is not defined in +invoked child's datamodel. It will will return success if its Var2 remains unbound, failure otherwise. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var2" expr="3"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/" namelist="$Var2"> + <content> + <scxml initial="sub0" version="1.0" datamodel="xpath"> + <state id="sub0"> + <transition cond="$Var2/* or $Var2/text()" target="subFinal"> + <send target="#_parent" event="failure"/> + </transition> + <transition target="subFinal"> + <send target="#_parent" event="success"/> + </transition> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <transition event="success" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test247.scxml b/test/w3c/xpath/test247.scxml new file mode 100644 index 0000000..16a6a5f --- /dev/null +++ b/test/w3c/xpath/test247.scxml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that we get done.invoke. timeout indicates failure --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <scxml version="1.0" initial="subFinal" datamodel="xpath"> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + <transition event="done.invoke" target="pass"/> + <transition event="timeout" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test250.scxml b/test/w3c/xpath/test250.scxml new file mode 100644 index 0000000..3884425 --- /dev/null +++ b/test/w3c/xpath/test250.scxml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the onexit handlers run in the invoked process if it is cancelled. This has to be a +manual test, since this process won't accept any events from the child process once it has been cancelled. +Tester must examine log output from child process to determine success --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <onentry> + <send event="foo"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <scxml initial="sub0" version="1.0" datamodel="xpath"> + <state id="sub0" initial="sub01"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <transition event="timeout" target="subFinal"/> + <onexit> + <log expr="'Exiting sub0'"/> + </onexit> + <state id="sub01"> + <onexit> + <log expr="'Exiting sub01'"/> + </onexit> + </state> + </state> + <final id="subFinal"> + <onentry> + <log expr="'entering final state, invocation was not cancelled'"/> + </onentry> + </final> + </scxml> + </content> + </invoke> + + <!-- this transition will cause the invocation to be cancelled --> + <transition event="foo" target="final"/> + </state> + +<final id="final"/> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test252.scxml b/test/w3c/xpath/test252.scxml new file mode 100644 index 0000000..1f92127 --- /dev/null +++ b/test/w3c/xpath/test252.scxml @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that we don't process any events received from the invoked process once it is cancelled. child +process tries to send us childToParent in an onexit handler. If we get it, we fail. +timeout indicates success. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + + <transition event="timeout" target="pass"/> + <transition event="childToParent" target="fail"/> + <transition event="done.invoke" target="fail"/> + + <state id="s01"> + <onentry> + <send event="foo"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <scxml initial="sub0" version="1.0" datamodel="xpath"> + <state id="sub0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <transition event="timeout" target="subFinal"/> + <onexit> + <send target="#_parent" event="childToParent"/> + </onexit> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <!-- this transition will cause the invocation to be cancelled --> + <transition event="foo" target="s02"/> + </state> + + <state id="s02"/> + +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test253.scxml b/test/w3c/xpath/test253.scxml new file mode 100644 index 0000000..f894ea9 --- /dev/null +++ b/test/w3c/xpath/test253.scxml @@ -0,0 +1,79 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the scxml event processor is used in both directions. If child process uses the +scxml event i/o processor to communicate with us, send it an event. It will send back success if +this process uses the scxml processor to send the message to it, otherwise failure. For this test we allow +'scxml' as an alternative to the full url. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1"/> + </datamodel> + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + + <transition event="timeout" target="fail"/> + + <invoke type="scxml" id="foo"> + <content> + <!-- inform parent we're running then wait for it to send us an event. If it uses the scxml event i/o + processor to do so, return success, otherwise return failure. --> + <scxml initial="sub0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="Var2"/> + </datamodel> + <state id="sub0"> + <onentry> + <send target="#_parent" event="childRunning"/> + </onentry> + + <transition event="parentToChild" target="sub1"> + <assign location="$Var2" expr="$_event/origintype/text()"/> + </transition> + </state> + <state id="sub1"> + <transition cond="$Var2='http://www.w3.org/TR/scxml/#SCXMLEventProcessor'" target="subFinal"> + <send target="#_parent" event="success"/> + </transition> + <transition cond="$Var2='scxml'" target="subFinal"> + <send target="#_parent" event="success"/> + </transition> + <transition target="subFinal"> + <send target="#_parent" event="failure"/> + </transition> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + + <state id="s01"> + <transition event="childRunning" target="s02"> + <assign location="$Var1" expr="$_event/origintype/text()"/> + </transition> + </state> + + <state id="s02"> + + <transition cond="$Var1='http://www.w3.org/TR/scxml/#SCXMLEventProcessor'" target="s03"> + <send target="#_foo" event="parentToChild"/> + </transition> + <transition cond="$Var1='scxml'" target="s03"> + <send target="#_foo" event="parentToChild"/> + </transition> + + <transition target="fail"/> + + </state> + + + <state id="s03"> + <transition event="success" target="pass"/> + <transition event="fail" target="fail"/> + + </state> + +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test276.scxml b/test/w3c/xpath/test276.scxml new file mode 100644 index 0000000..026e0fc --- /dev/null +++ b/test/w3c/xpath/test276.scxml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that values passed in from parent process override default values specified in the child, test276sub1.scxml. +The child returns event1 if var1 has value 1, event0 if it has default value 0. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + <state id="s0"> + <invoke type="scxml" src="file:test276sub1.scxml"> + <param name="Var1" expr="1"/> + </invoke> + <transition event="event1" target="pass"/> + <transition event="event0" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test276sub1.scxml b/test/w3c/xpath/test276sub1.scxml new file mode 100644 index 0000000..5c6ab45 --- /dev/null +++ b/test/w3c/xpath/test276sub1.scxml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- define var1 with default value 0. Parent will invoke this process setting var1 = 1. Return event1 if var1 == 1, event0 otherwise --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="Var1" expr="0"/> + </datamodel> + + <state id="s0"> + + + <transition cond="$Var1/text() =1" target="final"> + <send target="#_parent" event="event1"/> + </transition> + + <transition target="final"> + <send target="#_parent" event="event0"/> + </transition> + + </state> + + <final id="final"/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test277.scxml b/test/w3c/xpath/test277.scxml new file mode 100644 index 0000000..6dc520e --- /dev/null +++ b/test/w3c/xpath/test277.scxml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that platform creates undound variable if we assign an illegal value to it. Thus + we can assign to it later in state s1. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="Var1" expr="!1"/> + </datamodel> + + <state id="s0"> + <onentry> + <raise event="foo"/> + </onentry> + + <transition event="error.execution" cond="$Var1 and not($Var1/text()) and not($Var1/*)" target="s1"/> + <transition event="*" target="fail"/> + </state> + + <state id="s1"> + <onentry> + <assign location="$Var1" expr="1"/> + </onentry> + <transition cond="$Var1/text() =1" target="pass"/> + <transition target="fail"/> + + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test278.scxml b/test/w3c/xpath/test278.scxml new file mode 100644 index 0000000..93461be --- /dev/null +++ b/test/w3c/xpath/test278.scxml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + +<!-- test that a variable can be accessed from a state that is outside its lexical scope --> + + <state id="s0"> + <transition cond="$Var1/text() =1" target="pass"/> + + <transition target="fail"/> + + </state> + +<state id="s1"> + <datamodel> + <data id="Var1" expr="1"/> + </datamodel> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test279.scxml b/test/w3c/xpath/test279.scxml new file mode 100644 index 0000000..314b927 --- /dev/null +++ b/test/w3c/xpath/test279.scxml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- testing that in case of early binding variables are assigned values at init time, before + the state containing them is visited --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + + <state id="s0"> + <transition cond="$Var1/text() =1" target="pass"/> + + <transition target="fail"/> + + </state> + +<state id="s1"> + <datamodel> + <data id="Var1" expr="1"/> + </datamodel> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test280.scxml b/test/w3c/xpath/test280.scxml new file mode 100644 index 0000000..79bb2e5 --- /dev/null +++ b/test/w3c/xpath/test280.scxml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test late binding. var2 won't get bound until s1 is entered, so it shouldn't have a value in s0 and +accessing it should cause an error. It should get bound before the onentry code in s1 so it should be +possible access it there and assign its value to var1 --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath" binding="late"> + + <datamodel> + <data id="Var1"/> + </datamodel> + + <state id="s0"> + <transition cond="$Var2 and not($Var2/text()) and not($Var2/*)" target="s1"/> + <transition target="fail"/> + </state> + +<state id="s1"> + <datamodel> + <data id="Var2" expr="1"/> + </datamodel> + <onentry> + <assign location="$Var1" expr="$Var2/text()"/> + </onentry> + <transition cond="$Var1/text()=$Var2/text()" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test286.scxml b/test/w3c/xpath/test286.scxml new file mode 100644 index 0000000..80c0046 --- /dev/null +++ b/test/w3c/xpath/test286.scxml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that assigment to a non-declared var causes an error. the transition on foo catches the case +where no error is raised --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="xpath" initial="s0"> + + + <state id="s0"> + <onentry> + <assign location="$Var1" expr="1"/> + <raise event="foo"/> + </onentry> + + <transition event="error.execution" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test287.scxml b/test/w3c/xpath/test287.scxml new file mode 100644 index 0000000..9d10690 --- /dev/null +++ b/test/w3c/xpath/test287.scxml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- a simple test that a legal value may be assigned to a valid data model location --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="xpath" version="1.0" initial="s0"> + +<datamodel> + <data id="Var1" expr="0"/> + </datamodel> + + <state id="s0"> + <onentry> + <assign location="$Var1" expr="1"/> + </onentry> + + <transition cond="$Var1/text() =1" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test294.scxml b/test/w3c/xpath/test294.scxml new file mode 100644 index 0000000..362f2a6 --- /dev/null +++ b/test/w3c/xpath/test294.scxml @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that a param inside donedata ends up in the data field of the done event and +that content inside donedata sets the full value of the event.data field --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="xpath" initial="s0"> + <datamodel> + <data id="Var1" expr="0"/> + </datamodel> + + <state id="s0" initial="s01"> + + <transition event="done.state.s0" cond="$_event/data/data[@id = 'Var1']/text()=1" target="s1"> + </transition> + + <transition event="done.state.s0" target="fail"> + </transition> + + <state id="s01"> + <transition target="s02"/> + </state> + <final id="s02"> + <donedata> + <param name="Var1" expr="1"/> + </donedata> + </final> + </state> + + <state id="s1" initial="s11"> + + <transition event="done.state.s1" cond="$_event/data = 'foo'" target="pass"> + </transition> + + <transition event="done.state.s1" target="fail"> + </transition> + + <state id="s11"> + <transition target="s12"/> + </state> + <final id="s12"> + <donedata> + <content>foo</content> + </donedata> + </final> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test298.scxml b/test/w3c/xpath/test298.scxml new file mode 100644 index 0000000..ab8a5a9 --- /dev/null +++ b/test/w3c/xpath/test298.scxml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- refence a non-existent data model location in param in donedata and see that the right error is raised --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="xpath" initial="s0"> + <datamodel> + <data id="Var1" expr="0"/> + </datamodel> + + <state id="s0" initial="s01"> + <transition event="error.execution" target="pass"/> + <transition event="*" target="fail"/> + + <state id="s01"> + <transition target="s02"/> + </state> + <final id="s02"> + <donedata> + <param name="Var3" location="$Var2"/> + </donedata> + </final> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test301.scxml b/test/w3c/xpath/test301.scxml new file mode 100644 index 0000000..59125c8 --- /dev/null +++ b/test/w3c/xpath/test301.scxml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- the processor should reject this document because it can't download the script. +Therefore we fail if it runs at all. This test is valid only for datamodels that support scripting --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" initial="s0"> + <script src="D:\foo"/> + + <state id="s0"> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test302.scxml b/test/w3c/xpath/test302.scxml new file mode 100644 index 0000000..4ecb0b7 --- /dev/null +++ b/test/w3c/xpath/test302.scxml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that a script is evaluated at load time. <conf:script> shoudl assign the value 1 to +Var1. Hence, if script is evaluated at download time, Var1 has a value in the initial state s0. +This test is valid only for datamodels that support scripting --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="xpath" initial="s0"> + <script/> + + <state id="s0"> + <transition cond="$Var1/text() =1" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test303.scxml b/test/w3c/xpath/test303.scxml new file mode 100644 index 0000000..490151a --- /dev/null +++ b/test/w3c/xpath/test303.scxml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- to test that scripts are run as part of executable content, we check that it changes the value of a var at the +right point. This test is valid only for datamodels that support scripting --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="xpath" initial="s0"> +<datamodel> +<data id="Var1" expr="0"/> +</datamodel> + + <state id="s0"> + <onentry> + <assign location="$Var1" expr="2"/> + <script/> + </onentry> + <transition cond="$Var1/text() =1" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test304.scxml b/test/w3c/xpath/test304.scxml new file mode 100644 index 0000000..072b188 --- /dev/null +++ b/test/w3c/xpath/test304.scxml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that a variable declared by a script can be accessed like any other part of the data model --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="xpath" version="1.0" initial="s0"> + <script/> + + <state id="s0"> + <transition cond="$Var1/text() =1" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test307.scxml b/test/w3c/xpath/test307.scxml new file mode 100644 index 0000000..369b6c8 --- /dev/null +++ b/test/w3c/xpath/test307.scxml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" initial="s0" binding="late"> + +<!-- with binding=late, in s0 we access a variable that isn't created until we get to s1. Then in s1 +we access a non-existent substructure of a variable. We use log tags to report the values that both operations +yield, and whether there are errors. This is a manual test, since the tester must report whether the output +is the same in the two cases --> + +<state id="s0"> + <onentry> + <log label="entering s0 value of Var 1 is: " expr="$Var1/text()"/> + <raise event="foo"/> + </onentry> + <transition event="error" target="s1"> + <log label="error in state s0" expr="_event"/> + </transition> + <transition event="foo" target="s1"> + <log label="no error in s0" expr=""/> + </transition> + </state> + +<state id="s1"> + <datamodel> + <data id="Var1" expr="1"/> + </datamodel> + + <onentry> + <log label="entering s1, value of non-existent substructure of Var 1 is: " expr="$Var1.bar"/> + <raise event="bar"/> + </onentry> + + <transition event="error" target="final"> + <log label="error in state s1" expr="_event"/> + </transition> + <transition event="bar" target="final"> + <log label="No error in s1" expr=""/> + </transition> + +</state> + +<final id="final"/> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test309.scxml b/test/w3c/xpath/test309.scxml new file mode 100644 index 0000000..b2ad07d --- /dev/null +++ b/test/w3c/xpath/test309.scxml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that an expression that cannot be interpreted as a boolean is treated as false --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="xpath" initial="s0"> + +<state id="s0"> + <transition cond="==!*" target="fail"/> + <transition 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>
\ No newline at end of file diff --git a/test/w3c/xpath/test310.scxml b/test/w3c/xpath/test310.scxml new file mode 100644 index 0000000..59e5bf0 --- /dev/null +++ b/test/w3c/xpath/test310.scxml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- simple test of the in() predicate --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="xpath" initial="p"> + + + <parallel id="p"> + + <state id="s0"> + <transition cond="In('s1')" target="pass"/> + <transition target="fail"/> + </state> + + <state id="s1"/> + </parallel> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test311.scxml b/test/w3c/xpath/test311.scxml new file mode 100644 index 0000000..487793c --- /dev/null +++ b/test/w3c/xpath/test311.scxml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that assignment to a non-existent location yields an error --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="xpath" initial="s0"> + + +<state id="s0"> + <onentry> + <assign location="$Var1" expr="1"/> + </onentry> + <transition event="error.execution" target="pass"/> + <transition event=".*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test312.scxml b/test/w3c/xpath/test312.scxml new file mode 100644 index 0000000..45ed889 --- /dev/null +++ b/test/w3c/xpath/test312.scxml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that assignment with an illegal expr raises an error --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="xpath" initial="s0"> + +<datamodel> + <data id="Var1" expr="1"/> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$Var1" expr="!1"/> + <raise event="foo"/> + </onentry> + <transition event="error.execution" target="pass"/> + <transition event=".*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test313.scxml b/test/w3c/xpath/test313.scxml new file mode 100644 index 0000000..0816115 --- /dev/null +++ b/test/w3c/xpath/test313.scxml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- this is a manual test. The processor is allowed to reject this doc, but if it executes it with its illegal +expression, it must raise an error --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="xpath" initial="s0"> + +<datamodel> + <data id="Var1" expr="1"/> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$Var1" expr="!1"/> + <raise event="foo"/> + </onentry> + <transition event="error.execution" target="pass"/> + <transition event=".*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test314.scxml b/test/w3c/xpath/test314.scxml new file mode 100644 index 0000000..2d16107 --- /dev/null +++ b/test/w3c/xpath/test314.scxml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- this is a manual test because the processor is allowed to reject this document. But if it executes it, +it should not raise an error until it gets to s03 and evaluates the illegal expr --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="xpath" initial="s0"> +<datamodel> + <data id="Var1" expr="1"/> + </datamodel> + + +<state id="s0" initial="s01"> + <transition event="error.execution" target="fail"/> + + <state id="s01"> + <transition target="s02"/> + </state> + + <state id="s02"> + <transition target="s03"/> + </state> + + <state id="s03"> + <onentry> + <assign location="$Var1" expr="!1"/> + <raise event="foo"/> + </onentry> + <transition event="error.execution" target="pass"/> + <transition event=".*" target="fail"/> + </state> + +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test318.scxml b/test/w3c/xpath/test318.scxml new file mode 100644 index 0000000..2ee56d8 --- /dev/null +++ b/test/w3c/xpath/test318.scxml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that _event stays bound during the onexit and entry into the next state --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath" name="machineName"> +<datamodel> + <data id="Var1"/> + </datamodel> + + <state id="s0"> + <onentry> + <raise event="foo"/> + </onentry> + <transition event="foo" target="s1"/> + </state> + + <state id="s1"> + <onentry> + <raise event="bar"/> + <!-- _event should still be bound to 'foo' at this point --> + <assign location="$Var1" expr="$_event/name/text()"/> + </onentry> + <transition cond="$Var1='foo'" target="pass"/> + <transition target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test319.scxml b/test/w3c/xpath/test319.scxml new file mode 100644 index 0000000..f168e1a --- /dev/null +++ b/test/w3c/xpath/test319.scxml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that _event is not bound before any event has been raised --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0" name="machineName"> + + <state id="s0"> + <onentry> + <if cond="$_event/text()"> + <raise event="bound"/> + <else/> + <raise event="unbound"/> + </if> + </onentry> + <transition event="unbound" target="pass"/> + <transition event="bound" target="fail"/> + + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test321.scxml b/test/w3c/xpath/test321.scxml new file mode 100644 index 0000000..8905752 --- /dev/null +++ b/test/w3c/xpath/test321.scxml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that _sessionid is bound on startup --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0" name="machineName"> +<datamodel> + <data id="Var1" expr="$_sessionid"/> + </datamodel> + + <state id="s0"> +<transition cond="$Var1/* or $Var1/text()" target="pass"/> + <transition cond="true()" target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test322.scxml b/test/w3c/xpath/test322.scxml new file mode 100644 index 0000000..437ff93 --- /dev/null +++ b/test/w3c/xpath/test322.scxml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that _sessionid remains bound to the same value throught the session. this means that it can't +be assigned to --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0" name="machineName"> +<datamodel> + <data id="Var1" expr="$_sessionid"/> + <data id="Var2"/> + </datamodel> + + <state id="s0"> + <transition target="s1"/> + + </state> + + <state id="s1"> + <onentry> + <assign location="$_sessionid" expr="'otherName'"/> + <raise event="foo"/> + </onentry> + + <transition event="error.execution" target="s2"/> + <transition event="*" target="fail"/> + </state> + + <state id="s2"> + + <transition cond="$Var1=$_sessionid" target="pass"/> + <transition target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test323.scxml b/test/w3c/xpath/test323.scxml new file mode 100644 index 0000000..76a519f --- /dev/null +++ b/test/w3c/xpath/test323.scxml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that _name is bound on startup --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath" name="machineName"> +<datamodel> + <data id="Var1" expr="$_name"/> + </datamodel> + + <state id="s0"> +<transition cond="$Var1/* or $Var1/text()" target="pass"/> + <transition cond="true()" target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test324.scxml b/test/w3c/xpath/test324.scxml new file mode 100644 index 0000000..c3493e3 --- /dev/null +++ b/test/w3c/xpath/test324.scxml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that _name stays bound till the session ends. This means that it cannot be assigned to --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath" name="machineName"> + + + <state id="s0"> + <transition cond="$_name/text() = 'machineName'" target="s1"/> + <transition target="fail"/> + </state> + + <state id="s1"> + <onentry> + <assign location="$_name" expr="'otherName'"/> + </onentry> + <transition cond="$_name/text() = 'machineName'" target="pass"/> + <transition target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test325.scxml b/test/w3c/xpath/test325.scxml new file mode 100644 index 0000000..b85b47a --- /dev/null +++ b/test/w3c/xpath/test325.scxml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that _ioprocessors is bound at startup. I'm not sure how to test for a set value or +how to test that the entries in it do represent I/O processors, since the set that each implementation +supports may be different. Suggestions welcome --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0" name="machineName"> +<datamodel> + <data id="Var1" expr="$_ioprocessors"/> + </datamodel> + + + <state id="s0"> + <transition cond="$Var1/* or $Var1/text()" target="pass"/> + <transition target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test326.scxml b/test/w3c/xpath/test326.scxml new file mode 100644 index 0000000..f6f69bc --- /dev/null +++ b/test/w3c/xpath/test326.scxml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that _ioprocessors stays bound till the session ends. This means that it cannot be assigned to --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0" name="machineName"> +<datamodel> + <data id="Var1" expr="$_ioprocessors"/> + <data id="Var2"/> + </datamodel> + + <state id="s0"> + <transition cond="$Var1/* or $Var1/text()" target="s1"/> + <transition cond="true()" target="fail"/> + </state> + + + <state id="s1"> + <onentry> + <assign location="$_ioprocessors" expr="'otherName'"/> + <raise event="foo"/> + </onentry> + + <transition event="error.execution" target="s2"/> + <transition event="*" target="fail"/> + </state> + + <state id="s2"> + <onentry> + <assign location="$Var2" expr="$_ioprocessors"/> + </onentry> + <transition cond="$Var1=$Var2" target="pass"/> + <transition target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test329.scxml b/test/w3c/xpath/test329.scxml new file mode 100644 index 0000000..ad62f10 --- /dev/null +++ b/test/w3c/xpath/test329.scxml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that none of the system variables can be modified --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath" name="machineName"> + <datamodel> + <data id="Var1"/> + <data id="Var2"/> + <data id="Var3"/> + <data id="Var4"/> + </datamodel> + + <state id="s0"> + <onentry> + <!-- get _event bound so we can use it in s1--> + <raise event="foo"/> + <assign location="$Var1" expr="$_sessionid"/> + <assign location="$_sessionid" expr="27"/> + </onentry> + + <transition event="foo" cond="$Var1=$_sessionid" target="s1"/> + <transition event="*" target="fail"/> + </state> + + <state id="s1"> + <onentry> + <assign location="$Var2" expr="$_event"/> + <assign location="$_event" expr="27"/> + </onentry> + <transition cond="$Var2=$_event" target="s2"/> + <transition target="fail"/> + </state> + +<state id="s2"> + <onentry> + <assign location="$Var3" expr="$_name"/> + <assign location="$_name" expr="27"/> + </onentry> + <transition cond="$Var3=$_name" target="s3"/> + <transition target="fail"/> + </state> + + +<state id="s3"> + <onentry> + <assign location="$Var4" expr="$_ioprocessors"/> + <assign location="$_ioprocessors" expr="27"/> + </onentry> + <transition cond="$Var4=$_ioprocessors" target="pass"/> + <transition target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test330.scxml b/test/w3c/xpath/test330.scxml new file mode 100644 index 0000000..353c683 --- /dev/null +++ b/test/w3c/xpath/test330.scxml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- check that the required fields are present in both internal and external events --><scxml xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" name="machineName"> + + <state id="s0"> + <onentry> + <raise event="foo"/> + </onentry> + <transition event="foo" cond="$_event/name and $_event/type and $_event/sendid and $_event/origin and $_event/origintype and $_event/invokeid and $_event/data" target="s1"/> + <transition event="*" target="fail"/> + </state> + + <state id="s1"> + <onentry> + <send event="foo"/> + </onentry> + <transition event="foo" cond="$_event/name and $_event/type and $_event/sendid and $_event/origin and $_event/origintype and $_event/invokeid and $_event/data" target="pass"/> + <transition event="*" target="fail"/> + </state> + + + <final xmlns="http://www.w3.org/2005/07/scxml" id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final xmlns="http://www.w3.org/2005/07/scxml" id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test331.scxml b/test/w3c/xpath/test331.scxml new file mode 100644 index 0000000..aec6d98 --- /dev/null +++ b/test/w3c/xpath/test331.scxml @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8"?><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="xpath" initial="s0" name="machineName"> + +<!-- test that _event.type is set correctly for internal, platform, and external events --> +<datamodel> + <data id="Var1"/> + </datamodel> + + <state id="s0"> + <onentry> + <!-- internal event --> + <raise event="foo"/> + </onentry> + <transition event="foo" target="s1"> + <assign location="$Var1" expr="$_event/type/text()"/> + </transition> + <transition event="*" target="fail"/> + </state> + +<state id="s1"> + <transition cond="$Var1='internal'" target="s2"/> + <transition target="fail"/> + </state> + +<state id="s2"> + <onentry> + <!-- this will generate an error, which is a platform event --> + <assign location="$Var2" expr="1"/> + </onentry> + <transition event="error" target="s3"> + <assign location="$Var1" expr="$_event/type/text()"/> + </transition> + <transition event="*" target="fail"/> + </state> + +<state id="s3"> + <transition cond="$Var1='platform'" target="s4"/> + <transition target="fail"/> + </state> + + <state id="s4"> + <onentry> + <!-- external event --> + <send event="foo"/> + </onentry> + <transition event="foo" target="s5"> + <assign location="$Var1" expr="$_event/type/text()"/> + </transition> + <transition event="*" target="fail"/> + </state> + +<state id="s5"> + <transition cond="$Var1='external'" target="pass"/> + <transition target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test332.scxml b/test/w3c/xpath/test332.scxml new file mode 100644 index 0000000..248f953 --- /dev/null +++ b/test/w3c/xpath/test332.scxml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that sendid is present in error events triggered by send errors --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" initial="s0" datamodel="xpath" name="machineName"> + <datamodel> + <data id="Var1"/> + <data id="Var2"/> + </datamodel> + + + <state id="s0"> + <onentry> + <!-- this will raise an error and also store the sendid in var1 --> + <send target="baz" event="foo" idlocation="$Var1"/> + </onentry> + <transition event="error" target="s1"> + <!-- get the sendid out of the error event --> + <assign location="$Var2" expr="$_event/sendid/text()"/> + </transition> + <transition event="*" target="fail"/> + </state> + +<state id="s1"> +<!-- make sure that the sendid in the error event matches the one generated when send executed --> + <transition cond="$Var1/text()=$Var2/text()" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test333.scxml b/test/w3c/xpath/test333.scxml new file mode 100644 index 0000000..aff67bc --- /dev/null +++ b/test/w3c/xpath/test333.scxml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- make sure sendid is blank in a non-error event --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" initial="s0" datamodel="xpath" name="machineName"> + + <state id="s0"> + <onentry> + <send event="foo"/> + </onentry> + <transition event="foo" cond="not(string($_event/sendid))" target="pass"/> + <transition event="*" target="fail"/> + </state> + + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test335.scxml b/test/w3c/xpath/test335.scxml new file mode 100644 index 0000000..004a688 --- /dev/null +++ b/test/w3c/xpath/test335.scxml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that origin field is blank for internal events --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" initial="s0" datamodel="xpath" name="machineName"> + + <state id="s0"> + <onentry> + <raise event="foo"/> + </onentry> + <transition event="foo" cond="not(string($_event/origin))" target="pass"/> + <transition event="*" target="fail"/> + </state> + + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test336.scxml b/test/w3c/xpath/test336.scxml new file mode 100644 index 0000000..0ec410a --- /dev/null +++ b/test/w3c/xpath/test336.scxml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the origin field of an external event contains a URL that lets you send back to the originator. In +this case it's the same session, so if we get bar we succeed --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0" name="machineName"> + + <state id="s0"> + <onentry> + <send event="foo"/> + </onentry> + <transition event="foo" target="s1"> + <send event="bar" targetexpr="$_event/origin/text()" typeexpr="$_event/origintype/text()"/> + </transition> + <transition event="*" target="fail"/> + </state> + +<state id="s1"> + <onentry> + <send event="baz"/> + </onentry> + <transition event="bar" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test337.scxml b/test/w3c/xpath/test337.scxml new file mode 100644 index 0000000..5bb900e --- /dev/null +++ b/test/w3c/xpath/test337.scxml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that origintype is blank on internal events --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0" name="machineName"> + + <state id="s0"> + <onentry> + <raise event="foo"/> + </onentry> + <transition event="foo" cond="not(string($_event/origintype))" target="pass"/> + <transition event="*" target="fail"/> + </state> + + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test338.scxml b/test/w3c/xpath/test338.scxml new file mode 100644 index 0000000..d434749 --- /dev/null +++ b/test/w3c/xpath/test338.scxml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that invokeid is set correctly in events received from an invoked process. timeout event catches the +case where the invoke doesn't work correctly --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1"/> + <data id="Var2"/> + </datamodel> + + <state id="s0"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + <invoke idlocation="$Var1" type="http://www.w3.org/TR/scxml/"> + <content> + <scxml initial="sub0" version="1.0" datamodel="xpath" name="machineName"> + <final id="sub0"> + <onentry> + <send target="#_parent" event="event1"/> + </onentry> + </final> + </scxml> + </content> + </invoke> + <transition event="event1" target="s1"> + <assign location="$Var2" expr="$_event/invokeid/text()"/> + </transition> + <transition event="event0" target="fail"/> + </state> + +<state id="s1"> + <transition cond="$Var1/text()=$Var2/text()" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test339.scxml b/test/w3c/xpath/test339.scxml new file mode 100644 index 0000000..225b64f --- /dev/null +++ b/test/w3c/xpath/test339.scxml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that invokeid is blank in an event that wasn't returned from an invoked process --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath" name="machineName"> + + <state id="s0"> + <onentry> + <raise event="foo"/> + </onentry> + <transition event="foo" cond="not(string($_event/invokeid))" target="pass"/> + <transition event="*" target="fail"/> + </state> + + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test342.scxml b/test/w3c/xpath/test342.scxml new file mode 100644 index 0000000..5dd9b3d --- /dev/null +++ b/test/w3c/xpath/test342.scxml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that eventexpr works and sets the name field of the resulting event --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath" name="machineName"> + <datamodel> + <data id="Var1" expr="'foo'"/> + <data id="Var2"/> + </datamodel> + + <state id="s0"> + <onentry> + <send eventexpr="$Var1"/> + </onentry> + <transition event="foo" target="s1"> + <assign location="$Var2" expr="$_event/name/text()"/> + </transition> + <transition event="*" target="fail"/> + </state> + +<state id="s1"> + <transition cond="$Var1/text()=$Var2/text()" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test343.scxml b/test/w3c/xpath/test343.scxml new file mode 100644 index 0000000..bae14de --- /dev/null +++ b/test/w3c/xpath/test343.scxml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that illegal <param> produces error.execution and empty event.data --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="xpath" initial="s0"> + + + <state id="s0" initial="s01"> + <!-- we should get the error before the done event --> + <transition event="error.execution" target="s1"/> + <transition event="done.state.s0" target="fail"/> + + <transition event="done.state.s0" target="fail"> + </transition> + + <state id="s01"> + <transition target="s02"/> + </state> + <final id="s02"> + <donedata> + <param location="$Varfoo" name="someParam"/> + </donedata> + </final> + </state> + + + <!-- if we get here, we received the error event. Now check that the done + event has empty event.data --> + + <state id="s1"> + <transition event="done.state.s0" cond="not($_event/data/*)" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test344.scxml b/test/w3c/xpath/test344.scxml new file mode 100644 index 0000000..15f744e --- /dev/null +++ b/test/w3c/xpath/test344.scxml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that a cond expression that cannot be evaluated as a +boolean cond expression evaluates to false and causes error.execution to be raised. +In some languages, any valid expression/object can be converted to a boolean, so conf:nonBoolean will +have to be mapped onto something that produces a syntax error or something similarly invalid --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="xpath" initial="s0"> + +<state id="s0"> + <transition cond="==!*" target="fail"/> + <transition target="s1"/> + </state> + +<state id="s1"> + <onentry> + <raise event="foo"/> + </onentry> + <transition event="error.execution" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test346.scxml b/test/w3c/xpath/test346.scxml new file mode 100644 index 0000000..5be7844 --- /dev/null +++ b/test/w3c/xpath/test346.scxml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that any attempt to change the value of a system variable causes error.execution to be raised. +Event1..4 are there to catch the case where the error event is not raised. In cases where it is, we have +to dispose of eventn in the next state, hence the targetless transitions (which simply throw away the event.) --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath" name="machineName"> + + + <state id="s0"> + <onentry> + <assign location="$_sessionid" expr="'otherName'"/> + <raise event="event1"/> + </onentry> + + <transition event="error.execution" target="s1"/> + <transition event="*" target="fail"/> + </state> + + <state id="s1"> + <onentry> + <assign location="$_event" expr="'otherName'"/> + <raise event="event2"/> + </onentry> + <!-- throw out event1 if it's still around --> + <transition event="event1"/> + <transition event="error.execution" target="s2"/> + <!-- event1 would trigger this transition if we didn't drop it. We want this transition to have + a very general trigger to catch cases where the wrong error event was raised --> + <transition event="*" target="fail"/> + </state> + +<state id="s2"> + <onentry> + <assign location="$_ioprocessors" expr="'otherName'"/> + <raise event="event3"/> + </onentry> + <transition event="event2"/> + <transition event="error.execution" target="s3"/> + <transition event="*" target="fail"/> + </state> + +<state id="s3"> + <onentry> + <assign location="$_name" expr="'otherName'"/> + <raise event="event4"/> + </onentry> + <transition event="event3"/> + <transition event="error.execution" target="pass"/> + <transition event="*" target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test347.scxml b/test/w3c/xpath/test347.scxml new file mode 100644 index 0000000..011f65f --- /dev/null +++ b/test/w3c/xpath/test347.scxml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the scxml event I/O processor works by sending events back and forth between an invoked child +and its parent process --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> + + +<state id="s0" initial="s01"> + <invoke id="child" type="scxml"> + <content> + <scxml initial="sub0" version="1.0" datamodel="xpath" name="machineName"> + <state id="sub0"> + <onentry> + <send type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" target="#_parent" event="childToParent"/> + </onentry> + <transition event="parentToChild" target="subFinal"/> + </state> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + <onentry> + <send delay="20s" event="timeout"/> + </onentry> + <transition event="timeout" target="fail"/> + + <state id="s01"> + <transition event="childToParent" target="s02"/> + </state> + + <state id="s02"> + <onentry> + <send type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" target="#_child" event="parentToChild"/> + </onentry> + <transition event="done.invoke" target="pass"/> + <transition event="error" target="fail"/> + </state> +</state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test348.scxml b/test/w3c/xpath/test348.scxml new file mode 100644 index 0000000..d55f797 --- /dev/null +++ b/test/w3c/xpath/test348.scxml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> + + <!-- test that event param of send sets the name of the event --> + +<state id="s0"> + + <onentry> + <send type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" event="s0Event"/> + </onentry> + <transition event="s0Event" target="pass"/> + <transition event="*" target="fail"/> + +</state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test349.scxml b/test/w3c/xpath/test349.scxml new file mode 100644 index 0000000..b162edc --- /dev/null +++ b/test/w3c/xpath/test349.scxml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that value in origin field can be used to send an event back to the sender --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1"/> + </datamodel> + +<state id="s0"> + + <onentry> + <send type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" event="s0Event"/> + </onentry> + <transition event="s0Event" target="s2"> + <assign location="$Var1" expr="$_event/origin/text()"/> + </transition> + <transition event="*" target="fail"/> + +</state> + +<state id="s2"> + <onentry> + <send type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" targetexpr="$Var1" event="s0Event2"/> + </onentry> + <transition event="s0Event2" target="pass"/> + <transition event="*" target="fail"/> +</state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test350.scxml b/test/w3c/xpath/test350.scxml new file mode 100644 index 0000000..ce94e9f --- /dev/null +++ b/test/w3c/xpath/test350.scxml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that target value is used to decide what session to deliver the event to. A session should be +able to send an event to itself using its own session ID as the target --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> +<datamodel> + <data id="Var1" expr="'#_scxml_' + _sessionid"/> + </datamodel> + +<state id="s0"> + + <onentry> + <send delay="5s" event="timeout"/> + <send type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" targetexpr="$Var1" event="s0Event"/> + </onentry> + <transition event="s0Event" target="pass"/> + <transition event="*" target="fail"/> + +</state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test351.scxml b/test/w3c/xpath/test351.scxml new file mode 100644 index 0000000..f75fab3 --- /dev/null +++ b/test/w3c/xpath/test351.scxml @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that sendid is set in event if present in send, blank otherwise --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> +<datamodel> + <data id="Var1"/> + <data id="Var2"/> + </datamodel> + + +<state id="s0"> + + <onentry> + <send delay="5s" event="timeout"/> + <send type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" id="send1" event="s0Event"/> + </onentry> + <transition event="s0Event" target="s1"> + <assign location="$Var1" expr="$_event/sendid/text()"/> + </transition> + <transition event="*" target="fail"> + </transition> + +</state> + +<state id="s1"> + <transition cond="$Var1='send1'" target="s2"/> + <transition target="fail"/> + </state> + +<state id="s2"> + + <onentry> + <send delay="5s" event="timeout"/> + <send event="s0Event2"/> + </onentry> + <transition event="s0Event2" target="s3"> + <assign location="$Var2" expr="$_event/sendid/text()"/> + </transition> + <transition event="*" target="fail"/> +</state> + +<state id="s3"> + <transition cond="not($Var2/text() or $Var2/*)" target="pass"/> + <transition target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test352.scxml b/test/w3c/xpath/test352.scxml new file mode 100644 index 0000000..b8ea732 --- /dev/null +++ b/test/w3c/xpath/test352.scxml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test the origintype is 'http://www.w3.org/TR/scxml/#SCXMLEventProcessor' --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1"/> + </datamodel> + + +<state id="s0"> + <onentry> + <send delay="5s" event="timeout"/> + <send type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" event="s0Event"/> + </onentry> + <transition event="s0Event" target="s1"> + <assign location="$Var1" expr="$_event/origintype/text()"/> + </transition> + <transition event="*" target="fail"> + </transition> + +</state> + +<state id="s1"> + <transition cond="$Var1='http://www.w3.org/TR/scxml/#SCXMLEventProcessor'" target="pass"/> + <transition target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test354.scxml b/test/w3c/xpath/test354.scxml new file mode 100644 index 0000000..93d768d --- /dev/null +++ b/test/w3c/xpath/test354.scxml @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that event.data can be populated using both namelist, param and <content> +and that correct values are used --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1" expr="1"/> + <data id="Var2"/> + <data id="Var3"/> + </datamodel> + +<state id="s0"> + <onentry> + <send delay="5s" event="timeout"/> + <send event="event1" type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor" namelist="Var1"> + <param name="param1" expr="2"/> + </send> + </onentry> + <transition event="event1" target="s1"> + <assign location="$Var2" expr="$_event/data/data[@id='Var1']/data/text()"/> + <assign location="$Var3" expr="$_event/data/data[@id='param1']/text()"/> + </transition> + <transition event="*" target="fail"> + </transition> + +</state> + +<state id="s1"> + + <transition cond="$Var2/text() =1" target="s2"/> + <transition target="fail"/> + </state> + +<state id="s2"> + <transition cond="$Var3/text() =2" target="s3"/> + <transition target="fail"/> + </state> + +<state id="s3"> + <onentry> + <send delay="5s" event="timeout"/> + <send event="event2"> + <content>foo</content> + </send> + </onentry> + <transition event="event2" cond="$_event/data = 'foo'" target="pass"/> + <transition event="*" target="fail"/> + +</state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test355.scxml b/test/w3c/xpath/test355.scxml new file mode 100644 index 0000000..af1dda6 --- /dev/null +++ b/test/w3c/xpath/test355.scxml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that default initial state is first in document order. If we enter s0 first we succeed, if s1, failure. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="xpath" version="1.0"> + + +<state id="s0"> + <transition target="pass"/> +</state> + +<state id="s1"> + <transition target="fail"/> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test364.scxml b/test/w3c/xpath/test364.scxml new file mode 100644 index 0000000..1130c72 --- /dev/null +++ b/test/w3c/xpath/test364.scxml @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that default initial states are entered when a compound state is entered. First we test +the 'initial' attribute, then the initial element, then default to the first child in document order. +If we get to s01111 we succeed, if any other state, failure. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="xpath" initial="s1" version="1.0"> + +<state id="s1" initial="s11p112 s11p122"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="timeout" target="fail"/> + <state id="s11" initial="s111"> + <state id="s111"/> + <parallel id="s11p1"> + <state id="s11p11" initial="s11p111"> + <state id="s11p111"/> + <state id="s11p112"> + <onentry> + <raise event="In-s11p112"/> + </onentry> + </state> + </state> + <state id="s11p12" initial="s11p121"> + <state id="s11p121"/> + <state id="s11p122"> + <transition event="In-s11p112" target="s2"/> + </state> + </state> + </parallel> + </state> +</state> + +<state id="s2"> + <initial> + <transition target="s21p112 s21p122"/> + </initial> + <transition event="timeout" target="fail"/> + <state id="s21" initial="s211"> + <state id="s211"/> + <parallel id="s21p1"> + <state id="s21p11" initial="s21p111"> + <state id="s21p111"/> + <state id="s21p112"> + <onentry> + <raise event="In-s21p112"/> + </onentry> + </state> + </state> + <state id="s21p12" initial="s21p121"> + <state id="s21p121"/> + <state id="s21p122"> + <transition event="In-s21p112" target="s3"/> + </state> + </state> + </parallel> + </state> +</state> + +<state id="s3"> + <transition target="fail"/> + <state id="s31"> + <state id="s311"> + <state id="s3111"> + <transition target="pass"/> + </state> + <state id="s3112"/> + <state id="s312"/> + <state id="s32"/> +</state> +</state> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test372.scxml b/test/w3c/xpath/test372.scxml new file mode 100644 index 0000000..3ddecb6 --- /dev/null +++ b/test/w3c/xpath/test372.scxml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that entering a final state generates done.state.parentid after executing the onentry elements. +Var1 should be set to 2 (but not 3) by the time the event is raised --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="xpath" version="1.0"> + +<datamodel> + <data id="Var1" expr="1"/> + </datamodel> + +<state id="s0" initial="s0final"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="done.state.s0" cond="$Var1/text() =2" target="pass"/> + <transition event="*" target="fail"/> + + <final id="s0final"> + <onentry> + <assign location="$Var1" expr="2"/> + </onentry> + <onexit> + <assign location="$Var1" expr="3"/> + </onexit> + </final> +</state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test375.scxml b/test/w3c/xpath/test375.scxml new file mode 100644 index 0000000..b093149 --- /dev/null +++ b/test/w3c/xpath/test375.scxml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that onentry handlers are executed in document order. event1 should be raised before event2 --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="xpath" version="1.0"> + + + +<state id="s0"> + <onentry> + <raise event="event1"/> + </onentry> + <onentry> + <raise event="event2"/> + </onentry> + + <transition event="event1" target="s1"/> + <transition event="*" target="fail"/> + +</state> + +<state id="s1"> + <transition event="event2" target="pass"/> + <transition event="*" target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test376.scxml b/test/w3c/xpath/test376.scxml new file mode 100644 index 0000000..3f6edc5 --- /dev/null +++ b/test/w3c/xpath/test376.scxml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that each onentry handler is a separate block. The <send> of event1 will cause an error but + the increment to var1 should happen anyways --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="xpath" version="1.0"> +<datamodel> + <data id="Var1" expr="1"/> + </datamodel> + +<state id="s0"> + <onentry> + <send target="baz" event="event1"/> + </onentry> + <onentry> + <assign location="$Var1" expr="$Var1 + 1"/> + </onentry> + + <transition cond="$Var1/text() =2" target="pass"/> + <transition target="fail"/> + +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test377.scxml b/test/w3c/xpath/test377.scxml new file mode 100644 index 0000000..1d2140f --- /dev/null +++ b/test/w3c/xpath/test377.scxml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that onexit handlers are executed in document order. event1 should be raised before event2 --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="xpath" version="1.0"> + + + +<state id="s0"> + <onexit> + <raise event="event1"/> + </onexit> + <onexit> + <raise event="event2"/> + </onexit> + + <transition target="s1"/> + </state> + + <state id="s1"> + + <transition event="event1" target="s2"/> + <transition event="*" target="fail"/> + +</state> + +<state id="s2"> + <transition event="event2" target="pass"/> + <transition event="*" target="fail"/> +</state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test378.scxml b/test/w3c/xpath/test378.scxml new file mode 100644 index 0000000..08fd658 --- /dev/null +++ b/test/w3c/xpath/test378.scxml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that each onexithandler is a separate block. The <send> of event1 will cause an error but + the increment to var1 should happen anyways --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1" expr="1"/> + </datamodel> + +<state id="s0"> + <onexit> + <send target="baz" event="event1"/> + </onexit> + <onexit> + <assign location="$Var1" expr="$Var1 + 1"/> + </onexit> + +<transition target="s1"/> +</state> + +<state id="s1"> + <transition cond="$Var1/text() =2" target="pass"/> + <transition target="fail"/> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test387.scxml b/test/w3c/xpath/test387.scxml new file mode 100644 index 0000000..7b59d23 --- /dev/null +++ b/test/w3c/xpath/test387.scxml @@ -0,0 +1,97 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the default history state works correctly. From initial state s3 we take a transition to s0's default +shallow history state. That should generate "enteringS011", which takes us to s4. In s4, we +transition to s1's default deep history state. We should end up in s122, generating "enteringS122". Otherwise failure.--><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s3" version="1.0" datamodel="xpath"> + + +<state id="s0" initial="s01"> + + <transition event="enteringS011" target="s4"/> + <transition event="*" target="fail"/> + + <history type="shallow" id="s0HistShallow"> + <transition target="s01"/> + </history> + <history type="deep" id="s0HistDeep"> + <transition target="s022"/> + </history> + <state id="s01" initial="s011"> + <state id="s011"> + <onentry> + <raise event="enteringS011"/> + </onentry> + </state> + <state id="s012"> + <onentry> + <raise event="enteringS012"/> + </onentry> + </state> + </state> + <state id="s02" initial="s021"> + <state id="s021"> + <onentry> + <raise event="enteringS021"/> + </onentry> + </state> + <state id="s022"> + <onentry> + <raise event="enteringS022"/> + </onentry> + </state> + </state> + +</state> + +<state id="s1" initial="s11"> + + <transition event="enteringS122" target="pass"/> + <transition event="*" target="fail"/> + + <history type="shallow" id="s1HistShallow"> + <transition target="s11"/> + </history> + <history type="deep" id="s1HistDeep"> + <transition target="s122"/> + </history> + <state id="s11" initial="s111"> + <state id="s111"> + <onentry> + <raise event="enteringS111"/> + </onentry> + </state> + <state id="s112"> + <onentry> + <raise event="enteringS112"/> + </onentry> + </state> + </state> + <state id="s12" initial="s121"> + <state id="s121"> + <onentry> + <raise event="enteringS121"/> + </onentry> + </state> + <state id="s122"> + <onentry> + <raise event="enteringS122"/> + </onentry> + </state> + </state> + +</state> + + +<state id="s3"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <transition target="s0HistShallow"/> +</state> + +<state id="s4"> + <transition target="s1HistDeep"/> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test388.scxml b/test/w3c/xpath/test388.scxml new file mode 100644 index 0000000..87e8c53 --- /dev/null +++ b/test/w3c/xpath/test388.scxml @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that history states works correctly. The counter Var1 counts how many times +we have entered s0. The initial state is s012. We then transition to s1, which transitions +to s0's deep history state. entering.s012 should be raised, otherwise failure. Then we transition +to s02, which transitions to s0's shallow history state. That should have value s01, and its initial +state is s011, so we should get entering.s011, otherwise failure.--><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" initial="s012" datamodel="xpath"> +<datamodel> + <data id="Var1" expr="0"/> + </datamodel> + +<state id="s0" initial="s01"> + <onentry> + <assign location="$Var1" expr="$Var1 + 1"/> + </onentry> + + <!-- the first time through, go to s1, setting a timer just in case something hangs --> + <transition event="entering.s012" cond="$Var1/text() =1" target="s1"> + <send event="timeout" delay="2s"/> + </transition> + + <!-- the second time, we should get entering.s012. If so, go to s2, otherwise fail --> + <transition event="entering.s012" cond="$Var1/text() =2" target="s2"/> + <transition event="entering" cond="$Var1/text() =2" target="fail"/> + + <!-- the third time we should get entering-s011. If so, pass, otherwise fail --> + <transition event="entering.s011" cond="$Var1/text() =3" target="pass"/> + <transition event="entering" cond="$Var1/text() =3" target="fail"/> + + <!-- if we timeout, the state machine is hung somewhere, so fail --> + <transition event="timeout" target="fail"/> + + <history type="shallow" id="s0HistShallow"> + <transition target="s02"/> + </history> + <history type="deep" id="s0HistDeep"> + <transition target="s022"/> + </history> + <state id="s01" initial="s011"> + <state id="s011"> + <onentry> + <raise event="entering.s011"/> + </onentry> + </state> + <state id="s012"> + <onentry> + <raise event="entering.s012"/> + </onentry> + </state> + </state> + <state id="s02" initial="s021"> + <state id="s021"> + <onentry> + <raise event="entering.s021"/> + </onentry> + </state> + <state id="s022"> + <onentry> + <raise event="entering.s022"/> + </onentry> + </state> + </state> + +</state> + + +<state id="s1"> + <transition target="s0HistDeep"/> +</state> + +<state id="s2"> + <transition target="s0HistShallow"/> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test396.scxml b/test/w3c/xpath/test396.scxml new file mode 100644 index 0000000..aa94936 --- /dev/null +++ b/test/w3c/xpath/test396.scxml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the value in _event.name matches the event name used to match against transitions --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="xpath" version="1.0"> + +<state id="s0"> + <onentry> + <raise event="foo"/> + </onentry> + + + <transition event="foo" cond="$_event/name = 'foo'" target="pass"/> + <transition event="foo" target="fail"/> + +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test399.scxml b/test/w3c/xpath/test399.scxml new file mode 100644 index 0000000..922527f --- /dev/null +++ b/test/w3c/xpath/test399.scxml @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the event name matching works correctly, including prefix matching and the fact +that the event attribute of transition may contain multiple event designators. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="2s"/> + </onentry> + + <!-- this will catch the failure case --> + <transition event="timeout" target="fail"/> + + <state id="s01"> + <onentry> + <raise event="foo"/> + </onentry> + <!-- test that an event can match against a transition with multiple descriptors --> + <transition event="foo bar" target="s02"/> + </state> + + <state id="s02"> + <onentry> + <raise event="bar"/> + </onentry> + <!-- test that an event can match the second descriptor as well --> + <transition event="foo bar" target="s03"/> + </state> + + <state id="s03"> + <onentry> + <raise event="foo.zoo"/> + </onentry> + <!-- test that a prefix descriptor matches --> + <transition event="foo bar" target="s04"/> + </state> + +<state id="s04"> + <onentry> + <raise event="foos"/> + </onentry> + <!-- test that only token prefixes match --> + <transition event="foo" target="fail"/> + <transition event="foos" target="s05"/> +</state> + +<state id="s05"> + <onentry> + <raise event="foo.zoo"/> + </onentry> + <!-- test that .* works at the end of a descriptor --> + <transition event="foo.*" target="s06"/> + </state> + + <state id="s06"> + <onentry> + <raise event="foo"/> + </onentry> + <!-- test that "*" works by itself --> + <transition event="*" target="pass"/> + </state> + +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test401.scxml b/test/w3c/xpath/test401.scxml new file mode 100644 index 0000000..7900490 --- /dev/null +++ b/test/w3c/xpath/test401.scxml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that errors go in the internal event queue. We send ourselves an external event foo, then perform +and operation that raises an error. Then check that the error event is processed first, even though +it was raised second --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <onentry> + <send event="foo"/> + <!-- assigning to a non-existent location should raise an error --> + <assign location="$Var1" expr="2"/> + </onentry> + + + <transition event="foo" target="fail"/> + <transition event="error" 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>
\ No newline at end of file diff --git a/test/w3c/xpath/test402.scxml b/test/w3c/xpath/test402.scxml new file mode 100644 index 0000000..4a822c8 --- /dev/null +++ b/test/w3c/xpath/test402.scxml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- the assertion that errors are 'like any other event' is pretty broad, but we can check that they +are pulled off the internal queue in order, and that prefix matching works on them. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0" initial="s01"> + <onentry> + <!-- catch the failure case --> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="timeout" target="fail"/> + + <state id="s01"> + <onentry> + <!-- the first internal event. The error will be the second, and event2 will be the third --> + <raise event="event1"/> + <!-- assigning to a non-existent location should raise an error --> + <assign location="$Var1" expr="2"/> + </onentry> + + <transition event="event1" target="s02"> + <raise event="event2"/> + </transition> + <transition event="*" target="fail"/> + </state> + +<state id="s02"> + <transition event="error" target="s03"/> + <transition event="*" target="fail"/> + </state> + +<state id="s03"> + <transition event="event2" target="pass"/> + <transition event="*" target="fail"/> + </state> + +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test403a.scxml b/test/w3c/xpath/test403a.scxml new file mode 100644 index 0000000..98b885e --- /dev/null +++ b/test/w3c/xpath/test403a.scxml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test one part of 'optimal enablement' meaning that of all transitions that are enabled, we chose the ones +in child states over parent states, and use document order to break ties. We have +a parent state s0 with two children, s01 and s02. In s01, we test that a) if +a transition in the child matches, we don't consider matches in the parent and b) +that if two transitions match in any state, we take the first in document order. +In s02 we test that we take a transition in the parent if there is no +matching transition in the child. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0" initial="s01"> + <onentry> + <!-- catch the failure case --> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="timeout" target="fail"/> + <transition event="event1" target="fail"/> + <transition event="event2" target="pass"/> + + <state id="s01"> + <onentry> + <!-- this should be caught by the first transition in this state, taking us to S02 --> + <raise event="event1"/> + </onentry> + + <transition event="event1" target="s02"/> + <transition event="*" target="fail"/> + </state> + +<state id="s02"> + <onentry> + <!-- since the local transition has a cond that evaluates to false this should be caught by a + transition in the parent state, taking us to pass --> + <raise event="event2"/> + </onentry> + <transition event="event1" target="fail"/> + <transition event="event2" cond="0>1" target="fail"/> + </state> + +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test403b.scxml b/test/w3c/xpath/test403b.scxml new file mode 100644 index 0000000..657e6c6 --- /dev/null +++ b/test/w3c/xpath/test403b.scxml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that 'optimally enabled set' really is a set, specifically that if a transition is optimally enabled in +two different states, it is taken only once. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="Var1" expr="0"/> + </datamodel> + +<state id="s0" initial="p0"> + <!-- this transition should never be taken because a transition in a lower state should + always be selected --> + <transition event="event1"> + <assign location="$Var1" expr="$Var1 + 1"/> + </transition> + + + + <parallel id="p0"> + + <onentry> + <raise event="event1"/> + <raise event="event2"/> + </onentry> + + <!-- this transition will be selected by both states p0s1 and p0s2, but should be executed only once --> + <transition event="event1"> + <assign location="$Var1" expr="$Var1 + 1"/> + </transition> + + <state id="p0s1"> + <transition event="event2" cond="$Var1/text() =1" target="pass"/> + <transition event="event2" target="fail"/> + </state> + + <state id="p0s2"/> + +</parallel> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test403c.scxml b/test/w3c/xpath/test403c.scxml new file mode 100644 index 0000000..4c7f154 --- /dev/null +++ b/test/w3c/xpath/test403c.scxml @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test 'optimally enabled set', specifically that preemption works correctly --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="Var1" expr="0"/> + </datamodel> + +<state id="s0" initial="p0"> + <onentry> + <raise event="event1"/> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="event2" target="fail"/> + <transition event="timeout" target="fail"/> + + <parallel id="p0"> + + <state id="p0s1"> + <transition event="event1"/> + <transition event="event2"/> + </state> + + <state id="p0s2"> + <transition event="event1" target="p0s1"> + <raise event="event2"/> + </transition> + + </state> + + <state id="p0s3"> + <!-- this transition should be blocked by the one in p0s2--> + <transition event="event1" target="fail"/> + <!-- this transition will preempt the one that p0s2 inherits + from an ancestor --> + <transition event="event2" target="s1"/> + + </state> + +<state id="p0s4"> + <!-- this transition never gets preempted, should fire twice --> + <transition event="*"> + <assign location="$Var1" expr="$Var1 + 1"/> + </transition> + </state> + +</parallel> +</state> + +<state id="s1"> + <transition cond="$Var1/text() =2" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test404.scxml b/test/w3c/xpath/test404.scxml new file mode 100644 index 0000000..f27c0ae --- /dev/null +++ b/test/w3c/xpath/test404.scxml @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that states are exited in exit order (children before parents with reverse doc order used to break ties + before the executable content in the transitions. event1, event2, event3, event4 should be raised in that + order when s01p is exited --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0" initial="s01p"> + + + +<parallel id="s01p"> + <onexit> + <!-- this should be the 3rd event raised --> + <raise event="event3"/> + </onexit> + <transition target="s02"> + <!-- this should be the fourth event raised --> + <raise event="event4"/> + </transition> + + <state id="s01p1"> + <onexit> + <!-- this should be the second event raised --> + <raise event="event2"/> + </onexit> + </state> + + <state id="s01p2"> + <!-- this should be the first event raised --> + <onexit> + <raise event="event1"/> + </onexit> + </state> + </parallel> + + <state id="s02"> + <transition event="event1" target="s03"/> + <transition event="*" target="fail"/> + </state> + + <state id="s03"> + <transition event="event2" target="s04"/> + <transition event="*" target="fail"/> + </state> + + <state id="s04"> + <transition event="event3" target="s05"/> + <transition event="*" target="fail"/> + </state> + + <state id="s05"> + <transition event="event4" target="pass"/> + <transition event="*" target="fail"/> + </state> + + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test405.scxml b/test/w3c/xpath/test405.scxml new file mode 100644 index 0000000..16e30ca --- /dev/null +++ b/test/w3c/xpath/test405.scxml @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the executable content in the transitions is executed in document order after +the states are exited. event1, event2, event3, event4 should be raised in that order when the +state machine is entered --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + +<state id="s0" initial="s01p"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="timeout" target="fail"/> + +<parallel id="s01p"> + <transition event="event1" target="s02"/> + + + <state id="s01p1" initial="s01p11"> + <state id="s01p11"> + <onexit> + <!-- this should be the second event raised --> + <raise event="event2"/> + </onexit> + <transition target="s01p12"> + <!-- this should be the third event raised --> + <raise event="event3"/> + </transition> + </state> + <state id="s01p12"/> + </state> <!-- end s01p1 --> + + <state id="s01p2" initial="s01p21"> + <state id="s01p21"> + <onexit> + <!-- this should be the first event raised --> + <raise event="event1"/> + </onexit> + <transition target="s01p22"> + <!-- this should be the fourth event raised --> + <raise event="event4"/> + </transition> + </state> + <state id="s01p22"/> + + </state> <!-- end s01p2 --> + </parallel> + + + <state id="s02"> + <transition event="event2" target="s03"/> + <transition event="*" target="fail"/> + </state> + + <state id="s03"> + <transition event="event3" target="s04"/> + <transition event="*" target="fail"/> + </state> + + + <state id="s04"> + <transition event="event4" target="pass"/> + <transition event="*" target="fail"/> + </state> + + </state> <!-- end s01 --> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test406.scxml b/test/w3c/xpath/test406.scxml new file mode 100644 index 0000000..3466313 --- /dev/null +++ b/test/w3c/xpath/test406.scxml @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- Test that states are entered in entry order (parents before children with document order used to break ties) +after the executable content in the transition is executed. event1, event2, event3, event4 should be raised in that +order when the transition in s01 is taken --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" initial="s0" datamodel="xpath"> + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="timeout" target="fail"/> + + <state id="s01"> + <transition target="s0p2"> + <!-- this should be the first event raised --> + <raise event="event1"/> + </transition> + </state> + +<parallel id="s0p2"> + + <transition event="event1" target="s03"/> + + <state id="s01p21"> + <onentry> + <!-- third event --> + <raise event="event3"/> + </onentry> + </state> + + <state id="s01p22"> + <onentry> + <!-- the fourth event --> + <raise event="event4"/> + </onentry> + </state> + + <onentry> + <!-- this should be the second event raised --> + <raise event="event2"/> + </onentry> + </parallel> + + + <state id="s03"> + <transition event="event2" target="s04"/> + <transition event="*" target="fail"/> + </state> + + <state id="s04"> + <transition event="event3" target="s05"/> + <transition event="*" target="fail"/> + </state> + + + <state id="s05"> + <transition event="event4" target="pass"/> + <transition event="*" target="fail"/> + </state> + + </state> <!-- end s0 --> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test407.scxml b/test/w3c/xpath/test407.scxml new file mode 100644 index 0000000..c96630c --- /dev/null +++ b/test/w3c/xpath/test407.scxml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- a simple test that onexit handlers work. var1 should be incremented when we leave s0 --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1" expr="0"/> + </datamodel> + +<state id="s0"> + <onexit> + <assign location="$Var1" expr="$Var1 + 1"/> + </onexit> + <transition target="s1"/> +</state> + +<state id="s1"> + <transition cond="$Var1/text() =1" target="pass"/> + <transition target="fail"/> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test409.scxml b/test/w3c/xpath/test409.scxml new file mode 100644 index 0000000..2d5a63d --- /dev/null +++ b/test/w3c/xpath/test409.scxml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that states are removed from the active states list as they are exited. When s01's onexit handler +fires, s011 should not be on the active state list, so in(S011) should be false, and event1 should not +be raised. Therefore the timeout should fire to indicate success --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + + <transition event="timeout" target="pass"/> + <transition event="event1" target="fail"/> + + <state id="s01" initial="s011"> + <onexit> + <if cond="In('s011')"> + <raise event="event1"/> + </if> + </onexit> + + <state id="s011"> + <transition target="s02"/> + </state> + </state> <!-- end s01 --> + +<state id="s02"/> + +</state> <!-- end s0 --> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test411.scxml b/test/w3c/xpath/test411.scxml new file mode 100644 index 0000000..60a8460 --- /dev/null +++ b/test/w3c/xpath/test411.scxml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that states are added to the active states list as they are entered and before onentry handlers +are executed. When s0's onentry handler fires we should not be in s01. But when s01's onentry handler +fires, we should be in s01. Therefore event1 should not fire, but event2 should. Either event1 or +timeout also indicates failure --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="1s"/> + <if cond="In('s01')"> + <raise event="event1"/> + </if> + </onentry> + + <transition event="timeout" target="fail"/> + <transition event="event1" target="fail"/> + <transition event="event2" target="pass"/> + + <state id="s01"> + <onentry> + <if cond="In('s01')"> + <raise event="event2"/> + </if> + </onentry> + </state> + +</state> <!-- end s0 --> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test412.scxml b/test/w3c/xpath/test412.scxml new file mode 100644 index 0000000..1895c9f --- /dev/null +++ b/test/w3c/xpath/test412.scxml @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that executable content in the <initial> transition executes after the onentry handler on the state +and before the onentry handler of the child states. Event1, event2, and event3 should occur in that order. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0" initial="s01"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + + <transition event="timeout" target="fail"/> + <transition event="event1" target="fail"/> + <transition event="event2" target="pass"/> + + <state id="s01"> + <onentry> + <raise event="event1"/> + </onentry> + <initial> + <transition target="s011"> + <raise event="event2"/> + </transition> + </initial> + + <state id="s011"> + <onentry> + <raise event="event3"/> + </onentry> + <transition target="s02"/> + </state> + </state> + +<state id="s02"> + <transition event="event1" target="s03"/> + <transition event="*" target="fail"/> + </state> + +<state id="s03"> + <transition event="event2" target="s04"/> + <transition event="*" target="fail"/> + </state> + +<state id="s04"> + <transition event="event3" target="pass"/> + <transition event="*" target="fail"/> + </state> + +</state> <!-- end s0 --> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test413.scxml b/test/w3c/xpath/test413.scxml new file mode 100644 index 0000000..819dfb5 --- /dev/null +++ b/test/w3c/xpath/test413.scxml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the state machine is put into the configuration specified by the initial element, without regard +to any other defaults. we should start off in s2p111 and s2p122. the atomic +states we should not enter all have immediate transitions to failure in them --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s2p112 s2p122" version="1.0" datamodel="xpath"> + + <state id="s1"> + <transition target="fail"/> + </state> + +<state id="s2" initial="s2p1"> + +<parallel id="s2p1"> + <!-- this transition will be triggered only if we end up in an illegal configuration where we're in + either s2p112 or s2p122, but not both of them --> + <transition target="fail"/> + + <state id="s2p11" initial="s2p111"> + <state id="s2p111"> + <transition target="fail"/> + </state> + + <state id="s2p112"> + <transition cond="In('s2p122')" target="pass"/> + </state> + + </state> <!-- end s2p11 --> + + <state id="s2p12" initial="s2p121"> + <state id="s2p121"> + <transition target="fail"/> + </state> + + <state id="s2p122"> + <transition cond="In('s2p112')" target="pass"/> + </state> + </state> + +</parallel> + +</state> <!-- end s2 --> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test415.scxml b/test/w3c/xpath/test415.scxml new file mode 100644 index 0000000..2da0bef --- /dev/null +++ b/test/w3c/xpath/test415.scxml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- Test that the state machine halts when it enters a top-level final state. Since + the initial state is a final state, this machine should halt immediately without + processing "event1" which is raised in the final state's on-entry handler. This + is a manual test since there is no platform-independent way to test that event1 + is not processed --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="final" version="1.0" datamodel="xpath"> + <final id="final"> + <onentry> + <raise event="event1"/> + </onentry> + </final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test416.scxml b/test/w3c/xpath/test416.scxml new file mode 100644 index 0000000..dfa60fe --- /dev/null +++ b/test/w3c/xpath/test416.scxml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the done.state.id gets generated when we enter the final state of a compound state --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" initial="s1" datamodel="xpath"> + + <state id="s1" initial="s11"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="timeout" target="fail"/> + + <state id="s11" initial="s111"> + <transition event="done.state.s11" target="pass"/> + <state id="s111"> + <transition target="s11final"/> + </state> + <final id="s11final"/> + </state> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test417.scxml b/test/w3c/xpath/test417.scxml new file mode 100644 index 0000000..d8e5715 --- /dev/null +++ b/test/w3c/xpath/test417.scxml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that we get the done.state.id event when all of a +parallel elements children enter final states. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" initial="s1" datamodel="xpath"> + + <state id="s1" initial="s1p1"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="timeout" target="fail"/> + + <parallel id="s1p1"> + <transition event="done.state.s1p1" target="pass"/> + + <state id="s1p11" initial="s1p111"> + <state id="s1p111"> + <transition target="s1p11final"/> + </state> + <final id="s1p11final"/> + </state> + + <state id="s1p12" initial="s1p121"> + <state id="s1p121"> + <transition target="s1p12final"/> + </state> + <final id="s1p12final"/> + </state> + + </parallel> +</state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test419.scxml b/test/w3c/xpath/test419.scxml new file mode 100644 index 0000000..fade57d --- /dev/null +++ b/test/w3c/xpath/test419.scxml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that eventless transitions take precedence over event-driven ones --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" initial="s1" datamodel="xpath"> + + <state id="s1"> + <onentry> + <raise event="internalEvent"/> + <send event="externalEvent"/> + </onentry> + + <transition event="*" target="fail"/> + <transition 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>
\ No newline at end of file diff --git a/test/w3c/xpath/test421.scxml b/test/w3c/xpath/test421.scxml new file mode 100644 index 0000000..a73a11a --- /dev/null +++ b/test/w3c/xpath/test421.scxml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that internal events take priority over external ones, and that the processor +keeps pulling off internal events until it finds one that triggers a transition --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" initial="s1" datamodel="xpath"> + + <state id="s1" initial="s11"> + <onentry> + <send event="externalEvent"/> + <raise event="internalEvent1"/> + <raise event="internalEvent2"/> + <raise event="internalEvent3"/> + <raise event="internalEvent4"/> + </onentry> + + <transition event="externalEvent" target="fail"/> + + <state id="s11"> + <transition event="internalEvent3" target="s12"/> + </state> + + <state id="s12"> + <transition event="internalEvent4" target="pass"/> + </state> + +</state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test422.scxml b/test/w3c/xpath/test422.scxml new file mode 100644 index 0000000..f62098d --- /dev/null +++ b/test/w3c/xpath/test422.scxml @@ -0,0 +1,75 @@ +<?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="xpath"> +<datamodel> + <data id="Var1" expr="0"/> + </datamodel> + <state id="s1" initial="s11"> + <onentry> + <send event="timeout" delay="5s"/> + </onentry> + <transition event="invokeS1 invokeS12"> + <assign location="$Var1" expr="$Var1 + 1"/> + </transition> + <transition event="invokeS11" target="fail"/> + + <transition event="timeout" cond="$Var1/text() =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="xpath"> + <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="xpath"> + <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="xpath"> + <state id="sub2"> + <onentry> + <send target="#_parent" event="invokeS12"/> + </onentry> + <transition target="subFinal2"/> + </state> + <final id="subFinal2"/> + </scxml> + </content> + </invoke> + </state> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test423.scxml b/test/w3c/xpath/test423.scxml new file mode 100644 index 0000000..7726963 --- /dev/null +++ b/test/w3c/xpath/test423.scxml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that we keep pulling external events off the queue till we find one that matches a transition. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + + <state id="s0"> + <onentry> + <send event="externalEvent1"/> + <send event="externalEvent2" delay="1s"/> + <raise event="internalEvent"/> + </onentry> + <!-- in this state we should process only internalEvent --> + <transition event="internalEvent" target="s1"/> + <transition event="*" target="fail"/> + </state> + + <state id="s1"> + <!-- in this state we ignore externalEvent1 and wait for externalEvent2 --> + <transition event="externalEvent2" target="pass"/> + <transition event="internalEvent" target="fail"/> + </state> + + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test436.scxml b/test/w3c/xpath/test436.scxml new file mode 100644 index 0000000..d8b2ca2 --- /dev/null +++ b/test/w3c/xpath/test436.scxml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that in() predicate works in null data model --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="null" version="1.0" initial="p"> + + + <parallel id="p"> + + <state id="ps0"> + <transition cond="In('s1')" target="fail"/> + <transition cond="In('ps1')" target="pass"/> + <transition target="fail"/> + </state> + + <state id="ps1"/> + </parallel> + + <state id="s1"/> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test444.scxml b/test/w3c/xpath/test444.scxml new file mode 100644 index 0000000..c689674 --- /dev/null +++ b/test/w3c/xpath/test444.scxml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that <data> creates a new ecmascript variable. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="ecmascript" version="1.0"> + <datamodel> + <data id="var1" expr="1"/> + </datamodel> + +<state id="s0"> +<!-- test that var1 can be used as an ecmascript variable --> + <transition cond="++var1==2" target="pass"/> + <transition target="fail"/> +</state> + + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test445.scxml b/test/w3c/xpath/test445.scxml new file mode 100644 index 0000000..f1ae24b --- /dev/null +++ b/test/w3c/xpath/test445.scxml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that ecmascript objects defined by <data> have value undefined if <data> does not assign a value --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="ecmascript" version="1.0"> + <datamodel> + <data id="var1"/> + </datamodel> + +<state id="s0"> + + <transition cond="var1==undefined" target="pass"/> + <transition target="fail"/> +</state> + + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test448.scxml b/test/w3c/xpath/test448.scxml new file mode 100644 index 0000000..adbc121 --- /dev/null +++ b/test/w3c/xpath/test448.scxml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that all ecmascript objects are placed in a single global scope --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="ecmascript" version="1.0"> + + +<state id="s0"> +<!-- test that a parent state can access a variable defined in a child --> + <transition cond="var1==1" target="s1"/> + <transition target="fail"/> + <state id="s01"> + <datamodel> + <data id="var1" expr="1"/> + </datamodel> + </state> + </state> + <state id="s1" initial="s01p"> + <parallel id="s01p"> + <state id="s01p1"> + <!-- test that we can access a variable defined in a parallel sibling state --> + <transition cond="var2==1" target="pass"/> + <transition target="fail"/> + </state> + <state id="s01p2"> + <datamodel> + <data id="var2" expr="1"/> + </datamodel> + </state> + </parallel> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test449.scxml b/test/w3c/xpath/test449.scxml new file mode 100644 index 0000000..d06cc9a --- /dev/null +++ b/test/w3c/xpath/test449.scxml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that ecmascript objects are converted to booleans inside cond --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="ecmascript" version="1.0"> + + +<state id="s0"> + <transition cond="'foo'" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test451.scxml b/test/w3c/xpath/test451.scxml new file mode 100644 index 0000000..e939ded --- /dev/null +++ b/test/w3c/xpath/test451.scxml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- simple test of the in() predicate --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="ecmascript" initial="p"> + + + <parallel id="p"> + + <state id="s0"> + <transition cond="In('s1')" target="pass"/> + <transition target="fail"/> + </state> + + <state id="s1"/> + </parallel> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test452.scxml b/test/w3c/xpath/test452.scxml new file mode 100644 index 0000000..4f38ca7 --- /dev/null +++ b/test/w3c/xpath/test452.scxml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that we can assign to any location in the datamodel. In this case, we just test that we can assign +to a substructure (not the top level variable). This may not be the most idiomatic way to write the test --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="ecmascript" version="1.0"> + <datamodel> + <data id="foo" expr="0"/> + </datamodel> + <script> + function testobject() { + this.bar = 0;} + </script> +<state id="s0"> + <onentry> + <assign location="foo" expr="new testobject();"/> +<!-- try to assign to foo's bar property --> + <assign location="foo.bar" expr="1"/> + <raise event="event1"/> + </onentry> +<!-- test that we have assigned to foo's bar property --> + <transition event="event1" cond="foo.bar == 1" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test453.scxml b/test/w3c/xpath/test453.scxml new file mode 100644 index 0000000..33b904d --- /dev/null +++ b/test/w3c/xpath/test453.scxml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that we can use any ecmascript expression as a value expression. +In this case, we just test that we can assign +a function to a variable and then call it. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="ecmascript" version="1.0"> + <datamodel> + <data id="var1" expr="function(invar) {return invar + 1;}"/> + </datamodel> + +<state id="s0"> + <onentry> + <raise event="event1"/> + </onentry> +<!-- test that we can call the function --> + <transition event="event1" cond="var1(2) == 3" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test456.scxml b/test/w3c/xpath/test456.scxml new file mode 100644 index 0000000..2aebab0 --- /dev/null +++ b/test/w3c/xpath/test456.scxml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we can't test that _any_ ecmascript is valid inside <script>, so we +just run a simple one and check that it can update the data model. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> +<datamodel> + <data id="Var1" expr="0"/> + </datamodel> + + <state id="s0"> + <onentry> + <script> + Var1+=1 + </script> + </onentry> + <transition cond="$Var1/text() =1" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test457.scxml b/test/w3c/xpath/test457.scxml new file mode 100644 index 0000000..86cf156 --- /dev/null +++ b/test/w3c/xpath/test457.scxml @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that an the legal iterable collections are arrays, namely objects that satisfy instanceof(Array) in ECMAScript. + the legal values for the 'item' attribute on foreach are legal ECMAScript variable names.. --><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"> +<datamodel> + <data id="Var1" expr="0"/> + <data id="Var2"/> + <data id="Var3"/> + <data id="Var4" expr="7"/> + <data id="Var5" expr="[1,2,3]"/> + <data id="Var6"/> + </datamodel> + + <state id="s0"> + <onentry> +<!-- invalid array, legal item --> + <foreach item="Var2" index="Var3" array="Var4"> + <assign location="Var1" expr="Var1 + 1"/> + </foreach> + <raise event="foo"/> + </onentry> + <transition event="error.execution" target="s1"/> + <transition event="*" target="fail"/> + </state> + + <state id="s1"> + <onentry> +<!-- illegal item, legal array --> + <foreach item="'continue'" index="Var3" array="Var5"> + <assign location="Var1" expr="Var1 + 1"/> + </foreach> + <raise event="bar"/> + </onentry> + <transition event="error.execution" target="s2"/> + <transition event="bar" target="fail"/> + </state> + +<state id="s2"> + <!-- check that var1 has its original value (so executable content never got executed --> + <transition cond="Var1==0" target="s3"/> + <transition target="fail"/> + </state> + + +<!-- finally check that a legal array works properly --> +<state id="s3"> + <onentry> + <assign location="Var6" expr="0"/> + <foreach item="Var2" array="Var5"> + <assign location="Var6" expr="Var6 + Var2"/> + </foreach> + </onentry> + <transition cond="Var6==6" target="pass"/> + <transition target="fail"/> + </state> + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test460.scxml b/test/w3c/xpath/test460.scxml new file mode 100644 index 0000000..8ba3e5e --- /dev/null +++ b/test/w3c/xpath/test460.scxml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that <foreach> does a shallow copy, so that modifying the array does not change +the iteration behavior. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="ecmascript" version="1.0"> + <datamodel> + <data id="Var1" expr="[1,2,3]"/> + <data id="Var2" expr="0"/> <!-- counts the number of iterations --> + </datamodel> + +<state id="s0"> + <onentry> + <foreach item="Var3" array="Var1"> + <assign location="Var1" expr="[].concat(Var1, [4])"/> + <assign location="Var2" expr="Var2 + 1"/> + </foreach> + </onentry> + + <transition cond="Var2==3" target="pass"/> + <transition target="fail"/> +</state> + + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test463.scxml b/test/w3c/xpath/test463.scxml new file mode 100644 index 0000000..4f32b84 --- /dev/null +++ b/test/w3c/xpath/test463.scxml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the <data> tag creates an element in the XML datamodel with the correct name and id attr +and binds an XPath variable to it --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="foo" expr="2"/> + </datamodel> + +<state id="s0"> + + + <transition cond="local-name($foo)='data'and $foo/@id ='foo'" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test464.scxml b/test/w3c/xpath/test464.scxml new file mode 100644 index 0000000..bd640f2 --- /dev/null +++ b/test/w3c/xpath/test464.scxml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that an unassigned variable creates an empty <data> element --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="foo"/> + </datamodel> + +<state id="s0"> + + + <transition cond="count($foo) = 1 and count($foo/*) = 0" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test465.scxml b/test/w3c/xpath/test465.scxml new file mode 100644 index 0000000..a91bb06 --- /dev/null +++ b/test/w3c/xpath/test465.scxml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that all xpath variables are in a single global scope--><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="foo" expr="2"/> + </datamodel> + +<state id="s0"> + <transition cond="count($foo) = 1 and count($bar) = 1" target="s1"/> + <transition target="fail"/> + </state> + + +<state id="s1"> + <datamodel> + <data id="bar" expr="1"/> + </datamodel> + <transition 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>
\ No newline at end of file diff --git a/test/w3c/xpath/test466.scxml b/test/w3c/xpath/test466.scxml new file mode 100644 index 0000000..1431fab --- /dev/null +++ b/test/w3c/xpath/test466.scxml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that xpath expressions are converted to boolean when used as conditional expressions--><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="foo" expr="2"/> + </datamodel> + +<state id="s0"> + <transition cond="$foo" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test467.scxml b/test/w3c/xpath/test467.scxml new file mode 100644 index 0000000..130b7bc --- /dev/null +++ b/test/w3c/xpath/test467.scxml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that in() is available --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <transition cond="In('s0')" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test468.scxml b/test/w3c/xpath/test468.scxml new file mode 100644 index 0000000..3b6902d --- /dev/null +++ b/test/w3c/xpath/test468.scxml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that XPath expressions can be used as location expressions. + This example is taken from the spec --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cities"> + <list xmlns=""> + <city id="nyc" count="0">New York</city> + <city id="bos" count="0">Boston</city> + </list> + </data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cities/list/city[@id='nyc']/@count" expr="1"/> + </onentry> + <transition cond="$cities/list/city[@id='nyc']/@count = 1" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test469.scxml b/test/w3c/xpath/test469.scxml new file mode 100644 index 0000000..02fe476 --- /dev/null +++ b/test/w3c/xpath/test469.scxml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that XPath expressions can be used as value expressions. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="copyOfEventData"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="event1"> + <param name="param1" expr="1"/> + </send> + </onentry> + <transition event="event1" target="s1"> + <assign location="$copyOfEventData" expr="$_event/data"/> + </transition> + </state> + +<state id="s1"> + <transition cond="$copyOfEventData/data/data[@id='param1'] =1" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test470.scxml b/test/w3c/xpath/test470.scxml new file mode 100644 index 0000000..3c26bb1 --- /dev/null +++ b/test/w3c/xpath/test470.scxml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the processor makes a deep copy of a node set when assigning. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="var1"> + <foo xmlns=""> + <bar>2</bar> + </foo> + </data> + <data id="var2"/> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$var2" expr="$var1/foo"/> + <assign location="$var1/foo/bar" expr="3"/> + </onentry> + <transition cond="$var2/foo/bar=2" target="pass"/> + <transition target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test473.scxml b/test/w3c/xpath/test473.scxml new file mode 100644 index 0000000..4a57129 --- /dev/null +++ b/test/w3c/xpath/test473.scxml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that 'replacechildren' in <assign> replaces all children with the new value. + This example is taken from the doc --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cart/myCart/books/book[1]"> + <bookinfo xmlns=""> + <isdn>12334455</isdn> + <author>some author</author> + </bookinfo> +</assign> + </onentry> + <transition cond="$cart/myCart/books/book[1]/bookinfo/isdn/text() = '12334455' and not($cart/myCart/books/book[1]/title)" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test474.scxml b/test/w3c/xpath/test474.scxml new file mode 100644 index 0000000..decad75 --- /dev/null +++ b/test/w3c/xpath/test474.scxml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that 'firstchild' in <assign> inserts the new value before the other children. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cart/myCart/books/book[1]" type="firstchild"> + <bookinfo xmlns=""> + <isdn>12334455</isdn> + <author>some author</author> + </bookinfo> +</assign> + </onentry> + <transition cond="$cart/myCart/books/book[1]/*[1]/isdn/text() = '12334455' and $cart/myCart/books/book[1]/*[2]/text() = 'The Zen Mind'" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test475.scxml b/test/w3c/xpath/test475.scxml new file mode 100644 index 0000000..0f9cdfe --- /dev/null +++ b/test/w3c/xpath/test475.scxml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that 'lastchild' in <assign> inserts the new value after the other children. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cart/myCart/books/book[1]" type="lastchild"> + <bookinfo xmlns=""> + <isdn>12334455</isdn> + <author>some author</author> + </bookinfo> +</assign> + </onentry> + <transition cond="$cart/myCart/books/book[1]/*[2]/isdn/text() = '12334455' and $cart/myCart/books/book[1]/*[1]/text() = 'The Zen Mind'" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test476.scxml b/test/w3c/xpath/test476.scxml new file mode 100644 index 0000000..d3fe8e8 --- /dev/null +++ b/test/w3c/xpath/test476.scxml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that 'nextsibling' in <assign> inserts the new value after the location. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cart/myCart/books/book[1]/title" type="nextsibling"> + <bookinfo xmlns=""> + <isdn>12334455</isdn> + <author>some author</author> + </bookinfo> +</assign> + </onentry> + <transition cond="$cart/myCart/books/book[1]/*[2]/isdn/text() = '12334455' and $cart/myCart/books/book[1]/*[1]/text() = 'The Zen Mind'" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test477.scxml b/test/w3c/xpath/test477.scxml new file mode 100644 index 0000000..1726866 --- /dev/null +++ b/test/w3c/xpath/test477.scxml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that 'previoussibling' in <assign> inserts the new value before the location. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cart/myCart/books/book[1]/title" type="previoussibling"> + <bookinfo xmlns=""> + <isdn>12334455</isdn> + <author>some author</author> + </bookinfo> +</assign> + </onentry> + <transition cond="$cart/myCart/books/book[1]/*[1]/isdn/text() = '12334455' and $cart/myCart/books/book[1]/*[2]/text() = 'The Zen Mind'" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test478.scxml b/test/w3c/xpath/test478.scxml new file mode 100644 index 0000000..9821608 --- /dev/null +++ b/test/w3c/xpath/test478.scxml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that 'replace' in <assign> replaces the value at the location. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cart/myCart/books/book[2]" type="replace"> + <cd xmlns=""> + <title>This is not a book</title> + </cd> +</assign> + </onentry> + + <transition cond="$cart/myCart/books/cd/title = 'This is not a book'" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test479.scxml b/test/w3c/xpath/test479.scxml new file mode 100644 index 0000000..3d5b1ac --- /dev/null +++ b/test/w3c/xpath/test479.scxml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that 'delete' in <assign> deletes the value at the location. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cart/myCart/cds" type="delete"> + <cd xmlns=""> + <title>This is not a book</title> + </cd> +</assign> + </onentry> + + <transition cond="not($cart/myCart/cds)" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test480.scxml b/test/w3c/xpath/test480.scxml new file mode 100644 index 0000000..0fde260 --- /dev/null +++ b/test/w3c/xpath/test480.scxml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that 'addattr' in <assign> adds an attribute to the specified node. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cart/myCart/books/book[1]" type="addattribute" attr="author" expr="'somebody'"/> + </onentry> + + <transition cond="$cart/myCart/books/book[1]/@author = 'somebody'" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test481.scxml b/test/w3c/xpath/test481.scxml new file mode 100644 index 0000000..a0505f6 --- /dev/null +++ b/test/w3c/xpath/test481.scxml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that illegal assignments fail and have no side effects. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="3s"/> + <assign location="$cart/myCart/cds/cd/@name"> + <foo> + <bar/> + </foo> +</assign> + </onentry> + + <transition event="error.execution" cond="$cart/myCart/cds/cd/@name = 'Something'" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test482.scxml b/test/w3c/xpath/test482.scxml new file mode 100644 index 0000000..00eb3fe --- /dev/null +++ b/test/w3c/xpath/test482.scxml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that system vars are created and bound to XPath variables --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" name="scxmltest" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <onentry> + <!-- event isn't bound until an event is raised --> + <raise event="someevent"/> + </onentry> + <transition event="*" cond="local-name($_event) = 'data' and local-name($_sessionid) = 'data' and local-name($_name) = 'data' and local-name($_ioprocessors) = 'data'" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test483.scxml b/test/w3c/xpath/test483.scxml new file mode 100644 index 0000000..0a1b236 --- /dev/null +++ b/test/w3c/xpath/test483.scxml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that foreach works correctly, iterating over node set in document order. + This tests assertions 483-485 --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" name="scxmltest" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="var1"> + <nodes xmlns=""> + <node/> + <node/> + <node/> + </nodes> + </data> + </datamodel> + +<state id="s0"> + <onentry> + <foreach array="$var1/nodes/node" item="item" index="pos"> + <assign location="$item" type="addattribute" attr="position" expr="$pos"/> + </foreach> + </onentry> + + <transition cond="$var1/nodes/node[1]/@position = 1 and $var1/nodes/node[2]/@position = 2 and $var1/nodes/node[3]/@position = 3" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test487.scxml b/test/w3c/xpath/test487.scxml new file mode 100644 index 0000000..9e6c441 --- /dev/null +++ b/test/w3c/xpath/test487.scxml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test illegal assignment. error.execution should be raised. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> +<datamodel> + <data id="Var1" expr="!1"/> + </datamodel> + +<state id="s0"> + <onentry> + <raise event="event"/> + </onentry> + + <transition event="error.execution" target="pass"/> + <transition event="*" target="fail"/> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test488.scxml b/test/w3c/xpath/test488.scxml new file mode 100644 index 0000000..9da2e92 --- /dev/null +++ b/test/w3c/xpath/test488.scxml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that illegal expr in <param> produces error.execution and empty event.data --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="xpath" initial="s0"> + + + <state id="s0" initial="s01"> + <!-- we should get the error before the done event --> + <transition event="error.execution" target="s1"/> + <transition event="done.state.s0" target="fail"/> + + <transition event="done.state.s0" target="fail"> + </transition> + + <state id="s01"> + <transition target="s02"/> + </state> + <final id="s02"> + <donedata> + <param expr="!1" name="someParam"/> + </donedata> + </final> + </state> + + + <!-- if we get here, we received the error event. Now check that the done + event has empty event.data --> + + <state id="s1"> + <transition event="done.state.s0" cond="not($_event/data/*)" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test495.scxml b/test/w3c/xpath/test495.scxml new file mode 100644 index 0000000..c244266 --- /dev/null +++ b/test/w3c/xpath/test495.scxml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the scxml event i/o processor puts events in the correct queues.--><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <onentry> + <!-- default target is external queue --> + <send event="event1" type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor"/> + <send event="event2" target="#_internal" type="http://www.w3.org/TR/scxml/#SCXMLEventProcessor"/> + </onentry> + <!-- we should get the internal event first --> + <transition event="event1" target="fail"/> + <transition event="event2" target="s1"/> + </state> + +<state id="s1"> + <transition event="event1" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test500.scxml b/test/w3c/xpath/test500.scxml new file mode 100644 index 0000000..51252eb --- /dev/null +++ b/test/w3c/xpath/test500.scxml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that location field is found inside entry for SCXML Event I/O processor --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1" expr="$_ioprocessors/processor[@name="http://www.w3.org/TR/scxml/#SCXMLProcessor"]/location/text()"/> + </datamodel> + +<state id="s0"> + <transition cond="$Var1/* or $Var1/text()" target="pass"/> + <transition target="fail"/> + + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test501.scxml b/test/w3c/xpath/test501.scxml new file mode 100644 index 0000000..740f81b --- /dev/null +++ b/test/w3c/xpath/test501.scxml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the location entry for the SCXML Event I/O processor can be used as the target for an event --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1" expr="$_ioprocessors/processor[@name="http://www.w3.org/TR/scxml/#SCXMLProcessor"]/location/text()"/> + </datamodel> + +<state id="s0"> + <onentry> + <send targetexpr="$Var1" event="foo"/> + <send event="timeout" delay="2s"/> + </onentry> + <transition event="foo" target="pass"/> + <transition event="*" target="fail"/> + + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test503.scxml b/test/w3c/xpath/test503.scxml new file mode 100644 index 0000000..addd166 --- /dev/null +++ b/test/w3c/xpath/test503.scxml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that a targetless transition does not exit and reenter its source state --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s1" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1" expr="0"/> <!-- how often we have exited s2 --> + <data id="Var2" expr="0"/> <!-- how often the targetless transition in s2 has been executed --> + </datamodel> + + <state id="s1"> + <onentry> + <raise event="foo"/> + <raise event="bar"/> + </onentry> + <transition target="s2"/> + </state> + + <state id="s2"> + <onexit> + <assign location="$Var1" expr="$Var1 + 1"/> + </onexit> + <transition event="foo"> + <assign location="$Var2" expr="$Var2 + 1"/> + </transition> + <!-- make sure the transition on foo was actually taken --> + <transition event="bar" cond="$Var2/text() =1" target="s3"/> + <transition event="bar" target="fail"/> + </state> + + <state id="s3"> + <!-- make sure that s2 was exited only once --> + <transition cond="$Var1/text() =1" target="pass"/> + <transition target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test504.scxml b/test/w3c/xpath/test504.scxml new file mode 100644 index 0000000..08b7a2e --- /dev/null +++ b/test/w3c/xpath/test504.scxml @@ -0,0 +1,75 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that an external transition exits all states up the the LCCA --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s1" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1" expr="0"/> <!-- how often we have exited p --> + <data id="Var2" expr="0"/> <!-- how often we have exited ps1 --> + <data id="Var3" expr="0"/> <!-- how often we have exited ps2 --> + <data id="Var4" expr="0"/> <!-- how often the transition for foo has been taken --> + <data id="Var5" expr="0"/> <!-- how often we have exited s2 --> + </datamodel> + + <state id="s1"> + <onentry> + <raise event="foo"/> + <raise event="bar"/> + </onentry> + <transition target="p"/> + </state> + +<state id="s2"> + <onexit> + <assign location="$Var5" expr="$Var5 + 1"/> + </onexit> + +<parallel id="p"> + <onexit> + <assign location="$Var1" expr="$Var1 + 1"/> + </onexit> + <transition event="foo" target="ps1"> + <assign location="$Var4" expr="$Var4 + 1"/> + </transition> + + <!-- make sure the transition on foo was actually taken --> + <transition event="bar" cond="$Var4/text() =1" target="s3"/> + <transition event="bar" target="fail"/> + + <state id="ps1"> + <onexit> + <assign location="$Var2" expr="$Var2 + 1"/> + </onexit> + </state> + <state id="ps2"> + <onexit> + <assign location="$Var3" expr="$Var3 + 1"/> + </onexit> + </state> +</parallel> +</state> + +<state id="s3"> + <!-- make sure that p was exited twice --> + <transition cond="$Var1/text() =2" target="s4"/> + <transition target="fail"/> + </state> + +<state id="s4"> + <!-- make sure that ps1 was exited twice --> + <transition cond="$Var2/text() =2" target="s5"/> + <transition target="fail"/> + </state> + +<state id="s5"> + <!-- make sure that ps2 was exited twice --> + <transition cond="$Var3/text() =2" target="s6"/> + <transition target="fail"/> + </state> + +<state id="s6"> + <!-- make sure that s1 was exited once --> + <transition cond="$Var5/text() =1" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test505.scxml b/test/w3c/xpath/test505.scxml new file mode 100644 index 0000000..94575a1 --- /dev/null +++ b/test/w3c/xpath/test505.scxml @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that an internal transition does not exit its source state --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s1" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1" expr="0"/> <!-- how often we have exited s1 --> + <data id="Var2" expr="0"/> <!-- how often we have exited s11 --> + <data id="Var3" expr="0"/> <!-- how often the transition for foo has been taken --> + </datamodel> + + <state id="s1"> + <onentry> + <raise event="foo"/> + <raise event="bar"/> + </onentry> + <onexit> + <assign location="$Var1" expr="$Var1 + 1"/> + </onexit> + <transition event="foo" type="internal" target="s11"> + <assign location="$Var3" expr="$Var3 + 1"/> + </transition> + + <!-- make sure the transition on foo was actually taken --> + <transition event="bar" cond="$Var3/text() =1" target="s2"/> + <transition event="bar" target="fail"/> + + <state id="s11"> + <onexit> + <assign location="$Var2" expr="$Var2 + 1"/> + </onexit> + </state> + </state> + +<state id="s2"> + <!-- make sure that s1 was exited once --> + <transition cond="$Var1/text() =1" target="s3"/> + <transition target="fail"/> + </state> + + +<state id="s3"> + <!-- make sure that s11 was exited twice --> + <transition cond="$Var2/text() =2" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test506.scxml b/test/w3c/xpath/test506.scxml new file mode 100644 index 0000000..4d0fbfb --- /dev/null +++ b/test/w3c/xpath/test506.scxml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that an internal transition whose targets are not proper descendants of its source state +behaves like an external transition --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s1" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1" expr="0"/> <!-- how often we have exited s2 --> + <data id="Var2" expr="0"/> <!-- how often we have exited s21 --> + <data id="Var3" expr="0"/> <!-- how often the transition for foo has been taken --> + </datamodel> + + <state id="s1"> + <onentry> + <raise event="foo"/> + <raise event="bar"/> + </onentry> + <transition target="s2"/> + </state> + +<state id="s2" initial="s21"> + <onexit> + <assign location="$Var1" expr="$Var1 + 1"/> + </onexit> + <transition event="foo" type="internal" target="s2"> + <assign location="$Var3" expr="$Var3 + 1"/> + </transition> + + <!-- make sure the transition on foo was actually taken --> + <transition event="bar" cond="$Var3/text() =1" target="s3"/> + <transition event="bar" target="fail"/> + + <state id="s21"> + <onexit> + <assign location="$Var2" expr="$Var2 + 1"/> + </onexit> + </state> + +</state> + +<state id="s3"> + <!-- make sure that s2 was exited twice --> + <transition cond="$Var1/text() =2" target="s4"/> + <transition target="fail"/> + </state> + +<state id="s4"> + <!-- make sure that s21 was exited twice --> + <transition cond="$Var2/text() =2" target="pass"/> + <transition target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test509.scxml b/test/w3c/xpath/test509.scxml new file mode 100644 index 0000000..70e903f --- /dev/null +++ b/test/w3c/xpath/test509.scxml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that Basic HTTP Event I/O processor uses POST method and that it can receive messages +at the accessURI --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> + +<state id="s0"> + <onentry> + <send event="timeout" delay="30s"/> + <send event="test" targetexpr="$_ioprocessors/processor[@name="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"]/location/text()" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"/> + </onentry> + <!-- if the event was send by http and we get it, we succeed --> + <transition event="test" cond="contains($_event/raw, 'POST')" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test510.scxml b/test/w3c/xpath/test510.scxml new file mode 100644 index 0000000..11adc1c --- /dev/null +++ b/test/w3c/xpath/test510.scxml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that Basic HTTP messages go into external queue. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> + +<state id="s0"> + <onentry> + <send event="timeout" delay="30s"/> + <send event="test" targetexpr="$_ioprocessors/processor[@name="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"]/location/text()" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"/> + <!-- this creates an internal event --> + <raise event="internal"/> + + </onentry> + <!-- we should get 'internal' first, then 'test' --> + <transition event="internal" target="s1"/> + <transition event="*" target="fail"/> + </state> + + <state id="s1"> + <transition event="test" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test513.scxml b/test/w3c/xpath/test513.scxml new file mode 100644 index 0000000..bc29bb4 --- /dev/null +++ b/test/w3c/xpath/test513.scxml @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that we get an HTTP success code back on successful delivery. To run this test, implementations +must support an extension to send: if the parameter httpResponse is present with value 'true', then when +the processor gets an http response code back, it must raise an event 'http.n1.nrest' where 'ni' is +the first digit of the response code and 'nrest' are the remaining digits--><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> + +<state id="s0" initial="s01"> + <datamodel> + <data id="Var1"/> + </datamodel> + + <onentry> + <send event="timeout" delay="30s"/> + </onentry> + <invoke type="http://www.w3.org/TR/scxml/"> + <content> + <!-- child script. Once we're running send childRunning to parent and include basicHTTPAccess URI --> + <scxml initial="child0" datamodel="xpath" version="1.0"> + <state id="child0"> + <onentry> + <send target="#_parent" event="childRunning"> + <param name="uri" expr="_ioprocessors/processor[@name="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"]/location/text()"/> + </send> + </onentry> + </state> + </scxml> + </content> + </invoke> + + <transition event="*" target="fail"/> + + <state id="s01"> + <!-- when we get the event from the child, extract the access uri and use + the basicHTTP event i/o processor to send it an event --> + <transition event="childRunning" target="s02"> + <assign location="$Var1" expr="$_event/data/data[@id='uri']/text()"/> + <send event="test" targetexpr="$Var1" httpResponse="true" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"/> + </transition> + </state> + + <state id="s02"> + <!-- the child should send this back automatically. It does not need to take + any transition on the event --> + <transition event="HTTP.2" target="pass"/> + </state> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test518.scxml b/test/w3c/xpath/test518.scxml new file mode 100644 index 0000000..c79aa5d --- /dev/null +++ b/test/w3c/xpath/test518.scxml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that that namelist values get encoded as POST parameters. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> +<datamodel> + <data id="Var1" expr="2"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="30s"/> + <send event="test" targetexpr="$_ioprocessors/processor[@name="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"]/location/text()" namelist="$Var1" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"/> + </onentry> + + <transition event="test" cond="contains($_event/raw, 'Var1=2')" target="pass"/> + <transition event="*" target="fail"/> + + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test519.scxml b/test/w3c/xpath/test519.scxml new file mode 100644 index 0000000..684098e --- /dev/null +++ b/test/w3c/xpath/test519.scxml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that that <param> values get encoded as POST parameters. . --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="30s"/> + <send event="test" targetexpr="$_ioprocessors/processor[@name="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"]/location/text()" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"> + <param name="param1" expr="1"/> + </send> + </onentry> + + <!-- if other end sends us back this event, we succeed --> + <transition event="test" cond="contains($_event/raw, '1=1')" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test520.scxml b/test/w3c/xpath/test520.scxml new file mode 100644 index 0000000..cb54284 --- /dev/null +++ b/test/w3c/xpath/test520.scxml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that that <content> gets sent as the body of the message. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="30s"/> + <send targetexpr="$_ioprocessors/processor[@name="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"]/location/text()" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"> + <content>this is some content</content> + </send> + </onentry> + + <!-- if other end sends us back this event, we succeed --> + <transition event="HTTP.POST" cond="contains($_event/raw, this is some content)" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test521.scxml b/test/w3c/xpath/test521.scxml new file mode 100644 index 0000000..4b958ea --- /dev/null +++ b/test/w3c/xpath/test521.scxml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that the processor raises error.communication if it cannot dispatch the event. +(To create an undispatchable event, we choose a non-existent session as target). If it raises +the error event, we succeed. Otherwise we eventually timeout and fail. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> + + +<state id="s0"> + <onentry> + <!-- should cause an error --> + <send target="#_scxml_foo" event="event2"/> + <!-- this will get added to the external event queue after the error has been raised --> + <send event="timeout"/> + </onentry> + + <!-- once we've entered the state, we should check for internal events first --> + <transition event="error.communication" target="pass"/> + <transition event="*" target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test522.scxml b/test/w3c/xpath/test522.scxml new file mode 100644 index 0000000..a13966d --- /dev/null +++ b/test/w3c/xpath/test522.scxml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that location field the entry for Basic HTTP Event I/O processor can be used +to send a message to the processor --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> + +<state id="s0"> + <onentry> + <send event="timeout" delay="30s"/> + <send event="test" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor" targetexpr="$_ioprocessors/processor[@name="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"]/location/text()"/> + + </onentry> + <!-- the event we receive should be called 'test', but that's not actually + required for this test. Only that the send deliver some event to us. So if + we get something other than timeout or error, we call it success --> + <transition event="timeout" target="fail"/> + <transition event="error" target="fail"/> + <transition event="*" 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>
\ No newline at end of file diff --git a/test/w3c/xpath/test525.scxml b/test/w3c/xpath/test525.scxml new file mode 100644 index 0000000..a19e06e --- /dev/null +++ b/test/w3c/xpath/test525.scxml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that <foreach> does a shallow copy, so that modifying the array does not change +the iteration behavior. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" datamodel="xpath" version="1.0"> + <datamodel> + <data id="Var1"> + <node xmlns="">1</node><node xmlns="">2</node><node xmlns="">3</node> + </data> + <data id="Var2" expr="0"/> <!-- counts the number of iterations --> + </datamodel> + +<state id="s0"> + <onentry> + <foreach item="Var3" array="$Var1/*"> + <assign type="lastchild" location="$Var1" expr="$Var1/*"/> + <assign location="$Var2" expr="$Var2 + 1"/> + </foreach> + </onentry> + + <transition cond="$Var2/text() =3" target="pass"/> + <transition target="fail"/> +</state> + + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test527.scxml b/test/w3c/xpath/test527.scxml new file mode 100644 index 0000000..a5c69f8 --- /dev/null +++ b/test/w3c/xpath/test527.scxml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- simple test that 'expr' works with <content> --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="xpath" initial="s0"> + + + <state id="s0" initial="s01"> + + <transition event="done.state.s0" cond="$_event/data = 'foo'" target="pass"> + </transition> + + <transition event="done.state.s0" target="fail"> + </transition> + + <state id="s01"> + <transition target="s02"/> + </state> + <final id="s02"> + <donedata> + <content expr="'foo'"/> + </donedata> + </final> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test528.scxml b/test/w3c/xpath/test528.scxml new file mode 100644 index 0000000..f8f8416 --- /dev/null +++ b/test/w3c/xpath/test528.scxml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that illegal 'expr' produces error.execution and empty event.data --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="xpath" initial="s0"> + + + <state id="s0" initial="s01"> + <!-- we should get the error before the done event --> + <transition event="error.execution" target="s1"/> + <transition event="done.state.s0" target="fail"/> + + <transition event="done.state.s0" target="fail"/> + + <state id="s01"> + <transition target="s02"/> + </state> + <final id="s02"> + <donedata> + <content expr="!1"/> + </donedata> + </final> + </state> + + + <!-- if we get here, we received the error event. Now check that the done + event has empty event.data --> + + <state id="s1"> + <transition event="done.state.s0" cond="not($_event/data/*)" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test529.scxml b/test/w3c/xpath/test529.scxml new file mode 100644 index 0000000..5a78529 --- /dev/null +++ b/test/w3c/xpath/test529.scxml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- simple test that children workn with <content> --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" version="1.0" datamodel="xpath" initial="s0"> + + + <state id="s0" initial="s01"> + + <transition event="done.state.s0" cond="$_event/data = '21'" target="pass"> + </transition> + + <transition event="done.state.s0" target="fail"> + </transition> + + <state id="s01"> + <transition target="s02"/> + </state> + <final id="s02"> + <donedata> + <content>21</content> + </donedata> + </final> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test530.scxml b/test/w3c/xpath/test530.scxml new file mode 100644 index 0000000..083ff37 --- /dev/null +++ b/test/w3c/xpath/test530.scxml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that <content> child is evaluated when <invoke> is. Var1 is initialized +with an integer value, then set to an scxml script in the onentry to s0. If <content> +is evaluated at the right time, we should get invoke.done, otherwise an error --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="Var1" expr="1"/> + </datamodel> + + <state id="s0"> + <onentry> + <assign location="$Var1"> + <scxml version="1.0"><final/></scxml> + </assign> + <send event="timeout" delay="2s"/> + </onentry> + + <invoke type="http://www.w3.org/TR/scxml/"> + <content expr="$Var1/*"/> + </invoke> + + <transition event="done.invoke" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + </scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test531.scxml b/test/w3c/xpath/test531.scxml new file mode 100644 index 0000000..282e479 --- /dev/null +++ b/test/w3c/xpath/test531.scxml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that that the value of the <param> _scxmleventname gets used as the name +of the raised event. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="3s"/> + <send targetexpr="$_ioprocessors/processor[@name="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"]/location/text()" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"> + <content>_scxmleventname=test</content> + </send> + </onentry> + + <!-- if we get an event named 'test' we succeed. Otherwise fail --> + <transition event="test" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test532.scxml b/test/w3c/xpath/test532.scxml new file mode 100644 index 0000000..f883c66 --- /dev/null +++ b/test/w3c/xpath/test532.scxml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that that if _scxmleventname is not present, the name of the HTTP method is used +as the name of the resulting event. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="3s"/> + <send targetexpr="$_ioprocessors/processor[@name="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"]/location/text()" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"> + <!-- this content will be ignored, but it's here to make sure we have a message body --> + <content>some content</content> + </send> + </onentry> + + <transition event="HTTP.POST" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test533.scxml b/test/w3c/xpath/test533.scxml new file mode 100644 index 0000000..06f090b --- /dev/null +++ b/test/w3c/xpath/test533.scxml @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that an internal transition whose source state is not compound does exit its source state --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s1" version="1.0" datamodel="xpath"> +<datamodel> + <data id="Var1" expr="0"/> <!-- how often we have exited p --> + <data id="Var2" expr="0"/> <!-- how often we have exited ps1 --> + <data id="Var3" expr="0"/> <!-- how often we have exited ps2 --> + <data id="Var4" expr="0"/> <!-- how often the transition for foo has been taken --> + </datamodel> + + <state id="s1"> + <onentry> + <raise event="foo"/> + <raise event="bar"/> + </onentry> + <transition target="p"/> + </state> + +<parallel id="p"> + <onexit> + <assign location="$Var1" expr="$Var1 + 1"/> + </onexit> + <transition event="foo" type="internal" target="ps1"> + <assign location="$Var4" expr="$Var4 + 1"/> + </transition> + + <!-- make sure the transition on foo was actually taken --> + <transition event="bar" cond="$Var4/text() =1" target="s2"/> + <transition event="bar" target="fail"/> + + <state id="ps1"> + <onexit> + <assign location="$Var2" expr="$Var2 + 1"/> + </onexit> + </state> + <state id="ps2"> + <onexit> + <assign location="$Var3" expr="$Var3 + 1"/> + </onexit> + </state> +</parallel> + +<state id="s2"> + <!-- make sure that p was exited twice --> + <transition cond="$Var1/text() =2" target="s3"/> + <transition target="fail"/> + </state> + +<state id="s3"> + <!-- make sure that ps1 was exited twice --> + <transition cond="$Var2/text() =2" target="s4"/> + <transition target="fail"/> + </state> + +<state id="s4"> + <!-- make sure that ps2 was exited twice --> + <transition cond="$Var3/text() =2" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test534.scxml b/test/w3c/xpath/test534.scxml new file mode 100644 index 0000000..6dde647 --- /dev/null +++ b/test/w3c/xpath/test534.scxml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that that <send> 'event' value gets sent as the param _scxmleventname . --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> + + +<state id="s0"> + <onentry> + <send event="timeout" delay="30s"/> + <send event="test" targetexpr="$_ioprocessors/processor[@name="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"]/location/text()" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"> + </send> + </onentry> + + <!-- if other end sends us back this event, we succeed --> + <transition event="test" cond="" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test537.scxml b/test/w3c/xpath/test537.scxml new file mode 100644 index 0000000..350d422 --- /dev/null +++ b/test/w3c/xpath/test537.scxml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the root element of the datamodel is <datamodel> and that <data> elements are its +children--><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> +<datamodel> + <data id="foo" expr="2"/> + </datamodel> + +<state id="s0"> + + + <transition cond="local-name($foo/..)='datamodel'" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test539.scxml b/test/w3c/xpath/test539.scxml new file mode 100644 index 0000000..450bfd9 --- /dev/null +++ b/test/w3c/xpath/test539.scxml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that if the child of <data> is XML, or if XML is loaded via src=, the processor + assigns it as the value of the var --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="var1"> + <books xmlns=""> + <book title="title1"/> + <book title="title2"/> + </books> +</data> + <data id="var2" src="file:test539.txt"/> + </datamodel> + +<state id="s0"> + <transition cond="$var1/books/book[2]/@title = 'title2'" target="s1"/> + <transition target="fail"/> + </state> + +<state id="s1"> + <transition cond="$var2/books/book[2]/@title = 'title2'" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test539.txt b/test/w3c/xpath/test539.txt new file mode 100644 index 0000000..de1b0a1 --- /dev/null +++ b/test/w3c/xpath/test539.txt @@ -0,0 +1,4 @@ + <books xmlns=""> + <book title="title1"/> + <book title="title2"/> + </books>
\ No newline at end of file diff --git a/test/w3c/xpath/test540.scxml b/test/w3c/xpath/test540.scxml new file mode 100644 index 0000000..641509f --- /dev/null +++ b/test/w3c/xpath/test540.scxml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that if the child of <data> is a string or if a string is loaded via src=, the processor + does white space normalization on it and assigns it as the value of the var --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="var1">123 +4 5 +</data> + <data id="var2" src="file:test540.txt"/> + </datamodel> + +<state id="s0"> + <onentry> + <log label="var1 " expr="$var1"/> + </onentry> + <transition cond="$var1 = '123 4 5' and $var2 = '123 4 5'" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test540.txt b/test/w3c/xpath/test540.txt new file mode 100644 index 0000000..2191239 --- /dev/null +++ b/test/w3c/xpath/test540.txt @@ -0,0 +1,3 @@ +123 +4 5 +
\ No newline at end of file diff --git a/test/w3c/xpath/test542.scxml b/test/w3c/xpath/test542.scxml new file mode 100644 index 0000000..1101471 --- /dev/null +++ b/test/w3c/xpath/test542.scxml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that <content> inside <donedata> handles XML and strings, + including white space normalization. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + +<state id="s0" initial="s01"> + <transition event="done.state.s0" cond="$_event/data/books/book[1]/@title = 'title1'" target="s1"/> + <transition event="done" target="fail"/> + <final id="s01"> + <donedata> + <content> + <books xmlns=""> + <book title="title1"/> + <book title="title2"/> + </books> + </content> + </donedata> + </final> + </state> + +<state id="s1" initial="s11"> + <transition event="done.state.s1" cond="$_event/data = '123 4 5'" target="pass"/> + <transition event="done" target="fail"/> + <final id="s11"> + <donedata> + <content>123 +4 5 + </content> + </donedata> + </final> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test543.scxml b/test/w3c/xpath/test543.scxml new file mode 100644 index 0000000..2c5c6de --- /dev/null +++ b/test/w3c/xpath/test543.scxml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that event fields are present as children of _event --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" name="scxmltest" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <onentry> + <!-- event isn't bound until an event is raised --> + <raise event="someevent"/> + </onentry> + <!-- origintype sendid, invokeid and data will not be bound in this event. name, type, and origin + are guaranteed to be there. --> + <transition event="*" cond="$_event/name and $_event/origin and $_event/type" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test544.scxml b/test/w3c/xpath/test544.scxml new file mode 100644 index 0000000..fd09502 --- /dev/null +++ b/test/w3c/xpath/test544.scxml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that kvps are represented as <data> elements under event/data --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" name="scxmltest" initial="s0" version="1.0" datamodel="xpath"> + +<state id="s0"> + <onentry> + <send event="someevent"> + <param name="key1" expr="2"/> + </send> + </onentry> + + <transition event="*" cond="$_event/data/data[@id='key1'] = 2" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test546.scxml b/test/w3c/xpath/test546.scxml new file mode 100644 index 0000000..728843b --- /dev/null +++ b/test/w3c/xpath/test546.scxml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that string content in send is place as a string under event/data --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" name="scxmltest" initial="s0" version="1.0" datamodel="xpath"> + +<state id="s0"> + <onentry> + <send event="someevent"> + <content>some string</content> + </send> + </onentry> + + <transition event="*" cond="$_event/data = 'some string'" target="pass"/> + <transition event="*" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test547.scxml b/test/w3c/xpath/test547.scxml new file mode 100644 index 0000000..8c04c95 --- /dev/null +++ b/test/w3c/xpath/test547.scxml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that assiging to a node set performs the assignment to each node. + This example is taken from the spec. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" name="scxmltest" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="cart"> + <myCart xmlns=""> + <books> + <book> + <title>The Zen Mind</title> + </book> + <book> + <title>Freakonomics</title> + </book> + </books> + <cds> + <cd name="Something"/> + </cds> + </myCart> +</data> + </datamodel> + +<state id="s0"> + <onentry> + <assign location="$cart/myCart/books/book" expr="'The Zen Mind'"/> + </onentry> + + <transition cond="$cart/myCart/books/book[1] = 'The Zen Mind' and $cart/myCart/books/book[2] = 'The Zen Mind'" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test550.scxml b/test/w3c/xpath/test550.scxml new file mode 100644 index 0000000..a08e67d --- /dev/null +++ b/test/w3c/xpath/test550.scxml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that expr can be used to assign a value to a var. This test uses early binding --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath" binding="early"> + + <state id="s0"> + + <transition cond="$Var1/text() =2" target="pass"/> + <transition target="fail"/> + </state> + + <state id="s1"> + <datamodel> + <data id="Var1" expr="2"/> + </datamodel> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test551.scxml b/test/w3c/xpath/test551.scxml new file mode 100644 index 0000000..756d326 --- /dev/null +++ b/test/w3c/xpath/test551.scxml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that inline content can be used to assign a value to a var. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" binding="early" datamodel="xpath"> + + + <state id="s0"> + + <transition cond="$Var1/* or $Var1/text()" target="pass"/> + <transition target="fail"/> + </state> + +<state id="s1"> + <datamodel> + <data id="Var1"> + <node xmlns="">1</node><node xmlns="">2</node><node xmlns="">3</node> + </data> + </datamodel> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test552.scxml b/test/w3c/xpath/test552.scxml new file mode 100644 index 0000000..6795e08 --- /dev/null +++ b/test/w3c/xpath/test552.scxml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that src content can be used to assign a value to a var. Edit +test552.txt to have a value that's legal for the datamodel in question --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="Var1" src="file:test552.txt"/> + </datamodel> + + <state id="s0"> + + <transition cond="$Var1/* or $Var1/text()" target="pass"/> + <transition target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + + + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test552.txt b/test/w3c/xpath/test552.txt new file mode 100644 index 0000000..d8263ee --- /dev/null +++ b/test/w3c/xpath/test552.txt @@ -0,0 +1 @@ +2
\ No newline at end of file diff --git a/test/w3c/xpath/test553.scxml b/test/w3c/xpath/test553.scxml new file mode 100644 index 0000000..eb6f24b --- /dev/null +++ b/test/w3c/xpath/test553.scxml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- we test that the processor does not dispatch the event if evaluation +of <send>'s args causes an error.. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> + + +<state id="s0"> + <onentry> + <!-- timeout event --> + <send event="timeout" delay="3s"/> + <!-- include a non-existing var in the namelist --> + <send event="event1" namelist="$Var2"/> + </onentry> + + <!-- if we get the timeout before event1, we assume that event1 hasn't been sent + We ignore the error event here because this assertion doesn't mention it --> + <transition event="timeout" target="pass"/> + <transition event="event1" target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test554.scxml b/test/w3c/xpath/test554.scxml new file mode 100644 index 0000000..64274aa --- /dev/null +++ b/test/w3c/xpath/test554.scxml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that if the evaluation of <invoke>'s args causes an error, the +invocation is cancelled. In this test, that means that we don't get done.invoke +before the timer goes off. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <onentry> + <send event="timer" delay="2s"/> + </onentry> + + <!-- namelist references an undeclared variable --> + <invoke type="http://www.w3.org/TR/scxml/" namelist="$Var2"> + <content> + <scxml initial="subFinal" version="1.0" datamodel="xpath"> + <final id="subFinal"/> + </scxml> + </content> + </invoke> + <transition event="timer" target="pass"/> + <transition event="done.invoke" target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test555.scxml b/test/w3c/xpath/test555.scxml new file mode 100644 index 0000000..79dea75 --- /dev/null +++ b/test/w3c/xpath/test555.scxml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- in the XPATH data model, test that processor coerces types to produce a string + where it's needed --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + <datamodel> + <data id="var1"> + <books xmlns=""> + <book title="title1"/> + <book title="title2"/> + </books> +</data> + + </datamodel> + +<state id="s0"> + <onentry> + <send eventexpr="$var1"/> + </onentry> + <transition event="error" target="fail"/> + <!-- don't really know what the stringification of that xml structure should be, but if + we get something other than an error, we assume that it worked. --> + <transition event="*" 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>
\ No newline at end of file diff --git a/test/w3c/xpath/test557.scxml b/test/w3c/xpath/test557.scxml new file mode 100644 index 0000000..6f4eed1 --- /dev/null +++ b/test/w3c/xpath/test557.scxml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- in the ECMA data model, test that if the child of <data> is XML, or if XML is loaded via src=, the processor + assigns it as the value of the var --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + <datamodel> + <data id="var1"> + <books xmlns=""> + <book title="title1"/> + <book title="title2"/> + </books> +</data> + <data id="var2" src="file:test557.txt"/> + </datamodel> + +<state id="s0"> + <transition cond="var1.getElementsByTagName('book')[0].getAttribute('title') == 'title1'" target="s1"/> + <transition target="fail"/> + </state> + +<state id="s1"> + <transition cond="var2.getElementsByTagName('book')[1].getAttribute('title') == 'title2'" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test557.txt b/test/w3c/xpath/test557.txt new file mode 100644 index 0000000..a8e51da --- /dev/null +++ b/test/w3c/xpath/test557.txt @@ -0,0 +1,4 @@ +<books xmlns=""> + <book title="title1"/> + <book title="title2"/> + </books>
\ No newline at end of file diff --git a/test/w3c/xpath/test558.scxml b/test/w3c/xpath/test558.scxml new file mode 100644 index 0000000..a075100 --- /dev/null +++ b/test/w3c/xpath/test558.scxml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- in the ECMA data model, test that if the child of <data> is not XML, or if XML is loaded via src=, + the processor treats the value as a string, does whitespace normalization and assigns it to the var.--><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + <datamodel> + <data id="var1"> +this is +a string +</data> + <data id="var2" src="file:test558.txt"/> + </datamodel> + +<state id="s0"> + <transition cond="var1 == 'this is a string'" target="s1"/> + <transition target="fail"/> + </state> + +<state id="s1"> + <transition cond="var2 == 'this is a string'" target="pass"/> + <transition target="fail"/> + </state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test558.txt b/test/w3c/xpath/test558.txt new file mode 100644 index 0000000..bb2bcc7 --- /dev/null +++ b/test/w3c/xpath/test558.txt @@ -0,0 +1,3 @@ + +this is +a string
\ No newline at end of file diff --git a/test/w3c/xpath/test560.scxml b/test/w3c/xpath/test560.scxml new file mode 100644 index 0000000..d283b1a --- /dev/null +++ b/test/w3c/xpath/test560.scxml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- in the ECMA data model, test that processor creates correct structure in + _event.data when receiving KVPs in an event --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <send event="foo"> + <param name="aParam" expr="1"/> + </send> + </onentry> + <transition event="foo" cond="_event.data.aParam == 1" target="pass"/> + <transition event="*" target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test561.scxml b/test/w3c/xpath/test561.scxml new file mode 100644 index 0000000..e50e00c --- /dev/null +++ b/test/w3c/xpath/test561.scxml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- in the ECMA data model, test that processor creates an ECMAScript object + _event.data when receiving JSON in an event --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <send event="foo"> + <content> +<books xmlns=""> +<book title="title1"/> +<book title="title2"/> +</books> +</content> + </send> + </onentry> + <transition event="foo" cond="_event.data.getElementsByTagName('book')[1].getAttribute('title') == 'title2'" target="pass"/> + <transition event="*" target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test562.scxml b/test/w3c/xpath/test562.scxml new file mode 100644 index 0000000..f5997bb --- /dev/null +++ b/test/w3c/xpath/test562.scxml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- in the ECMA data model, test that processor creates space normalized string in + _event.data when receiving anything other than KVPs or XML in an event --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <send event="foo"> + <content> +this is a +string +</content> + </send> + </onentry> + <transition event="foo" cond="_event.data == 'this is a string'" target="pass"/> + <transition event="*" target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test567.scxml b/test/w3c/xpath/test567.scxml new file mode 100644 index 0000000..0aa4680 --- /dev/null +++ b/test/w3c/xpath/test567.scxml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that that any content in the message other than _scxmleventname is used to populate +_event.data. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" datamodel="xpath" version="1.0"> +<datamodel> + <data id="Var1" expr="2"/> + </datamodel> + +<state id="s0"> + <onentry> + <send event="timeout" delay="3s"/> + <!-- in this case, 'test' will be placed in _scxmleventname. The <param> should + be used to populate _event.data --> + <send event="test" targetexpr="$_ioprocessors/processor[@name="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"]/location/text()" type="http://www.w3.org/TR/scxml/#BasicHTTPEventProcessor"> + <param name="param1" expr="2"/> + </send> + </onentry> + + <!-- if we get this event, we succeed --> + <transition event="test" target="s1"> + <assign location="$Var1" expr="$_event/data/data[@id='param1']/text()"/> + </transition> + <transition event="*" target="fail"/> + </state> + + <state id="s1"> + <transition cond="$Var1/text() =2" target="pass"/> + <transition target="fail"/> + </state> + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test568.scxml b/test/w3c/xpath/test568.scxml new file mode 100644 index 0000000..e8b888f --- /dev/null +++ b/test/w3c/xpath/test568.scxml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that location field is found inside entry for SCXML Event I/O processor in the XPath +data model. The tests for the relevant event i/o processors will test that it can be used to +send events. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="xpath"> + + +<state id="s0"> + <transition cond="$_ioprocessors/[@name='http://www.w3.org/TR/scxml/#SCXMLEventProcessor']/location/text()" target="pass"/> + <transition target="fail"/> + + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test569.scxml b/test/w3c/xpath/test569.scxml new file mode 100644 index 0000000..832a0c0 --- /dev/null +++ b/test/w3c/xpath/test569.scxml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that location field is found inside entry for SCXML Event I/O processor in the ECMAScript +data model. The tests for the relevant event i/o processors will test that it can be used to +send events. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <transition cond="_ioprocessors['scxml'].location" target="pass"/> + <transition target="fail"/> + + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test570.scxml b/test/w3c/xpath/test570.scxml new file mode 100644 index 0000000..8caa2cd --- /dev/null +++ b/test/w3c/xpath/test570.scxml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that we generate done.state.id when all a parallel state's children are in final states --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="p0" datamodel="xpath" version="1.0"> + <datamodel> + <data id="Var1" expr="0"/> + </datamodel> +<parallel id="p0"> + <onentry> + <send event="timeout" delay="2s"/> + <raise event="e1"/> + <raise event="e2"/> + </onentry> + <!-- record that we get the first done event --> + <transition event="done.state.p0s1"> + <assign location="$Var1" expr="1"/> + </transition> + <!-- we should get the second done event before done.state.p0 --> + <transition event="done.state.p0s2" target="s1"/> + <transition event="timeout" target="fail"/> + + + <state id="p0s1" initial="p0s11"> + <state id="p0s11"> + <transition event="e1" target="p0s1final"/> + </state> + <final id="p0s1final"/> + </state> + + <state id="p0s2" initial="p0s21"> + <state id="p0s21"> + <transition event="e2" target="p0s2final"/> + </state> + <final id="p0s2final"/> + </state> + + </parallel> + + <state id="s1"> + <!-- if we get done.state.p0, success --> + <transition event="done.state.p0" cond="$Var1/text() =1" target="pass"/> + <transition event="*" target="fail"/> + </state> + + <final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> + <final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test576.scxml b/test/w3c/xpath/test576.scxml new file mode 100644 index 0000000..c5302f5 --- /dev/null +++ b/test/w3c/xpath/test576.scxml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- test that the 'initial' value of scxml is respected. We set the value to deeply nested non-default parallel siblings and +test that both are entered. --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s11p112 s11p122" datamodel="xpath" version="1.0"> + + +<state id="s0"> + <transition target="fail"/> +</state> + +<state id="s1"> + <onentry> + <send event="timeout" delay="1s"/> + </onentry> + <transition event="timeout" target="fail"/> + <state id="s11" initial="s111"> + <state id="s111"/> + <parallel id="s11p1"> + <state id="s11p11" initial="s11p111"> + <state id="s11p111"/> + <state id="s11p112"> + <onentry> + <raise event="In-s11p112"/> + </onentry> + </state> + </state> + <state id="s11p12" initial="s11p121"> + <state id="s11p121"/> + <state id="s11p122"> + <transition event="In-s11p112" target="pass"/> + </state> + </state> + </parallel> + </state> +</state> + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> +</scxml>
\ No newline at end of file diff --git a/test/w3c/xpath/test578.scxml b/test/w3c/xpath/test578.scxml new file mode 100644 index 0000000..bdb5e2d --- /dev/null +++ b/test/w3c/xpath/test578.scxml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?><!-- in the ECMA data model, test that processor creates an ECMAScript object + _event.data when receiving JSON in an event --><scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:conf="http://www.w3.org/2005/scxml-conformance" initial="s0" version="1.0" datamodel="ecmascript"> + + +<state id="s0"> + <onentry> + <send event="foo"> + <content>{ productName : "bar", size : 27 }</content> + </send> + </onentry> + <transition event="foo" cond="_event.data.productName == 'bar'" target="pass"/> + <transition event="*" target="fail"/> + </state> + + +<final id="pass"><onentry><log label="Outcome" expr="'pass'"/></onentry></final> +<final id="fail"><onentry><log label="Outcome" expr="'fail'"/></onentry></final> + +</scxml>
\ No newline at end of file |