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 @@
 			}
 		}
 
-        
+
     }
 
 }