Author: jbeard Date: Thu Jul 22 17:51:25 2010 New Revision: 966772 URL: http://svn.apache.org/viewvc?rev=966772&view=rev Log: Merge branch 'core-events'
Added: commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/addEventRegularExpressions.xsl (with props) commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/copyEnumeratedEventTransitions.xsl (with props) commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/expandStarEvent.xsl - copied, changed from r966771, commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/enumerateEvents.xsl commons/sandbox/gsoc/2010/scxml-js/trunk/test/prefix_events/ commons/sandbox/gsoc/2010/scxml-js/trunk/test/prefix_events/TestPrefixEvents.xml (with props) commons/sandbox/gsoc/2010/scxml-js/trunk/test/prefix_events/scripts/ commons/sandbox/gsoc/2010/scxml-js/trunk/test/prefix_events/scripts/unitTest.js (with props) Modified: commons/sandbox/gsoc/2010/scxml-js/trunk/build.js commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/backends/js/AbstractEnumeratedStatechartGenerator.js commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/backends/js/AbstractStatechartGenerator.js commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/backends/js/StatePatternStatechartGenerator.js commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractEnumeratedStatechartGenerator.xsl commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractStatechartGenerator.xsl commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/StatePatternStatechartGenerator.xsl commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/StateTableStatechartGenerator.xsl commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/SwitchyardStatechartGenerator.xsl commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/enumerateEvents.xsl commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/nameTransitions.xsl commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/numberStatesAndTransitions.xsl commons/sandbox/gsoc/2010/scxml-js/trunk/test/test_with_xsltproc.sh Modified: commons/sandbox/gsoc/2010/scxml-js/trunk/build.js URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/build.js?rev=966772&r1=966771&r2=966772&view=diff ============================================================================== --- commons/sandbox/gsoc/2010/scxml-js/trunk/build.js (original) +++ commons/sandbox/gsoc/2010/scxml-js/trunk/build.js Thu Jul 22 17:51:25 2010 @@ -80,6 +80,7 @@ require.def("build", ConditionalTransition :"test/conditional_transition/TestConditionalTransition.xml", InPredicate :"test/in_predicate/TestInPredicate.xml", EventSystemProperties :"test/event_system_properties/TestEventSystemProperties.xml", + PrefixEvents:"test/prefix_events/TestPrefixEvents.xml" } //FIXME: this violates Don't Repeat Yourself; these paths are written here and in the module @@ -111,7 +112,8 @@ require.def("build", "test/kitchen_sink/scripts/unitTest_executableContent", "test/conditional_transition/scripts/unitTest", "test/in_predicate/scripts/unitTest", - "test/event_system_properties/scripts/unitTest" + "test/event_system_properties/scripts/unitTest", + "test/prefix_events/scripts/unitTest" ] //gets populated at run-time Modified: commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/backends/js/AbstractEnumeratedStatechartGenerator.js URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/backends/js/AbstractEnumeratedStatechartGenerator.js?rev=966772&r1=966771&r2=966772&view=diff ============================================================================== --- commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/backends/js/AbstractEnumeratedStatechartGenerator.js (original) +++ commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/backends/js/AbstractEnumeratedStatechartGenerator.js Thu Jul 22 17:51:25 2010 @@ -7,18 +7,30 @@ require.def( "xml!src/xslt/ir-compiler/flattenTransitions.xsl", "xml!src/xslt/ir-compiler/appendTransitionInformation.xsl", "xml!src/xslt/ir-compiler/nameTransitions.xsl", + "xml!src/xslt/ir-compiler/copyEnumeratedEventTransitions.xsl", + "xml!src/xslt/ir-compiler/enumerateEvents.xsl", + "xml!src/xslt/ir-compiler/addEventRegularExpressions.xsl", + "xml!src/xslt/ir-compiler/expandStarEvent.xsl", "xml!src/xslt/ir-compiler/numberStatesAndTransitions.xsl" ], function( AbstractStatechartGenerator, flattenTransitions, appendTransitionInformation, nameTransitions, + copyEnumeratedEventTransitions, + enumerateEvents, + addEventRegularExpressions, + expandStarEvent, numberStatesAndTransitions ){ return { "transformations" : AbstractStatechartGenerator.transformations.concat([flattenTransitions, appendTransitionInformation, nameTransitions, + copyEnumeratedEventTransitions, + enumerateEvents, + addEventRegularExpressions, + expandStarEvent, numberStatesAndTransitions] ) }; } Modified: commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/backends/js/AbstractStatechartGenerator.js URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/backends/js/AbstractStatechartGenerator.js?rev=966772&r1=966771&r2=966772&view=diff ============================================================================== --- commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/backends/js/AbstractStatechartGenerator.js (original) +++ commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/backends/js/AbstractStatechartGenerator.js Thu Jul 22 17:51:25 2010 @@ -3,7 +3,6 @@ require.def( "src/javascript/scxml/cgf/backends/js/AbstractStatechartGenerator", [ - "xml!src/xslt/ir-compiler/enumerateEvents.xsl", "xml!src/xslt/ir-compiler/normalizeInitialStates.xsl", "xml!src/xslt/ir-compiler/generateUniqueStateIds.xsl", "xml!src/xslt/ir-compiler/generateUniqueInitialStateIds.xsl", @@ -14,7 +13,6 @@ require.def( "xml!src/xslt/ir-compiler/appendStateInformation.xsl", "xml!src/xslt/ir-compiler/appendBasicStateInformation.xsl" ], function( - enumerateEvents, normalizeInitialStates, generateUniqueStateIds, generateUniqueInitialStateIds, @@ -28,7 +26,6 @@ require.def( return { "transformations" : [ - enumerateEvents, normalizeInitialStates, generateUniqueStateIds, generateUniqueInitialStateIds, Modified: commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/backends/js/StatePatternStatechartGenerator.js URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/backends/js/StatePatternStatechartGenerator.js?rev=966772&r1=966771&r2=966772&view=diff ============================================================================== --- commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/backends/js/StatePatternStatechartGenerator.js (original) +++ commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/backends/js/StatePatternStatechartGenerator.js Thu Jul 22 17:51:25 2010 @@ -5,17 +5,30 @@ require.def( [ "src/javascript/scxml/cgf/backends/js/AbstractStatechartGenerator", "xml!src/xslt/ir-compiler/appendTransitionInformation.xsl", + "xml!src/xslt/ir-compiler/copyEnumeratedEventTransitions.xsl", + "xml!src/xslt/ir-compiler/enumerateEvents.xsl", + "xml!src/xslt/ir-compiler/addEventRegularExpressions.xsl", + "xml!src/xslt/ir-compiler/expandStarEvent.xsl", "xml!build/StatePatternStatechartGenerator_combined.xsl" //preprocessed stylesheet ], function( AbstractStatechartGenerator, appendTransitionInformation, + copyEnumeratedEventTransitions, + enumerateEvents, + addEventRegularExpressions, + expandStarEvent, StatePatternStatechartGenerator ){ return { - "transformations" : AbstractStatechartGenerator.transformations.concat(appendTransitionInformation), + "transformations" : AbstractStatechartGenerator.transformations.concat([ + appendTransitionInformation, + copyEnumeratedEventTransitions, + enumerateEvents, + addEventRegularExpressions, + expandStarEvent]), "code" : StatePatternStatechartGenerator }; Modified: commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractEnumeratedStatechartGenerator.xsl URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractEnumeratedStatechartGenerator.xsl?rev=966772&r1=966771&r2=966772&view=diff ============================================================================== --- commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractEnumeratedStatechartGenerator.xsl (original) +++ commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractEnumeratedStatechartGenerator.xsl Thu Jul 22 17:51:25 2010 @@ -37,6 +37,7 @@ select="'currentConfiguration.map(function(state){return STATE_INT_ID_TO_OBJECT_MAP[state]})'"/> <variable name="eventToNameMap" select="'TRIGGER_ID_TO_NAME_MAP[e]'"/> + <variable name="prefixEventDispatchInvocation" select="'$dispatchPrefixEvent(state,e)'"/> <template name="genContextHooks"> //enumeration of states int id's @@ -57,7 +58,7 @@ </for-each> //enumeration of triggers - <for-each select="$eventsEnum"> + <for-each select="$enumeratedEventsEnum"> var <value-of select="c:name"/> = <value-of select="c:id"/>; </for-each> @@ -70,12 +71,61 @@ //transition functions <call-template name="genTriggerHandlerFunctions"/> + <call-template name="genPrefixDispatchHandlerFunction"/> + <call-template name="genEnumeratedHooks"/> + + </template> + + <template name="genPrefixDispatchHandlerFunction"> + <!-- this is quite similar in form and function to + the work done in SwitchyardStatechartGenerator.xsl --> + <call-template name="genPrefixDispatchHandlerSwitchyard"> + <with-param name="basicStates" select="$basicStates"/> + </call-template> + </template> + + + <template name="genPrefixDispatchHandlerSwitchyard"> + <param name="basicStates"/> + + function $dispatchPrefixEvent(state,e){ + switch(state) { + <for-each select="$basicStates[s:transiti...@event]]"> + <call-template name="genPrefixDispatchHandlerStateCase"> + <with-param name="s" select="."/> + </call-template> + </for-each> + } + } + + </template> + + <template name="genPrefixDispatchHandlerStateCase"> + <param name="s"/> + + case <value-of select="$s/@c:enumId"/>: + + <for-each select="$s/s:transiti...@event]"> + <!-- look up regexp name --> + <variable name="eventName" select="@event"/> + <variable name="regexpName" select="$allEventsEnum[c:name/text() = $eventName]/c:regexp/c:name"/> + + if(e.match(<value-of select="$regexpName"/>) + <if test="@cond"> + && <value-of select="@cond"/> + </if>){ + + <value-of select="@c:tName"/>(); + break; + } + </for-each> + break; </template> <template name="genTriggerExternalObject"> this.TRIGGERS = { - <for-each select="$eventsEnum"> + <for-each select="$enumeratedEventsEnum"> <value-of select="c:name"/> : <value-of select="c:name"/> <if test="not(position() = last())"> , </if> </for-each> @@ -85,7 +135,7 @@ <template name="genTriggerIdToNameMap"> var TRIGGER_ID_TO_NAME_MAP = [ - <for-each select="$eventsEnum"> + <for-each select="$enumeratedEventsEnum"> '<value-of select="c:name"/>' <if test="not(position() = last())"> , </if> </for-each> @@ -98,7 +148,7 @@ <variable name="state" select="."/> - <for-each select="$eventsEnum/c:name"> + <for-each select="$allEventsEnum/c:name"> <variable name="eventName"> <value-of select="."/> </variable> @@ -179,24 +229,6 @@ } </template> - <template match="s:send"> - <variable name="sendEvent" select="@event"/> - <variable name="sendDelay" select="number(@delay)"/> - - <choose> - <when test="$sendDelay"> - //set timeout - toReturn = window.setTimeout(function(){ - self.GEN(<value-of select="$sendEvent"/>); - }, <value-of select="$sendDelay*1000"/>); - </when> - <otherwise> - //just add the event to the outer queue - toReturn = innerEventQueue.push(<value-of select="$sendEvent"/>); - </otherwise> - </choose> - </template> - <template name="genHistoryTriggerDispatcherHistoryStateReference"> <param name="s"/> @@ -206,7 +238,18 @@ <template name="genExternalTriggerDispatcherRunToCompletionEventValue"> <param name="eventName"/> - <value-of select="$eventName"/> + <!-- enumerated events correspond to a local variable, + and so don't need to be surrounded by quotes, whereas enumerated + events will be pattern-matched later on, and so do need to be surrounded + by quotes --> + <choose> + <when test="$enumeratedEventsEnum[c:name/text() = $eventName]"> + <value-of select="$eventName"/> + </when> + <otherwise> + "<value-of select="$eventName"/>" + </otherwise> + </choose> </template> <template name="genStateHooks"/> Modified: commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractStatechartGenerator.xsl URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractStatechartGenerator.xsl?rev=966772&r1=966771&r2=966772&view=diff ============================================================================== --- commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractStatechartGenerator.xsl (original) +++ commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/AbstractStatechartGenerator.xsl Thu Jul 22 17:51:25 2010 @@ -28,7 +28,8 @@ <param name="noSome" select="false()"/> <!-- these variables get overridden by subclasses --> - <variable name="dispatchInvocation"/> + <variable name="enumeratedEventDispatchInvocation"/> + <variable name="prefixEventDispatchInvocation"/> <variable name="currentConfigurationExpression"/> <variable name="defaultEventLiteral"/> <variable name="inPredicateFunctionStateReference"/> @@ -49,7 +50,8 @@ <variable name="compositeStates" select="$allStates[.//*[(self::s:state or self::s:parallel or self::s:final or self::s:initial or self::s:scxml or self::s:history)]]"/> - <variable name="eventsEnum" select="/s:scxml/c:eventsEnum/c:event"/> + <variable name="allEventsEnum" select="/s:scxml/c:allEventsEnum/c:event"/> + <variable name="enumeratedEventsEnum" select="/s:scxml/c:enumeratedEventsEnum/c:event"/> <!-- Variables we don't use, but which might be useful at some point --> <!-- @@ -63,6 +65,20 @@ <variable name="abstractStateName" select="'AbstractState'"/> + <!-- helper template to safely get a state's parent's name --> + <template name="getParentNameFromState"> + <param name="s"/> + + <choose> + <when test="$s/../@id"> + <value-of select="$s/../@id"/> + </when> + <otherwise> + <value-of select="$abstractStateName"/> + </otherwise> + </choose> + </template> + <template match="/s:scxml"> <if test="$noIndexOf"> @@ -99,9 +115,13 @@ //variable declarations relating to data model <apply-templates select=".//s:datamodel"/> + <call-template name="genEventRegularExpressions"> + <with-param name="events" select="$allEventsEnum"/> + </call-template> + //abstract state <call-template name="genAbstractState"> - <with-param name="events" select="$eventsEnum"/> + <with-param name="events" select="$enumeratedEventsEnum"/> </call-template> //states @@ -118,7 +138,7 @@ </call-template> //trigger methods for synchronous interaction - <for-each select="$eventsEnum"> + <for-each select="$allEventsEnum[not(c:name/text() = '*')]"> <call-template name="genExternalTriggerDispatcher"> <with-param name="event" select="."/> </call-template> @@ -163,6 +183,22 @@ <if test="position() != last()">, </if> </for-each>; </template> + + <template name="genEventRegularExpressions"> + <param name="events"/> + + var <for-each select="$events/c:regexp"> + <value-of select="c:name"/> = <value-of select="c:value"/> + <choose> + <when test="position() = last()"> + ; + </when> + <otherwise> + , + </otherwise> + </choose> + </for-each> + </template> <template name="genAbstractState"> <param name="events"/> @@ -175,6 +211,8 @@ </for-each> this.$default = function(){}; + + this.$dispatchPrefixEvent = function(){}; } </template> @@ -184,15 +222,10 @@ <variable name="stateName" select="$state/@id"/> <variable name="parentName"> - <choose> - <when test="$state/../@id"> - <value-of select="$state/../@id"/> - </when> - <otherwise> - <value-of select="$abstractStateName"/> - </otherwise> - </choose> - </variable> + <call-template name="getParentNameFromState"> + <with-param name="s" select="$state"/> + </call-template> + </variable> <variable name="historyState" select="$state/s:history"/> @@ -367,7 +400,27 @@ <!-- external communications module --> <template match="s:send"> - <!--TODO--> + <variable select="@event" name="eventName"/> + + <choose> + <when test="@delay"> + <!-- FIXME: this stuff needs to be fixed --> + <!-- + window.setTimeout(function(){ + self.GEN("<value-of select="@event"/>"); + },<value-of select="number(@delay)*1000"/>); + --> + </when> + <otherwise> + <!--FIXME: hook up data part of this --> + innerEventQueue.push( + <call-template name="genExternalTriggerDispatcherRunToCompletionEventValue"> + <with-param name="eventName" select="$eventName"/> + </call-template>, + null, + <value-of select="boolean($enumeratedEventsEnum[c:name/text() = $eventName])"/> ); + </otherwise> + </choose> </template> <template match="s:cancel"> @@ -418,13 +471,15 @@ <template name="genExternalTriggerDispatcher"> <param name="event"/> - this.<value-of select="$event/c:name"/> = function(data){ + this["<value-of select="$event/c:name"/>"] = function(data){ if(isInStableState){ runToCompletion( + //TODO: conditionally wrap in quotes for enumerated pattern <call-template name="genExternalTriggerDispatcherRunToCompletionEventValue"> <with-param name="eventName" select="$event/c:name"/> </call-template> - ,data); + ,data, + <value-of select="boolean($enumeratedEventsEnum[c:name/text() = $event/c:name/text()])"/>) }else{ return undefined; } @@ -459,16 +514,16 @@ } } - function runToCompletion(e,data){ + function runToCompletion(e,data,isEnumeratedEvent){ isInStableState = false; if(e){ - innerEventQueue.push(e,data); + innerEventQueue.push(e,data,isEnumeratedEvent); } do{ //take any available default transitions - microstep(<value-of select="$defaultEventLiteral"/>); + microstep(<value-of select="$defaultEventLiteral"/>,null,true); if(!hasTakenDefaultTransition){ @@ -478,7 +533,7 @@ break; }else{ //microstep, then dequeue next event sending in event - microstep(innerEventQueue.shift(),innerEventQueue.shift()); + microstep(innerEventQueue.shift(),innerEventQueue.shift(),innerEventQueue.shift()); } }else{ //he has taken a default transition, so reset the global variable to false and loop again @@ -490,18 +545,35 @@ isInStableState = true; } - function microstep(e,data){ - currentConfiguration.forEach(function(state){ - if(!isPreempted){ - //we set the event as a global, rather than passing it into the function invocation as a parameter, - //because in cases of default events, the event object will be populated with previous event's data - if(e !== <value-of select="$defaultEventLiteral"/> ){ - _event.name=<value-of select="$eventToNameMap"/>; - _event.data=data; + function microstep(e,data,isEnumeratedEvent){ + if(isEnumeratedEvent){ + //e does not contain a dot, so dispatch as an enumerated event + currentConfiguration.forEach(function(state){ + if(!isPreempted){ + //we set the event as a global, rather than passing it into the function invocation as a parameter, + //because in cases of default events, the event object will be populated with previous event's data + if(e !== <value-of select="$defaultEventLiteral"/> ){ + _event.name=<value-of select="$eventToNameMap"/>; + _event.data=data; + } + <value-of select="$enumeratedEventDispatchInvocation"/> } - <value-of select="$dispatchInvocation"/> - } - }); + }); + }else{ + //e contains a dot, so dispatch as a prefix event + currentConfiguration.forEach(function(state){ + if(!isPreempted){ + //we set the event as a global, rather than passing it into the function invocation as a parameter, + //because in cases of default events, the event object will be populated with previous event's data + //NOTE: e will always be a string here, even in enumerated techniques + if(e !== <value-of select="$defaultEventLiteral"/> ){ + _event.name=e; + _event.data=data; + } + <value-of select="$prefixEventDispatchInvocation"/> + } + }); + } //reset the isPreempted flag isPreempted = false; Modified: commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/StatePatternStatechartGenerator.xsl URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/StatePatternStatechartGenerator.xsl?rev=966772&r1=966771&r2=966772&view=diff ============================================================================== --- commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/StatePatternStatechartGenerator.xsl (original) +++ commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/StatePatternStatechartGenerator.xsl Thu Jul 22 17:51:25 2010 @@ -22,7 +22,8 @@ <import href="AbstractStatechartGenerator.xsl"/> - <variable name="dispatchInvocation" select="'state[e]();'"/> + <variable name="enumeratedEventDispatchInvocation" select="'state[e]();'"/> + <variable name="prefixEventDispatchInvocation" select="'state.$dispatchPrefixEvent(e)'"/> <variable name="defaultEventLiteral" select="'"$default"'"/> <variable name="currentConfigurationExpression" select="'currentConfiguration.slice()'"/> <variable name="inPredicateFunctionStateReference" select="'state'"/> @@ -39,12 +40,12 @@ <!-- iterate through groups of transitions, grouped by event --> <!--FIXME: this is likely to be a bit slow, as we're iterating through all events --> - <for-each select="$eventsEnum/c:name"> + <for-each select="$enumeratedEventsEnum/c:name"> <variable name="eventName"> <value-of select="."/> </variable> - <variable name="transitionsForEvent" select="$state/s:transiti...@event = $eventName]"/> + <variable name="transitionsForEvent" select="$state/c:enumeratedEventTransitions/c:enumeratedtransiti...@event = $eventName]"/> <if test="$transitionsForEvent"> <call-template name="genTriggerDispatcherContext"> <with-param name="s" select="$state"/> @@ -55,7 +56,7 @@ </for-each> <!-- now do default transitions --> - <variable name="defaultTransitionsForState" select="$state/s:transition[not(@event)]"/> + <variable name="defaultTransitionsForState" select="$state/c:enumeratedEventTransitions/c:enumeratedTransition[not(@event)]"/> <if test="$defaultTransitionsForState"> <call-template name="genTriggerDispatcherContext"> <with-param name="s" select="$state"/> @@ -63,6 +64,37 @@ <with-param name="eventName" select="'$default'"/> </call-template> </if> + + <!-- now do prefix event handler --> + <!-- TODO: consolidate all of these references to dispatchPrefixEvent into a global variable --> + this.$dispatchPrefixEvent = function(e){ + <!-- we skip default events, as these will always be enumerated, hence will never end up in this region --> + <for-each select="$state/s:transiti...@event]"> + <!-- look up regexp name --> + <variable name="eventName" select="@event"/> + <variable name="regexpName" select="$allEventsEnum[c:name/text() = $eventName]/c:regexp/c:name"/> + + if(e.match(<value-of select="$regexpName"/>) + <if test="@cond"> + && <value-of select="@cond"/> + </if>){ + <call-template name="genTriggerDispatcherContents"> + <with-param name="s" select="$state"/> + <with-param name="transitions" select="."/> + <with-param name="eventName" select="$eventName"/> + </call-template> + } + </for-each> + + <variable name="parentName"> + <call-template name="getParentNameFromState"> + <with-param name="s" select="$state"/> + </call-template> + </variable> + + <value-of select="$parentName"/>.$dispatchPrefixEvent(e); + } + </template> <template name="genParallelSubstateConfigurationSetString"> @@ -118,17 +150,11 @@ <!-- if by this point he hasn't returned, then none of the transitions passed, and we need to pass the transition up the hierarchy chain --> - <variable name="parentName"> - <choose> - <when test="$s/../@id"> - <value-of select="$s/../@id"/> - </when> - <otherwise> - <value-of select="$abstractStateName"/> - </otherwise> - </choose> - </variable> + <call-template name="getParentNameFromState"> + <with-param name="s" select="$s"/> + </call-template> + </variable> <value-of select="$parentName"/>['<value-of select="$eventName"/>'](); } @@ -146,17 +172,4 @@ "<value-of select="$eventName"/>" </template> - <template match="s:send"> - <choose> - <when test="@delay"> - window.setTimeout(function(){ - self.GEN("<value-of select="@event"/>"); - },<value-of select="number(@delay)*1000"/>); - </when> - <otherwise> - innerEventQueue.push("<value-of select="@event"/>"); - </otherwise> - </choose> - </template> - </stylesheet> Modified: commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/StateTableStatechartGenerator.xsl URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/StateTableStatechartGenerator.xsl?rev=966772&r1=966771&r2=966772&view=diff ============================================================================== --- commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/StateTableStatechartGenerator.xsl (original) +++ commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/StateTableStatechartGenerator.xsl Thu Jul 22 17:51:25 2010 @@ -22,7 +22,7 @@ <import href="AbstractEnumeratedStatechartGenerator.xsl"/> - <variable name="dispatchInvocation" select="'STATE_TRANSITION_TABLE[state][e]();'"/> + <variable name="enumeratedEventDispatchInvocation" select="'STATE_TRANSITION_TABLE[state][e]();'"/> <variable name="nullTransitionFunctionName" select="'$nt'"/> @@ -50,7 +50,7 @@ <text>[</text> - <for-each select="$eventsEnum"> + <for-each select="$enumeratedEventsEnum"> <sort select="c:id" data-type="number"/> <variable name="currentEvent" select="."/> @@ -61,8 +61,8 @@ <!-- conditionally instantiating this variable to a node-set. hacky syntax, see http://dpawson.co.uk/xsl/sect2/N8090.html#d10871e1456 --> <variable name="correspondingTransitions" - select="$currentState/s:transition[$isDefaultTransition][not(@event)] | - $currentState/s:transition[not($isDefaultTransition)]...@event = $currentEvent/c:name]"/> + select="$currentState/c:enumeratedEventTransitions/c:enumeratedTransition[$isDefaultTransition][not(@event)] | + $currentState/c:enumeratedEventTransitions/c:enumeratedTransition[not($isDefaultTransition)]...@event = $currentEvent/c:name]"/> <!-- <message> Modified: commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/SwitchyardStatechartGenerator.xsl URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/SwitchyardStatechartGenerator.xsl?rev=966772&r1=966771&r2=966772&view=diff ============================================================================== --- commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/SwitchyardStatechartGenerator.xsl (original) +++ commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/backends/js/SwitchyardStatechartGenerator.xsl Thu Jul 22 17:51:25 2010 @@ -22,7 +22,7 @@ <import href="AbstractEnumeratedStatechartGenerator.xsl"/> - <variable name="dispatchInvocation" select="'dispatch(state,e)'"/> + <variable name="enumeratedEventDispatchInvocation" select="'dispatch(state,e)'"/> <template name="genEnumeratedHooks"> //state transition table @@ -51,7 +51,7 @@ case <value-of select="$s/@c:enumId"/>: switch(e) { - <for-each select="$s/s:transition"> + <for-each select="$s/c:enumeratedEventTransitions/c:enumeratedTransition"> <call-template name="genEventCase"> <with-param name="t" select="."/> </call-template> Added: commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/addEventRegularExpressions.xsl URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/addEventRegularExpressions.xsl?rev=966772&view=auto ============================================================================== --- commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/addEventRegularExpressions.xsl (added) +++ commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/addEventRegularExpressions.xsl Thu Jul 22 17:51:25 2010 @@ -0,0 +1,146 @@ +<?xml version="1.0"?> +<!-- + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +--> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:s="http://www.w3.org/2005/07/scxml" + xmlns="http://www.w3.org/2005/07/scxml" + xmlns:c="http://commons.apache.org/scxml-js" + version="1.0"> + <xsl:output method="xml"/> + + <!-- identity transform --> + <xsl:template match="@*|node()"> + <xsl:copy> + <xsl:apply-templates select="@*|node()"/> + </xsl:copy> + </xsl:template> + + + <xsl:template name="escapePeriods"> + <xsl:param name="eventName" /> + + <xsl:variable name="first" select="substring-before($eventName, '.')" /> + <xsl:variable name="remaining" select="substring-after($eventName, '.')" /> + + <!-- + <xsl:message> + eventName:<xsl:value-of select="$eventName"/> + first:<xsl:value-of select="$first"/> + remaining:<xsl:value-of select="$remaining"/> + </xsl:message> + --> + + <xsl:choose> + <xsl:when test="$first and $remaining"> + <xsl:value-of select="$first" /><xsl:text>\.</xsl:text> + + <xsl:call-template name="escapePeriods"> + <xsl:with-param name="eventName" select="$remaining" /> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$eventName"/> + </xsl:otherwise> + </xsl:choose> + + </xsl:template> + + <xsl:template name="replacePeriodsWithUnderscores"> + <xsl:param name="eventName" /> + + <xsl:variable name="first" select="substring-before($eventName, '.')" /> + <xsl:variable name="remaining" select="substring-after($eventName, '.')" /> + + <!-- + <xsl:message> + eventName:<xsl:value-of select="$eventName"/> + first:<xsl:value-of select="$first"/> + remaining:<xsl:value-of select="$remaining"/> + </xsl:message> + --> + + <xsl:choose> + <xsl:when test="$first and $remaining"> + <xsl:value-of select="$first" /><xsl:text>_</xsl:text> + + <xsl:call-template name="replacePeriodsWithUnderscores"> + <xsl:with-param name="eventName" select="$remaining" /> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$eventName"/> + </xsl:otherwise> + </xsl:choose> + + </xsl:template> + + <!-- recursive template --> + <xsl:template name="eventNameToJsRegExpLiteral"> + <xsl:param name="eventName" /> + + <xsl:text>/^(</xsl:text> + <xsl:call-template name="escapePeriods"> + <xsl:with-param name="eventName" select="$eventName" /> + </xsl:call-template> + <xsl:text>)/</xsl:text> + </xsl:template> + + <xsl:template match="/s:scxml/c:allEventsEnum/c:event"> + + <xsl:variable name="safeRegexpName"> + <xsl:choose> + <xsl:when test="c:name/text() = '*'"> + <xsl:text>star</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="replacePeriodsWithUnderscores"> + <xsl:with-param name="eventName" select="c:name"/> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="regexpName" select="concat($safeRegexpName,'_Regexp_',generate-id())"/> + + <xsl:variable name="regexpValue"> + <xsl:choose> + <xsl:when test="c:name/text() = '*'"> + <xsl:text>/.*/</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="eventNameToJsRegExpLiteral"> + <xsl:with-param name="eventName" select="c:name/text()"/> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:copy> + <xsl:apply-templates select="@*"/> + + <c:regexp> + <c:name><xsl:value-of select="$regexpName"/></c:name> + <c:value><xsl:value-of select="$regexpValue"/></c:value> + </c:regexp> + + <xsl:apply-templates select="node()"/> + </xsl:copy> + </xsl:template> + + +</xsl:stylesheet> + + Propchange: commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/addEventRegularExpressions.xsl ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/copyEnumeratedEventTransitions.xsl URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/copyEnumeratedEventTransitions.xsl?rev=966772&view=auto ============================================================================== --- commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/copyEnumeratedEventTransitions.xsl (added) +++ commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/copyEnumeratedEventTransitions.xsl Thu Jul 22 17:51:25 2010 @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<!-- + Document : separateEnumeratedEventTransitions.xsl + Created on : July 20, 2010, 1:33 PM + Author : jacob + Description: + Purpose of transformation follows. +--> + +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:s="http://www.w3.org/2005/07/scxml" + xmlns="http://www.w3.org/2005/07/scxml" + xmlns:c="http://commons.apache.org/scxml-js" + version="1.0"> + <xsl:output method="xml"/> + + <!-- identity transform --> + <xsl:template match="@*|node()"> + <xsl:copy> + <xsl:apply-templates select="@*|node()"/> + </xsl:copy> + </xsl:template> + + <xsl:template match="s:*[s:transition]"> + <xsl:copy> + <xsl:apply-templates select="@*|node()"/> + + <c:enumeratedEventTransitions> + <xsl:for-each select="s:transition[not(@event) or not(contains(@event,'.'))]"> + <c:enumeratedTransition> + <xsl:apply-templates select="@*|node()"/> + </c:enumeratedTransition> + </xsl:for-each> + </c:enumeratedEventTransitions> + </xsl:copy> + </xsl:template> + + +</xsl:stylesheet> Propchange: commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/copyEnumeratedEventTransitions.xsl ------------------------------------------------------------------------------ svn:eol-style = native Modified: commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/enumerateEvents.xsl URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/enumerateEvents.xsl?rev=966772&r1=966771&r2=966772&view=diff ============================================================================== --- commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/enumerateEvents.xsl (original) +++ commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/enumerateEvents.xsl Thu Jul 22 17:51:25 2010 @@ -26,7 +26,8 @@ source document under the namespaced <ev version="1.0"> <xsl:output method="xml"/> - <xsl:key name="events" match="s:transition" use="@event"/> <!-- used for generating unique list --> + <xsl:key name="enumeratedEvents" match="c:enumeratedTransition" use="@event"/> <!-- used for generating unique list --> + <xsl:key name="allEvents" match="s:transition" use="@event"/> <!-- used for generating unique list --> <!-- we copy them, so that we can use their positions as identifiers --> @@ -38,12 +39,13 @@ source document under the namespaced <ev </xsl:template> <xsl:template match="/s:scxml"> - <xsl:variable name="uniqueEvents" select="//s:transition[generate-id(.)=generate-id(key('events',@event)[1])]/@event"/> + <xsl:variable name="uniqueEvents" select="//s:transition[generate-id(.)=generate-id(key('allEvents',@event)[1])]/@event"/> + <xsl:variable name="uniqueEnumeratedEvents" select="//c:enumeratedTransition[generate-id(.)=generate-id(key('enumeratedEvents',@event)[1])][not(@event='*')]/@event"/> <xsl:copy> <xsl:apply-templates select="@*|node()"/> - <c:eventsEnum> + <c:enumeratedEventsEnum> <!-- start with default event --> <!-- FIXME: this may be a bit specfic to the JavaScript backend, hence a bit evil. might be better to separate this out --> <c:event> @@ -55,6 +57,27 @@ source document under the namespaced <ev </c:id> </c:event> + <xsl:for-each select="$uniqueEnumeratedEvents"> + <c:event> + <c:name> + <xsl:value-of select="."/> + </c:name> + <c:id> + <xsl:value-of select="position()"/> + </c:id> + </c:event> + </xsl:for-each> + </c:enumeratedEventsEnum> + <c:allEventsEnum> + <c:event> + <c:name> + <xsl:value-of select="'$default'"/> + </c:name> + <c:id> + <xsl:value-of select="0"/> + </c:id> + </c:event> + <xsl:for-each select="$uniqueEvents"> <c:event> <c:name> @@ -65,7 +88,7 @@ source document under the namespaced <ev </c:id> </c:event> </xsl:for-each> - </c:eventsEnum> + </c:allEventsEnum> </xsl:copy> </xsl:template> Copied: commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/expandStarEvent.xsl (from r966771, commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/enumerateEvents.xsl) URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/expandStarEvent.xsl?p2=commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/expandStarEvent.xsl&p1=commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/enumerateEvents.xsl&r1=966771&r2=966772&rev=966772&view=diff ============================================================================== --- commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/enumerateEvents.xsl (original) +++ commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/expandStarEvent.xsl Thu Jul 22 17:51:25 2010 @@ -15,10 +15,6 @@ * See the License for the specific language governing permissions and * limitations under the License. --> -<!-- -This stylesheet creates a list of unique transition events, and adds it to the -source document under the namespaced <eventsEnum> element. ---> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:s="http://www.w3.org/2005/07/scxml" xmlns="http://www.w3.org/2005/07/scxml" @@ -26,9 +22,7 @@ source document under the namespaced <ev version="1.0"> <xsl:output method="xml"/> - <xsl:key name="events" match="s:transition" use="@event"/> <!-- used for generating unique list --> - - <!-- we copy them, so that we can use their positions as identifiers --> + <xsl:variable name="enumeratedEventsEnum" select="/s:scxml/c:enumeratedEventsEnum/c:event"/> <!-- identity transform --> <xsl:template match="@*|node()"> @@ -37,38 +31,25 @@ source document under the namespaced <ev </xsl:copy> </xsl:template> - <xsl:template match="/s:scxml"> - <xsl:variable name="uniqueEvents" select="//s:transition[generate-id(.)=generate-id(key('events',@event)[1])]/@event"/> + <xsl:template match="c:enumeratedtransiti...@event='*']"> - <xsl:copy> - <xsl:apply-templates select="@*|node()"/> - - <c:eventsEnum> - <!-- start with default event --> - <!-- FIXME: this may be a bit specfic to the JavaScript backend, hence a bit evil. might be better to separate this out --> - <c:event> - <c:name> - <xsl:value-of select="'$default'"/> - </c:name> - <c:id> - <xsl:value-of select="0"/> - </c:id> - </c:event> - - <xsl:for-each select="$uniqueEvents"> - <c:event> - <c:name> - <xsl:value-of select="."/> - </c:name> - <c:id> - <xsl:value-of select="position()"/> - </c:id> - </c:event> - </xsl:for-each> - </c:eventsEnum> - </xsl:copy> + <xsl:variable name="currentEnumeratedEventTransition" select="."/> + + <xsl:for-each select="$enumeratedEventsEnum[not(c:name/text() = '$default')]"> + <c:enumeratedTransition> + <xsl:apply-templates select="$currentEnumeratedEventTransition/@*[not(self::event)]"/> + + <xsl:attribute name="event"> + <xsl:value-of select="c:name"/> + </xsl:attribute> + + <xsl:apply-templates select="$currentEnumeratedEventTransition/node()"/> + </c:enumeratedTransition> + </xsl:for-each> </xsl:template> </xsl:stylesheet> + + Modified: commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/nameTransitions.xsl URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/nameTransitions.xsl?rev=966772&r1=966771&r2=966772&view=diff ============================================================================== --- commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/nameTransitions.xsl (original) +++ commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/nameTransitions.xsl Thu Jul 22 17:51:25 2010 @@ -41,12 +41,43 @@ enuemrated statechart backends. </xsl:copy> </xsl:template> + <xsl:template name="replacePeriodsWithUnderscores"> + <xsl:param name="eventName" /> + + <xsl:variable name="first" select="substring-before($eventName, '.')" /> + <xsl:variable name="remaining" select="substring-after($eventName, '.')" /> + + <!-- + <xsl:message> + eventName:<xsl:value-of select="$eventName"/> + first:<xsl:value-of select="$first"/> + remaining:<xsl:value-of select="$remaining"/> + </xsl:message> + --> + + <xsl:choose> + <xsl:when test="$first and $remaining"> + <xsl:value-of select="$first" /><xsl:text>_</xsl:text> + + <xsl:call-template name="replacePeriodsWithUnderscores"> + <xsl:with-param name="eventName" select="$remaining" /> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$eventName"/> + </xsl:otherwise> + </xsl:choose> + + </xsl:template> + <xsl:template match="s:transition"> <xsl:variable name="eventName"> <xsl:choose> <xsl:when test="@event"> - <xsl:value-of select="@event"/> + <xsl:call-template name="replacePeriodsWithUnderscores"> + <xsl:with-param name="eventName" select="@event" /> + </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="'$default'"/> @@ -58,7 +89,14 @@ enuemrated statechart backends. <xsl:apply-templates select="@*"/> <xsl:attribute name="tName" namespace="http://commons.apache.org/scxml-js"> - <xsl:value-of select="concat(../@id,'_',$eventName)"/> + <xsl:choose> + <xsl:when test="$eventName='*'"> + <xsl:value-of select="concat(../@id,'_star')"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="concat(../@id,'_',$eventName)"/> + </xsl:otherwise> + </xsl:choose> </xsl:attribute> <xsl:apply-templates select="node()"/> Modified: commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/numberStatesAndTransitions.xsl URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/numberStatesAndTransitions.xsl?rev=966772&r1=966771&r2=966772&view=diff ============================================================================== --- commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/numberStatesAndTransitions.xsl (original) +++ commons/sandbox/gsoc/2010/scxml-js/trunk/src/xslt/ir-compiler/numberStatesAndTransitions.xsl Thu Jul 22 17:51:25 2010 @@ -16,13 +16,6 @@ </xsl:template> <xsl:template match="s:sta...@c:isBasic] | s:final | s:initial | s:history"> - - <!-- what we want to ask is, what is his position in the nodeset that we've constructed? - but we can't use position normally... can only be used wrt to the context node - i think the easiest thing to think about is just iterating through these state nodes in a for-each - fashion. but... yah, can't do that in the top-down recursive manner that we're doing. - - --> <xsl:variable name="stateNum"> <xsl:number level="any" @@ -59,17 +52,10 @@ </xsl:template> - <xsl:template match="s:transition"> + <xsl:template match="c:enumeratedTransition"> - <!-- what we want to ask is, what is his position in the nodeset that we've constructed? - but we can't use position normally... can only be used wrt to the context node - i think the easiest thing to think about is just iterating through these state nodes in a for-each - fashion. but... yah, can't do that in the top-down recursive manner that we're doing. - - --> - <xsl:variable name="transitionNum"> - <xsl:number level="any" count="s:transition"/> + <xsl:number level="any" count="c:enumeratedTransition"/> </xsl:variable> <!-- Added: commons/sandbox/gsoc/2010/scxml-js/trunk/test/prefix_events/TestPrefixEvents.xml URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/test/prefix_events/TestPrefixEvents.xml?rev=966772&view=auto ============================================================================== --- commons/sandbox/gsoc/2010/scxml-js/trunk/test/prefix_events/TestPrefixEvents.xml (added) +++ commons/sandbox/gsoc/2010/scxml-js/trunk/test/prefix_events/TestPrefixEvents.xml Thu Jul 22 17:51:25 2010 @@ -0,0 +1,117 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +--> +<scxml + xmlns="http://www.w3.org/2005/07/scxml" + version="1.0" + profile="ecmascript"> + + <initial> + <transition target="a1"/> + </initial> + + <!-- given event foo.bar, foo should be selected, and we should end in state b1--> + <state id="a1"> + <transition event="foo" target="b1"/> + <transition event="foo.bar" target="a2"/> + </state> + + <state id="a2"/> + + <!-- Given event foo, we should end in state c1 --> + <state id="b1"> + <transition event="foo.bar" target="b2"/> + <transition event="foo" target="c1"/> + </state> + + <state id="b2"/> + + <!-- Given event foo.bar, we should end in state d1--> + <state id="c1"> + <transition event="foo.bar.bat" target="c2"/> + <transition event="foo.bar" target="d1"/> + </state> + + <state id="c2"/> + + <!-- given event foo.bar.bat, foo.bar should be selected, and we should end in state e1 --> + <state id="d1"> + <transition event="foo.bar" target="e1"/> + <transition event="foo.bar.bat" target="d2"/> + </state> + + <state id="d2"/> + + <!-- given event foo.bar.bat, foo.bar.bat should be selected, and we should end in state f1 --> + <state id="e1"> + <transition event="foo.bar.bat" target="f1"/> + <transition event="foo.bar" target="e2"/> + </state> + + <state id="e2"/> + + <!-- given event foo, * should be select, and we should end in g1 --> + <state id="f1"> + <transition event="*" target="g1"/> + <transition event="foo" target="f2"/> + </state> + + <state id="f2"/> + + <!-- given event foo, foo should be selected, and we should end in h1 --> + <state id="g1"> + <transition event="foo" target="h1"/> + <transition event="*" target="g2"/> + </state> + + <state id="g2"/> + + <!-- given event foo.bar, * should be selected, and we should end in i1 --> + <state id="h1"> + <transition event="*" target="i1"/> + <transition event="foo.bar" target="i2"/> + </state> + + <state id="i2"/> + + <!-- given event foo.bar, foo.bar should be selected, and we should end in j1 --> + <state id="i1"> + <transition event="foo.bar" target="j1"/> + <transition event="*" target="i2"/> + </state> + + <state id="i2"/> + + <!-- given event foo.bar, * should be select, and we should end in k1 --> + <state id="j1"> + <transition event="foo.bar.bat" target="j2"/> + <transition event="*" target="k1"/> + </state> + + <state id="j2"/> + + <!-- given event w00t, * should be select, and we should end in l1 --> + <state id="k1"> + <transition event="foo.bar" target="k2"/> + <transition event="*" target="l1"/> + </state> + + <state id="k2"/> + + <state id="l1"/> + +</scxml> Propchange: commons/sandbox/gsoc/2010/scxml-js/trunk/test/prefix_events/TestPrefixEvents.xml ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/gsoc/2010/scxml-js/trunk/test/prefix_events/scripts/unitTest.js URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/test/prefix_events/scripts/unitTest.js?rev=966772&view=auto ============================================================================== --- commons/sandbox/gsoc/2010/scxml-js/trunk/test/prefix_events/scripts/unitTest.js (added) +++ commons/sandbox/gsoc/2010/scxml-js/trunk/test/prefix_events/scripts/unitTest.js Thu Jul 22 17:51:25 2010 @@ -0,0 +1,124 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +require.def( "test/prefix_events/scripts/unitTest", +{ + + scxmlTest : "test/prefix_events/TestPrefixEvents.xml", + + register:function(scConstructor){ + + //TODO: can load this using RequireJS, so we don't need to use the dojo module system? + dojo.require("doh.runner"); + var sc; + doh.register("testPrefixEvents",[ + { + name:"testAll", + //timeout:5000, + setUp:function(){ + sc = new scConstructor() + sc.initialize(); + }, + runTest:function(){ + var $ = function(conf){return conf.map(function(s){return s.toString()})}; + + //sanity tests + var conf0 = sc.getCurrentConfiguration(); + console.log($(conf0)); + doh.assertEqual(sc._states.a1,conf0[0]); + + console.info("sending event foo.bar") + sc["foo.bar"]() + var conf1 = sc.getCurrentConfiguration(); + console.log($(conf1)); + doh.assertEqual(sc._states.b1,conf1[0]); + + + console.info("sending event foo") + sc.foo() + var conf2 = sc.getCurrentConfiguration(); + console.log($(conf2)); + doh.assertEqual(sc._states.c1,conf2[0]); + + console.info("sending event foo.bar") + sc["foo.bar"]() + var conf3 = sc.getCurrentConfiguration(); + console.log($(conf3)); + doh.assertEqual(sc._states.d1,conf3[0]); + + console.info("sending event foo.bar.bat") + sc["foo.bar.bat"]() + var conf4 = sc.getCurrentConfiguration(); + console.log($(conf4)); + doh.assertEqual(sc._states.e1,conf4[0]); + + console.info("sending event foo.bar.bat") + sc["foo.bar.bat"]() + var conf5 = sc.getCurrentConfiguration(); + console.log($(conf5)); + doh.assertEqual(sc._states.f1,conf5[0]); + + + console.info("sending event foo") + sc["foo"]() + var conf6 = sc.getCurrentConfiguration(); + console.log($(conf6)); + doh.assertEqual(sc._states.g1,conf6[0]); + + console.info("sending event foo") + sc["foo"]() + var conf7 = sc.getCurrentConfiguration(); + console.log($(conf7)); + doh.assertEqual(sc._states.h1,conf7[0]); + + + console.info("sending event foo.bar") + sc["foo.bar"]() + var conf8 = sc.getCurrentConfiguration(); + console.log($(conf8)); + doh.assertEqual(sc._states.i1,conf8[0]); + + console.info("sending event foo.bar") + sc["foo.bar"]() + var conf9 = sc.getCurrentConfiguration(); + console.log($(conf9)); + doh.assertEqual(sc._states.j1,conf9[0]); + + + console.info("sending event foo.bar") + sc["foo.bar"]() + var conf10 = sc.getCurrentConfiguration(); + console.log($(conf10)); + doh.assertEqual(sc._states.k1,conf10[0]); + + //TODO: fix GEN so that we can send in events that are not specified in the statechart + //console.info("sending event w00t") + //sc.GEN("w00t")() + //var conf11 = sc.getCurrentConfiguration(); + //console.log($(conf11)); + //doh.assertEqual(sc._states.l1,conf11[0]); + }, + tearDown:function(){ + sc.destroy(); + } + } + ]); + } +}) + + Propchange: commons/sandbox/gsoc/2010/scxml-js/trunk/test/prefix_events/scripts/unitTest.js ------------------------------------------------------------------------------ svn:eol-style = native Modified: commons/sandbox/gsoc/2010/scxml-js/trunk/test/test_with_xsltproc.sh URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/test/test_with_xsltproc.sh?rev=966772&r1=966771&r2=966772&view=diff ============================================================================== --- commons/sandbox/gsoc/2010/scxml-js/trunk/test/test_with_xsltproc.sh (original) +++ commons/sandbox/gsoc/2010/scxml-js/trunk/test/test_with_xsltproc.sh Thu Jul 22 17:51:25 2010 @@ -1,6 +1,6 @@ #!/bin/sh - -xsltproc ../src/xslt/ir-compiler/enumerateEvents.xsl kitchen_sink/KitchenSink_executableContent.xml | \ +#cat prefix_events/TestPrefixEvents.xml | \ +cat simple2.xml | \ xsltproc ../src/xslt/ir-compiler/normalizeInitialStates.xsl - | \ xsltproc ../src/xslt/ir-compiler/generateUniqueStateIds.xsl - | \ xsltproc ../src/xslt/ir-compiler/generateUniqueInitialStateIds.xsl - | \ @@ -13,11 +13,17 @@ xsltproc ../src/xslt/ir-compiler/appendB xsltproc ../src/xslt/ir-compiler/flattenTransitions.xsl - | \ xsltproc ../src/xslt/ir-compiler/appendTransitionInformation.xsl - | \ xsltproc ../src/xslt/ir-compiler/nameTransitions.xsl - | \ +# +xsltproc ../src/xslt/ir-compiler/copyEnumeratedEventTransitions.xsl - | \ +xsltproc ../src/xslt/ir-compiler/enumerateEvents.xsl - | \ +xsltproc ../src/xslt/ir-compiler/addEventRegularExpressions.xsl - | \ +xsltproc ../src/xslt/ir-compiler/expandStarEvent.xsl - | \ +# xsltproc ../src/xslt/ir-compiler/numberStatesAndTransitions.xsl - | \ xmlindent > tmp_IR.xml; #uncomment to compile IR to js -xsltproc ../build/StatePatternStatechartGenerator_combined.xsl tmp_IR.xml > out.js +xsltproc ../build/StateTableStatechartGenerator_combined.xsl tmp_IR.xml > out.js #uncomment to prettify js. need to have beautify.js, beautify-cl.js and beautify-html.js in this directory #java -cp ../lib/java/js.jar org.mozilla.javascript.tools.shell.Main -debug beautify-cl.js -i 4 out.js > out_pretty.js