WW-4335 Uses lastIndexOf to figure out theme name
Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/16e240b4 Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/16e240b4 Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/16e240b4 Branch: refs/heads/develop Commit: 16e240b4a534620c601d18ad7ff290806584d47e Parents: 51b16bd Author: Lukasz Lenart <lukaszlen...@apache.org> Authored: Tue Aug 5 09:38:32 2014 +0200 Committer: Lukasz Lenart <lukaszlen...@apache.org> Committed: Tue Aug 5 09:38:32 2014 +0200 ---------------------------------------------------------------------- .../FreemarkerThemeTemplateLoader.java | 2 +- .../FreemarkerThemeTemplateLoaderTest.java | 66 ++++++++++++++++++++ 2 files changed, 67 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/struts/blob/16e240b4/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerThemeTemplateLoader.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerThemeTemplateLoader.java b/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerThemeTemplateLoader.java index 35a90a4..5c56463 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerThemeTemplateLoader.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerThemeTemplateLoader.java @@ -37,7 +37,7 @@ public class FreemarkerThemeTemplateLoader implements TemplateLoader{ return parentTemplateLoader.findTemplateSource(name); } - int themeEndIndex = name.indexOf('/', tokenIndex); + int themeEndIndex = name.lastIndexOf('/'); if (themeEndIndex < 0) { return parentTemplateLoader.findTemplateSource(name); } http://git-wip-us.apache.org/repos/asf/struts/blob/16e240b4/core/src/test/java/org/apache/struts2/views/freemarker/FreemarkerThemeTemplateLoaderTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/struts2/views/freemarker/FreemarkerThemeTemplateLoaderTest.java b/core/src/test/java/org/apache/struts2/views/freemarker/FreemarkerThemeTemplateLoaderTest.java new file mode 100644 index 0000000..7f8ef31 --- /dev/null +++ b/core/src/test/java/org/apache/struts2/views/freemarker/FreemarkerThemeTemplateLoaderTest.java @@ -0,0 +1,66 @@ +package org.apache.struts2.views.freemarker; + +import freemarker.cache.TemplateLoader; +import org.apache.struts2.StrutsInternalTestCase; +import org.apache.struts2.components.template.Template; +import org.apache.struts2.components.template.TemplateEngine; +import org.hamcrest.BaseMatcher; +import org.hamcrest.Description; +import org.hamcrest.Matcher; +import org.hamcrest.core.IsEqual; +import org.mockito.Matchers; + +import java.util.HashMap; +import java.util.Map; + +import static org.fest.assertions.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class FreemarkerThemeTemplateLoaderTest extends StrutsInternalTestCase { + + public void testThemeExpansionToken() throws Exception { + // given + FreemarkerThemeTemplateLoader loader = new FreemarkerThemeTemplateLoader(); + loader.setUIThemeExpansionToken("~~~"); + + TemplateEngine engine = mock(TemplateEngine.class); + loader.setTemplateEngine(engine); + + TemplateLoader parent = mock(TemplateLoader.class); + when(parent.findTemplateSource("template/foo/bar/text.ftl")).thenReturn(new Object()); + + loader.init(parent); + + // when + Object actual = loader.findTemplateSource("template/~~~foo/bar/text.ftl"); + + // then + assertThat(actual).isNotNull(); + } + + public void testThemeExpansionTokenWithParent() throws Exception { + // given + FreemarkerThemeTemplateLoader loader = new FreemarkerThemeTemplateLoader(); + loader.setUIThemeExpansionToken("~~~"); + + TemplateEngine engine = mock(TemplateEngine.class); + Map<String, String> props = new HashMap<String, String>(); + props.put("parent", "foo/foo"); + when(engine.getThemeProps(Matchers.argThat(new IsEqual<Template>(new Template("template", "foo/bar", "text.ftl"))))).thenReturn(props); + loader.setTemplateEngine(engine); + + TemplateLoader parent = mock(TemplateLoader.class); + when(parent.findTemplateSource("template/foo/bar/text.ftl")).thenReturn(null); + when(parent.findTemplateSource("template/foo/foo/text.ftl")).thenReturn(new Object()); + + loader.init(parent); + + // when + Object actual = loader.findTemplateSource("template/~~~foo/bar/text.ftl"); + + // then + assertThat(actual).isNotNull(); + } + +} \ No newline at end of file