Author: jbeard
Date: Sat Jul 31 22:34:25 2010
New Revision: 981101
URL: http://svn.apache.org/viewvc?rev=981101&view=rev
Log:
Test for send passes.
Modified:
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/build.js
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/javascript/scxml/cgf/backends/js/StatePatternStatechartGenerator.js
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/javascript/scxml/cgf/util/external_communications/jquery.js
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/javascript/scxml/cgf/util/xml/rhino.js
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/backends/js/AbstractEnumeratedStatechartGenerator.xsl
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/backends/js/AbstractStatechartGenerator.xsl
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/ir-compiler/external_communications/genMessageTemplates.xsl
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/test/send/TestSend.xml
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/test/send/scripts/unitTest.js
Modified:
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/build.js
URL:
http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/build.js?rev=981101&r1=981100&r2=981101&view=diff
==============================================================================
---
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/build.js
(original)
+++
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/build.js
Sat Jul 31 22:34:25 2010
@@ -56,8 +56,8 @@ require.def("build",
//enums
//we keep backward links of these
var backends = {
- "switch" : true,
- "table" : true,
+ //"switch" : true,
+ //"table" : true,
"state" : true
}
@@ -73,6 +73,7 @@ require.def("build",
//paths to all of the SCXML files we want to compile
var scxmlTests = {
+ /*
KitchenSink_dataModule
:"test/kitchen_sink/KitchenSink_dataModule.xml",
KitchenSink
:"test/kitchen_sink/KitchenSink.xml",
KitchenSink_performance
:"test/kitchen_sink/KitchenSink_performance.xml",
@@ -80,7 +81,9 @@ 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"
+
PrefixEvents:"test/prefix_events/TestPrefixEvents.xml",
+ */
+ TestSend:"test/send/TestSend.xml"
}
//FIXME: this violates Don't Repeat Yourself; these
paths are written here and in the module
@@ -107,13 +110,16 @@ require.def("build",
var unitTestScripts = [
+ /*
"test/kitchen_sink/scripts/unitTest_dataModel",
"test/kitchen_sink/scripts/unitTest",
"test/kitchen_sink/scripts/unitTest_executableContent",
"test/conditional_transition/scripts/unitTest",
"test/in_predicate/scripts/unitTest",
"test/event_system_properties/scripts/unitTest",
- "test/prefix_events/scripts/unitTest"
+ "test/prefix_events/scripts/unitTest",
+ */
+ "test/send/scripts/unitTest"
]
//gets populated at run-time
@@ -707,7 +713,8 @@ require.def("build",
load(generatedScript.path);
-
unitTestModule.register(StatechartExecutionContext);
+
//pass in xmlUtil as well, in case he needs it (currently only testSend
does)
+
unitTestModule.register(StatechartExecutionContext,xmlUtil);
delete StatechartExecutionContext;
});
Modified:
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/javascript/scxml/cgf/backends/js/StatePatternStatechartGenerator.js
URL:
http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/javascript/scxml/cgf/backends/js/StatePatternStatechartGenerator.js?rev=981101&r1=981100&r2=981101&view=diff
==============================================================================
---
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/javascript/scxml/cgf/backends/js/StatePatternStatechartGenerator.js
(original)
+++
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/javascript/scxml/cgf/backends/js/StatePatternStatechartGenerator.js
Sat Jul 31 22:34:25 2010
@@ -9,6 +9,8 @@ require.def(
"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/external_communications/splitNamelist.xsl",
+
"xml!src/xslt/ir-compiler/external_communications/filterParams.xsl",
"xml!build/StatePatternStatechartGenerator_combined.xsl"
//preprocessed stylesheet
],
@@ -19,6 +21,8 @@ require.def(
enumerateEvents,
addEventRegularExpressions,
expandStarEvent,
+ splitNamelist,
+ filterParams,
StatePatternStatechartGenerator
){
@@ -28,7 +32,9 @@ require.def(
copyEnumeratedEventTransitions,
enumerateEvents,
addEventRegularExpressions,
- expandStarEvent]),
+ expandStarEvent,
+ splitNamelist,
+ filterParams]),
"code" : StatePatternStatechartGenerator
};
Modified:
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/javascript/scxml/cgf/util/external_communications/jquery.js
URL:
http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/javascript/scxml/cgf/util/external_communications/jquery.js?rev=981101&r1=981100&r2=981101&view=diff
==============================================================================
---
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/javascript/scxml/cgf/util/external_communications/jquery.js
(original)
+++
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/javascript/scxml/cgf/util/external_communications/jquery.js
Sat Jul 31 22:34:25 2010
@@ -6,7 +6,7 @@ function(common){
return {
get : function(url){
var toReturn;
- $.ajax({
+ jQuery.ajax({
url:url,
success: function(result) {
toReturn = result;
@@ -15,7 +15,7 @@ function(common){
});
return toReturn;
},
- post : function(url,messagedata,contentdata){
+ sendEvent : function(url,messagedata,contentdata){
var postDataString = null;
if(typeof contentdata == "string"){
//assume content
@@ -43,6 +43,9 @@ function(common){
});
return toReturn;
*/
+ },
+ post : function(url,data){
+ jQuery.post(url,data);
}
}
})
Modified:
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/javascript/scxml/cgf/util/xml/rhino.js
URL:
http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/javascript/scxml/cgf/util/xml/rhino.js?rev=981101&r1=981100&r2=981101&view=diff
==============================================================================
---
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/javascript/scxml/cgf/util/xml/rhino.js
(original)
+++
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/javascript/scxml/cgf/util/xml/rhino.js
Sat Jul 31 22:34:25 2010
@@ -2,9 +2,14 @@ require.def("src/javascript/scxml/cgf/ut
function(){
return {
- parseFromString : function(){
- //I think this would use DocumentBuilderFactory
- new Error("No implementation for parseFromString.");
+ parseFromString : function(str){
+ var dbf =
javax.xml.parsers.DocumentBuilderFactory.newInstance();
+ var db = dbf.newDocumentBuilder();
+ var is = new org.xml.sax.InputSource();
+ is.setCharacterStream(new java.io.StringReader(str));
+
+ var doc = db.parse(is);
+ return doc;
},
serializeToString : (function(){
var ByteArrayOutputStream =
java.io.ByteArrayOutputStream;
Modified:
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/backends/js/AbstractEnumeratedStatechartGenerator.xsl
URL:
http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/backends/js/AbstractEnumeratedStatechartGenerator.xsl?rev=981101&r1=981100&r2=981101&view=diff
==============================================================================
---
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/backends/js/AbstractEnumeratedStatechartGenerator.xsl
(original)
+++
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/backends/js/AbstractEnumeratedStatechartGenerator.xsl
Sat Jul 31 22:34:25 2010
@@ -62,9 +62,6 @@
var <value-of select="c:name"/> = <value-of
select="c:id"/>;
</for-each>
- //expose them as a convenient interface as part of the API
- <call-template name="genTriggerExternalObject"/>
-
//needed for debugging
<call-template name="genTriggerIdToNameMap"/>
@@ -123,16 +120,6 @@
break;
</template>
- <template name="genTriggerExternalObject">
- this.TRIGGERS = {
- <for-each select="$enumeratedEventsEnum">
- <value-of select="c:name"/> : <value-of
select="c:name"/>
- <if test="not(position() = last())"> ,
</if>
- </for-each>
- };
- </template>
-
-
<template name="genTriggerIdToNameMap">
var TRIGGER_ID_TO_NAME_MAP = [
<for-each select="$enumeratedEventsEnum">
Modified:
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/backends/js/AbstractStatechartGenerator.xsl
URL:
http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/backends/js/AbstractStatechartGenerator.xsl?rev=981101&r1=981100&r2=981101&view=diff
==============================================================================
---
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/backends/js/AbstractStatechartGenerator.xsl
(original)
+++
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/backends/js/AbstractStatechartGenerator.xsl
Sat Jul 31 22:34:25 2010
@@ -19,8 +19,12 @@
xmlns:s="http://www.w3.org/2005/07/scxml"
xmlns:c="http://commons.apache.org/scxml-js"
version="1.0">
+
+ <import href="../../util/xml-to-string.xsl"/>
+
<output method="text"/>
+
<param name="log" select="true()"/>
<param name="noIndexOf" select="false()"/>
<param name="noMap" select="false()"/>
@@ -79,7 +83,11 @@
</choose>
</template>
- <template match="/s:scxml">
+ <template match="/">
+ <apply-templates/>
+ </template>
+
+ <template match="s:scxml">
<if test="$noIndexOf">
<call-template
name="genNoIndexOfArrayPrototypeExtension"/>
@@ -97,7 +105,7 @@
<call-template name="genNoSomeArrayPrototypeExtension"/>
</if>
- function <value-of select="@name"/>StatechartExecutionContext(){
+ function <value-of
select="@name"/>StatechartExecutionContext(commObject){
var self = this; //used in the rare
occasions we call public functions from inside this class
@@ -137,6 +145,9 @@
<with-param name="states"
select="$basicStates"/>
</call-template>
+ //trigger enum
+ <call-template name="genTriggerEnum"/>
+
//trigger methods for synchronous interaction
<for-each
select="$allEventsEnum[not(c:name/text() = '*')]">
<call-template
name="genExternalTriggerDispatcher">
@@ -171,7 +182,7 @@
= <value-of select="@expr"/>
</when>
<when test="@src">
- = xhrGET(<value-of select="@src"/>)
+ = commObject.get(<value-of
select="@src"/>)
</when>
<!-- if this inline content is JSON, we're
good,
otherwise, we need to parse the xml DOM
at runtime
@@ -320,6 +331,17 @@
</template>
+ <template name="genTriggerEnum">
+ this.TRIGGERS = {
+ <for-each select="$enumeratedEventsEnum">
+ <value-of select="c:name"/> :
+ <call-template
name="genExternalTriggerDispatcherRunToCompletionEventValue">
+ <with-param
name="eventName" select="c:name"/>
+ </call-template>
+ <if test="not(position() = last())"> ,
</if>
+ </for-each>
+ };
+ </template>
<template name="genStatesEnum">
<param name="states"/>
@@ -399,20 +421,214 @@
<!-- external communications module -->
+ <template name="genHandleSendEvent">
+ <choose>
+ <when test="@event">
+ <!-- handle event statically -->
+ innerEventQueue.push(
+ <call-template
name="genExternalTriggerDispatcherRunToCompletionEventValue">
+ <with-param name="eventName"
select="@event"/>
+ </call-template>,
+ null,
+ <value-of
select="boolean($enumeratedEventsEnum[c:name/text() = @event])"/> );
+ </when>
+ <when test="@eventexpr">
+ <!-- handle event dynamically -->
+ <!-- adds event to inner queue dynamically -->
+ innerEventQueue.push(<value-of
select="@eventexpr"/>,null,this.TRIGGERS[e]);
+ </when>
+ </choose>
+ </template>
+
+ <template match="s:send">
+ <!-- TODO: switch based on whether send is internal.
+ the code so far is only for external -->
+
+ <variable name="eventParamValue">
+ <choose>
+ <when test="@event">
+ "<value-of select="@event"/>"
+ </when>
+ <when test="@eventexpr">
+ <value-of select="@eventexpr"/>
+ </when>
+ <otherwise>
+ <!-- TODO: move into constant variable
-->
+ "external.event"
+ </otherwise>
+ </choose>
+ </variable>
+
+ <variable name="targetParamValue">
+ <choose>
+ <when test="@target">
+ "<value-of select="@target"/>"
+ </when>
+ <when test="@targetexpr">
+ <value-of select="@targetexpr"/>
+ </when>
+ <otherwise>
+ "#_internal"
+ </otherwise>
+ </choose>
+ </variable>
+
+ <variable name="typeParamValue">
+ <choose>
+ <when test="@type">
+ "<value-of select="@type"/>"
+ </when>
+ <when test="@typeexpr">
+ <value-of select="@typeexpr"/>
+ </when>
+ <otherwise>
+ "scxml"
+ </otherwise>
+ </choose>
+ </variable>
+
+ <variable name="idParamValue">
+ <choose>
+ <when test="@id">
+ "<value-of select="@id"/>"
+ </when>
+ <when test="@idlocation">
+ <value-of select="@idlocation"/>
+ </when>
+ <otherwise>
+ <!-- empty node-set? empty string?-->
+ ""
+ </otherwise>
+ </choose>
+ </variable>
+
+ <variable name="delayParamValue">
+ <choose>
+ <when test="@delay">
+ "<value-of select="@delay"/>"
+ </when>
+ <when test="@delayexpr">
+ <value-of select="@delayexpr"/>
+ </when>
+ <otherwise>
+ <!-- empty node-set? empty string?-->
+ ""
+ </otherwise>
+ </choose>
+ </variable>
+
+ <variable name="hintsParamValue">
+ <choose>
+ <when test="@hints">
+ "<value-of select="@hints"/>"
+ </when>
+ <when test="@hintsexpr">
+ <value-of select="@hintsexpr"/>
+ </when>
+ <otherwise>
+ <!-- empty node-set? empty string?-->
+ ""
+ </otherwise>
+ </choose>
+ </variable>
+
+ <variable name="payload">
+ <choose>
+ <when test="s:content">
+ <!-- serialize to js-safe string -->
+ '<apply-templates select="s:content"/>'
+ </when>
+ <otherwise>
+ {
+ <for-each select="c:namelist/c:name |
s:param">
+ <variable name="name">
+ <choose>
+ <when
test="@name">
+
<value-of select="@name"/>
+ </when>
+ <otherwise>
+
<value-of select="."/>
+ </otherwise>
+ </choose>
+ </variable>
+ <value-of select="$name" /> :
<value-of select="$name" />
+ <if test="@expr">
+ || <value-of
select="@expr"/>
+ </if>
+ <if test="not(position() =
last())">
+ ,
+ </if>
+ </for-each>
+ }
+ </otherwise>
+ </choose>
+ </variable>
+
+ <choose>
+ <!-- need to handle both static and dynamic cases,
hence some reduplication of code... -->
+ <when test="@target = '#_internal'
+
or (not(@target) and not(@targetexpr))">
+ <!-- handle target statically -->
+ <call-template name="genHandleSendEvent"/>
+ </when>
+ <!-- TODO: handle session ids -->
+ <!--
+ <when test="@target = '#_scxml_'">
+ </when>
+ -->
+ <!-- TODO: handle invoke-->
+ <otherwise>
+ <!-- handle target dynamically -->
+ if(<value-of select="$targetParamValue"/> ===
'#_internal'){
+ <call-template
name="genHandleSendEvent"/>
+ }
+ //TODO: handle session id's dyanmically
+ /*
+ if(<value-of select="$targetParamValue"/> ===
'#_scxml_number'){
+ //figure out what kind of an API we
want to use for this
+ //accepts a map? sends across some
event bus? dunno... architecture issue
+ }
+ */
+ else{
+ //external event
+ commObject.sendEvent(
+ <value-of
select="$targetParamValue"/>,
+ {
+ $event : <value-of
select="$eventParamValue"/>,
+ $target : <value-of
select="$targetParamValue"/>,
+ $type : <value-of
select="$typeParamValue"/>,
+ $sendid : <value-of
select="$idParamValue"/>,
+ $delay : <value-of
select="$delayParamValue"/>,
+ $hints : <value-of
select="$hintsParamValue"/>
+ },
+ <value-of select="$payload"/>
+ )
+ }
+ </otherwise>
+ </choose>
+ </template>
+
+ <template match="s:content">
+ <call-template name="escape-js-string">
+ <with-param name="text">
+ <for-each select="node()">
+ <call-template name="xml-to-string"/>
+ </for-each>
+ </with-param>
+ </call-template>
+ </template>
+
+ <!--
<template match="s:send">
<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"/>
@@ -422,6 +638,7 @@
</otherwise>
</choose>
</template>
+ -->
<template match="s:cancel">
<!--TODO-->
@@ -579,7 +796,6 @@
isPreempted = false;
}
-
this.destroy = function(){
//right now, this only disables timer and sets global
destroyed variable to prevent future callbacks
window.clearTimeout(mainLoopCallback);
@@ -590,7 +806,7 @@
//this is for async communication
this.GEN = function(e,data){
- outerEventQueue.push(e,data);
+ outerEventQueue.push(e,data,this.TRIGGERS[e]);
}
//this may or may not be something we want to expose, but for
right now, we at least need it for testing
@@ -914,6 +1130,5 @@
<template name="genTriggerDispatcherContext"/>
<template name="genExternalTriggerDispatcherRunToCompletionEventValue"/>
-
</stylesheet>
Modified:
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/ir-compiler/external_communications/genMessageTemplates.xsl
URL:
http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/ir-compiler/external_communications/genMessageTemplates.xsl?rev=981101&r1=981100&r2=981101&view=diff
==============================================================================
---
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/ir-compiler/external_communications/genMessageTemplates.xsl
(original)
+++
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/src/xslt/ir-compiler/external_communications/genMessageTemplates.xsl
Sat Jul 31 22:34:25 2010
@@ -197,19 +197,42 @@
</xsl:choose>
</xsl:variable>
- <xsl:text>send(</xsl:text>
- <xsl:value-of select="$targetParamValue"/>,
- {
- $event : <xsl:value-of
select="$eventParamValue"/>,
- $target : <xsl:value-of
select="$targetParamValue"/>,
- $type : <xsl:value-of
select="$typeParamValue"/>,
- $sendid : <xsl:value-of
select="$idParamValue"/>,
- $delay : <xsl:value-of
select="$delayParamValue"/>,
- $hints : <xsl:value-of
select="$hintsParamValue"/>
+ <xsl:choose>
+ <!-- need to handle both static and dynamic cases,
hence some reduplication of code... -->
+ <xsl:when test="@target = '#_internal'">
+
+ </xsl:when>
+ <!-- TODO: handle session ids -->
+ <!--
+ <xsl:when test="@target = '#_scxml_'">
+ </xsl:when>
+ -->
+ <!-- TODO: handle invoke-->
+ <xsl:otherwise>
+ if(<xsl:value-of select="$eventParamValue"/>
=== '#_internal'){
+ innerEventQueue.push(
+ <call-template
name="genExternalTriggerDispatcherRunToCompletionEventValue">
+ <with-param
name="eventName" select="$eventParamValue"/>
+ </call-template>,
+ null,
+ <value-of
select="boolean($enumeratedEventsEnum[c:name/text() = $eventName])"/> );
+ }else{
+ send(
+ <xsl:value-of
select="$targetParamValue"/>,
+ {
+ $event : <xsl:value-of
select="$eventParamValue"/>,
+ $target : <xsl:value-of
select="$targetParamValue"/>,
+ $type : <xsl:value-of
select="$typeParamValue"/>,
+ $sendid : <xsl:value-of
select="$idParamValue"/>,
+ $delay : <xsl:value-of
select="$delayParamValue"/>,
+ $hints : <xsl:value-of
select="$hintsParamValue"/>
- },
- <xsl:value-of select="$payload"/>
- <xsl:text>)</xsl:text>
+ },
+ <xsl:value-of
select="$payload"/>
+ )
+ }
+ </xsl:otherwise>
+ </xsl:choose>
<xsl:text>

</xsl:text>
</xsl:template>
Modified:
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/test/send/TestSend.xml
URL:
http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/test/send/TestSend.xml?rev=981101&r1=981100&r2=981101&view=diff
==============================================================================
---
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/test/send/TestSend.xml
(original)
+++
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/test/send/TestSend.xml
Sat Jul 31 22:34:25 2010
@@ -33,13 +33,13 @@
<!-- given event foo.bar, foo should be selected, and we should end in
state b1-->
<state id="a">
<transition target="b" event="t1">
- <send target="http://www.google.com"/>
+ <send target="a.com" event="my.event.one"/>
</transition>
</state>
<state id="b">
<transition target="c" event="t2">
- <send target="http://www.google.com" namelist="foo
bar"/>
+ <send target="b.com" namelist="foo bar"/>
</transition>
</state>
@@ -48,7 +48,7 @@
<!-- namelist foo should take priority over param foo,
default expression in bar should be ignored, as
it's already defined in the data model,
and bat is not defined, so should here use the
value 'default3' -->
- <send target="http://www.google.com" namelist="foo">
+ <send target="c.com" namelist="foo"
event="my.event.two">
<param name="foo" expr="'default1'"/>
<param name="bar" expr="'default2'"/>
<param name="bat" expr="'default3'"/>
@@ -59,14 +59,8 @@
<state id="d">
<transition target="e" event="t4">
<!-- try with JSON data -->
- <send target="http://www.google.com">
- <content><![CDATA[
- {
- foo : 'foo',
- bar : 1,
- woot : true
- }
- ]]></content>
+ <send target="d.com">
+ <content><![CDATA[{ foo : 'foo', bar :
1, woot : true }]]></content>
</send>
</transition>
</state>
@@ -74,24 +68,8 @@
<state id="e">
<transition target="f" event="t5">
<!-- try it with some arbirary XML content, here a bit
of XSL -->
- <send target="http://www.google.com">
- <content>
- <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"
-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- version="1.0">
- <xsl:output method="text"/>
-
- <xsl:template match="send">
-
<xsl:text>send(</xsl:text>
-
<xsl:apply-templates select="c:messageTemplate"/>,
-
<xsl:text>'</xsl:text><xsl:value-of
select="@target"/><xsl:text>'</xsl:text>
- <xsl:text>)</xsl:text>
- </xsl:template>
- </xsl:stylesheet>
- </content>
+ <send target="e.com" event="my.event.three">
+ <content><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"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0">
<xsl:output method="text"/> <xsl:template match="send">
<xsl:text>send(</xsl:text> <xsl:apply-templates select="c:messageTemplate"/>,
<xsl:text>'</xsl:text><xsl:value-of
select="@target"/><xsl:text>'</xsl:text> <xsl:text>)</xsl:text>
</xsl:template> </xsl:stylesheet></content>
</send>
</transition>
</state>
Modified:
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/test/send/scripts/unitTest.js
URL:
http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/test/send/scripts/unitTest.js?rev=981101&r1=981100&r2=981101&view=diff
==============================================================================
---
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/test/send/scripts/unitTest.js
(original)
+++
commons/sandbox/gsoc/2010/scxml-js/branches/SCXML-143_external-communications-module/test/send/scripts/unitTest.js
Sat Jul 31 22:34:25 2010
@@ -21,7 +21,7 @@ require.def( "test/send/scripts/unitTest
scxmlTest : "test/send/TestSend.xml",
- register:function(scConstructor){
+ register:function(scConstructor,xmlUtil){
//TODO: can load this using RequireJS, so we don't need to use
the dojo module system?
dojo.require("doh.runner");
@@ -34,11 +34,12 @@ require.def( "test/send/scripts/unitTest
//set up mock communications
object
mockComm = {
_lastUrl : "",
- _lastData : "",
- send :
funciton(url,data){
+ _lastMessageData : "",
+ _lastContentData : "",
+ sendEvent :
function(url,messagedata,contentdata){
this._lastUrl =
url;
- this._lastData
= data;
-
console.log("data ", data);
+
this._lastMessageData = messagedata;
+
this._lastContentData = contentdata;
}
};
sc = new scConstructor(mockComm)
@@ -48,47 +49,73 @@ require.def( "test/send/scripts/unitTest
var $ = function(conf){return
conf.map(function(s){return s.toString()})};
var conf;
- var googleUrl =
"http://www.google.com";
conf =
sc.getCurrentConfiguration();
console.log($(conf));
-
doh.assertEqual(setwiseEqual(sc._states.a,conf[0]));
+
doh.assertEqual(sc._states.a,conf[0]);
console.info("sending event t1")
sc.t1()
conf =
sc.getCurrentConfiguration();
console.log($(conf));
-
doh.assertEqual(setwiseEqual(sc._states.b,conf[0]));
+
doh.assertEqual(sc._states.b,conf[0]);
-
doh.assertEqual(googleUrl,mockComm._lastUrl);
-
doh.assertEqual("",mockComm._lastData);
+
doh.assertEqual("a.com",mockComm._lastUrl);
+
doh.assertEqual("a.com",mockComm._lastMessageData.$target);
+
doh.assertEqual("my.event.one",mockComm._lastMessageData.$event);
console.info("sending event t2")
sc.t2()
conf =
sc.getCurrentConfiguration();
console.log($(conf));
-
doh.assertEqual(setwiseEqual(sc._states.c,conf[0]));
+
doh.assertEqual(sc._states.c,conf[0]);
- //TODO: figure out best way to
test the mock data coming in
+
doh.assertEqual("b.com",mockComm._lastUrl);
+
doh.assertEqual("b.com",mockComm._lastMessageData.$target);
+
doh.assertEqual("external.event",mockComm._lastMessageData.$event);
+
doh.assertEqual("foo",mockComm._lastContentData.foo);
+
doh.assertEqual(1,mockComm._lastContentData.bar);
console.info("sending event t3")
sc.t3()
conf =
sc.getCurrentConfiguration();
console.log($(conf));
-
doh.assertEqual(setwiseEqual(sc._states.d,conf[0]));
+
doh.assertEqual(sc._states.d,conf[0]);
+
+
doh.assertEqual("c.com",mockComm._lastUrl);
+
doh.assertEqual("c.com",mockComm._lastMessageData.$target);
+
doh.assertEqual("my.event.two",mockComm._lastMessageData.$event);
+
doh.assertEqual("foo",mockComm._lastContentData.foo);
+
doh.assertEqual(1,mockComm._lastContentData.bar);
+
doh.assertEqual("default3",mockComm._lastContentData.bat);
console.info("sending event t4")
sc.t4()
conf =
sc.getCurrentConfiguration();
console.log($(conf));
-
doh.assertEqual(setwiseEqual(sc._states.e,conf[0]));
+
doh.assertEqual(sc._states.e,conf[0]);
+
+
doh.assertEqual("d.com",mockComm._lastUrl);
+
doh.assertEqual("d.com",mockComm._lastMessageData.$target);
+
doh.assertEqual("external.event",mockComm._lastMessageData.$event);
+ doh.assertEqual("{ foo : 'foo',
bar : 1, woot : true }",mockComm._lastContentData);
console.info("sending event t5")
sc.t5()
conf =
sc.getCurrentConfiguration();
console.log($(conf));
-
doh.assertEqual(setwiseEqual(sc._states.f,conf[0]));
+
doh.assertEqual(sc._states.f,conf[0]);
+
+ //we compare the expected and
actual xml documents by parsing and serializing them
+ //this should hopefully take
care of any platform-specific xml strangeness (which is why we don't compare to
a string directly)
+ var expectedDoc =
xmlUtil.parseFromString('<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output
method="text"/> <xsl:template match="send"> <xsl:text>send(</xsl:text>
<xsl:apply-templates select="c:messageTemplate"/>,
<xsl:text>'</xsl:text><xsl:value-of
select="@target"/><xsl:text>'</xsl:text> <xsl:text>)</xsl:text>
</xsl:template> </xsl:stylesheet>')
+ var expectedSerializedDocString
= xmlUtil.serializeToString(expectedDoc);
+
+
doh.assertEqual("e.com",mockComm._lastUrl);
+
doh.assertEqual("e.com",mockComm._lastMessageData.$target);
+
doh.assertEqual("my.event.three",mockComm._lastMessageData.$event);
+
doh.assertEqual(expectedSerializedDocString,xmlUtil.serializeToString(xmlUtil.parseFromString(mockComm._lastContentData)));
},
tearDown:function(){