FREEMARKER-55: Adding FreemarkerViewResolverTest

Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/4088f91f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/4088f91f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/4088f91f

Branch: refs/heads/3
Commit: 4088f91f62b678d2c4bebc25375d7fc822f47420
Parents: b375e14
Author: Woonsan Ko <woon...@apache.org>
Authored: Sun Jul 2 02:22:52 2017 -0400
Committer: Woonsan Ko <woon...@apache.org>
Committed: Sun Jul 2 02:22:52 2017 -0400

----------------------------------------------------------------------
 .../spring/web/view/AbstractFreemarkerView.java | 13 +--
 .../spring/web/view/FreemarkerViewResolver.java | 22 +++++
 .../web/view/FreemarkerViewResolverTest.java    | 98 ++++++++++++++++++++
 .../spring/web/view/FreemarkerViewTest.java     |  2 +-
 4 files changed, 124 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/4088f91f/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/AbstractFreemarkerView.java
----------------------------------------------------------------------
diff --git 
a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/AbstractFreemarkerView.java
 
b/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/AbstractFreemarkerView.java
index 38c2e3e..cb13ac4 100644
--- 
a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/AbstractFreemarkerView.java
+++ 
b/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/AbstractFreemarkerView.java
@@ -39,7 +39,8 @@ public abstract class AbstractFreemarkerView extends 
AbstractTemplateView {
 
     private Configuration configuration;
     private ObjectWrapperAndUnwrapper objectWrapper;
-    private String name;
+
+    // TODO: how to determine locale, customLookupCondition and ignoreMissing? 
From viewResolver settings?
     private Locale locale;
     private Serializable customLookupCondition;
     private boolean ignoreMissing;
@@ -60,14 +61,6 @@ public abstract class AbstractFreemarkerView extends 
AbstractTemplateView {
         this.objectWrapper = objectWrapper;
     }
 
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
     public Locale getLocale() {
         return locale;
     }
@@ -100,7 +93,7 @@ public abstract class AbstractFreemarkerView extends 
AbstractTemplateView {
 
     protected Template getTemplate()
             throws TemplateNotFoundException, MalformedTemplateNameException, 
ParseException, IOException {
-        return getConfiguration().getTemplate(getName(), getLocale(), 
getCustomLookupCondition(), isIgnoreMissing());
+        return getConfiguration().getTemplate(getUrl(), getLocale(), 
getCustomLookupCondition(), isIgnoreMissing());
     }
 
     protected abstract TemplateHashModel createModel(Map<String, Object> map,

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/4088f91f/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreemarkerViewResolver.java
----------------------------------------------------------------------
diff --git 
a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreemarkerViewResolver.java
 
b/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreemarkerViewResolver.java
index ecacd42..5f7d6fb 100644
--- 
a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreemarkerViewResolver.java
+++ 
b/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreemarkerViewResolver.java
@@ -39,6 +39,8 @@ public class FreemarkerViewResolver extends 
AbstractTemplateViewResolver impleme
     private ServletContextHashModel servletContextModel;
     private TaglibFactory taglibFactory;
 
+    private String normalizedPrefix;
+
     public FreemarkerViewResolver() {
         setViewClass(requiredViewClass());
     }
@@ -58,6 +60,19 @@ public class FreemarkerViewResolver extends 
AbstractTemplateViewResolver impleme
     }
 
     @Override
+    public void setPrefix(String prefix) {
+        super.setPrefix(prefix);
+
+        final String prefixValue = getPrefix();
+
+        if (prefixValue.startsWith("/")) {
+            normalizedPrefix = prefixValue.substring(1);
+        } else {
+            normalizedPrefix = prefixValue;
+        }
+    }
+
+    @Override
     public void afterPropertiesSet() throws Exception {
         if (configuration == null) {
             throw new IllegalStateException("Configuration is not set.");
@@ -101,6 +116,13 @@ public class FreemarkerViewResolver extends 
AbstractTemplateViewResolver impleme
     @Override
     protected AbstractUrlBasedView buildView(String viewName) throws Exception 
{
         FreemarkerView view = (FreemarkerView) super.buildView(viewName);
+        final String url;
+        if (normalizedPrefix != null) {
+            url = normalizedPrefix + viewName + getSuffix();
+        } else {
+            url = viewName + getSuffix();
+        }
+        view.setUrl(url);
         view.setConfiguration(configuration);
         view.setObjectWrapper(objectWrapper);
         view.setPageContextServlet(pageContextServlet);

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/4088f91f/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreemarkerViewResolverTest.java
----------------------------------------------------------------------
diff --git 
a/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreemarkerViewResolverTest.java
 
b/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreemarkerViewResolverTest.java
new file mode 100644
index 0000000..7baf7f2
--- /dev/null
+++ 
b/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreemarkerViewResolverTest.java
@@ -0,0 +1,98 @@
+/*
+ * 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 ASF 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.freemarker.spring.web.view;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.servlet.ServletContext;
+
+import org.apache.freemarker.core.Configuration;
+import org.apache.freemarker.core.templateresolver.impl.StringTemplateLoader;
+import org.junit.Before;
+import org.junit.Test;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.mock.web.MockHttpServletResponse;
+import org.springframework.mock.web.MockServletContext;
+import org.springframework.web.context.WebApplicationContext;
+import org.springframework.web.context.support.GenericWebApplicationContext;
+
+public class FreemarkerViewResolverTest {
+
+    private ServletContext servletContext;
+    private GenericWebApplicationContext applicationContext;
+
+    private StringTemplateLoader templateLoader;
+    private Configuration configuration;
+
+    private FreemarkerViewResolver viewResolver;
+
+    private String prefix = "/WEB-INF/freemarker/";
+    private String normalizedPrefix = "WEB-INF/freemarker/";
+    private String suffix = ".ftl";
+
+    @Before
+    public void setUp() throws Exception {
+        servletContext = new MockServletContext();
+
+        applicationContext = new GenericWebApplicationContext(servletContext);
+        applicationContext.refresh();
+        
servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,
 applicationContext);
+
+        templateLoader = new StringTemplateLoader();
+        templateLoader.putTemplate(normalizedPrefix + "hello" + suffix, 
"Hello, World!");
+
+        configuration = new 
Configuration.Builder(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS)
+                .templateLoader(templateLoader).build();
+
+        viewResolver = new FreemarkerViewResolver();
+        viewResolver.setServletContext(servletContext);
+        viewResolver.setApplicationContext(applicationContext);
+        viewResolver.setConfiguration(configuration);
+        viewResolver.setPrefix(prefix);
+        viewResolver.setSuffix(suffix);
+        viewResolver.afterPropertiesSet();
+    }
+
+    @Test
+    public void testViewResolver() throws Exception {
+        MockHttpServletRequest request = new MockHttpServletRequest("GET", 
"/mytest.do");
+        request.setContextPath("/mycontext");
+        request.setServletPath("/myservlet");
+
+        MockHttpServletResponse response = new MockHttpServletResponse();
+
+        FreemarkerView view = resolveFreemarkerView("hello", 
null);//Locale.ENGLISH);
+        Map<String, Object> model = new HashMap<String, Object>();
+        view.render(model, request, response);
+
+        assertEquals("Hello, World!", response.getContentAsString());
+    }
+
+    private FreemarkerView resolveFreemarkerView(final String name, final 
Locale locale) throws Exception {
+        FreemarkerView view = (FreemarkerView) 
viewResolver.resolveViewName(name, locale);
+        view.setServletContext(servletContext);
+        view.setApplicationContext(applicationContext);
+        return view;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/4088f91f/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreemarkerViewTest.java
----------------------------------------------------------------------
diff --git 
a/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreemarkerViewTest.java
 
b/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreemarkerViewTest.java
index 4a6f4b1..32862c5 100644
--- 
a/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreemarkerViewTest.java
+++ 
b/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreemarkerViewTest.java
@@ -156,7 +156,7 @@ public class FreemarkerViewTest {
         view.setServletContextModel(viewResolver.getServletContextModel());
         view.setTaglibFactory(viewResolver.getTaglibFactory());
 
-        view.setName(name);
+        view.setUrl(name);
 
         return view;
     }

Reply via email to