You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ie...@apache.org on 2013/08/15 19:56:28 UTC
svn commit: r1514410 - in /sling/whiteboard/ieb/handlebars: ./
src/main/java/org/apache/sling/scripting/handlebars/ src/test/
src/test/java/ src/test/java/org/ src/test/java/org/apache/
src/test/java/org/apache/sling/ src/test/java/org/apache/sling/scr...
Author: ieb
Date: Thu Aug 15 17:56:28 2013
New Revision: 1514410
URL: http://svn.apache.org/r1514410
Log:
Added test classes to check template processing and variable binding.
Added:
sling/whiteboard/ieb/handlebars/src/test/
sling/whiteboard/ieb/handlebars/src/test/java/
sling/whiteboard/ieb/handlebars/src/test/java/org/
sling/whiteboard/ieb/handlebars/src/test/java/org/apache/
sling/whiteboard/ieb/handlebars/src/test/java/org/apache/sling/
sling/whiteboard/ieb/handlebars/src/test/java/org/apache/sling/scripting/
sling/whiteboard/ieb/handlebars/src/test/java/org/apache/sling/scripting/handlebars/
sling/whiteboard/ieb/handlebars/src/test/java/org/apache/sling/scripting/handlebars/HandlebarsScriptEngineFactoryTest.java (with props)
Modified:
sling/whiteboard/ieb/handlebars/pom.xml
sling/whiteboard/ieb/handlebars/src/main/java/org/apache/sling/scripting/handlebars/HandlebarsScriptEngine.java
Modified: sling/whiteboard/ieb/handlebars/pom.xml
URL: http://svn.apache.org/viewvc/sling/whiteboard/ieb/handlebars/pom.xml?rev=1514410&r1=1514409&r2=1514410&view=diff
==============================================================================
--- sling/whiteboard/ieb/handlebars/pom.xml (original)
+++ sling/whiteboard/ieb/handlebars/pom.xml Thu Aug 15 17:56:28 2013
@@ -134,6 +134,17 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-all</artifactId>
+ <version>1.9.5</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-simple</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.scr.annotations</artifactId>
</dependency>
Modified: sling/whiteboard/ieb/handlebars/src/main/java/org/apache/sling/scripting/handlebars/HandlebarsScriptEngine.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/ieb/handlebars/src/main/java/org/apache/sling/scripting/handlebars/HandlebarsScriptEngine.java?rev=1514410&r1=1514409&r2=1514410&view=diff
==============================================================================
--- sling/whiteboard/ieb/handlebars/src/main/java/org/apache/sling/scripting/handlebars/HandlebarsScriptEngine.java (original)
+++ sling/whiteboard/ieb/handlebars/src/main/java/org/apache/sling/scripting/handlebars/HandlebarsScriptEngine.java Thu Aug 15 17:56:28 2013
@@ -19,6 +19,7 @@ package org.apache.sling.scripting.handl
import java.io.IOException;
import java.io.Reader;
+import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
@@ -55,7 +56,7 @@ public class HandlebarsScriptEngine exte
model.put((String) entry.getKey(), entry.getValue());
}
Context hbContext = Context.newContext(model);
- template.apply(hbContext, context.getWriter());
+ template.apply(hbContext, scriptContext.getWriter());
} catch (IOException e) {
LOGGER.error(e.getMessage(), e);
}
Added: sling/whiteboard/ieb/handlebars/src/test/java/org/apache/sling/scripting/handlebars/HandlebarsScriptEngineFactoryTest.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/ieb/handlebars/src/test/java/org/apache/sling/scripting/handlebars/HandlebarsScriptEngineFactoryTest.java?rev=1514410&view=auto
==============================================================================
--- sling/whiteboard/ieb/handlebars/src/test/java/org/apache/sling/scripting/handlebars/HandlebarsScriptEngineFactoryTest.java (added)
+++ sling/whiteboard/ieb/handlebars/src/test/java/org/apache/sling/scripting/handlebars/HandlebarsScriptEngineFactoryTest.java Thu Aug 15 17:56:28 2013
@@ -0,0 +1,259 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The SF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package org.apache.sling.scripting.handlebars;
+
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.script.Bindings;
+import javax.script.ScriptContext;
+import javax.script.ScriptEngine;
+import javax.script.ScriptException;
+import javax.script.SimpleScriptContext;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class HandlebarsScriptEngineFactoryTest {
+
+ public class Person {
+
+ private Name firstName;
+
+ private Name lastName;
+
+ public Person(String firstName, String lastName) {
+ this.firstName = new Name(firstName);
+ this.lastName = new Name(lastName);
+ }
+
+ public Name getFirstName() {
+ return firstName;
+ }
+
+ public Name getLastName() {
+ return lastName;
+ }
+ }
+
+ public class Name {
+
+ private String _name;
+
+ public Name(String name) {
+ this._name = name;
+ }
+
+ public String getName() {
+ return _name;
+ }
+
+ }
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(HandlebarsScriptEngineFactoryTest.class);
+
+ private HandlebarsScriptEngineFactory scriptEngineFactory;
+
+ @Before
+ public void before() {
+ scriptEngineFactory = new HandlebarsScriptEngineFactory();
+ }
+
+ @Test
+ public void testProperties() {
+ Assert.assertEquals("HandlebarsScriptEngineFactory",
+ scriptEngineFactory.getEngineName());
+ Assert.assertEquals("0", scriptEngineFactory.getEngineVersion());
+ Assert.assertArrayEquals(new String[] { "hbss" },
+ scriptEngineFactory.getExtensions().toArray());
+ Assert.assertEquals("handlebars", scriptEngineFactory.getLanguageName());
+ Assert.assertEquals("1.0", scriptEngineFactory.getLanguageVersion());
+ Assert.assertArrayEquals(new String[] { "text/x-handlebars" },
+ scriptEngineFactory.getMimeTypes().toArray());
+ }
+
+ @Test
+ public void testScriptEngine() throws ScriptException {
+ ScriptEngine scriptEngine = scriptEngineFactory.getScriptEngine();
+ LOGGER.info("Script engine is {} ", scriptEngine);
+ StringReader reader = new StringReader(" Something really Simple");
+ StringWriter writer = new StringWriter();
+ SimpleScriptContext scriptContext = new SimpleScriptContext();
+ Bindings bindings = scriptEngine.createBindings();
+ scriptContext.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
+ scriptContext.setWriter(writer);
+ LOGGER.info("Calling with {} ", scriptContext);
+ Object o = scriptEngine.eval(reader, scriptContext);
+ Assert.assertNull(o);
+ Assert.assertEquals(" Something really Simple", writer.toString());
+ }
+
+ /**
+ * Test a simple binding.
+ * @throws ScriptException
+ */
+ @Test
+ public void testTemplateSimpleBinding() throws ScriptException {
+ ScriptEngine scriptEngine = scriptEngineFactory.getScriptEngine();
+ LOGGER.info("Script engine is {} ", scriptEngine);
+ StringReader reader = new StringReader(
+ " Something really Simple with {{ replace_me }}");
+ StringWriter writer = new StringWriter();
+ SimpleScriptContext scriptContext = new SimpleScriptContext();
+ Bindings bindings = scriptEngine.createBindings();
+ scriptContext.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
+ scriptContext.setWriter(writer);
+ bindings.put("replace_me", "Hello World!");
+ LOGGER.info("Calling with {} ", scriptContext);
+ Object o = scriptEngine.eval(reader, scriptContext);
+ Assert.assertNull(o);
+ Assert.assertEquals(" Something really Simple with Hello World!",
+ writer.toString());
+ }
+
+ /**
+ * Test a simple map binding.
+ * @throws ScriptException
+ */
+ @Test
+ public void testTemplateMapBinding() throws ScriptException {
+ ScriptEngine scriptEngine = scriptEngineFactory.getScriptEngine();
+ LOGGER.info("Script engine is {} ", scriptEngine);
+ StringReader reader = new StringReader(
+ " Something really Simple with {{ replace_me.name }}");
+ StringWriter writer = new StringWriter();
+ SimpleScriptContext scriptContext = new SimpleScriptContext();
+ Bindings bindings = scriptEngine.createBindings();
+ scriptContext.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
+ scriptContext.setWriter(writer);
+ Map<String, Object> replace_me = new HashMap<String, Object>();
+ replace_me.put("name", "ieb");
+ bindings.put("replace_me", replace_me);
+ LOGGER.info("Calling with {} ", scriptContext);
+ Object o = scriptEngine.eval(reader, scriptContext);
+ Assert.assertNull(o);
+ Assert.assertEquals(" Something really Simple with ieb",
+ writer.toString());
+ }
+
+ /**
+ * Tests that its possible to access bean getters by name using dotted
+ * annotation.
+ *
+ * @throws ScriptException
+ */
+ @Test
+ public void testTemplateMethodBinding() throws ScriptException {
+ ScriptEngine scriptEngine = scriptEngineFactory.getScriptEngine();
+ LOGGER.info("Script engine is {} ", scriptEngine);
+ StringReader reader = new StringReader(
+ " Something really Simple with {{ replace_me.name }}");
+ StringWriter writer = new StringWriter();
+ SimpleScriptContext scriptContext = new SimpleScriptContext();
+ Bindings bindings = scriptEngine.createBindings();
+ scriptContext.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
+ scriptContext.setWriter(writer);
+ bindings.put("replace_me", new Name("ian"));
+ LOGGER.info("Calling with {} ", scriptContext);
+ Object o = scriptEngine.eval(reader, scriptContext);
+ Assert.assertNull(o);
+ Assert.assertEquals(" Something really Simple with ian",
+ writer.toString());
+ }
+
+ /**
+ * Tests value binding through multiple beans.
+ * @throws ScriptException
+ */
+ @Test
+ public void testTemplateDeepMethodBinding() throws ScriptException {
+ ScriptEngine scriptEngine = scriptEngineFactory.getScriptEngine();
+ LOGGER.info("Script engine is {} ", scriptEngine);
+ StringReader reader = new StringReader(
+ " Something really Simple with {{ replace_me.firstName.name }} {{ replace_me.lastName.name }}");
+ StringWriter writer = new StringWriter();
+ SimpleScriptContext scriptContext = new SimpleScriptContext();
+ Bindings bindings = scriptEngine.createBindings();
+ scriptContext.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
+ scriptContext.setWriter(writer);
+ bindings.put("replace_me", new Person("ian", "boston"));
+ LOGGER.info("Calling with {} ", scriptContext);
+ Object o = scriptEngine.eval(reader, scriptContext);
+ Assert.assertNull(o);
+ Assert.assertEquals(" Something really Simple with ian boston",
+ writer.toString());
+ }
+
+ /**
+ * Test for safe defaults to XXS strings.
+ * @throws ScriptException
+ */
+ @Test
+ public void testTemplateDeepMethodBindingXSS() throws ScriptException {
+ ScriptEngine scriptEngine = scriptEngineFactory.getScriptEngine();
+ LOGGER.info("Script engine is {} ", scriptEngine);
+ StringReader reader = new StringReader(
+ " Something really Simple with {{ replace_me.firstName.name }} {{ replace_me.lastName.name }}");
+ StringWriter writer = new StringWriter();
+ SimpleScriptContext scriptContext = new SimpleScriptContext();
+ Bindings bindings = scriptEngine.createBindings();
+ scriptContext.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
+ scriptContext.setWriter(writer);
+ bindings.put("replace_me", new Person(
+ "ian<script type=\"text/javascript",
+ "\">alert('GotYa!');</script>boston"));
+ LOGGER.info("Calling with {} ", scriptContext);
+ Object o = scriptEngine.eval(reader, scriptContext);
+ Assert.assertNull(o);
+ Assert.assertEquals(
+ " Something really Simple with ian<script type="text/javascript ">alert('GotYa!');</script>boston",
+ writer.toString());
+ }
+
+ /**
+ * Tests ability to escape to raw output when required.
+ * @throws ScriptException
+ */
+ @Test
+ public void testTemplateDeepMethodBindingRaw() throws ScriptException {
+ ScriptEngine scriptEngine = scriptEngineFactory.getScriptEngine();
+ LOGGER.info("Script engine is {} ", scriptEngine);
+ StringReader reader = new StringReader(
+ " Something really Simple with {{{ replace_me.firstName.name }}} {{{ replace_me.lastName.name }}}");
+ StringWriter writer = new StringWriter();
+ SimpleScriptContext scriptContext = new SimpleScriptContext();
+ Bindings bindings = scriptEngine.createBindings();
+ scriptContext.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
+ scriptContext.setWriter(writer);
+ bindings.put("replace_me", new Person(
+ "ian<script type=\"text/javascript",
+ "\">alert('GotYa!');</script>boston"));
+ LOGGER.info("Calling with {} ", scriptContext);
+ Object o = scriptEngine.eval(reader, scriptContext);
+ Assert.assertNull(o);
+ Assert.assertEquals(
+ " Something really Simple with ian<script type=\"text/javascript \">alert('GotYa!');</script>boston",
+ writer.toString());
+ }
+
+}
Propchange: sling/whiteboard/ieb/handlebars/src/test/java/org/apache/sling/scripting/handlebars/HandlebarsScriptEngineFactoryTest.java
------------------------------------------------------------------------------
svn:eol-style = native