summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--embedding/java/src/org/uscxml/tests/datamodel/TestDataModelAccess.java9
-rw-r--r--src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/dom/JSCDocumentCustom.cpp9
-rw-r--r--src/uscxml/plugins/datamodel/ecmascript/v8/dom/V8DocumentCustom.cpp3
-rw-r--r--test/uscxml/dom/test-xml-access.scxml9
4 files changed, 23 insertions, 7 deletions
diff --git a/embedding/java/src/org/uscxml/tests/datamodel/TestDataModelAccess.java b/embedding/java/src/org/uscxml/tests/datamodel/TestDataModelAccess.java
index fcad186..5f14946 100644
--- a/embedding/java/src/org/uscxml/tests/datamodel/TestDataModelAccess.java
+++ b/embedding/java/src/org/uscxml/tests/datamodel/TestDataModelAccess.java
@@ -18,18 +18,23 @@ public class TestDataModelAccess {
" <data id=\"cmplx1\"><![CDATA[" +
" { foo: \"bar\", baz: 12 }" +
" ]]></data>" +
+ " <data id=\"cmplx2\">" +
+ " <inline><xml foo=\"sdfasdf\"/></inline>" +
+ " </data>" +
" </datamodel>" +
" <state id=\"s1\">" +
" <onentry>" +
" <log label=\"cmplx1\" expr=\"cmplx1.foo\" />" +
" <log label=\"cmplx1\" expr=\"cmplx1.baz\" />" +
" <script>dump(cmplx1)</script>" +
- " </onentry>" +
+ "" +
+ " <log label=\"cmplx2\" expr=\"document.evaluate('//xml/@foo').asString()\" />" +
+ " </onentry>" +
" <transition target=\"done\" />" +
" </state>" +
" <final id=\"done\" />" +
"</scxml>";
-
+
Interpreter interpreter = Interpreter.fromXML(xml);
InterpreterState state;
do {
diff --git a/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/dom/JSCDocumentCustom.cpp b/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/dom/JSCDocumentCustom.cpp
index c6ee022..a6d194f 100644
--- a/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/dom/JSCDocumentCustom.cpp
+++ b/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/dom/JSCDocumentCustom.cpp
@@ -24,6 +24,7 @@
#include "JSCXPathResult.h"
#include "JSCNode.h"
#include <XPath/XPath.hpp>
+#include <DOM/io/Stream.hpp>
namespace Arabica {
namespace DOM {
@@ -93,7 +94,13 @@ JSValueRef JSCDocument::evaluateCustomCallback(JSContextRef ctx, JSObjectRef fun
return JSValueMakeUndefined(ctx);
}
- Arabica::DOM::Node<std::string>* localContextNode = (Arabica::DOM::Node<std::string>*)JSObjectGetPrivate(JSValueToObject(ctx, arguments[1], NULL));
+// Arabica::DOM::Node<std::string>* localContextNode = (Arabica::DOM::Node<std::string>*)JSObjectGetPrivate(JSValueToObject(ctx, arguments[1], NULL));
+ JSCNode::JSCNodePrivate* otherNodePrivate = (JSCNode::JSCNodePrivate*)JSObjectGetPrivate(JSValueToObject(ctx, arguments[1], NULL));
+ Arabica::DOM::Node<std::string>* localContextNode = otherNodePrivate->nativeObj;
+
+// std::cout << *localContextNode << std::endl;
+// std::cout << ">>" << privData->dom->xpath->evaluate("//note/@importance", *localContextNode).asString() << "<<" << std::endl;
+
retVal = new XPath::XPathValue<std::string>(privData->dom->xpath->evaluate(localXPath, *localContextNode));
} else {
retVal = new XPath::XPathValue<std::string>(privData->dom->xpath->evaluate(localXPath, *privData->nativeObj));
diff --git a/src/uscxml/plugins/datamodel/ecmascript/v8/dom/V8DocumentCustom.cpp b/src/uscxml/plugins/datamodel/ecmascript/v8/dom/V8DocumentCustom.cpp
index 8659ccd..f9882f0 100644
--- a/src/uscxml/plugins/datamodel/ecmascript/v8/dom/V8DocumentCustom.cpp
+++ b/src/uscxml/plugins/datamodel/ecmascript/v8/dom/V8DocumentCustom.cpp
@@ -59,7 +59,8 @@ v8::Handle<v8::Value> V8Document::evaluateCustomCallback(const v8::Arguments& ar
XPath::XPathValue<std::string>* retVal;
try {
if (args.Length() > 1) {
- Arabica::DOM::Node<std::string>* localContextNode = V8DOM::toClassPtr<Arabica::DOM::Node<std::string> >(args[1]->ToObject()->GetInternalField(0));
+ V8Node::V8NodePrivate* otherNodePrivate = V8DOM::toClassPtr<V8Node::V8NodePrivate>(args[1]->ToObject()->GetInternalField(0));
+ Arabica::DOM::Node<std::string>* localContextNode = otherNodePrivate->nativeObj;
retVal = new XPath::XPathValue<std::string>(privData->dom->xpath->evaluate(*localExpression, *localContextNode));
} else {
retVal = new XPath::XPathValue<std::string>(privData->dom->xpath->evaluate(*localExpression, *privData->nativeObj));
diff --git a/test/uscxml/dom/test-xml-access.scxml b/test/uscxml/dom/test-xml-access.scxml
index a637c00..4c7abab 100644
--- a/test/uscxml/dom/test-xml-access.scxml
+++ b/test/uscxml/dom/test-xml-access.scxml
@@ -2,19 +2,22 @@
<scxml datamodel="ecmascript">
<script src="http://uscxml.tk.informatik.tu-darmstadt.de/scripts/dump.js"/>
<datamodel>
- <data id="cmplx1" src="TestData.json"/>
<data id="cmplx2" src="TestData.xml"/>
+ <data id="cmplx1" src="TestData.json"/>
+ <data id="cmplx3"><inline><xml foo="sdfasdf"/></inline></data>
</datamodel>
<state id="s1">
<onentry>
+ <log label="cmplx2" expr="document.evaluate('//note/@importance', cmplx2).asString()" />
<log label="cmplx1" expr="cmplx1.name"/>
<log label="cmplx1" expr="cmplx1.price"/>
<script>dump(cmplx1)</script>
+ <log label="cmplx3" expr="document.evaluate('//xml/@foo').asString()" />
<log label="cmplx2" expr="cmplx2.getAttribute('importance')"/>
<script>
- var node = document.evaluate('//to', cmplx2).asString();
- dump(node);
+ dump(document.evaluate('/scxml/@datamodel').asString());
+ dump(document.evaluate('//xml/@foo', cmplx3).asString());
</script>
</onentry>
<transition target="done"/>