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/12/06 19:52:09 UTC
[sling-org-apache-sling-scripting-sightly-compiler] branch master
updated: SLING-8896 - The URI Manipulation Filter should not interfere with
data-sly-use parameters
This is an automated email from the ASF dual-hosted git repository.
radu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-sightly-compiler.git
The following commit(s) were added to refs/heads/master by this push:
new c324189 SLING-8896 - The URI Manipulation Filter should not interfere with data-sly-use parameters
c324189 is described below
commit c324189d84eafdae73831e6d4555517c147f2f42
Author: Radu Cotescu <ra...@apache.org>
AuthorDate: Fri Dec 6 20:50:34 2019 +0100
SLING-8896 - The URI Manipulation Filter should not interfere with data-sly-use parameters
---
.../sightly/impl/filter/URIManipulationFilter.java | 4 +--
.../sightly/impl/compiler/SightlyCompilerTest.java | 35 ++++++++++++++++++++--
2 files changed, 34 insertions(+), 5 deletions(-)
diff --git a/src/main/java/org/apache/sling/scripting/sightly/impl/filter/URIManipulationFilter.java b/src/main/java/org/apache/sling/scripting/sightly/impl/filter/URIManipulationFilter.java
index 028d795..d7437aa 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/impl/filter/URIManipulationFilter.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/impl/filter/URIManipulationFilter.java
@@ -55,9 +55,7 @@ public class URIManipulationFilter extends AbstractFilter {
private static final Set<ExpressionContext> APPLICABLE_CONTEXTS;
static {
- Set<ExpressionContext> applicableContexts = new HashSet<>(Arrays.asList(ExpressionContext.values()));
- applicableContexts.remove(ExpressionContext.PLUGIN_DATA_SLY_TEMPLATE);
- applicableContexts.remove(ExpressionContext.PLUGIN_DATA_SLY_CALL);
+ Set<ExpressionContext> applicableContexts = new HashSet<>(NON_PARAMETRIZABLE_CONTEXTS);
applicableContexts.remove(ExpressionContext.PLUGIN_DATA_SLY_RESOURCE);
applicableContexts.remove(ExpressionContext.PLUGIN_DATA_SLY_INCLUDE);
APPLICABLE_CONTEXTS = Collections.unmodifiableSet(applicableContexts);
diff --git a/src/test/java/org/apache/sling/scripting/sightly/impl/compiler/SightlyCompilerTest.java b/src/test/java/org/apache/sling/scripting/sightly/impl/compiler/SightlyCompilerTest.java
index 6aff125..e144567 100644
--- a/src/test/java/org/apache/sling/scripting/sightly/impl/compiler/SightlyCompilerTest.java
+++ b/src/test/java/org/apache/sling/scripting/sightly/impl/compiler/SightlyCompilerTest.java
@@ -23,16 +23,20 @@ import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringReader;
import java.util.List;
-import java.util.function.Supplier;
import org.apache.sling.scripting.sightly.compiler.CompilationResult;
import org.apache.sling.scripting.sightly.compiler.CompilationUnit;
import org.apache.sling.scripting.sightly.compiler.CompilerMessage;
import org.apache.sling.scripting.sightly.compiler.SightlyCompiler;
+import org.apache.sling.scripting.sightly.compiler.commands.Command;
+import org.apache.sling.scripting.sightly.compiler.commands.VariableBinding;
+import org.apache.sling.scripting.sightly.compiler.expression.ExpressionNode;
+import org.apache.sling.scripting.sightly.compiler.expression.nodes.MapLiteral;
+import org.apache.sling.scripting.sightly.compiler.expression.nodes.RuntimeCall;
+import org.apache.sling.scripting.sightly.compiler.expression.nodes.StringConstant;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.junit.Assert.assertEquals;
@@ -177,6 +181,33 @@ public class SightlyCompilerTest {
compileSource("<span data-sly-test=\"${properties}}\">if true</span>").getWarnings().size());
}
+ @Test
+ public void testUriManipulationDataSlyUse() {
+ /*
+ * In the following expression 'path' should be a parameter for the 'org.example.Pojo' use object and not a uri manipulation
+ * option
+ */
+ CompilationResult compilationResult = compileSource("<span data-sly-use.object=\"${'org.example.Pojo' @ path='/a/b/c'}\"></span>");
+ assertEquals(0, compilationResult.getErrors().size());
+ assertEquals(0, compilationResult.getWarnings().size());
+ List<Command> commands = compilationResult.getCommandStream().getCommands();
+ assertEquals(2, commands.size());
+ Command firstCommand = commands.get(0);
+ assertTrue(firstCommand instanceof VariableBinding.Global);
+ VariableBinding.Global variableBinding = (VariableBinding.Global) firstCommand;
+ ExpressionNode node = variableBinding.getExpression();
+ assertTrue(node instanceof RuntimeCall);
+ RuntimeCall runtimeCall = (RuntimeCall) node;
+ assertEquals(RuntimeCall.USE, runtimeCall.getFunctionName());
+ List<ExpressionNode> arguments = runtimeCall.getArguments();
+ assertEquals(2, arguments.size());
+ ExpressionNode firstArgument = arguments.get(0);
+ assertTrue(firstArgument instanceof StringConstant);
+ assertEquals("org.example.Pojo", ((StringConstant) firstArgument).getText());
+ ExpressionNode secondArgument = arguments.get(1);
+ assertTrue(secondArgument instanceof MapLiteral);
+ }
+
private CompilationResult compileFile(final String file) {
InputStream stream = this.getClass().getResourceAsStream(file);
final Reader reader = new InputStreamReader(stream);