blob: 4408d0dd6c65295824f2db2381e003cde51d713e [file] [log] [blame]
/*
* 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 freemarker.ext.servlet;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
import java.io.IOException;
import java.util.Collections;
import org.junit.Test;
import com.google.common.collect.ImmutableList;
import freemarker.cache.ClassTemplateLoader;
import freemarker.cache.MultiTemplateLoader;
import freemarker.cache.WebappTemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.MockServletContext;
public class InitParamParserTest {
@Test
public void testFindTemplatePathSettingAssignmentsStart() {
assertEquals(0, InitParamParser.findTemplatePathSettingAssignmentsStart("?settings()"));
assertEquals(1, InitParamParser.findTemplatePathSettingAssignmentsStart("x?settings()"));
assertEquals(1, InitParamParser.findTemplatePathSettingAssignmentsStart("x?settings(x=1, y=2)"));
assertEquals(2, InitParamParser.findTemplatePathSettingAssignmentsStart("x ? settings ( x=1, y=2 ) "));
assertEquals(1, InitParamParser.findTemplatePathSettingAssignmentsStart("x?settings(x=f(), y=g())"));
assertEquals(1, InitParamParser.findTemplatePathSettingAssignmentsStart("x?settings(x=\"(\", y='(')"));
assertEquals(1, InitParamParser.findTemplatePathSettingAssignmentsStart("x?settings(x=\"(\\\"\", y='(\\'')"));
assertEquals(-1, InitParamParser.findTemplatePathSettingAssignmentsStart(""));
assertEquals(-1, InitParamParser.findTemplatePathSettingAssignmentsStart("settings"));
assertEquals(-1, InitParamParser.findTemplatePathSettingAssignmentsStart("settings()"));
assertEquals(-1, InitParamParser.findTemplatePathSettingAssignmentsStart("x?settings"));
assertEquals(-1, InitParamParser.findTemplatePathSettingAssignmentsStart("foo?/settings(x=1)"));
assertEquals(-1, InitParamParser.findTemplatePathSettingAssignmentsStart("x?settings()x=1)"));
assertEquals(-1, InitParamParser.findTemplatePathSettingAssignmentsStart("x?settings((x=1)"));
try {
assertEquals(0, InitParamParser.findTemplatePathSettingAssignmentsStart("x?setting(x = 1)"));
fail();
} catch (Exception e) {
assertThat(e.getMessage(), containsString("\"setting\""));
}
}
@Test
public void testCreateTemplateLoader() throws IOException {
Configuration cfg = new Configuration(Configuration.VERSION_2_3_22);
{
ClassTemplateLoader ctl = (ClassTemplateLoader) InitParamParser.createTemplateLoader(
"classpath:templates",
cfg, this.getClass(), null);
assertEquals("templates/", ctl.getBasePackagePath());
assertNull(ctl.getURLConnectionUsesCaches());
}
{
ClassTemplateLoader ctl = (ClassTemplateLoader) InitParamParser.createTemplateLoader(
"classpath:templates?settings(URLConnectionUsesCaches=false)",
cfg, this.getClass(), null);
assertEquals("templates/", ctl.getBasePackagePath());
assertEquals(Boolean.FALSE, ctl.getURLConnectionUsesCaches());
}
{
MultiTemplateLoader mtl = (MultiTemplateLoader) InitParamParser.createTemplateLoader(
"["
+ "templates?settings(URLConnectionUsesCaches=false, attemptFileAccess=false), "
+ "foo/templates?settings(URLConnectionUsesCaches=true), "
+ "classpath:templates, "
+ "classpath:foo/templates?settings(URLConnectionUsesCaches=true)"
+ "]",
cfg, this.getClass(), new MockServletContext());
assertEquals(4, mtl.getTemplateLoaderCount());
final WebappTemplateLoader tl1 = (WebappTemplateLoader) mtl.getTemplateLoader(0);
assertEquals(Boolean.FALSE, tl1.getURLConnectionUsesCaches());
assertFalse(tl1.getAttemptFileAccess());
final WebappTemplateLoader tl2 = (WebappTemplateLoader) mtl.getTemplateLoader(1);
assertEquals(Boolean.TRUE, tl2.getURLConnectionUsesCaches());
assertTrue(tl2.getAttemptFileAccess());
final ClassTemplateLoader tl3 = (ClassTemplateLoader) mtl.getTemplateLoader(2);
assertNull(tl3.getURLConnectionUsesCaches());
final ClassTemplateLoader tl4 = (ClassTemplateLoader) mtl.getTemplateLoader(3);
assertEquals(Boolean.TRUE, tl4.getURLConnectionUsesCaches());
}
}
@Test
public void testParseCommaSeparatedTemplateLoaderList() {
assertEquals(Collections.emptyList(),
InitParamParser.parseCommaSeparatedTemplatePaths(""));
assertEquals(Collections.emptyList(),
InitParamParser.parseCommaSeparatedTemplatePaths(" "));
assertEquals(Collections.emptyList(),
InitParamParser.parseCommaSeparatedTemplatePaths(","));
assertEquals(ImmutableList.of("a"),
InitParamParser.parseCommaSeparatedTemplatePaths("a"));
assertEquals(ImmutableList.of("a"),
InitParamParser.parseCommaSeparatedTemplatePaths(" a "));
assertEquals(ImmutableList.of("a", "b", "c"),
InitParamParser.parseCommaSeparatedTemplatePaths("a,b,c"));
assertEquals(ImmutableList.of("a", "b", "c"),
InitParamParser.parseCommaSeparatedTemplatePaths(" a , b , c "));
assertEquals(ImmutableList.of("a", "b", "c"),
InitParamParser.parseCommaSeparatedTemplatePaths("a,b,c,"));
try {
assertEquals(ImmutableList.of("a", "b", "c"),
InitParamParser.parseCommaSeparatedTemplatePaths("a,b,,c"));
} catch (Exception e) {
assertThat(e.getMessage(), containsString("comma"));
}
try {
assertEquals(ImmutableList.of("a", "b", "c"),
InitParamParser.parseCommaSeparatedTemplatePaths(",a,b,c"));
} catch (Exception e) {
assertThat(e.getMessage(), containsString("comma"));
}
try {
assertEquals(ImmutableList.of("a", "b", "c"),
InitParamParser.parseCommaSeparatedTemplatePaths(",a,b,c"));
} catch (Exception e) {
assertThat(e.getMessage(), containsString("comma"));
}
assertEquals(ImmutableList.of("a?settings(1)", "b", "c?settings(2)"),
InitParamParser.parseCommaSeparatedTemplatePaths("a?settings(1),b,c?settings(2)"));
assertEquals(ImmutableList.of("a ? settings ( 1 )", "b", "c ? settings ( 2 )"),
InitParamParser.parseCommaSeparatedTemplatePaths(" a ? settings ( 1 ) , b , c ? settings ( 2 ) "));
assertEquals(ImmutableList.of("a?settings(1,2,3)", "b?settings(1,2)", "c?settings()"),
InitParamParser.parseCommaSeparatedTemplatePaths("a?settings(1,2,3),b?settings(1,2),c?settings()"));
assertEquals(ImmutableList.of("a?settings(x=1, y=2)"),
InitParamParser.parseCommaSeparatedTemplatePaths("a?settings(x=1, y=2)"));
try {
InitParamParser.parseCommaSeparatedTemplatePaths("a?foo(x=1, y=2)");
} catch (Exception e) {
assertThat(e.getMessage(), containsString("settings"));
}
}
}