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 2019/11/08 17:43:23 UTC

[sling-org-apache-sling-scripting-core] 01/01: SLING-8737 - Add support for lazily-evaluated bindings

This is an automated email from the ASF dual-hosted git repository.

radu pushed a commit to branch issue/SLING-8737
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-core.git

commit 47888402fc658f278f5ccfff4f32da318766c30b
Author: Radu Cotescu <ra...@apache.org>
AuthorDate: Fri Nov 8 18:41:40 2019 +0100

    SLING-8737 - Add support for lazily-evaluated bindings
    
    * switched to the LazyBindings implementation
    * needs several releases for the IT to pass, since the servlets.resolver and resourceresolver
    also depend on the api module
---
 pom.xml                                            |  4 ++--
 .../scripting/core/impl/DefaultSlingScript.java    |  6 +++---
 .../core/impl/helper/ProtectedBindings.java        |  4 +++-
 .../sling/scripting/core/it/HtmlScriptingIT.java   | 18 ++++++++++++++++--
 .../core/it/ScriptingCoreTestSupport.java          | 22 +++++++++++++++-------
 5 files changed, 39 insertions(+), 15 deletions(-)

diff --git a/pom.xml b/pom.xml
index a8b5e70..756d3ba 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,7 +28,7 @@
     </parent>
 
     <artifactId>org.apache.sling.scripting.core</artifactId>
-    <version>2.0.61-SNAPSHOT</version>
+    <version>2.1.0-SNAPSHOT</version>
 
     <name>Apache Sling Scripting Core</name>
     <description>
@@ -113,7 +113,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.api</artifactId>
-            <version>2.16.0</version>
+            <version>2.21.0-SNAPSHOT</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
diff --git a/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java b/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java
index d6f5f2c..519080d 100644
--- a/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java
+++ b/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java
@@ -53,7 +53,6 @@ import javax.script.Invocable;
 import javax.script.ScriptContext;
 import javax.script.ScriptEngine;
 import javax.script.ScriptException;
-import javax.script.SimpleBindings;
 import javax.servlet.Servlet;
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletContext;
@@ -69,6 +68,7 @@ import org.apache.sling.api.resource.ResourceMetadata;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ResourceWrapper;
 import org.apache.sling.api.resource.SyntheticResource;
+import org.apache.sling.api.scripting.LazyBindings;
 import org.apache.sling.api.scripting.ScriptEvaluationException;
 import org.apache.sling.api.scripting.SlingBindings;
 import org.apache.sling.api.scripting.SlingScript;
@@ -209,7 +209,7 @@ class DefaultSlingScript implements SlingScript, Servlet, ServletConfig {
                 private Writer writer = (Writer) b.get(OUT);
                 private Writer errorWriter = new LogWriter((Logger) b.get(LOG));
                 private Reader reader = (Reader)b.get(READER);
-                private Bindings slingScope = new SimpleBindings();
+                private Bindings slingScope = new LazyBindings();
 
 
                 /**
@@ -631,7 +631,7 @@ class DefaultSlingScript implements SlingScript, Servlet, ServletConfig {
 
     Bindings verifySlingBindings(final SlingBindings slingBindings) throws IOException {
 
-    	final Bindings bindings = new SimpleBindings();
+        final Bindings bindings = new LazyBindings();
 
         final SlingHttpServletRequest request = slingBindings.getRequest();
 
diff --git a/src/main/java/org/apache/sling/scripting/core/impl/helper/ProtectedBindings.java b/src/main/java/org/apache/sling/scripting/core/impl/helper/ProtectedBindings.java
index a789a68..f0b7c82 100644
--- a/src/main/java/org/apache/sling/scripting/core/impl/helper/ProtectedBindings.java
+++ b/src/main/java/org/apache/sling/scripting/core/impl/helper/ProtectedBindings.java
@@ -25,7 +25,9 @@ import java.util.Set;
 
 import javax.script.Bindings;
 
-public class ProtectedBindings implements Bindings {
+import org.apache.sling.api.scripting.LazyBindings;
+
+public class ProtectedBindings extends LazyBindings implements Bindings {
 
     private final Bindings wrapped;
     private final Set<String> protectedKeys;
diff --git a/src/test/java/org/apache/sling/scripting/core/it/HtmlScriptingIT.java b/src/test/java/org/apache/sling/scripting/core/it/HtmlScriptingIT.java
index 9714fb2..6629fa9 100644
--- a/src/test/java/org/apache/sling/scripting/core/it/HtmlScriptingIT.java
+++ b/src/test/java/org/apache/sling/scripting/core/it/HtmlScriptingIT.java
@@ -28,6 +28,7 @@ import org.apache.sling.api.servlets.ServletResolver;
 import org.apache.sling.resource.presence.ResourcePresence;
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.ops4j.pax.exam.Configuration;
@@ -43,11 +44,17 @@ import org.osgi.service.http.HttpService;
 import static org.apache.sling.testing.paxexam.SlingOptions.slingQuickstartOakTar;
 import static org.apache.sling.testing.paxexam.SlingOptions.slingScriptingSightly;
 import static org.apache.sling.testing.paxexam.SlingOptions.slingScriptingThymeleaf;
+import static org.apache.sling.testing.paxexam.SlingOptions.versionResolver;
 import static org.hamcrest.Matchers.is;
 import static org.junit.Assert.assertThat;
+import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
 import static org.ops4j.pax.exam.CoreOptions.options;
 import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.factoryConfiguration;
 
+@Ignore(
+        value = "The test would pass only if org.apache.sling.resourceresolver and org.apache.sling.servlets.resolver would be built " +
+                "locally against org.apache.sling.api:2.21.0-SNAPSHOT"
+)
 @RunWith(PaxExam.class)
 @ExamReactorStrategy(PerClass.class)
 public class HtmlScriptingIT extends ScriptingCoreTestSupport {
@@ -83,6 +90,11 @@ public class HtmlScriptingIT extends ScriptingCoreTestSupport {
     @Filter(value = "(path=/content/scripting)")
     private ResourcePresence scripting;
 
+    private Option slingResourceResolver =
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.resourceresolver").version(versionResolver);
+    private Option slingServletsResolver =
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.servlets.resolver").version(versionResolver);
+
     @Configuration
     public Option[] configuration() {
         final String workingDirectory = workingDirectory();
@@ -99,8 +111,10 @@ public class HtmlScriptingIT extends ScriptingCoreTestSupport {
                 .asOption(),
             factoryConfiguration("org.apache.sling.resource.presence.internal.ResourcePresenter")
                 .put("path", "/content/scripting")
-                .asOption()
-        ), scriptingCore);
+                .asOption(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.resourceresolver").version("1.6.15-SNAPSHOT"),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.servlets.resolver").version("2.5.7-SNAPSHOT")
+        ), scriptingCore, slingApi, slingResourceResolver, slingServletsResolver);
     }
 
     @ProbeBuilder
diff --git a/src/test/java/org/apache/sling/scripting/core/it/ScriptingCoreTestSupport.java b/src/test/java/org/apache/sling/scripting/core/it/ScriptingCoreTestSupport.java
index d65d977..975d68c 100644
--- a/src/test/java/org/apache/sling/scripting/core/it/ScriptingCoreTestSupport.java
+++ b/src/test/java/org/apache/sling/scripting/core/it/ScriptingCoreTestSupport.java
@@ -40,14 +40,20 @@ public class ScriptingCoreTestSupport extends TestSupport {
 
     final int httpPort = findFreePort();
 
-    final Option scriptingCore = mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.scripting.core").version(versionResolver.getVersion("org.apache.sling", "org.apache.sling.scripting.core"));
+    final Option scriptingCore = mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.scripting.core").version(versionResolver);
+    final Option slingApi = mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.api").version(versionResolver);
+    final Option osgiConverter = mavenBundle().groupId("org.osgi").artifactId("org.osgi.util.converter").version("1.0.0");
+
+
 
     public ModifiableCompositeOption baseConfiguration() {
         final Option slingScripting = slingScripting().remove(scriptingCore);
         return composite(
             super.baseConfiguration(),
             // Sling Scripting
-            slingScripting,
+            composite(remove(new Option[] {slingScripting}, slingApi)),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.api").versionAsInProject(),
+            osgiConverter,
             newConfiguration("org.apache.felix.http")
                 .put("org.osgi.service.http.port", httpPort)
                 .asOption(),
@@ -82,12 +88,14 @@ public class ScriptingCoreTestSupport extends TestSupport {
         return expanded;
     }
 
-    static Option[] remove(final Option[] options, final Option option) {
+    static Option[] remove(final Option[] options, final Option ... toRemove) {
         final List<Option> expanded = expand(options);
-        if (option instanceof CompositeOption) {
-            expanded.removeAll(Arrays.asList(((CompositeOption) option).getOptions()));
-        } else {
-            expanded.removeAll(Collections.singleton(option));
+        for (Option toRemoveOption : toRemove) {
+            if (toRemoveOption instanceof CompositeOption) {
+                expanded.removeAll(Arrays.asList(((CompositeOption) toRemoveOption).getOptions()));
+            } else {
+                expanded.removeAll(Collections.singleton(toRemoveOption));
+            }
         }
         return expanded.toArray(new Option[0]);
     }