diff options
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"/> |