You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by dd...@apache.org on 2017/05/15 21:23:37 UTC
[21/51] [abbrv] [partial] incubator-freemarker git commit:
Restructured project so that freemarker-test-utils depends on freemarker-core
(and hence can provide common classes for testing templates,
and can use utility classes defined in the core). As a c
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/28a276c8/freemarker-core/src/test/java/org/apache/freemarker/core/DateFormatTest.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/test/java/org/apache/freemarker/core/DateFormatTest.java b/freemarker-core/src/test/java/org/apache/freemarker/core/DateFormatTest.java
deleted file mode 100644
index 4ad5937..0000000
--- a/freemarker-core/src/test/java/org/apache/freemarker/core/DateFormatTest.java
+++ /dev/null
@@ -1,464 +0,0 @@
-/*
- * 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.core;
-
-import static org.hamcrest.Matchers.*;
-import static org.junit.Assert.*;
-
-import java.io.IOException;
-import java.sql.Time;
-import java.sql.Timestamp;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Locale;
-import java.util.TimeZone;
-
-import org.apache.freemarker.core.model.TemplateDateModel;
-import org.apache.freemarker.core.model.TemplateModelException;
-import org.apache.freemarker.core.model.impl.SimpleDate;
-import org.apache.freemarker.core.templateresolver.ConditionalTemplateConfigurationFactory;
-import org.apache.freemarker.core.templateresolver.FileNameGlobMatcher;
-import org.apache.freemarker.core.userpkg.AppMetaTemplateDateFormatFactory;
-import org.apache.freemarker.core.userpkg.EpochMillisDivTemplateDateFormatFactory;
-import org.apache.freemarker.core.userpkg.EpochMillisTemplateDateFormatFactory;
-import org.apache.freemarker.core.userpkg.HTMLISOTemplateDateFormatFactory;
-import org.apache.freemarker.core.userpkg.LocAndTZSensitiveTemplateDateFormatFactory;
-import org.apache.freemarker.core.valueformat.TemplateDateFormat;
-import org.apache.freemarker.core.valueformat.TemplateDateFormatFactory;
-import org.apache.freemarker.core.valueformat.UndefinedCustomFormatException;
-import org.apache.freemarker.core.valueformat.impl.AliasTemplateDateFormatFactory;
-import org.apache.freemarker.test.TemplateTest;
-import org.apache.freemarker.test.TestConfigurationBuilder;
-import org.junit.Test;
-
-import com.google.common.collect.ImmutableMap;
-
-public class DateFormatTest extends TemplateTest {
-
- /** 2015-09-06T12:00:00Z */
- private static long T = 1441540800000L;
- private static TemplateDateModel TM = new SimpleDate(new Date(T), TemplateDateModel.DATETIME);
-
- private TestConfigurationBuilder createConfigurationBuilder() {
- return new TestConfigurationBuilder()
- .locale(Locale.US)
- .timeZone(TimeZone.getTimeZone("GMT+01:00"))
- .sqlDateAndTimeTimeZone(TimeZone.getTimeZone("UTC"))
- .customDateFormats(ImmutableMap.of(
- "epoch", EpochMillisTemplateDateFormatFactory.INSTANCE,
- "loc", LocAndTZSensitiveTemplateDateFormatFactory.INSTANCE,
- "div", EpochMillisDivTemplateDateFormatFactory.INSTANCE,
- "appMeta", AppMetaTemplateDateFormatFactory.INSTANCE,
- "htmlIso", HTMLISOTemplateDateFormatFactory.INSTANCE));
- }
-
- @Override
- protected Configuration createDefaultConfiguration() throws Exception {
- return createConfigurationBuilder().build();
- }
-
- @Test
- public void testCustomFormat() throws Exception {
- addToDataModel("d", new Date(123456789));
- assertOutput(
- "${d?string.@epoch} ${d?string.@epoch} <#setting locale='de_DE'>${d?string.@epoch}",
- "123456789 123456789 123456789");
-
- setConfigurationWithDateTimeFormat("@epoch");
- assertOutput(
- "<#assign d = d?datetime>"
- + "${d} ${d?string} <#setting locale='de_DE'>${d}",
- "123456789 123456789 123456789");
-
- setConfigurationWithDateTimeFormat("@htmlIso");
- assertOutput(
- "<#assign d = d?datetime>"
- + "${d} ${d?string} <#setting locale='de_DE'>${d}",
- "1970-01-02<span class='T'>T</span>10:17:36Z "
- + "1970-01-02T10:17:36Z "
- + "1970-01-02<span class='T'>T</span>10:17:36Z");
- }
-
- @Test
- public void testLocaleChange() throws Exception {
- addToDataModel("d", new Date(123456789));
- assertOutput(
- "${d?string.@loc} ${d?string.@loc} "
- + "<#setting locale='de_DE'>"
- + "${d?string.@loc} ${d?string.@loc} "
- + "<#setting locale='en_US'>"
- + "${d?string.@loc} ${d?string.@loc}",
- "123456789@en_US:GMT+01:00 123456789@en_US:GMT+01:00 "
- + "123456789@de_DE:GMT+01:00 123456789@de_DE:GMT+01:00 "
- + "123456789@en_US:GMT+01:00 123456789@en_US:GMT+01:00");
-
- setConfigurationWithDateTimeFormat("@loc");
- assertOutput(
- "<#assign d = d?datetime>"
- + "${d} ${d?string} "
- + "<#setting locale='de_DE'>"
- + "${d} ${d?string} "
- + "<#setting locale='en_US'>"
- + "${d} ${d?string}",
- "123456789@en_US:GMT+01:00 123456789@en_US:GMT+01:00 "
- + "123456789@de_DE:GMT+01:00 123456789@de_DE:GMT+01:00 "
- + "123456789@en_US:GMT+01:00 123456789@en_US:GMT+01:00");
- }
-
- @Test
- public void testTimeZoneChange() throws Exception {
- addToDataModel("d", new Date(123456789));
- setConfigurationWithDateTimeFormat("iso");
- assertOutput(
- "${d?string.@loc} ${d?string.@loc} ${d?datetime?isoLocal} "
- + "<#setting timeZone='GMT+02:00'>"
- + "${d?string.@loc} ${d?string.@loc} ${d?datetime?isoLocal} "
- + "<#setting timeZone='GMT+01:00'>"
- + "${d?string.@loc} ${d?string.@loc} ${d?datetime?isoLocal}",
- "123456789@en_US:GMT+01:00 123456789@en_US:GMT+01:00 1970-01-02T11:17:36+01:00 "
- + "123456789@en_US:GMT+02:00 123456789@en_US:GMT+02:00 1970-01-02T12:17:36+02:00 "
- + "123456789@en_US:GMT+01:00 123456789@en_US:GMT+01:00 1970-01-02T11:17:36+01:00");
-
- setConfigurationWithDateTimeFormat("@loc");
- assertOutput(
- "<#assign d = d?datetime>"
- + "${d} ${d?string} "
- + "<#setting timeZone='GMT+02:00'>"
- + "${d} ${d?string} "
- + "<#setting timeZone='GMT+01:00'>"
- + "${d} ${d?string}",
- "123456789@en_US:GMT+01:00 123456789@en_US:GMT+01:00 "
- + "123456789@en_US:GMT+02:00 123456789@en_US:GMT+02:00 "
- + "123456789@en_US:GMT+01:00 123456789@en_US:GMT+01:00");
- }
-
- @Test
- public void testWrongFormatStrings() throws Exception {
- setConfigurationWithDateTimeFormat("x1");
- assertErrorContains("${.now}", "\"x1\"", "'x'");
- assertErrorContains("${.now?string}", "\"x1\"", "'x'");
- setConfigurationWithDateTimeFormat("short");
- assertErrorContains("${.now?string('x2')}", "\"x2\"", "'x'");
- assertErrorContains("${.now?string('[wrong]')}", "format string", "[wrong]");
-
- setConfiguration(createConfigurationBuilder()
- .dateFormat("[wrong d]")
- .dateTimeFormat("[wrong dt]")
- .timeFormat("[wrong t]")
- .build());
- assertErrorContains("${.now?date}", "\"date_format\"", "[wrong d]");
- assertErrorContains("${.now?datetime}", "\"datetime_format\"", "[wrong dt]");
- assertErrorContains("${.now?time}", "\"time_format\"", "[wrong t]");
- }
-
- @Test
- public void testCustomParameterized() throws Exception {
- Configuration cfg = getConfiguration();
- addToDataModel("d", new SimpleDate(new Date(12345678L), TemplateDateModel.DATETIME));
- setConfigurationWithDateTimeFormat("@div 1000");
- assertOutput("${d}", "12345");
- assertOutput("${d?string}", "12345");
- assertOutput("${d?string.@div_100}", "123456");
-
- assertErrorContains("${d?string.@div_xyz}", "\"@div_xyz\"", "\"xyz\"");
- setConfigurationWithDateTimeFormat("@div");
- assertErrorContains("${d}", "\"datetime_format\"", "\"@div\"", "format parameter is required");
- }
-
- @Test
- public void testUnknownCustomFormat() throws Exception {
- {
- setConfigurationWithDateTimeFormat("@noSuchFormat");
- Throwable exc = assertErrorContains(
- "${.now}",
- "\"@noSuchFormat\"", "\"noSuchFormat\"", "\"datetime_format\"");
- assertThat(exc.getCause(), instanceOf(UndefinedCustomFormatException.class));
-
- }
- {
- setConfiguration(createConfigurationBuilder().dateFormat("@noSuchFormatD").build());
- assertErrorContains(
- "${.now?date}",
- "\"@noSuchFormatD\"", "\"noSuchFormatD\"", "\"date_format\"");
- }
- {
- setConfiguration(createConfigurationBuilder().timeFormat("@noSuchFormatT").build());
- assertErrorContains(
- "${.now?time}",
- "\"@noSuchFormatT\"", "\"noSuchFormatT\"", "\"time_format\"");
- }
-
- {
- setConfigurationWithDateTimeFormat("");
- Throwable exc = assertErrorContains("${.now?string('@noSuchFormat2')}",
- "\"@noSuchFormat2\"", "\"noSuchFormat2\"");
- assertThat(exc.getCause(), instanceOf(UndefinedCustomFormatException.class));
- }
- }
-
- private void setConfigurationWithDateTimeFormat(String formatString) {
- setConfiguration(createConfigurationBuilder().dateTimeFormat(formatString).build());
- }
-
- @Test
- public void testNullInModel() throws Exception {
- addToDataModel("d", new MutableTemplateDateModel());
- assertErrorContains("${d}", "nothing inside it");
- assertErrorContains("${d?string}", "nothing inside it");
- }
-
- @Test
- public void testIcIAndEscaping() throws Exception {
- addToDataModel("d", new SimpleDate(new Date(12345678L), TemplateDateModel.DATETIME));
-
- setConfigurationWithDateTimeFormat("@epoch");
- assertOutput("${d}", "12345678");
- setConfigurationWithDateTimeFormat("'@'yyyy");
- assertOutput("${d}", "@1970");
- setConfigurationWithDateTimeFormat("@@yyyy");
- assertOutput("${d}", "@@1970");
-
- setConfiguration(createConfigurationBuilder()
- .customDateFormats(Collections.<String, TemplateDateFormatFactory>emptyMap())
- .dateTimeFormat("@epoch")
- .build());
- assertErrorContains("${d}", "custom", "\"epoch\"");
- }
-
- @Test
- public void testEnvironmentGetters() throws Exception {
- String dateFormatStr = "yyyy.MM.dd. (Z)";
- String timeFormatStr = "HH:mm";
- String dateTimeFormatStr = "yyyy.MM.dd. HH:mm";
-
- setConfiguration(createConfigurationBuilder()
- .dateFormat(dateFormatStr)
- .timeFormat(timeFormatStr)
- .dateTimeFormat(dateTimeFormatStr)
- .build());
-
- Configuration cfg = getConfiguration();
-
- Template t = new Template(null, "", cfg);
- Environment env = t.createProcessingEnvironment(null, null);
-
- // Test that values are coming from the cache if possible
- for (Class dateClass : new Class[] { Date.class, Timestamp.class, java.sql.Date.class, Time.class } ) {
- for (int dateType
- : new int[] { TemplateDateModel.DATE, TemplateDateModel.TIME, TemplateDateModel.DATETIME }) {
- String formatString =
- dateType == TemplateDateModel.DATE ? cfg.getDateFormat() :
- (dateType == TemplateDateModel.TIME ? cfg.getTimeFormat()
- : cfg.getDateTimeFormat());
- TemplateDateFormat expectedF = env.getTemplateDateFormat(formatString, dateType, dateClass);
- assertSame(expectedF, env.getTemplateDateFormat(dateType, dateClass)); // Note: Only reads the cache
- assertSame(expectedF, env.getTemplateDateFormat(formatString, dateType, dateClass));
- assertSame(expectedF, env.getTemplateDateFormat(formatString, dateType, dateClass, cfg.getLocale()));
- assertSame(expectedF, env.getTemplateDateFormat(formatString, dateType, dateClass, cfg.getLocale(),
- cfg.getTimeZone(), cfg.getSQLDateAndTimeTimeZone()));
- }
- }
-
- String dateFormatStr2 = dateFormatStr + "'!'";
- String timeFormatStr2 = timeFormatStr + "'!'";
- String dateTimeFormatStr2 = dateTimeFormatStr + "'!'";
-
- assertEquals("2015.09.06. 13:00",
- env.getTemplateDateFormat(TemplateDateModel.DATETIME, Date.class).formatToPlainText(TM));
- assertEquals("2015.09.06. 13:00!",
- env.getTemplateDateFormat(dateTimeFormatStr2, TemplateDateModel.DATETIME, Date.class).formatToPlainText(TM));
-
- assertEquals("2015.09.06. (+0100)",
- env.getTemplateDateFormat(TemplateDateModel.DATE, Date.class).formatToPlainText(TM));
- assertEquals("2015.09.06. (+0100)!",
- env.getTemplateDateFormat(dateFormatStr2, TemplateDateModel.DATE, Date.class).formatToPlainText(TM));
-
- assertEquals("13:00",
- env.getTemplateDateFormat(TemplateDateModel.TIME, Date.class).formatToPlainText(TM));
- assertEquals("13:00!",
- env.getTemplateDateFormat(timeFormatStr2, TemplateDateModel.TIME, Date.class).formatToPlainText(TM));
-
- assertEquals("2015.09.06. 13:00",
- env.getTemplateDateFormat(TemplateDateModel.DATETIME, Timestamp.class).formatToPlainText(TM));
- assertEquals("2015.09.06. 13:00!",
- env.getTemplateDateFormat(dateTimeFormatStr2, TemplateDateModel.DATETIME, Timestamp.class).formatToPlainText(TM));
-
- assertEquals("2015.09.06. (+0000)",
- env.getTemplateDateFormat(TemplateDateModel.DATE, java.sql.Date.class).formatToPlainText(TM));
- assertEquals("2015.09.06. (+0000)!",
- env.getTemplateDateFormat(dateFormatStr2, TemplateDateModel.DATE, java.sql.Date.class).formatToPlainText(TM));
-
- assertEquals("12:00",
- env.getTemplateDateFormat(TemplateDateModel.TIME, Time.class).formatToPlainText(TM));
- assertEquals("12:00!",
- env.getTemplateDateFormat(timeFormatStr2, TemplateDateModel.TIME, Time.class).formatToPlainText(TM));
-
- {
- String dateTimeFormatStrLoc = dateTimeFormatStr + " EEEE";
- // Gets into cache:
- TemplateDateFormat format1
- = env.getTemplateDateFormat(dateTimeFormatStrLoc, TemplateDateModel.DATETIME, Date.class);
- assertEquals("2015.09.06. 13:00 Sunday", format1.formatToPlainText(TM));
- // Different locale (not cached):
- assertEquals("2015.09.06. 13:00 Sonntag",
- env.getTemplateDateFormat(dateTimeFormatStrLoc, TemplateDateModel.DATETIME, Date.class,
- Locale.GERMANY).formatToPlainText(TM));
- // Different locale and zone (not cached):
- assertEquals("2015.09.06. 14:00 Sonntag",
- env.getTemplateDateFormat(dateTimeFormatStrLoc, TemplateDateModel.DATETIME, Date.class,
- Locale.GERMANY, TimeZone.getTimeZone("GMT+02"), TimeZone.getTimeZone("GMT+03")).formatToPlainText(TM));
- // Different locale and zone (not cached):
- assertEquals("2015.09.06. 15:00 Sonntag",
- env.getTemplateDateFormat(dateTimeFormatStrLoc, TemplateDateModel.DATETIME, java.sql.Date.class,
- Locale.GERMANY, TimeZone.getTimeZone("GMT+02"), TimeZone.getTimeZone("GMT+03")).formatToPlainText(TM));
- // Check for corrupted cache:
- TemplateDateFormat format2
- = env.getTemplateDateFormat(dateTimeFormatStrLoc, TemplateDateModel.DATETIME, Date.class);
- assertEquals("2015.09.06. 13:00 Sunday", format2.formatToPlainText(TM));
- assertSame(format1, format2);
- }
- }
-
- @Test
- public void testAliases() throws Exception {
- setConfiguration(createConfigurationBuilder()
- .customDateFormats(ImmutableMap.of(
- "d", new AliasTemplateDateFormatFactory("yyyy-MMM-dd"),
- "m", new AliasTemplateDateFormatFactory("yyyy-MMM"),
- "epoch", EpochMillisTemplateDateFormatFactory.INSTANCE))
- .templateConfigurations(
- new ConditionalTemplateConfigurationFactory(
- new FileNameGlobMatcher("*2*"),
- new TemplateConfiguration.Builder()
- .customDateFormats(ImmutableMap.<String, TemplateDateFormatFactory>of(
- "m", new AliasTemplateDateFormatFactory("yyyy-MMMM"),
- "i", new AliasTemplateDateFormatFactory("@epoch")))
- .build()))
- .build());
-
- addToDataModel("d", TM);
- String commonFtl = "${d?string.@d} ${d?string.@m} "
- + "<#setting locale='fr_FR'>${d?string.@m} "
- + "<#attempt>${d?string.@i}<#recover>E</#attempt>";
- addTemplate("t1.ftl", commonFtl);
- addTemplate("t2.ftl", commonFtl);
-
- // 2015-09-06T12:00:00Z
- assertOutputForNamed("t1.ftl", "2015-Sep-06 2015-Sep 2015-sept. E");
- assertOutputForNamed("t2.ftl", "2015-Sep-06 2015-September 2015-septembre " + T);
- }
-
- @Test
- public void testAliases2() throws Exception {
- setConfiguration(
- createConfigurationBuilder()
- .customDateFormats(ImmutableMap.<String, TemplateDateFormatFactory>of(
- "d", new AliasTemplateDateFormatFactory("yyyy-MMM",
- ImmutableMap.of(
- new Locale("en"), "yyyy-MMM'_en'",
- Locale.UK, "yyyy-MMM'_en_GB'",
- Locale.FRANCE, "yyyy-MMM'_fr_FR'"))))
- .dateTimeFormat("@d")
- .build());
- addToDataModel("d", TM);
- assertOutput(
- "<#setting locale='en_US'>${d} "
- + "<#setting locale='en_GB'>${d} "
- + "<#setting locale='en_GB_Win'>${d} "
- + "<#setting locale='fr_FR'>${d} "
- + "<#setting locale='hu_HU'>${d}",
- "2015-Sep_en 2015-Sep_en_GB 2015-Sep_en_GB 2015-sept._fr_FR 2015-szept.");
- }
-
- /**
- * ?date() and such are new in 2.3.24.
- */
- @Test
- public void testZeroArgDateBI() throws IOException, TemplateException {
- setConfiguration(
- createConfigurationBuilder()
- .dateFormat("@epoch")
- .dateTimeFormat("@epoch")
- .timeFormat("@epoch")
- .build());
-
- addToDataModel("t", String.valueOf(T));
-
- assertOutput(
- "${t?date?string.xs_u} ${t?date()?string.xs_u}",
- "2015-09-06Z 2015-09-06Z");
- assertOutput(
- "${t?time?string.xs_u} ${t?time()?string.xs_u}",
- "12:00:00Z 12:00:00Z");
- assertOutput(
- "${t?datetime?string.xs_u} ${t?datetime()?string.xs_u}",
- "2015-09-06T12:00:00Z 2015-09-06T12:00:00Z");
- }
-
- @Test
- public void testAppMetaRoundtrip() throws IOException, TemplateException {
- setConfiguration(
- createConfigurationBuilder()
- .dateFormat("@appMeta")
- .dateTimeFormat("@appMeta")
- .timeFormat("@appMeta")
- .build());
-
- addToDataModel("t", String.valueOf(T) + "/foo");
-
- assertOutput(
- "${t?date} ${t?date()}",
- T + " " + T + "/foo");
- assertOutput(
- "${t?time} ${t?time()}",
- T + " " + T + "/foo");
- assertOutput(
- "${t?datetime} ${t?datetime()}",
- T + " " + T + "/foo");
- }
-
- @Test
- public void testUnknownDateType() throws IOException, TemplateException {
- addToDataModel("u", new Date(T));
- assertErrorContains("${u?string}", "isn't known");
- assertOutput("${u?string('yyyy')}", "2015");
- assertOutput("<#assign s = u?string>${s('yyyy')}", "2015");
- }
-
- private static class MutableTemplateDateModel implements TemplateDateModel {
-
- private Date date;
-
- public void setDate(Date date) {
- this.date = date;
- }
-
- @Override
- public Date getAsDate() throws TemplateModelException {
- return date;
- }
-
- @Override
- public int getDateType() {
- return DATETIME;
- }
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/28a276c8/freemarker-core/src/test/java/org/apache/freemarker/core/DirectiveCallPlaceTest.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/test/java/org/apache/freemarker/core/DirectiveCallPlaceTest.java b/freemarker-core/src/test/java/org/apache/freemarker/core/DirectiveCallPlaceTest.java
deleted file mode 100644
index 29220c4..0000000
--- a/freemarker-core/src/test/java/org/apache/freemarker/core/DirectiveCallPlaceTest.java
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * 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.core;
-
-import java.io.IOException;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import org.apache.freemarker.core.model.TemplateDirectiveBody;
-import org.apache.freemarker.core.model.TemplateDirectiveModel;
-import org.apache.freemarker.core.model.TemplateModel;
-import org.apache.freemarker.core.model.TemplateModelException;
-import org.apache.freemarker.core.model.TemplateScalarModel;
-import org.apache.freemarker.core.util.ObjectFactory;
-import org.apache.freemarker.test.TemplateTest;
-import org.junit.Test;
-
-public class DirectiveCallPlaceTest extends TemplateTest {
-
- @Test
- public void testCustomDataBasics() throws IOException, TemplateException {
- addTemplate(
- "customDataBasics.ftl",
- "<@u...@uc> <@u...@uc> <@uc>Ab<#-- -->c</...@uc> <@l...@lc> <@l...@lc>");
-
- CachingTextConverterDirective.resetCacheRecreationCount();
- for (int i = 0; i < 3; i++) {
- assertOutputForNamed(
- "customDataBasics.ftl",
- "ABC[cached 1] X=123 ABC[cached 2] abc[cached 3]");
- }
- }
-
- @Test
- public void testCustomDataProviderMismatch() throws IOException, TemplateException {
- addTemplate(
- "customDataProviderMismatch.ftl",
- "<#list [uc, lc, uc] as d><#list 1..2 as _><@d...@d></#list></#list>");
-
- CachingTextConverterDirective.resetCacheRecreationCount();
- assertOutputForNamed(
- "customDataProviderMismatch.ftl",
- "ABC[cached 1]ABC[cached 1]abc[cached 2]abc[cached 2]ABC[cached 3]ABC[cached 3]");
- assertOutputForNamed(
- "customDataProviderMismatch.ftl",
- "ABC[cached 3]ABC[cached 3]abc[cached 4]abc[cached 4]ABC[cached 5]ABC[cached 5]");
- }
-
- @Test
- public void testPositions() throws IOException, TemplateException {
- addTemplate(
- "positions.ftl",
- "<@pa />\n"
- + "..<@pa\n"
- + "/><@pa>xxx</@>\n"
- + "<@pa>{<@pa/> <@pa/>}</@>\n"
- + "${curDirLine}<@argP p=curDirLine?string>${curDirLine}</...@argP>${curDirLine}\n"
- + "<#macro m p>(p=${p}){<#nested>}</#macro>\n"
- + "${curDirLine}<@m p=curDirLine?string>${curDirLine}</...@m>${curDirLine}");
-
- assertOutputForNamed(
- "positions.ftl",
- "[positions.ftl:1:1-1:7]"
- + "..[positions.ftl:2:3-3:2]"
- + "[positions.ftl:3:3-3:14]xxx\n"
- + "[positions.ftl:4:1-4:24]{[positions.ftl:4:7-4:12] [positions.ftl:4:14-4:19]}\n"
- + "-(p=5){-}-\n"
- + "-(p=7){-}-"
- );
- }
-
- @SuppressWarnings("boxing")
- @Override
- protected Object createDataModel() {
- Map<String, Object> dm = new HashMap<>();
- dm.put("uc", new CachingUpperCaseDirective());
- dm.put("lc", new CachingLowerCaseDirective());
- dm.put("pa", new PositionAwareDirective());
- dm.put("argP", new ArgPrinterDirective());
- dm.put("curDirLine", new CurDirLineScalar());
- dm.put("x", 123);
- return dm;
- }
-
- private abstract static class CachingTextConverterDirective implements TemplateDirectiveModel {
-
- /** Only needed for testing. */
- private static AtomicInteger cacheRecreationCount = new AtomicInteger();
-
- /** Only needed for testing. */
- static void resetCacheRecreationCount() {
- cacheRecreationCount.set(0);
- }
-
- @Override
- public void execute(Environment env, Map params, TemplateModel[] loopVars, final TemplateDirectiveBody body)
- throws TemplateException, IOException {
- if (body == null) {
- return;
- }
-
- final String convertedText;
-
- final DirectiveCallPlace callPlace = env.getCurrentDirectiveCallPlace();
- if (callPlace.isNestedOutputCacheable()) {
- try {
- convertedText = (String) callPlace.getOrCreateCustomData(
- getTextConversionIdentity(), new ObjectFactory<String>() {
-
- @Override
- public String createObject() throws TemplateException, IOException {
- return convertBodyText(body)
- + "[cached " + cacheRecreationCount.incrementAndGet() + "]";
- }
-
- });
- } catch (CallPlaceCustomDataInitializationException e) {
- throw new TemplateModelException("Failed to pre-render nested content", e);
- }
- } else {
- convertedText = convertBodyText(body);
- }
-
- env.getOut().write(convertedText);
- }
-
- protected abstract Class getTextConversionIdentity();
-
- private String convertBodyText(TemplateDirectiveBody body) throws TemplateException,
- IOException {
- StringWriter sw = new StringWriter();
- body.render(sw);
- return convertText(sw.toString());
- }
-
- protected abstract String convertText(String s);
-
- }
-
- private static class CachingUpperCaseDirective extends CachingTextConverterDirective {
-
- @Override
- protected String convertText(String s) {
- return s.toUpperCase();
- }
-
- @Override
- protected Class getTextConversionIdentity() {
- return CachingUpperCaseDirective.class;
- }
-
- }
-
- private static class CachingLowerCaseDirective extends CachingTextConverterDirective {
-
- @Override
- protected String convertText(String s) {
- return s.toLowerCase();
- }
-
- @Override
- protected Class getTextConversionIdentity() {
- return CachingLowerCaseDirective.class;
- }
-
- }
-
- private static class PositionAwareDirective implements TemplateDirectiveModel {
-
- @Override
- public void execute(Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body)
- throws TemplateException, IOException {
- Writer out = env.getOut();
- DirectiveCallPlace callPlace = env.getCurrentDirectiveCallPlace();
- out.write("[");
- out.write(getTemplateSourceName(callPlace));
- out.write(":");
- out.write(Integer.toString(callPlace.getBeginLine()));
- out.write(":");
- out.write(Integer.toString(callPlace.getBeginColumn()));
- out.write("-");
- out.write(Integer.toString(callPlace.getEndLine()));
- out.write(":");
- out.write(Integer.toString(callPlace.getEndColumn()));
- out.write("]");
- if (body != null) {
- body.render(out);
- }
- }
-
- private String getTemplateSourceName(DirectiveCallPlace callPlace) {
- return ((ASTDirUserDefined) callPlace).getTemplate().getSourceName();
- }
-
- }
-
- private static class ArgPrinterDirective implements TemplateDirectiveModel {
-
- @Override
- public void execute(Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body)
- throws TemplateException, IOException {
- final Writer out = env.getOut();
- if (params.size() > 0) {
- out.write("(p=");
- out.write(((TemplateScalarModel) params.get("p")).getAsString());
- out.write(")");
- }
- if (body != null) {
- out.write("{");
- body.render(out);
- out.write("}");
- }
- }
-
- }
-
- private static class CurDirLineScalar implements TemplateScalarModel {
-
- @Override
- public String getAsString() throws TemplateModelException {
- DirectiveCallPlace callPlace = Environment.getCurrentEnvironment().getCurrentDirectiveCallPlace();
- return callPlace != null
- ? String.valueOf(Environment.getCurrentEnvironment().getCurrentDirectiveCallPlace().getBeginLine())
- : "-";
- }
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/28a276c8/freemarker-core/src/test/java/org/apache/freemarker/core/EncodingOverrideTest.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/test/java/org/apache/freemarker/core/EncodingOverrideTest.java b/freemarker-core/src/test/java/org/apache/freemarker/core/EncodingOverrideTest.java
deleted file mode 100644
index b1acead..0000000
--- a/freemarker-core/src/test/java/org/apache/freemarker/core/EncodingOverrideTest.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * 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.core;
-
-import static org.junit.Assert.*;
-
-import java.io.IOException;
-import java.io.StringWriter;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-import java.util.Collections;
-
-import org.apache.freemarker.core.templateresolver.impl.ClassTemplateLoader;
-import org.junit.Test;
-
-public class EncodingOverrideTest {
-
- @Test
- public void testMarchingCharset() throws Exception {
- Template t = createConfig(StandardCharsets.UTF_8).getTemplate("encodingOverride-UTF-8.ftl");
- assertEquals(StandardCharsets.UTF_8, t.getActualSourceEncoding());
- checkTemplateOutput(t);
- }
-
- @Test
- public void testDifferentCharset() throws Exception {
- Template t = createConfig(StandardCharsets.UTF_8).getTemplate("encodingOverride-ISO-8859-1.ftl");
- assertEquals(StandardCharsets.ISO_8859_1, t.getActualSourceEncoding());
- checkTemplateOutput(t);
- }
-
- private void checkTemplateOutput(Template t) throws TemplateException, IOException {
- StringWriter out = new StringWriter();
- t.process(Collections.emptyMap(), out);
- assertEquals("Béka", out.toString());
- }
-
- private Configuration createConfig(Charset charset) {
- return new Configuration.Builder(Configuration.VERSION_3_0_0)
- .templateLoader(new ClassTemplateLoader(EncodingOverrideTest.class, ""))
- .sourceEncoding(charset)
- .build();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/28a276c8/freemarker-core/src/test/java/org/apache/freemarker/core/EnvironmentGetTemplateVariantsTest.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/test/java/org/apache/freemarker/core/EnvironmentGetTemplateVariantsTest.java b/freemarker-core/src/test/java/org/apache/freemarker/core/EnvironmentGetTemplateVariantsTest.java
deleted file mode 100644
index b79559c..0000000
--- a/freemarker-core/src/test/java/org/apache/freemarker/core/EnvironmentGetTemplateVariantsTest.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * 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.core;
-
-import static org.junit.Assert.*;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Collections;
-import java.util.Map;
-
-import org.apache.freemarker.core.model.TemplateDirectiveBody;
-import org.apache.freemarker.core.model.TemplateDirectiveModel;
-import org.apache.freemarker.core.model.TemplateModel;
-import org.apache.freemarker.core.model.impl.SimpleScalar;
-import org.apache.freemarker.core.templateresolver.impl.StringTemplateLoader;
-import org.apache.freemarker.test.TemplateTest;
-import org.apache.freemarker.test.TestConfigurationBuilder;
-import org.junit.Test;
-
-public class EnvironmentGetTemplateVariantsTest extends TemplateTest {
-
- private static final StringTemplateLoader TEMPLATES = new StringTemplateLoader();
- static {
- TEMPLATES.putTemplate("main",
- "<@tNames />\n"
- + "---1---\n"
- + "[imp: <#import 'imp' as i>${i.impIni}]\n"
- + "---2---\n"
- + "<@i.impM>"
- + "<@tNames />"
- + "</@>\n"
- + "---3---\n"
- + "[inc: <#include 'inc'>]\n"
- + "---4---\n"
- + "<@incM>"
- + "<@tNames />"
- + "</@>\n"
- + "---5---\n"
- + "[inc2: <#include 'inc2'>]\n"
- + "---6---\n"
- + "<#import 'imp2' as i2>"
- + "<@i.impM2><@tNames /></@>\n"
- + "---7---\n"
- + "<#macro mainM>"
- + "[mainM: <@tNames /> {<#nested>} <@tNames />]"
- + "</#macro>"
- + "[inc3: <#include 'inc3'>]\n"
- + "<@mainM><@tNames /> <#include 'inc4'> <@tNames /></@>\n"
- + "<@tNames />\n"
- + "---8---\n"
- + "<#function mainF>"
- + "<@tNames />"
- + "<#return lastTNamesResult>"
- + "</#function>"
- + "mainF: ${mainF()}, impF: ${i.impF()}, incF: ${incF()}\n"
- );
- TEMPLATES.putTemplate("inc",
- "<@tNames />\n"
- + "<#macro incM>"
- + "[incM: <@tNames /> {<#nested>}]"
- + "</#macro>"
- + "<#function incF>"
- + "<@tNames />"
- + "<#return lastTNamesResult>"
- + "</#function>"
- + "<@incM><@tNames /></@>\n"
- + "<#if !included!false>[incInc: <#assign included=true><#include 'inc'>]\n</#if>"
- );
- TEMPLATES.putTemplate("imp",
- "<#assign impIni><@tNames /></#assign>\n"
- + "<#macro impM>"
- + "[impM: <@tNames />\n"
- + "{<#nested>}\n"
- + "[inc: <#include 'inc'>]\n"
- + "<@incM><@tNames /></@>\n"
- + "]"
- + "</#macro>"
- + "<#macro impM2>"
- + "[impM2: <@tNames />\n"
- + "{<#nested>}\n"
- + "<@i2.imp2M><@tNames /></@>\n"
- + "]"
- + "</#macro>"
- + "<#function impF>"
- + "<@tNames />"
- + "<#return lastTNamesResult>"
- + "</#function>"
- );
- TEMPLATES.putTemplate("inc2",
- "<@tNames />\n"
- + "<@i.impM><@tNames /></@>\n"
- );
- TEMPLATES.putTemplate("imp2",
- "<#macro imp2M>"
- + "[imp2M: <@tNames /> {<#nested>}]"
- + "</#macro>");
- TEMPLATES.putTemplate("inc3",
- "<@tNames />\n"
- + "<@mainM><@tNames /></@>\n"
- );
- TEMPLATES.putTemplate("inc4",
- "<@tNames />"
- );
- }
-
- @Test
- public void test() throws IOException, TemplateException {
- setConfiguration(createConfiguration(Configuration.VERSION_3_0_0));
- assertOutputForNamed(
- "main",
- "<ct=main mt=main>\n"
- + "---1---\n"
- + "[imp: <ct=imp mt=main>]\n"
- + "---2---\n"
- + "[impM: <ct=imp mt=main>\n"
- + "{<ct=main mt=main>}\n"
- + "[inc: <ct=inc mt=main>\n"
- + "[incM: <ct=inc mt=main> {<ct=inc mt=main>}]\n"
- + "[incInc: <ct=inc mt=main>\n"
- + "[incM: <ct=inc mt=main> {<ct=inc mt=main>}]\n"
- + "]\n"
- + "]\n"
- + "[incM: <ct=inc mt=main> {<ct=imp mt=main>}]\n"
- + "]\n"
- + "---3---\n"
- + "[inc: <ct=inc mt=main>\n"
- + "[incM: <ct=inc mt=main> {<ct=inc mt=main>}]\n"
- + "[incInc: <ct=inc mt=main>\n"
- + "[incM: <ct=inc mt=main> {<ct=inc mt=main>}]\n"
- + "]\n"
- + "]\n"
- + "---4---\n"
- + "[incM: <ct=inc mt=main> {<ct=main mt=main>}]\n"
- + "---5---\n"
- + "[inc2: <ct=inc2 mt=main>\n"
- + "[impM: <ct=imp mt=main>\n"
- + "{<ct=inc2 mt=main>}\n"
- + "[inc: <ct=inc mt=main>\n"
- + "[incM: <ct=inc mt=main> {<ct=inc mt=main>}]\n"
- + "]\n"
- + "[incM: <ct=inc mt=main> {<ct=imp mt=main>}]\n"
- + "]\n"
- + "]\n"
- + "---6---\n"
- + "[impM2: <ct=imp mt=main>\n"
- + "{<ct=main mt=main>}\n"
- + "[imp2M: <ct=imp2 mt=main> {<ct=imp mt=main>}]\n"
- + "]\n"
- + "---7---\n"
- + "[inc3: <ct=inc3 mt=main>\n"
- + "[mainM: <ct=main mt=main> {<ct=inc3 mt=main>} <ct=main mt=main>]\n"
- + "]\n"
- + "[mainM: "
- + "<ct=main mt=main> "
- + "{<ct=main mt=main> <ct=inc4 mt=main> <ct=main mt=main>} "
- + "<ct=main mt=main>"
- + "]\n"
- + "<ct=main mt=main>\n"
- + "---8---\n"
- + "mainF: <ct=main mt=main>, impF: <ct=imp mt=main>, incF: <ct=inc mt=main>\n"
- .replaceAll("<t=\\w+", "<t=main"));
- }
-
- @Test
- public void testNotStarted() throws IOException, TemplateException {
- Template t = new Template("foo", "", createConfiguration(Configuration.VERSION_3_0_0));
- final Environment env = t.createProcessingEnvironment(null, null);
- assertSame(t, env.getMainTemplate());
- assertSame(t, env.getCurrentTemplate());
- }
-
- private Configuration createConfiguration(Version iciVersion) {
- return new TestConfigurationBuilder(iciVersion)
- .templateLoader(TEMPLATES)
- .whitespaceStripping(false)
- .build();
- }
-
- @Override
- protected Object createDataModel() {
- return Collections.singletonMap("tNames", new TemplateDirectiveModel() {
-
- @Override
- public void execute(Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body)
- throws TemplateException, IOException {
- Writer out = env.getOut();
- final String r = "<ct=" + env.getCurrentTemplate().getLookupName() + " mt="
- + env.getMainTemplate().getLookupName() + ">";
- out.write(r);
- env.setGlobalVariable("lastTNamesResult", new SimpleScalar(r));
- }
-
- });
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/28a276c8/freemarker-core/src/test/java/org/apache/freemarker/core/ExceptionTest.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/test/java/org/apache/freemarker/core/ExceptionTest.java b/freemarker-core/src/test/java/org/apache/freemarker/core/ExceptionTest.java
deleted file mode 100644
index 19c3b6e..0000000
--- a/freemarker-core/src/test/java/org/apache/freemarker/core/ExceptionTest.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * 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.core;
-
-import static org.hamcrest.Matchers.*;
-import static org.junit.Assert.*;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.Collections;
-import java.util.Locale;
-
-import org.apache.freemarker.core.templateresolver.impl.StringTemplateLoader;
-import org.apache.freemarker.core.util._NullWriter;
-import org.apache.freemarker.test.TestConfigurationBuilder;
-
-import junit.framework.TestCase;
-public class ExceptionTest extends TestCase {
-
- public ExceptionTest(String name) {
- super(name);
- }
-
- public void testParseExceptionSerializable() throws IOException, ClassNotFoundException {
- try {
- new Template(null, new StringReader("<@>"), new TestConfigurationBuilder().build());
- fail();
- } catch (ParseException e) {
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- new ObjectOutputStream(out).writeObject(e);
- new ObjectInputStream(new ByteArrayInputStream(out.toByteArray())).readObject();
- }
- }
-
- public void testTemplateErrorSerializable() throws IOException, ClassNotFoundException {
- Template tmp = new Template(null, new StringReader("${noSuchVar}"),
- new TestConfigurationBuilder().build());
- try {
- tmp.process(Collections.EMPTY_MAP, new StringWriter());
- fail();
- } catch (TemplateException e) {
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- new ObjectOutputStream(out).writeObject(e);
- new ObjectInputStream(new ByteArrayInputStream(out.toByteArray())).readObject();
- }
- }
-
- @SuppressWarnings("boxing")
- public void testTemplateExceptionLocationInformation() throws IOException {
- StringTemplateLoader tl = new StringTemplateLoader();
- tl.putTemplate("foo_en.ftl", "\n\nxxx${noSuchVariable}");
-
- Template t = new TestConfigurationBuilder().templateLoader(tl).build()
- .getTemplate("foo.ftl", Locale.US);
- try {
- t.process(null, _NullWriter.INSTANCE);
- fail();
- } catch (TemplateException e) {
- assertEquals("foo.ftl", t.getLookupName());
- assertEquals("foo.ftl", e.getTemplateLookupName());
- assertEquals("foo_en.ftl", e.getTemplateSourceName());
- assertEquals(3, (int) e.getLineNumber());
- assertEquals(6, (int) e.getColumnNumber());
- assertEquals(3, (int) e.getEndLineNumber());
- assertEquals(19, (int) e.getEndColumnNumber());
- assertThat(e.getMessage(), containsString("foo_en.ftl"));
- assertThat(e.getMessage(), containsString("noSuchVariable"));
- }
- }
-
- @SuppressWarnings("cast")
- public void testParseExceptionLocationInformation() throws IOException {
- StringTemplateLoader tl = new StringTemplateLoader();
- tl.putTemplate("foo_en.ftl", "\n\nxxx<#noSuchDirective>");
-
- try {
- new TestConfigurationBuilder().templateLoader(tl).build()
- .getTemplate("foo.ftl", Locale.US);
- fail();
- } catch (ParseException e) {
- System.out.println(e.getMessage());
- assertEquals("foo_en.ftl", e.getTemplateSourceName());
- assertEquals("foo.ftl", e.getTemplateLookupName());
- assertEquals(3, e.getLineNumber());
- assertEquals(5, e.getColumnNumber());
- assertEquals(3, e.getEndLineNumber());
- assertEquals(20, e.getEndColumnNumber());
- assertThat(e.getMessage(), containsString("foo_en.ftl"));
- assertThat(e.getMessage(), containsString("noSuchDirective"));
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/28a276c8/freemarker-core/src/test/java/org/apache/freemarker/core/GetSourceTest.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/test/java/org/apache/freemarker/core/GetSourceTest.java b/freemarker-core/src/test/java/org/apache/freemarker/core/GetSourceTest.java
deleted file mode 100644
index 1462bfc..0000000
--- a/freemarker-core/src/test/java/org/apache/freemarker/core/GetSourceTest.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * 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.core;
-
-import static org.junit.Assert.*;
-
-import org.apache.freemarker.test.TestConfigurationBuilder;
-import org.junit.Test;
-
-public class GetSourceTest {
-
- @Test
- public void testGetSource() throws Exception {
- {
- // Note: Default tab size is 8.
- Template t = new Template(null, "a\n\tb\nc",
- new TestConfigurationBuilder().build());
- // A historical quirk we keep for B.C.: it repaces tabs with spaces.
- assertEquals("a\n b\nc", t.getSource(1, 1, 1, 3));
- }
-
- {
- Template t = new Template(null, "a\n\tb\nc",
- new TestConfigurationBuilder().tabSize(4).build());
- assertEquals("a\n b\nc", t.getSource(1, 1, 1, 3));
- }
-
- {
- Template t = new Template(null, "a\n\tb\nc",
- new TestConfigurationBuilder().tabSize(1).build());
- // If tab size is 1, it behaves as it always should have: it keeps the tab.
- assertEquals("a\n\tb\nc", t.getSource(1, 1, 1, 3));
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/28a276c8/freemarker-core/src/test/java/org/apache/freemarker/core/HeaderParsingTest.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/test/java/org/apache/freemarker/core/HeaderParsingTest.java b/freemarker-core/src/test/java/org/apache/freemarker/core/HeaderParsingTest.java
deleted file mode 100644
index 6f8851d..0000000
--- a/freemarker-core/src/test/java/org/apache/freemarker/core/HeaderParsingTest.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * 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.core;
-
-import java.io.IOException;
-
-import org.apache.freemarker.test.TemplateTest;
-import org.apache.freemarker.test.TestConfigurationBuilder;
-import org.junit.Test;
-
-public class HeaderParsingTest extends TemplateTest {
-
- private final Configuration cfgStripWS = new TestConfigurationBuilder().build();
- private final Configuration cfgNoStripWS = new TestConfigurationBuilder().whitespaceStripping(false).build();
-
- @Test
- public void test() throws IOException, TemplateException {
- assertOutput("<#ftl>text", "text", "text");
- assertOutput(" <#ftl> text", " text", " text");
- assertOutput("\n<#ftl>\ntext", "text", "text");
- assertOutput("\n \n\n<#ftl> \ntext", "text", "text");
- assertOutput("\n \n\n<#ftl>\n\ntext", "\ntext", "\ntext");
- }
-
- private void assertOutput(final String ftl, String expectedOutStripped, String expectedOutNonStripped)
- throws IOException, TemplateException {
- for (int i = 0; i < 4; i++) {
- String ftlPermutation = ftl;
- if ((i & 1) == 1) {
- ftlPermutation = ftlPermutation.replace("<#ftl>", "<#ftl encoding='utf-8'>");
- }
- if ((i & 2) == 2) {
- ftlPermutation = ftlPermutation.replace('<', '[').replace('>', ']');
- }
-
- setConfiguration(cfgStripWS);
- assertOutput(ftlPermutation, expectedOutStripped);
- setConfiguration(cfgNoStripWS);
- assertOutput(ftlPermutation, expectedOutNonStripped);
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/28a276c8/freemarker-core/src/test/java/org/apache/freemarker/core/IncludeAndImportConfigurableLayersTest.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/test/java/org/apache/freemarker/core/IncludeAndImportConfigurableLayersTest.java b/freemarker-core/src/test/java/org/apache/freemarker/core/IncludeAndImportConfigurableLayersTest.java
deleted file mode 100644
index 738b4de..0000000
--- a/freemarker-core/src/test/java/org/apache/freemarker/core/IncludeAndImportConfigurableLayersTest.java
+++ /dev/null
@@ -1,354 +0,0 @@
-/*
- * 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.core;
-
-import static org.junit.Assert.*;
-
-import java.io.StringWriter;
-
-import org.apache.freemarker.core.templateresolver.ConditionalTemplateConfigurationFactory;
-import org.apache.freemarker.core.templateresolver.FileNameGlobMatcher;
-import org.apache.freemarker.core.templateresolver.impl.StringTemplateLoader;
-import org.apache.freemarker.test.TestConfigurationBuilder;
-import org.junit.Test;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-
-public class IncludeAndImportConfigurableLayersTest {
-
- @Test
- public void test3LayerImportNoClashes() throws Exception {
- TestConfigurationBuilder cfgB = createConfigurationBuilder()
- .autoImports(ImmutableMap.of("t1", "t1.ftl"))
- .templateConfigurations(
- new ConditionalTemplateConfigurationFactory(
- new FileNameGlobMatcher("main.ftl"),
- new TemplateConfiguration.Builder()
- .autoImports(ImmutableMap.of("t2", "t2.ftl"))
- .build()));
- Configuration cfg = cfgB.build();
-
- {
- Template t = cfg.getTemplate("main.ftl");
- StringWriter sw = new StringWriter();
- Environment env = t.createProcessingEnvironment(null, sw);
- env.addAutoImport("t3", "t3.ftl");
-
- env.process();
- assertEquals("In main: t1;t2;t3;", sw.toString());
- }
-
- {
- Template t = cfg.getTemplate("main.ftl");
- StringWriter sw = new StringWriter();
- Environment env = t.createProcessingEnvironment(null, sw);
-
- env.process();
- assertEquals("In main: t1;t2;", sw.toString());
- }
-
- {
- Template t = cfg.getTemplate("main2.ftl");
- StringWriter sw = new StringWriter();
- Environment env = t.createProcessingEnvironment(null, sw);
- env.addAutoImport("t3", "t3.ftl");
-
- env.process();
- assertEquals("In main2: t1;t3;", sw.toString());
- }
-
- cfgB.removeAutoImport("t1");
- cfg = cfgB.build();
-
- {
- Template t = cfg.getTemplate("main.ftl");
- StringWriter sw = new StringWriter();
- Environment env = t.createProcessingEnvironment(null, sw);
- env.addAutoImport("t3", "t3.ftl");
-
- env.process();
- assertEquals("In main: t2;t3;", sw.toString());
- }
- }
-
- @Test
- public void test3LayerImportClashes() throws Exception {
- Configuration cfg = createConfigurationBuilder()
- .autoImports(ImmutableMap.of(
- "t1", "t1.ftl",
- "t2", "t2.ftl",
- "t3", "t3.ftl"))
- .templateConfigurations(
- new ConditionalTemplateConfigurationFactory(
- new FileNameGlobMatcher("main.ftl"),
- new TemplateConfiguration.Builder()
- .autoImports(ImmutableMap.of("t2", "t2b.ftl"))
- .build()))
- .build();
-
- {
- Template t = cfg.getTemplate("main.ftl");
- StringWriter sw = new StringWriter();
- Environment env = t.createProcessingEnvironment(null, sw);
- env.addAutoImport("t3", "t3b.ftl");
-
- env.process();
- assertEquals("In main: t1;t2b;t3b;", sw.toString());
- }
-
- {
- Template t = cfg.getTemplate("main2.ftl");
- StringWriter sw = new StringWriter();
- Environment env = t.createProcessingEnvironment(null, sw);
- env.addAutoImport("t3", "t3b.ftl");
-
- env.process();
- assertEquals("In main2: t1;t2;t3b;", sw.toString());
- }
-
- {
- Template t = cfg.getTemplate("main.ftl");
- StringWriter sw = new StringWriter();
- Environment env = t.createProcessingEnvironment(null, sw);
-
- env.process();
- assertEquals("In main: t1;t3;t2b;", sw.toString());
- }
- }
-
- @Test
- public void test3LayerIncludesNoClashes() throws Exception {
- TestConfigurationBuilder cfgB = createConfigurationBuilder()
- .autoIncludes(ImmutableList.of("t1.ftl"))
- .templateConfigurations(
- new ConditionalTemplateConfigurationFactory(
- new FileNameGlobMatcher("main.ftl"),
- new TemplateConfiguration.Builder()
- .autoIncludes(ImmutableList.of("t2.ftl"))
- .build()));
-
- Configuration cfg = cfgB.build();
-
- {
- Template t = cfg.getTemplate("main.ftl");
- StringWriter sw = new StringWriter();
- Environment env = t.createProcessingEnvironment(null, sw);
- env.addAutoInclude("t3.ftl");
-
- env.process();
- assertEquals("T1;T2;T3;In main: t1;t2;t3;", sw.toString());
- }
-
- {
- Template t = cfg.getTemplate("main.ftl");
- StringWriter sw = new StringWriter();
- Environment env = t.createProcessingEnvironment(null, sw);
-
- env.process();
- assertEquals("T1;T2;In main: t1;t2;", sw.toString());
- }
-
- {
- Template t = cfg.getTemplate("main2.ftl");
- StringWriter sw = new StringWriter();
- Environment env = t.createProcessingEnvironment(null, sw);
- env.addAutoInclude("t3.ftl");
-
- env.process();
- assertEquals("T1;T3;In main2: t1;t3;", sw.toString());
- }
-
- cfgB.removeAutoInclude("t1.ftl");
- cfg = cfgB.build();
-
- {
- Template t = cfg.getTemplate("main.ftl");
- StringWriter sw = new StringWriter();
- Environment env = t.createProcessingEnvironment(null, sw);
- env.addAutoInclude("t3.ftl");
-
- env.process();
- assertEquals("T2;T3;In main: t2;t3;", sw.toString());
- }
- }
-
- @Test
- public void test3LayerIncludeClashes() throws Exception {
- Configuration cfg = createConfigurationBuilder()
- .autoIncludes(ImmutableList.of(
- "t1.ftl",
- "t2.ftl",
- "t3.ftl"))
- .templateConfigurations(new ConditionalTemplateConfigurationFactory(
- new FileNameGlobMatcher("main.ftl"),
- new TemplateConfiguration.Builder()
- .autoIncludes(ImmutableList.of("t2.ftl"))
- .build()))
- .build();
-
- {
- Template t = cfg.getTemplate("main.ftl");
- StringWriter sw = new StringWriter();
- Environment env = t.createProcessingEnvironment(null, sw);
- env.addAutoInclude("t3.ftl");
-
- env.process();
- assertEquals("T1;T2;T3;In main: t1;t2;t3;", sw.toString());
- }
-
- {
- Template t = cfg.getTemplate("main2.ftl");
- StringWriter sw = new StringWriter();
- Environment env = t.createProcessingEnvironment(null, sw);
- env.addAutoInclude("t3.ftl");
-
- env.process();
- assertEquals("T1;T2;T3;In main2: t1;t2;t3;", sw.toString());
- }
-
- {
- Template t = cfg.getTemplate("main.ftl");
- StringWriter sw = new StringWriter();
- Environment env = t.createProcessingEnvironment(null, sw);
-
- env.process();
- assertEquals("T1;T3;T2;In main: t1;t3;t2;", sw.toString());
- }
-
- {
- Template t = cfg.getTemplate("main.ftl");
- StringWriter sw = new StringWriter();
- Environment env = t.createProcessingEnvironment(null, sw);
- env.addAutoInclude("t1.ftl");
-
- env.process();
- assertEquals("T3;T2;T1;In main: t3;t2;t1;", sw.toString());
- }
- }
-
- @Test
- public void test3LayerIncludesClashes2() throws Exception {
- Configuration cfg = createConfigurationBuilder()
- .autoIncludes(ImmutableList.of("t1.ftl", "t1.ftl"))
- .templateConfigurations(
- new ConditionalTemplateConfigurationFactory(
- new FileNameGlobMatcher("main.ftl"),
- new TemplateConfiguration.Builder()
- .autoIncludes(ImmutableList.of("t2.ftl", "t2.ftl"))
- .build()))
- .build();
-
- {
- Template t = cfg.getTemplate("main.ftl");
- StringWriter sw = new StringWriter();
- Environment env = t.createProcessingEnvironment(null, sw);
- env.addAutoInclude("t3.ftl");
- env.addAutoInclude("t3.ftl");
- env.addAutoInclude("t1.ftl");
- env.addAutoInclude("t1.ftl");
-
- env.process();
- assertEquals("T2;T3;T1;In main: t2;t3;t1;", sw.toString());
- }
- }
-
- @Test
- public void test3LayerLaziness() throws Exception {
- for (Class<?> layer : new Class<?>[] { Configuration.class, Template.class, Environment.class }) {
- test3LayerLaziness(layer, null, null, false, "t1;t2;");
- test3LayerLaziness(layer, null, null, true, "t1;t2;");
- test3LayerLaziness(layer, null, false, true, "t1;t2;");
- test3LayerLaziness(layer, null, true, true, "t2;");
-
- test3LayerLaziness(layer, false, null, false, "t1;t2;");
- test3LayerLaziness(layer, false, null, true, "t1;t2;");
- test3LayerLaziness(layer, false, false, true, "t1;t2;");
- test3LayerLaziness(layer, false, true, true, "t2;");
-
- test3LayerLaziness(layer, true, null, false, "");
- test3LayerLaziness(layer, true, null, true, "");
- test3LayerLaziness(layer, true, false, true, "t1;");
- test3LayerLaziness(layer, true, true, true, "");
- }
- }
-
- private void test3LayerLaziness(
- Class<?> layer,
- Boolean lazyImports,
- Boolean lazyAutoImports, boolean setLazyAutoImports,
- String expectedOutput)
- throws Exception {
- Configuration cfg;
- {
- TestConfigurationBuilder cfgB = createConfigurationBuilder()
- .autoImports(ImmutableMap.of("t1", "t1.ftl"));
- if (layer == Configuration.class) {
- setLazinessOfConfigurable(cfgB, lazyImports, lazyAutoImports, setLazyAutoImports);
- }
- cfg = cfgB.build();
- }
-
- TemplateConfiguration tc;
- if (layer == Template.class) {
- TemplateConfiguration.Builder tcb = new TemplateConfiguration.Builder();
- setLazinessOfConfigurable(tcb, lazyImports, lazyAutoImports, setLazyAutoImports);
- tc = tcb.build();
- } else {
- tc = null;
- }
-
- Template t = new Template(null, "<#import 't2.ftl' as t2>${loaded!}", cfg, tc);
- StringWriter sw = new StringWriter();
-
- Environment env = t.createProcessingEnvironment(null, sw);
- if (layer == Environment.class) {
- setLazinessOfConfigurable(env, lazyImports, lazyAutoImports, setLazyAutoImports);
- }
-
- env.process();
- assertEquals(expectedOutput, sw.toString());
- }
-
- private void setLazinessOfConfigurable(
- MutableProcessingConfiguration<?> cfg,
- Boolean lazyImports, Boolean lazyAutoImports, boolean setLazyAutoImports) {
- if (lazyImports != null) {
- cfg.setLazyImports(lazyImports);
- }
- if (setLazyAutoImports) {
- cfg.setLazyAutoImports(lazyAutoImports);
- }
- }
-
- private TestConfigurationBuilder createConfigurationBuilder() {
- StringTemplateLoader loader = new StringTemplateLoader();
- loader.putTemplate("main.ftl", "In main: ${loaded}");
- loader.putTemplate("main2.ftl", "In main2: ${loaded}");
- loader.putTemplate("t1.ftl", "<#global loaded = (loaded!) + 't1;'>T1;");
- loader.putTemplate("t2.ftl", "<#global loaded = (loaded!) + 't2;'>T2;");
- loader.putTemplate("t3.ftl", "<#global loaded = (loaded!) + 't3;'>T3;");
- loader.putTemplate("t1b.ftl", "<#global loaded = (loaded!) + 't1b;'>T1b;");
- loader.putTemplate("t2b.ftl", "<#global loaded = (loaded!) + 't2b;'>T2b;");
- loader.putTemplate("t3b.ftl", "<#global loaded = (loaded!) + 't3b;'>T3b;");
-
- return new TestConfigurationBuilder().templateLoader(loader);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/28a276c8/freemarker-core/src/test/java/org/apache/freemarker/core/IncludeAndImportTest.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/test/java/org/apache/freemarker/core/IncludeAndImportTest.java b/freemarker-core/src/test/java/org/apache/freemarker/core/IncludeAndImportTest.java
deleted file mode 100644
index fa767ff..0000000
--- a/freemarker-core/src/test/java/org/apache/freemarker/core/IncludeAndImportTest.java
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- * 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.core;
-
-import static org.hamcrest.Matchers.*;
-import static org.junit.Assert.*;
-
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-
-import org.apache.freemarker.core.Environment.LazilyInitializedNamespace;
-import org.apache.freemarker.core.Environment.Namespace;
-import org.apache.freemarker.core.model.WrappingTemplateModel;
-import org.apache.freemarker.test.TemplateTest;
-import org.apache.freemarker.test.TestConfigurationBuilder;
-import org.junit.Test;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-
-@SuppressWarnings("boxing")
-public class IncludeAndImportTest extends TemplateTest {
-
- @Override
- protected void addCommonTemplates() {
- addTemplate("inc1.ftl", "[inc1]<#global inc1Cnt = (inc1Cnt!0) + 1><#global history = (history!) + 'I'>");
- addTemplate("inc2.ftl", "[inc2]");
- addTemplate("inc3.ftl", "[inc3]");
- addTemplate("lib1.ftl", "<#global lib1Cnt = (lib1Cnt!0) + 1><#global history = (history!) + 'L1'>"
- + "<#macro m>In lib1</#macro>");
- addTemplate("lib2.ftl", "<#global history = (history!) + 'L2'>"
- + "<#macro m>In lib2</#macro>");
- addTemplate("lib3.ftl", "<#global history = (history!) + 'L3'>"
- + "<#macro m>In lib3</#macro>");
-
- addTemplate("lib2CallsLib1.ftl", "<#global history = (history!) + 'L2'>"
- + "<#macro m>In lib2 (<@lib1.m/>)</#macro>");
- addTemplate("lib3ImportsLib1.ftl", "<#import 'lib1.ftl' as lib1><#global history = (history!) + 'L3'>"
- + "<#macro m>In lib3 (<@lib1.m/>)</#macro>");
-
- addTemplate("lib_de.ftl", "<#global history = (history!) + 'LDe'><#assign initLocale=.locale>"
- + "<#macro m>de</#macro>");
- addTemplate("lib_en.ftl", "<#global history = (history!) + 'LEn'><#assign initLocale=.locale>"
- + "<#macro m>en</#macro>");
- }
-
- @Test
- public void includeSameTwice() throws IOException, TemplateException {
- assertOutput("<#include 'inc1.ftl'>${inc1Cnt}<#include 'inc1.ftl'>${inc1Cnt}", "[inc1]1[inc1]2");
- }
-
- @Test
- public void importSameTwice() throws IOException, TemplateException {
- assertOutput("<#import 'lib1.ftl' as i1>${lib1Cnt} <#import 'lib1.ftl' as i2>${lib1Cnt}", "1 1");
- }
-
- @Test
- public void importInMainCreatesGlobal() throws IOException, TemplateException {
- String ftl = "${.main.lib1???c} ${.globals.lib1???c}"
- + "<#import 'lib1.ftl' as lib1> ${.main.lib1???c} ${.globals.lib1???c}";
- String expectedOut = "false false true true";
- assertOutput(ftl, expectedOut);
- }
-
- @Test
- public void importInMainCreatesGlobalBugfix() throws IOException, TemplateException {
- // An import in the main namespace should invoke a global variable, even if the imported library was already
- // initialized elsewhere.
- String ftl = "<#import 'lib3ImportsLib1.ftl' as lib3>${lib1Cnt} ${.main.lib1???c} ${.globals.lib1???c}, "
- + "<#import 'lib1.ftl' as lib1>${lib1Cnt} ${.main.lib1???c} ${.globals.lib1???c}";
- assertOutput(ftl, "1 false false, 1 true true");
- }
-
- /**
- * Tests the order of auto-includes and auto-imports, also that they only effect the main template directly.
- */
- @Test
- public void autoIncludeAndAutoImport() throws IOException, TemplateException {
- setConfiguration(new TestConfigurationBuilder()
- .autoImports(ImmutableMap.of(
- "lib1", "lib1.ftl",
- "lib2", "lib2CallsLib1.ftl"
- ))
- .autoIncludes(ImmutableList.of(
- "inc1.ftl",
- "inc2.ftl"))
- .build());
- assertOutput(
- "<#include 'inc3.ftl'>[main] ${inc1Cnt}, ${history}, <@lib1.m/>, <@lib2.m/>",
- "[inc1][inc2][inc3][main] 1, L1L2I, In lib1, In lib2 (In lib1)");
- }
-
- /**
- * Demonstrates design issue in FreeMarker 2.3.x where the lookupStrategy is not factored in when identifying
- * already existing namespaces.
- */
- @Test
- public void lookupSrategiesAreNotConsideredProperly() throws IOException, TemplateException {
- // As only the name of the template is used for the finding the already existing namespace, the settings that
- // influence the lookup are erroneously ignored.
- assertOutput(
- "<#setting locale='en_US'><#import 'lib.ftl' as ns1>"
- + "<#setting locale='de_DE'><#import 'lib.ftl' as ns2>"
- + "<@ns1.m/> <@ns2.m/> ${history}",
- "en en LEn");
-
- // The opposite of the prevous, where differn names refer to the same template after a lookup:
- assertOutput(
- "<#setting locale='en_US'>"
- + "<#import '*/lib.ftl' as ns1>"
- + "<#import 'lib.ftl' as ns2>"
- + "<@ns1.m/> <@ns2.m/> ${history}",
- "en en LEnLEn");
- }
-
- @Test
- public void lazyImportBasics() throws IOException, TemplateException {
- String ftlImports = "<#import 'lib1.ftl' as l1><#import 'lib2.ftl' as l2><#import 'lib3ImportsLib1.ftl' as l3>";
- String ftlCalls = "<@l2.m/>, <@l1.m/>; ${history}";
- String ftl = ftlImports + ftlCalls;
-
- assertOutput(ftl, "In lib2, In lib1; L1L2L3");
-
- setConfiguration(new TestConfigurationBuilder().lazyImports(true).build());
- assertOutput(ftl, "In lib2, In lib1; L2L1");
-
- assertOutput(ftlImports + "<@l3.m/>, " + ftlCalls, "In lib3 (In lib1), In lib2, In lib1; L3L1L2");
- }
-
- @Test
- public void lazyImportAndLocale() throws IOException, TemplateException {
- setConfiguration(new TestConfigurationBuilder().lazyImports(true).build());
- assertOutput("<#setting locale = 'de_DE'><#import 'lib.ftl' as lib>"
- + "[${history!}] "
- + "<#setting locale = 'en'>"
- + "<@lib.m/> ${lib.initLocale} [${history}]",
- "[] de de_DE [LDe]");
- }
-
- @Test
- public void lazyAutoImportSettings() throws IOException, TemplateException {
- TestConfigurationBuilder cfgB = new TestConfigurationBuilder()
- .autoImports(ImmutableMap.of(
- "l1", "lib1.ftl",
- "l2", "lib2.ftl",
- "l3", "lib3.ftl"
- ));
-
- String ftl = "<@l2.m/>, <@l1.m/>; ${history}";
- String expectedEagerOutput = "In lib2, In lib1; L1L2L3";
- String expecedLazyOutput = "In lib2, In lib1; L2L1";
-
- setConfiguration(cfgB.build());
- assertOutput(ftl, expectedEagerOutput);
- cfgB.setLazyImports(true);
- setConfiguration(cfgB.build());
- assertOutput(ftl, expecedLazyOutput);
- cfgB.setLazyImports(false);
- setConfiguration(cfgB.build());
- assertOutput(ftl, expectedEagerOutput);
- cfgB.setLazyAutoImports(true);
- setConfiguration(cfgB.build());
- assertOutput(ftl, expecedLazyOutput);
- cfgB.setLazyAutoImports(null);
- setConfiguration(cfgB.build());
- assertOutput(ftl, expectedEagerOutput);
- cfgB.setLazyImports(true);
- cfgB.setLazyAutoImports(false);
- setConfiguration(cfgB.build());
- assertOutput(ftl, expectedEagerOutput);
- }
-
- @Test
- public void lazyAutoImportMixedWithManualImport() throws IOException, TemplateException {
- TestConfigurationBuilder cfgB = new TestConfigurationBuilder()
- .autoImports(ImmutableMap.of(
- "l1", "lib1.ftl",
- "l2", "/./lib2.ftl",
- "l3", "lib3.ftl"))
- .lazyAutoImports(true);
-
- String ftl = "<@l2.m/>, <@l1.m/>; ${history}";
- String expectOutputWithoutHistory = "In lib2, In lib1; ";
- String expecedOutput = expectOutputWithoutHistory + "L2L1";
-
- setConfiguration(cfgB.build());
- assertOutput(ftl, expecedOutput);
- assertOutput("<#import 'lib1.ftl' as l1>" + ftl, expectOutputWithoutHistory + "L1L2");
- assertOutput("<#import './x/../lib1.ftl' as l1>" + ftl, expectOutputWithoutHistory + "L1L2");
- assertOutput("<#import 'lib2.ftl' as l2>" + ftl, expecedOutput);
- assertOutput("<#import 'lib3.ftl' as l3>" + ftl, expectOutputWithoutHistory + "L3L2L1");
-
- cfgB.setLazyImports(true);
- setConfiguration(cfgB.build());
- assertOutput("<#import 'lib1.ftl' as l1>" + ftl, expecedOutput);
- assertOutput("<#import './x/../lib1.ftl' as l1>" + ftl, expecedOutput);
- assertOutput("<#import 'lib2.ftl' as l2>" + ftl, expecedOutput);
- assertOutput("<#import 'lib3.ftl' as l3>" + ftl, expecedOutput);
- }
-
- @Test
- public void lazyImportErrors() throws IOException, TemplateException {
- TestConfigurationBuilder cfgB = new TestConfigurationBuilder();
- cfgB.setLazyImports(true);
-
- setConfiguration(cfgB.build());
- assertOutput("<#import 'noSuchTemplate.ftl' as wrong>x", "x");
-
- cfgB.addAutoImport("wrong", "noSuchTemplate.ftl");
- setConfiguration(cfgB.build());
- assertOutput("x", "x");
-
- try {
- assertOutput("${wrong.x}", "");
- fail();
- } catch (TemplateException e) {
- assertThat(e.getMessage(),
- allOf(containsString("Lazy initialization"), containsString("noSuchTemplate.ftl")));
- assertThat(e.getCause(), instanceOf(TemplateNotFoundException.class));
- }
-
- addTemplate("containsError.ftl", "${noSuchVar}");
- try {
- assertOutput("<#import 'containsError.ftl' as lib>${lib.x}", "");
- fail();
- } catch (TemplateException e) {
- assertThat(e.getMessage(),
- allOf(containsString("Lazy initialization"), containsString("containsError.ftl")));
- assertThat(e.getCause(), instanceOf(InvalidReferenceException.class));
- assertThat(e.getCause().getMessage(), containsString("noSuchVar"));
- }
- }
-
- /**
- * Ensures that all methods are overridden so that they will do the lazy initialization.
- */
- @Test
- public void lazilyInitializingNamespaceOverridesAll() throws SecurityException, NoSuchMethodException {
- for (Method m : Namespace.class.getMethods()) {
- Class<?> declClass = m.getDeclaringClass();
- if (declClass == Object.class || declClass == WrappingTemplateModel.class
- || (m.getModifiers() & Modifier.STATIC) != 0
- || m.getName().equals("synchronizedWrapper")) {
- continue;
- }
- Method lazyM = LazilyInitializedNamespace.class.getMethod(m.getName(), m.getParameterTypes());
- if (lazyM.getDeclaringClass() != LazilyInitializedNamespace.class) {
- fail("The " + lazyM + " method wasn't overidden in " + LazilyInitializedNamespace.class.getName());
- }
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/28a276c8/freemarker-core/src/test/java/org/apache/freemarker/core/IncudeFromNamelessTest.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/test/java/org/apache/freemarker/core/IncudeFromNamelessTest.java b/freemarker-core/src/test/java/org/apache/freemarker/core/IncudeFromNamelessTest.java
deleted file mode 100644
index f4908b8..0000000
--- a/freemarker-core/src/test/java/org/apache/freemarker/core/IncudeFromNamelessTest.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * 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.core;
-
-import java.io.IOException;
-import java.io.StringReader;
-import java.io.StringWriter;
-
-import org.apache.freemarker.core.templateresolver.impl.StringTemplateLoader;
-import org.apache.freemarker.test.TestConfigurationBuilder;
-
-import junit.framework.TestCase;
-
-public class IncudeFromNamelessTest extends TestCase {
-
- public IncudeFromNamelessTest(String name) {
- super(name);
- }
-
- public void test() throws IOException, TemplateException {
- StringTemplateLoader loader = new StringTemplateLoader();
- loader.putTemplate("i.ftl", "[i]");
- loader.putTemplate("sub/i.ftl", "[sub/i]");
- loader.putTemplate("import.ftl", "<#assign x = 1>");
-
- Configuration cfg = new TestConfigurationBuilder().templateLoader(loader).build();
-
- Template t = new Template(null, new StringReader(
- "<#include 'i.ftl'>\n"
- + "<#include '/i.ftl'>\n"
- + "<#include 'sub/i.ftl'>\n"
- + "<#include '/sub/i.ftl'>"
- + "<#import 'import.ftl' as i>${i.x}"
- ),
- cfg);
- StringWriter out = new StringWriter();
- t.process(null, out);
- assertEquals("[i][i][sub/i][sub/i]1", out.toString());
- }
-
-}