SLING-3241 Unwrapped any wrapped objects before returning
the result from script evaluation.
Also adapted the ScriptableResourceTest becaused "undefined" is returned
as null now. The test evaluates a comparison to the undefined value and
verifies the result is true.
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1541393 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngine.java b/src/main/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngine.java
index dc47389..c6c277b 100644
--- a/src/main/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngine.java
+++ b/src/main/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngine.java
@@ -36,6 +36,7 @@
import org.mozilla.javascript.ScriptRuntime;
import org.mozilla.javascript.Scriptable;
import org.mozilla.javascript.ScriptableObject;
+import org.mozilla.javascript.Undefined;
import org.mozilla.javascript.WrapFactory;
import org.mozilla.javascript.Wrapper;
import org.slf4j.Logger;
@@ -111,9 +112,15 @@
final int lineNumber = 1;
final Object securityDomain = null;
- return rhinoContext.evaluateReader(scope, scriptReader, scriptName,
+ Object result = rhinoContext.evaluateReader(scope, scriptReader, scriptName,
lineNumber, securityDomain);
+ if (result instanceof Wrapper) {
+ result = ((Wrapper) result).unwrap();
+ }
+
+ return (result instanceof Undefined) ? null : result;
+
} catch (JavaScriptException t) {
// prevent variables to be pushed back in case of errors
diff --git a/src/test/java/org/apache/sling/scripting/wrapper/ScriptableResourceTest.java b/src/test/java/org/apache/sling/scripting/wrapper/ScriptableResourceTest.java
index a65474b..4ca58be 100644
--- a/src/test/java/org/apache/sling/scripting/wrapper/ScriptableResourceTest.java
+++ b/src/test/java/org/apache/sling/scripting/wrapper/ScriptableResourceTest.java
@@ -37,7 +37,6 @@
import org.apache.sling.jcr.resource.JcrResourceConstants;
import org.apache.sling.scripting.RepositoryScriptingTestBase;
import org.apache.sling.scripting.javascript.internal.ScriptEngineHelper;
-import org.mozilla.javascript.Undefined;
import org.mozilla.javascript.Wrapper;
public class ScriptableResourceTest extends RepositoryScriptingTestBase {
@@ -153,14 +152,10 @@
data.put("resource", new TestResource(node));
// the node to which the resource adapts
- assertEquals(Undefined.instance,
- script.eval("resource.adaptTo()", data));
- assertEquals(Undefined.instance, script.eval("resource.adaptTo(null)",
- data));
- assertEquals(Undefined.instance, script.eval(
- "resource.adaptTo(undefined)", data));
- assertEquals(Undefined.instance, script.eval(
- "resource.adaptTo(Packages.java.util.Date)", data));
+ assertEquals(true, script.eval("resource.adaptTo() == undefined", data));
+ assertEquals(true, script.eval("resource.adaptTo(null) == undefined", data));
+ assertEquals(true, script.eval("resource.adaptTo(undefined) == undefined", data));
+ assertEquals(true, script.eval("resource.adaptTo(Packages.java.util.Date) == undefined", data));
}
private void assertEquals(Node expected, Object actual) {
@@ -279,7 +274,7 @@
}
}
-
+
}
}