You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ra...@apache.org on 2015/04/16 13:02:50 UTC

svn commit: r1674040 - in /sling/trunk/bundles/scripting/javascript: ./ src/main/java/org/apache/sling/scripting/javascript/helper/ src/main/java/org/apache/sling/scripting/javascript/internal/ src/main/java/org/apache/sling/scripting/javascript/wrappe...

Author: radu
Date: Thu Apr 16 11:02:50 2015
New Revision: 1674040

URL: http://svn.apache.org/r1674040
Log:
SLING-3413 - Extend the JavaScript Resource API

* implemented getChild(String), getChildren(), getName(), getParent(), isResourceType(String), listChildren()
for the JS Resource API
* extended tests
* minor code cleanup
* updated some POM dependencies to next release post-incubator phase

Modified:
    sling/trunk/bundles/scripting/javascript/pom.xml
    sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingGlobal.java
    sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngineFactory.java
    sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableCalendar.java
    sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableNode.java
    sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptablePrintWriter.java
    sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableProperty.java
    sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableResource.java
    sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableVersion.java
    sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableVersionHistory.java
    sling/trunk/bundles/scripting/javascript/src/test/java/org/apache/sling/scripting/javascript/internal/ScriptEngineHelper.java
    sling/trunk/bundles/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableNodeTest.java
    sling/trunk/bundles/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableResourceTest.java

Modified: sling/trunk/bundles/scripting/javascript/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/javascript/pom.xml?rev=1674040&r1=1674039&r2=1674040&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/javascript/pom.xml (original)
+++ sling/trunk/bundles/scripting/javascript/pom.xml Thu Apr 16 11:02:50 2015
@@ -54,7 +54,7 @@
                 <configuration>
                     <instructions>
                         <Import-Package>
-                          javax.jcr.*;version=1.0,
+                          javax.jcr.*;version=2.0,
                           *
                         </Import-Package>
                         <Export-Package>
@@ -102,17 +102,17 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.api</artifactId>
-            <version>2.0.8</version>
+            <version>2.1.0</version>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.scripting.api</artifactId>
-            <version>2.0.2-incubator</version>
+            <version>2.1.0</version>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.jcr.resource</artifactId>
-            <version>2.0.6</version>
+            <version>2.3.8</version>
             <exclusions>
                 <exclusion>
                     <groupId>org.apache.jackrabbit</groupId>
@@ -132,7 +132,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.commons.json</artifactId>
-            <version>2.0.2-incubator</version>
+            <version>2.0.6</version>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
@@ -149,12 +149,18 @@
             <artifactId>org.osgi.compendium</artifactId>
         </dependency>
         <dependency>
+            <groupId>javax.jcr</groupId>
+            <artifactId>jcr</artifactId>
+            <version>2.0</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
             <groupId>javax.servlet</groupId>
             <artifactId>servlet-api</artifactId>
         </dependency>
         <dependency>
-            <groupId>javax.jcr</groupId>
-            <artifactId>jcr</artifactId>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.scr.annotations</artifactId>
         </dependency>
         <dependency>
             <groupId>org.mozilla</groupId>
@@ -165,16 +171,18 @@
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>commons-collections</groupId>
+            <artifactId>commons-collections</artifactId>
+            <version>3.2.1</version>
+            <scope>provided</scope>
+        </dependency>
         <!-- Testing -->
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.commons.testing</artifactId>
-            <version>2.0.4-incubator</version>
+            <version>2.0.16</version>
             <scope>test</scope>
         </dependency>
-        <dependency>
-        	<groupId>org.apache.felix</groupId>
-        	<artifactId>org.apache.felix.scr.annotations</artifactId>
-        </dependency>
     </dependencies>
 </project>

Modified: sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingGlobal.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingGlobal.java?rev=1674040&r1=1674039&r2=1674040&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingGlobal.java (original)
+++ sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingGlobal.java Thu Apr 16 11:02:50 2015
@@ -24,6 +24,7 @@ import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.Reader;
 import java.io.Serializable;
+import java.nio.charset.Charset;
 
 import org.apache.sling.api.resource.NonExistingResource;
 import org.apache.sling.api.resource.Resource;
@@ -76,7 +77,7 @@ public class SlingGlobal implements Seri
 	private static final int LAST_SCOPE_FUNCTION_ID = 3;
 
 	/** default log */
-	private final Logger defaultLog = LoggerFactory.getLogger(getClass());
+	private static final Logger defaultLog = LoggerFactory.getLogger(SlingGlobal.class);
 
 	public static void init(Scriptable scope, boolean sealed) {
 		SlingGlobal obj = new SlingGlobal();
@@ -189,7 +190,7 @@ public class SlingGlobal implements Seri
 
 			try {
 				// reader for the stream
-				Reader scriptReader = new InputStreamReader(scriptStream);
+				Reader scriptReader = new InputStreamReader(scriptStream, Charset.forName("UTF-8"));
 
 				// check whether we have to wrap the basic reader
 				if (scriptName
@@ -287,7 +288,7 @@ public class SlingGlobal implements Seri
 
 		try {
 			// reader for the stream
-			Reader scriptReader = new InputStreamReader(scriptStream);
+			Reader scriptReader = new InputStreamReader(scriptStream, Charset.forName("UTF-8"));
 
 			// check whether we have to wrap the basic reader
 			if (scriptName

Modified: sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngineFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngineFactory.java?rev=1674040&r1=1674039&r2=1674040&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngineFactory.java (original)
+++ sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngineFactory.java Thu Apr 16 11:02:50 2015
@@ -21,10 +21,11 @@ package org.apache.sling.scripting.javas
 import java.util.Dictionary;
 import java.util.HashSet;
 import java.util.Set;
-
 import javax.script.ScriptEngine;
 
+import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
@@ -197,7 +198,7 @@ public class RhinoJavaScriptEngineFactor
     }
 
     // ---------- SCR integration
-
+    @Activate
     protected void activate(ComponentContext context) {
         Dictionary<?, ?> props = context.getProperties();
         boolean debugging = getProperty(
@@ -236,6 +237,7 @@ public class RhinoJavaScriptEngineFactor
         log.info("Activated with optimization level {}", optimizationLevel);
     }
 
+    @Deactivate
     protected void deactivate(ComponentContext context) {
 
         // remove the root scope
@@ -279,7 +281,7 @@ public class RhinoJavaScriptEngineFactor
                     if (SlingWrapper.class.isAssignableFrom(clazz)) {
 
                         // SlingWrappers can map to several classes if needed
-                        final SlingWrapper hostWrapper = (SlingWrapper) clazz.newInstance();;
+                        final SlingWrapper hostWrapper = (SlingWrapper) clazz.newInstance();
                         for (Class<?> c : hostWrapper.getWrappedClasses()) {
                             getWrapFactory().registerWrapper(c,
                                 hostWrapper.getClassName());

Modified: sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableCalendar.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableCalendar.java?rev=1674040&r1=1674039&r2=1674040&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableCalendar.java (original)
+++ sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableCalendar.java Thu Apr 16 11:02:50 2015
@@ -32,7 +32,7 @@ public class ScriptableCalendar extends
 	private SimpleDateFormat calendarFormat;
 
 	/** Calendar is a class, not an interface - so we need to enumerate possible implementations here */
-    public static final Class<?> [] WRAPPED_CLASSES = { Calendar.class, GregorianCalendar.class };
+    private static final Class<?> [] WRAPPED_CLASSES = { Calendar.class, GregorianCalendar.class };
 
     /**
      * The wrapped Calendar. Will be {@code null} if the

Modified: sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableNode.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableNode.java?rev=1674040&r1=1674039&r2=1674040&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableNode.java (original)
+++ sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableNode.java Thu Apr 16 11:02:50 2015
@@ -50,7 +50,7 @@ import org.slf4j.LoggerFactory;
 public class ScriptableNode extends ScriptableBase implements SlingWrapper {
 
     public static final String CLASSNAME = "Node";
-    public static final Class<?> [] WRAPPED_CLASSES = { Node.class };
+    private static final Class<?> [] WRAPPED_CLASSES = { Node.class };
 
     /** default log */
     private final Logger log = LoggerFactory.getLogger(getClass());

Modified: sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptablePrintWriter.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptablePrintWriter.java?rev=1674040&r1=1674039&r2=1674040&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptablePrintWriter.java (original)
+++ sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptablePrintWriter.java Thu Apr 16 11:02:50 2015
@@ -33,7 +33,7 @@ import org.mozilla.javascript.Wrapper;
 public class ScriptablePrintWriter extends ScriptableObject implements SlingWrapper {
 
     public static final String CLASSNAME = "PrintWriter";
-    public static final Class<?> [] WRAPPED_CLASSES = { PrintWriter.class };
+    private static final Class<?> [] WRAPPED_CLASSES = { PrintWriter.class };
 
     private PrintWriter writer;
 

Modified: sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableProperty.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableProperty.java?rev=1674040&r1=1674039&r2=1674040&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableProperty.java (original)
+++ sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableProperty.java Thu Apr 16 11:02:50 2015
@@ -33,7 +33,7 @@ public class ScriptableProperty extends
 
     public static final String CLASSNAME = "Property";
 
-    public static final Class<?>[] WRAPPED_CLASSES = { Property.class };
+    private static final Class<?>[] WRAPPED_CLASSES = { Property.class };
 
     /**
      * The wrapped JCR Property instance. Will be {@code null} if the

Modified: sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableResource.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableResource.java?rev=1674040&r1=1674039&r2=1674040&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableResource.java (original)
+++ sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableResource.java Thu Apr 16 11:02:50 2015
@@ -16,15 +16,19 @@
  */
 package org.apache.sling.scripting.javascript.wrapper;
 
+import org.apache.commons.collections.IteratorUtils;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.scripting.javascript.SlingWrapper;
 import org.mozilla.javascript.Context;
 import org.mozilla.javascript.Function;
+import org.mozilla.javascript.NativeArray;
 import org.mozilla.javascript.ScriptRuntime;
 import org.mozilla.javascript.Scriptable;
 import org.mozilla.javascript.ScriptableObject;
 import org.mozilla.javascript.Undefined;
 import org.mozilla.javascript.Wrapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Resource in JavaScript has following signature: [Object] getData(); [Object]
@@ -34,9 +38,11 @@ import org.mozilla.javascript.Wrapper;
 public class ScriptableResource extends ScriptableObject implements
         SlingWrapper {
 
+    private static final Logger LOGGER = LoggerFactory.getLogger(ScriptableResource.class);
+
     public static final String CLASSNAME = "Resource";
 
-    public static final Class<?>[] WRAPPED_CLASSES = { Resource.class };
+    private static final Class<?>[] WRAPPED_CLASSES = { Resource.class };
 
     private Resource resource;
 
@@ -52,14 +58,28 @@ public class ScriptableResource extends
     }
 
     /**
-     * Mapps getPath() method as path property.
+     * Maps getName() method as name property.
+     */
+    public String jsGet_name() {
+        return this.jsFunction_getName();
+    }
+
+    /**
+     * Maps getName() method as getName() method.
+     */
+    public String jsFunction_getName() {
+        return resource.getName();
+    }
+
+    /**
+     * Maps getPath() method as path property.
      */
     public String jsGet_path() {
         return this.jsFunction_getPath();
     }
 
     /**
-     * Mapps getPath() method as getPath() method.
+     * Maps getPath() method as getPath() method.
      */
     public String jsFunction_getPath() {
         return resource.getPath();
@@ -91,6 +111,18 @@ public class ScriptableResource extends
         return resource.getResourceType();
     }
 
+    public NativeArray jsFunction_listChildren() {
+        return jsFunction_getChildren();
+    }
+
+    public NativeArray jsFunction_getChildren() {
+        return new NativeArray(IteratorUtils.toArray(resource.listChildren()));
+    }
+
+    public Object jsFunction_getParent() {
+        return resource.getParent();
+    }
+
     /**
      * Maps getResourceSuperType() to resourceSuperType property.
      */
@@ -105,6 +137,10 @@ public class ScriptableResource extends
         return resource.getResourceSuperType();
     }
 
+    public boolean jsFunction_isResourceType(String type) {
+        return resource.isResourceType(type);
+    }
+
     /**
      * Maps getResourceMetadata() to meta property. This property is deprecated
      * since it does not correctly map the getResourceType() method name to a
@@ -158,6 +194,16 @@ public class ScriptableResource extends
     }
 
     /**
+     * Maps getChild(String childPath) to getChild method.
+     *
+     * @param childPath the child path
+     * @return the child resource if one exists at {@code childPath} or {@code null}
+     */
+    public Object jsFunction_getChild(String childPath) {
+        return resource.getChild(childPath);
+    }
+
+    /**
      * Helper method to easily retrieve the default adapted object of the
      * resource. In case of Object Content Mapping support, this method will
      * return the correctly mapped content object for this resource.
@@ -217,7 +263,7 @@ public class ScriptableResource extends
                 }
                 adapter = loader.loadClass(className);
             } catch (Exception e) {
-                // TODO: log exception
+                LOGGER.error("Unable to adapt object.", e);
             }
 
         }

Modified: sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableVersion.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableVersion.java?rev=1674040&r1=1674039&r2=1674040&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableVersion.java (original)
+++ sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableVersion.java Thu Apr 16 11:02:50 2015
@@ -23,7 +23,7 @@ import javax.jcr.version.Version;
 public class ScriptableVersion extends ScriptableNode {
 
     public static final String CLASSNAME = "Version";
-    public static final Class<?> [] WRAPPED_CLASSES = { Version.class };
+    private static final Class<?> [] WRAPPED_CLASSES = { Version.class };
 
     private Version version;
 

Modified: sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableVersionHistory.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableVersionHistory.java?rev=1674040&r1=1674039&r2=1674040&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableVersionHistory.java (original)
+++ sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableVersionHistory.java Thu Apr 16 11:02:50 2015
@@ -23,7 +23,7 @@ import javax.jcr.version.VersionHistory;
 public class ScriptableVersionHistory extends ScriptableNode {
 
     public static final String CLASSNAME = "VersionHistory";
-    public static final Class<?> [] WRAPPED_CLASSES = { VersionHistory.class };
+    private static final Class<?> [] WRAPPED_CLASSES = { VersionHistory.class };
 
     private VersionHistory versionHistory;
 

Modified: sling/trunk/bundles/scripting/javascript/src/test/java/org/apache/sling/scripting/javascript/internal/ScriptEngineHelper.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/javascript/src/test/java/org/apache/sling/scripting/javascript/internal/ScriptEngineHelper.java?rev=1674040&r1=1674039&r2=1674040&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/javascript/src/test/java/org/apache/sling/scripting/javascript/internal/ScriptEngineHelper.java (original)
+++ sling/trunk/bundles/scripting/javascript/src/test/java/org/apache/sling/scripting/javascript/internal/ScriptEngineHelper.java Thu Apr 16 11:02:50 2015
@@ -34,6 +34,7 @@ import javax.script.ScriptException;
 import javax.script.SimpleBindings;
 import javax.script.SimpleScriptContext;
 
+import org.apache.sling.commons.testing.osgi.MockBundle;
 import org.apache.sling.commons.testing.osgi.MockComponentContext;
 import org.mozilla.javascript.Context;
 import org.mozilla.javascript.ScriptableObject;
@@ -121,7 +122,7 @@ public class ScriptEngineHelper {
     private static class RhinoMockComponentContext extends MockComponentContext {
 
         private RhinoMockComponentContext() {
-            super(null, null);
+            super(new MockBundle(0));
         }
 
         @Override

Modified: sling/trunk/bundles/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableNodeTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableNodeTest.java?rev=1674040&r1=1674039&r2=1674040&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableNodeTest.java (original)
+++ sling/trunk/bundles/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableNodeTest.java Thu Apr 16 11:02:50 2015
@@ -140,8 +140,8 @@ public class ScriptableNodeTest extends
 
     public void testViaPropertyNoWrappersCal() throws Exception {
         assertEquals(
-                testCal,
-                script.eval("calProperty.value.getDate()", data)
+                testCal.getTimeInMillis(),
+                script.eval("calProperty.value.getDate().getTimeInMillis()", data)
         );
     }
 

Modified: sling/trunk/bundles/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableResourceTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableResourceTest.java?rev=1674040&r1=1674039&r2=1674040&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableResourceTest.java (original)
+++ sling/trunk/bundles/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableResourceTest.java Thu Apr 16 11:02:50 2015
@@ -93,6 +93,53 @@ public class ScriptableResourceTest exte
             data));
     }
 
+    public void testChildren() throws Exception {
+        node.addNode("first-child");
+        node.addNode("second-child");
+
+        final ScriptEngineHelper.Data data = new ScriptEngineHelper.Data();
+        data.put("resource", new TestResource(node));
+
+        assertEquals(2.0, script.eval("resource.getChildren().length", data));
+        assertEquals("first-child", script.eval("resource.getChildren()[0].name", data));
+    }
+
+    public void testListChildren() throws Exception {
+        Node firstChild = node.addNode("first-child");
+        node.addNode("second-child");
+
+        final ScriptEngineHelper.Data data = new ScriptEngineHelper.Data();
+        data.put("resource", new TestResource(node));
+
+        assertEquals(2.0, script.eval("resource.listChildren().length", data));
+        assertEquals(firstChild.getPath(), script.eval("resource.listChildren()[0].path", data));
+    }
+
+    public void testGetChild() throws Exception {
+        Node child = node.addNode("child");
+
+        final ScriptEngineHelper.Data data = new ScriptEngineHelper.Data();
+        data.put("resource", new TestResource(node));
+
+        assertEquals(child.getPath(), script.eval("resource.getChild('./child').path", data));
+    }
+
+    public void testGetParent() throws Exception {
+        Node child = node.addNode("child");
+        Node grandChild = child.addNode("grandchild");
+
+        final ScriptEngineHelper.Data data = new ScriptEngineHelper.Data();
+        data.put("resource", new TestResource(grandChild));
+
+        assertEquals(child.getPath(), script.eval("resource.getParent().getPath()", data));
+    }
+
+    public void testIsResourceType() throws Exception {
+        final ScriptEngineHelper.Data data = new ScriptEngineHelper.Data();
+        data.put("resource", new TestResource(node));
+        assertEquals(Boolean.TRUE, script.eval("resource.isResourceType('" + RESOURCE_TYPE + "')", data));
+    }
+
     public void testResourceSuperType() throws Exception {
         // set resource and resource super type
         node.setProperty(JcrResourceConstants.SLING_RESOURCE_TYPE_PROPERTY,