Continued work on TemplateLanguage configuration and new file extensions: 
Renamed all *.ftl*-s to the new file extensions in non-file named templates in 
tests, also in JavaDoc comments.


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

Branch: refs/heads/3
Commit: 7a3c48172e146b7920822651660c562ffd615a1a
Parents: 81b4822
Author: ddekany <ddek...@apache.org>
Authored: Fri Apr 13 02:24:49 2018 +0200
Committer: ddekany <ddek...@apache.org>
Committed: Fri Apr 13 02:25:58 2018 +0200

----------------------------------------------------------------------
 .../freemarker/converter/FM2ToFM3Converter.java |  10 +-
 .../converter/FM2ToFM3ConverterCLITest.java     |  10 +-
 .../converter/FM2ToFM3ConverterTest.java        |  24 +--
 .../freemarker/core/CallerTemplateNameTest.java |  74 ++++----
 .../core/CapturingAssignmentTest.java           |   8 +-
 .../apache/freemarker/core/DateFormatTest.java  |   8 +-
 .../freemarker/core/DirectiveCallPlaceTest.java |  22 +--
 .../apache/freemarker/core/ExceptionTest.java   |  22 +--
 .../core/GetOptionalTemplateTest.java           |  46 ++---
 .../IncludeAndImportConfigurableLayersTest.java | 102 +++++-----
 .../freemarker/core/IncludeAndImportTest.java   |  90 ++++-----
 .../freemarker/core/IncudeFromNamelessTest.java |  16 +-
 .../core/InterpretAndEvalTemplateNameTest.java  |  32 ++--
 .../MutableProcessingConfigurationTest.java     |   4 +-
 .../core/OptInTemplateClassResolverTest.java    |  68 +++----
 .../freemarker/core/OutputFormatTest.java       |  21 ++-
 .../core/TemplateCallableModelTest.java         |   8 +-
 .../core/TemplateConfigurationTest.java         |  48 ++---
 ...gurationWithDefaultTemplateResolverTest.java |  50 ++---
 .../core/TemplateConstructorsTest.java          |   4 +-
 .../core/TemplateNameSpecialVariablesTest.java  | 108 +++++------
 .../core/TemplateNotFoundMessageTest.java       |   2 +-
 .../DefaultTemplateResolverTest.java            | 188 +++++++++----------
 .../FileTemplateLoaderTest.java                 |  11 +-
 .../MultiTemplateLoaderTest.java                |  34 ++--
 .../TemplateConfigurationFactoryTest.java       |  72 +++----
 .../TemplateNameFormatTest.java                 |   2 +-
 .../TemplateSourceMatcherTest.java              |  96 +++++-----
 .../freemarker/core/util/StringUtilsTest.java   |  41 ++--
 .../core/valueformat/NumberFormatTest.java      |   8 +-
 .../apache/freemarker/core/Configuration.java   |  18 +-
 .../org/apache/freemarker/core/Environment.java |   6 +-
 .../core/MutableProcessingConfiguration.java    |  16 +-
 .../org/apache/freemarker/core/Template.java    |  26 +--
 .../freemarker/core/TopLevelConfiguration.java  |   6 +-
 .../apache/freemarker/core/_CallableUtils.java  |   4 +-
 .../templateresolver/FileNameGlobMatcher.java   |   4 +-
 .../core/templateresolver/TemplateLoader.java   |   2 +-
 .../templateresolver/TemplateLoadingSource.java |   2 +-
 .../templateresolver/TemplateLookupContext.java |   2 +-
 .../TemplateLookupStrategy.java                 |   4 +-
 .../core/templateresolver/TemplateResolver.java |   6 +-
 .../impl/DefaultTemplateLookupStrategy.java     |  10 +-
 .../impl/DefaultTemplateNameFormat.java         |  10 +-
 ...TemplateLoaderBasedTemplateLookupResult.java |   4 +-
 .../freemarker/core/util/_StringUtils.java      |  10 +-
 .../examples/ConfigureOutputFormatExamples.java |   4 +-
 .../examples/TemplateConfigurationExamples.java |  12 +-
 .../freemarker/servlet/FreemarkerServlet.java   |   2 +-
 .../servlet/FreemarkerServletTest.java          |  28 +--
 .../servlet/WebAppTemplateLoaderTest.java       |   2 +-
 .../freemarker/servlet/test/WebAppTestCase.java |   2 +-
 .../spring/ConfigurationFactoryBeanTest.java    |  12 +-
 .../SpringResourceTemplateLoaderTest.java       |   2 +-
 .../web/view/FreeMarkerViewResolverTest.java    |   4 +-
 .../spring/web/view/FreeMarkerViewTest.java     |  14 +-
 56 files changed, 724 insertions(+), 717 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/freemarker/blob/7a3c4817/freemarker-converter/src/main/java/org/apache/freemarker/converter/FM2ToFM3Converter.java
----------------------------------------------------------------------
diff --git 
a/freemarker-converter/src/main/java/org/apache/freemarker/converter/FM2ToFM3Converter.java
 
b/freemarker-converter/src/main/java/org/apache/freemarker/converter/FM2ToFM3Converter.java
index 982ff63..55289f6 100644
--- 
a/freemarker-converter/src/main/java/org/apache/freemarker/converter/FM2ToFM3Converter.java
+++ 
b/freemarker-converter/src/main/java/org/apache/freemarker/converter/FM2ToFM3Converter.java
@@ -78,10 +78,10 @@ public class FM2ToFM3Converter extends Converter {
 
     public static final Map<String, String> 
PREDEFINED_FILE_EXTENSION_SUBSTITUTIONS
             = new ImmutableMap.Builder<String,String>()
-                    .put("ftl", "fm3")
-                    .put("ftlh", "fm3h")
-                    .put("ftlx", "fm3x")
-                    .put("fm", "fm3")
+                    .put("ftl", "f3ac")
+                    .put("ftlh", "f3ah")
+                    .put("ftlx", "f3ax")
+                    .put("fm", "f3ac")
                     .build();
 
     private static final Logger LOG = LoggerFactory.getLogger(Converter.class);
@@ -158,7 +158,7 @@ public class FM2ToFM3Converter extends Converter {
         }
 
         if (template.getActualTagSyntax() == 
Configuration.SQUARE_BRACKET_TAG_SYNTAX) {
-            replacementExt = replacementExt.replace("3", "3s");
+            replacementExt = replacementExt.replace("3a", "3s");
         }
 
         return srcFileName.substring(0, lastDotIdx + 1) + replacementExt;

http://git-wip-us.apache.org/repos/asf/freemarker/blob/7a3c4817/freemarker-converter/src/test/java/org/freemarker/converter/FM2ToFM3ConverterCLITest.java
----------------------------------------------------------------------
diff --git 
a/freemarker-converter/src/test/java/org/freemarker/converter/FM2ToFM3ConverterCLITest.java
 
b/freemarker-converter/src/test/java/org/freemarker/converter/FM2ToFM3ConverterCLITest.java
index f9d3319..fe11582 100644
--- 
a/freemarker-converter/src/test/java/org/freemarker/converter/FM2ToFM3ConverterCLITest.java
+++ 
b/freemarker-converter/src/test/java/org/freemarker/converter/FM2ToFM3ConverterCLITest.java
@@ -60,8 +60,8 @@ public class FM2ToFM3ConverterCLITest extends ConverterTest {
     public void testBasic() {
         assertCLIResult(SUCCESS_EXIT_STATUS, "2 file", null,
                 srcDir.toString(), "-d", dstDir.toString());
-        assertTrue(new File(dstDir, "1.fm3").exists());
-        assertTrue(new File(dstDir, "2.fm3").exists());
+        assertTrue(new File(dstDir, "1.f3ac").exists());
+        assertTrue(new File(dstDir, "2.f3ac").exists());
         assertFalse(new File(dstDir, "3.txt").exists());
     }
 
@@ -76,8 +76,8 @@ public class FM2ToFM3ConverterCLITest extends ConverterTest {
         assertCLIResult(SUCCESS_EXIT_STATUS, "2 file", null,
                 srcDir.toString(), "-d", dstDir.toString(),
                 "--include", ".*", "--exclude", ".*2\\.ftl");
-        assertTrue(new File(dstDir, "1.fm3").exists());
-        assertFalse(new File(dstDir, "2.fm3").exists());
+        assertTrue(new File(dstDir, "1.f3ac").exists());
+        assertFalse(new File(dstDir, "2.f3ac").exists());
         assertTrue(new File(dstDir, "3.txt").exists());
     }
 
@@ -86,7 +86,7 @@ public class FM2ToFM3ConverterCLITest extends ConverterTest {
         assertCLIResult(SUCCESS_EXIT_STATUS, null, null,
                 srcDir.toString(), "-d", dstDir.toString(),
                 "--include", ".*", "-Etxt=txt3");
-        assertTrue(new File(dstDir, "1.fm3").exists());
+        assertTrue(new File(dstDir, "1.f3ac").exists());
         assertTrue(new File(dstDir, "3.txt3").exists());
     }
 

http://git-wip-us.apache.org/repos/asf/freemarker/blob/7a3c4817/freemarker-converter/src/test/java/org/freemarker/converter/FM2ToFM3ConverterTest.java
----------------------------------------------------------------------
diff --git 
a/freemarker-converter/src/test/java/org/freemarker/converter/FM2ToFM3ConverterTest.java
 
b/freemarker-converter/src/test/java/org/freemarker/converter/FM2ToFM3ConverterTest.java
index a8bdadc..751252a 100644
--- 
a/freemarker-converter/src/test/java/org/freemarker/converter/FM2ToFM3ConverterTest.java
+++ 
b/freemarker-converter/src/test/java/org/freemarker/converter/FM2ToFM3ConverterTest.java
@@ -636,10 +636,10 @@ public class FM2ToFM3ConverterTest extends ConverterTest {
         converter.execute();
 
         assertFalse(new File(dstDir, "t.txt").exists());
-        assertTrue(new File(dstDir, "t.fm3").exists());
-        assertTrue(new File(dstDir, "t.fm3").exists());
+        assertTrue(new File(dstDir, "t.f3ac").exists());
+        assertTrue(new File(dstDir, "t.f3ac").exists());
         assertFalse(new File(dstDir, "t.ftlfoo").exists());
-        assertTrue(new File(dstDir, "U.fm3h").exists());
+        assertTrue(new File(dstDir, "U.f3ah").exists());
     }
 
     @Test
@@ -663,13 +663,13 @@ public class FM2ToFM3ConverterTest extends ConverterTest {
 
         assertTrue(new File(dstDir, "t1").exists());
         assertTrue(new File(dstDir, "t2.foo").exists());
-        assertTrue(new File(dstDir, "t3.fm3").exists());
-        assertTrue(new File(dstDir, "t4.fm3h").exists());
-        assertTrue(new File(dstDir, "t5.fm3x").exists());
-        assertTrue(new File(dstDir, "t6.fm3s").exists());
-        assertTrue(new File(dstDir, "t7.fm3sh").exists());
-        assertTrue(new File(dstDir, "t8.fm3sx").exists());
-        assertTrue(new File(dstDir, "t9.fm3").exists());
+        assertTrue(new File(dstDir, "t3.f3ac").exists());
+        assertTrue(new File(dstDir, "t4.f3ah").exists());
+        assertTrue(new File(dstDir, "t5.f3ax").exists());
+        assertTrue(new File(dstDir, "t6.f3sc").exists());
+        assertTrue(new File(dstDir, "t7.f3sh").exists());
+        assertTrue(new File(dstDir, "t8.f3sx").exists());
+        assertTrue(new File(dstDir, "t9.f3ac").exists());
         assertTrue(new File(dstDir, "t10.Foo3").exists());
     }
 
@@ -697,9 +697,9 @@ public class FM2ToFM3ConverterTest extends ConverterTest {
         converter.setDestinationDirectory(dstDir);
         converter.execute();
 
-        assertThat(FileUtils.readFileToString(new File(dstDir, "t1.fm3"), 
StandardCharsets.ISO_8859_1),
+        assertThat(FileUtils.readFileToString(new File(dstDir, "t1.f3ac"), 
StandardCharsets.ISO_8859_1),
                 containsString("béka"));
-        assertThat(FileUtils.readFileToString(new File(dstDir, "t2.fm3"), 
UTF_8),
+        assertThat(FileUtils.readFileToString(new File(dstDir, "t2.f3ac"), 
UTF_8),
                 containsString("béka"));
     }
 

http://git-wip-us.apache.org/repos/asf/freemarker/blob/7a3c4817/freemarker-core-test/src/test/java/org/apache/freemarker/core/CallerTemplateNameTest.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/CallerTemplateNameTest.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/CallerTemplateNameTest.java
index 73363ae..39ac167 100644
--- 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/CallerTemplateNameTest.java
+++ 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/CallerTemplateNameTest.java
@@ -32,21 +32,21 @@ public class CallerTemplateNameTest  extends TemplateTest {
 
     @Test
     public void testBaics() throws Exception {
-        addTemplate("main.ftl", ""
+        addTemplate("main.f3ah", ""
                 + "<#macro m>${.callerTemplateName}</#macro>"
                 + "<#function f()><#return .callerTemplateName></#function>"
-                + "<@m /> ${f()} [<#include 'other.ftl'>] <@m /> ${f()}");
-        addTemplate("other.ftl", ""
-                + "<@m /> ${f()} [<#include 'yet-another.ftl'>] <@m /> 
${f()}");
-        addTemplate("yet-another.ftl", ""
+                + "<@m /> ${f()} [<#include 'other.f3ah'>] <@m /> ${f()}");
+        addTemplate("other.f3ah", ""
+                + "<@m /> ${f()} [<#include 'yet-another.f3ah'>] <@m /> 
${f()}");
+        addTemplate("yet-another.f3ah", ""
                 + "<@m /> ${f()}");
         
-        assertOutputForNamed("main.ftl", ""
-                + "main.ftl main.ftl "
-                + "[other.ftl other.ftl "
-                + "[yet-another.ftl yet-another.ftl] "
-                + "other.ftl other.ftl] "
-                + "main.ftl main.ftl");
+        assertOutputForNamed("main.f3ah", ""
+                + "main.f3ah main.f3ah "
+                + "[other.f3ah other.f3ah "
+                + "[yet-another.f3ah yet-another.f3ah] "
+                + "other.f3ah other.f3ah] "
+                + "main.f3ah main.f3ah");
     }
     
     @Test
@@ -58,8 +58,8 @@ public class CallerTemplateNameTest  extends TemplateTest {
                 + "<@m>${.callerTemplateName}</@>",
                 "no macro or function");
 
-        addTemplate("main.ftl", "${.callerTemplateName}");
-        assertErrorContainsForNamed("main.ftl", "no macro or function");
+        addTemplate("main.f3ah", "${.callerTemplateName}");
+        assertErrorContainsForNamed("main.f3ah", "no macro or function");
     }
 
     @Test
@@ -72,77 +72,77 @@ public class CallerTemplateNameTest  extends TemplateTest {
 
     @Test
     public void testNested() throws Exception {
-        addTemplate("main.ftl", ""
-                + "<#include 'lib1.ftl'>"
-                + "<#include 'lib2.ftl'>"
+        addTemplate("main.f3ah", ""
+                + "<#include 'lib1.f3ah'>"
+                + "<#include 'lib2.f3ah'>"
                 + "<@m1 />");
-        addTemplate("lib1.ftl", ""
+        addTemplate("lib1.f3ah", ""
                 + "<#macro m1>"
                 + "${.callerTemplateName} [<@m2>${.callerTemplateName}</@m2>] 
${.callerTemplateName}"
                 + "</#macro>");
-        addTemplate("lib2.ftl", ""
+        addTemplate("lib2.f3ah", ""
                 + "<#macro m2>"
                 + "${.callerTemplateName} [<#nested>] ${.callerTemplateName}"
                 + "</#macro>");
-        assertOutputForNamed("main.ftl", ""
-                + "main.ftl [lib1.ftl [main.ftl] lib1.ftl] main.ftl");
+        assertOutputForNamed("main.f3ah", ""
+                + "main.f3ah [lib1.f3ah [main.f3ah] lib1.f3ah] main.f3ah");
     }
     
     @Test
     public void testSelfCaller() throws Exception {
-        addTemplate("main.ftl", ""
+        addTemplate("main.f3ah", ""
                 + "<#macro m>${.callerTemplateName}</#macro>"
                 + "<@m />");
-        assertOutputForNamed("main.ftl", "main.ftl");
+        assertOutputForNamed("main.f3ah", "main.f3ah");
     }
 
     @Test
     public void testImportedTemplateCaller() throws Exception {
-        addTemplate("main.ftl", ""
-                + "<#import 'lib/foo.ftl' as foo>"
+        addTemplate("main.f3ah", ""
+                + "<#import 'lib/foo.f3ah' as foo>"
                 + "<@foo.m />, <@foo.m2 />");
-        addTemplate("lib/foo.ftl", ""
+        addTemplate("lib/foo.f3ah", ""
                 + "<#macro m>${.callerTemplateName}</#macro>"
                 + "<#macro m2><@m3/></#macro>"
                 + "<#macro m3>${.callerTemplateName}</#macro>");
-        assertOutputForNamed("main.ftl",
-                "main.ftl, lib/foo.ftl");
+        assertOutputForNamed("main.f3ah",
+                "main.f3ah, lib/foo.f3ah");
     }
     
     @Test
     public void testNestedIntoNonUserDirectives() throws Exception {
-        addTemplate("main.ftl", ""
+        addTemplate("main.f3ah", ""
                 + "<#macro m><#list 1..2 as _><#if 
true>${.callerTemplateName}</#if>;</#list></#macro>"
                 + "<@m/>");
-        assertOutputForNamed("main.ftl", "main.ftl;main.ftl;");
+        assertOutputForNamed("main.f3ah", "main.f3ah;main.f3ah;");
     }
 
     @Test
     public void testUsedInArgument() throws Exception {
-        addTemplate("main.ftl", ""
-                + "<#include 'inc.ftl'>"
+        addTemplate("main.f3ah", ""
+                + "<#include 'inc.f3ah'>"
                 + "<#macro start>"
                 + "<@m .callerTemplateName />"
                 + "<@m2 />"
                 + "</#macro>"
                 + "<@start />");
-        addTemplate("inc.ftl", ""
+        addTemplate("inc.f3ah", ""
                 + "<#macro m x{positional}, y{positional}=.callerTemplateName>"
                 + "x: ${x}; y: ${y}; caller: ${.callerTemplateName};"
                 + "</#macro>"
                 + "<#macro m2><@m .callerTemplateName /></#macro>");
         
-        assertOutputForNamed("main.ftl", ""
-                + "x: main.ftl; y: main.ftl; caller: main.ftl;"
-                + "x: main.ftl; y: inc.ftl; caller: inc.ftl;");
+        assertOutputForNamed("main.f3ah", ""
+                + "x: main.f3ah; y: main.f3ah; caller: main.f3ah;"
+                + "x: main.f3ah; y: inc.f3ah; caller: inc.f3ah;");
     }
     
     @Test
     public void testReturnsLookupName() throws Exception {
-        addTemplate("main_en.ftl", ""
+        addTemplate("main_en.f3ah", ""
                 + "<#macro m>${.callerTemplateName}</#macro>"
                 + "<@m />");
-        assertOutputForNamed("main.ftl", "main.ftl"); // Not main_en.ftl
+        assertOutputForNamed("main.f3ah", "main.f3ah"); // Not main_en.f3ah
     }
     
 }

http://git-wip-us.apache.org/repos/asf/freemarker/blob/7a3c4817/freemarker-core-test/src/test/java/org/apache/freemarker/core/CapturingAssignmentTest.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/CapturingAssignmentTest.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/CapturingAssignmentTest.java
index 44cf134..7d49f24 100644
--- 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/CapturingAssignmentTest.java
+++ 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/CapturingAssignmentTest.java
@@ -35,13 +35,13 @@ public class CapturingAssignmentTest extends TemplateTest {
 
     @Test
     public void testAssignNs() throws IOException, TemplateException {
-        addTemplate("lib.ftl", "");
-        assertOutput("<#import 'lib.ftl' as lib>"
+        addTemplate("lib.f3ah", "");
+        assertOutput("<#import 'lib.f3ah' as lib>"
                 + "<#assign x in lib></#assign>[${lib.x}]", "[]");
-        assertOutput("<#import 'lib.ftl' as lib>"
+        assertOutput("<#import 'lib.f3ah' as lib>"
                 + "<#assign x in lib><p>${1 + 1}</#assign>${lib.x + '&'}", 
"<p>2&");
         assertOutput("<#ftl outputFormat='HTML'>"
-                + "<#import 'lib.ftl' as lib>"
+                + "<#import 'lib.f3ah' as lib>"
                 + "<#assign x in lib><p>${1 + 1}</#assign>${lib.x + '&'}", 
"<p>2&amp;");
     }
 

http://git-wip-us.apache.org/repos/asf/freemarker/blob/7a3c4817/freemarker-core-test/src/test/java/org/apache/freemarker/core/DateFormatTest.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/DateFormatTest.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/DateFormatTest.java
index 3076919..50e15bb 100644
--- 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/DateFormatTest.java
+++ 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/DateFormatTest.java
@@ -355,12 +355,12 @@ public class DateFormatTest extends TemplateTest {
         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);
+        addTemplate("t1.f3ah", commonFtl);
+        addTemplate("t2.f3ah", 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);
+        assertOutputForNamed("t1.f3ah", "2015-Sep-06 2015-Sep 2015-sept. E");
+        assertOutputForNamed("t2.f3ah", "2015-Sep-06 2015-September 
2015-septembre " + T);
     }
     
     @Test

http://git-wip-us.apache.org/repos/asf/freemarker/blob/7a3c4817/freemarker-core-test/src/test/java/org/apache/freemarker/core/DirectiveCallPlaceTest.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/DirectiveCallPlaceTest.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/DirectiveCallPlaceTest.java
index a7944e6..61bbe2d 100644
--- 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/DirectiveCallPlaceTest.java
+++ 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/DirectiveCallPlaceTest.java
@@ -40,13 +40,13 @@ public class DirectiveCallPlaceTest extends TemplateTest {
     @Test
     public void testCustomDataBasics() throws IOException, TemplateException {
         addTemplate(
-                "customDataBasics.ftl",
+                "customDataBasics.f3ah",
                 "<@uc>Abc</@uc> <@uc>x=${x}</@uc> <@uc>Ab<#-- -->c</@uc> 
<@lc/><@lc></@lc> <@lc>Abc</@lc>");
         
         CachingTextConverterDirective.resetCacheRecreationCount();
         for (int i = 0; i < 3; i++) {
             assertOutputForNamed(
-                    "customDataBasics.ftl",
+                    "customDataBasics.f3ah",
                     "ABC[cached 1] X=123 ABC[cached 2]  abc[cached 3]");
         }
     }
@@ -54,33 +54,33 @@ public class DirectiveCallPlaceTest extends TemplateTest {
     @Test
     public void testCustomDataProviderMismatch() throws IOException, 
TemplateException {
         addTemplate(
-                "customDataProviderMismatch.ftl",
+                "customDataProviderMismatch.f3ah",
                 "<#list [uc, lc, uc] as d><#list 1..2 as 
_><@d>Abc</@d></#list></#list>");
         
         CachingTextConverterDirective.resetCacheRecreationCount();
         assertOutputForNamed(
-                "customDataProviderMismatch.ftl",
+                "customDataProviderMismatch.f3ah",
                 "ABC[cached 1]ABC[cached 1]abc[cached 2]abc[cached 
2]ABC[cached 3]ABC[cached 3]");
         assertOutputForNamed(
-                "customDataProviderMismatch.ftl",
+                "customDataProviderMismatch.f3ah",
                 "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",
+                "positions.f3ah",
                 "<@pa />\n"
                 + "..<@pa\n"
                 + "/><@pa>xxx</@>\n"
                 + "<@pa>{<@pa/> <@pa/>}</@>\n");
         
         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");
+                "positions.f3ah",
+                "[positions.f3ah:1:1-1:7]"
+                + "..[positions.f3ah:2:3-3:2]"
+                + "[positions.f3ah:3:3-3:14]xxx\n"
+                + "[positions.f3ah:4:1-4:24]{[positions.f3ah:4:7-4:12] 
[positions.f3ah:4:14-4:19]}\n");
     }
     
     @SuppressWarnings("boxing")

http://git-wip-us.apache.org/repos/asf/freemarker/blob/7a3c4817/freemarker-core-test/src/test/java/org/apache/freemarker/core/ExceptionTest.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/ExceptionTest.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/ExceptionTest.java
index 19c3b6e..6649aa2 100644
--- 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/ExceptionTest.java
+++ 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/ExceptionTest.java
@@ -70,22 +70,22 @@ public class ExceptionTest extends TestCase {
     @SuppressWarnings("boxing")
     public void testTemplateExceptionLocationInformation() throws IOException {
         StringTemplateLoader tl = new StringTemplateLoader();
-        tl.putTemplate("foo_en.ftl", "\n\nxxx${noSuchVariable}");
+        tl.putTemplate("foo_en.f3ah", "\n\nxxx${noSuchVariable}");
 
         Template t = new TestConfigurationBuilder().templateLoader(tl).build()
-                .getTemplate("foo.ftl", Locale.US);
+                .getTemplate("foo.f3ah", 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("foo.f3ah", t.getLookupName());
+            assertEquals("foo.f3ah", e.getTemplateLookupName());
+            assertEquals("foo_en.f3ah", 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("foo_en.f3ah"));
             assertThat(e.getMessage(), containsString("noSuchVariable"));
         }
     }
@@ -93,21 +93,21 @@ public class ExceptionTest extends TestCase {
     @SuppressWarnings("cast")
     public void testParseExceptionLocationInformation() throws IOException {
         StringTemplateLoader tl = new StringTemplateLoader();
-        tl.putTemplate("foo_en.ftl", "\n\nxxx<#noSuchDirective>");
+        tl.putTemplate("foo_en.f3ah", "\n\nxxx<#noSuchDirective>");
 
         try {
             new TestConfigurationBuilder().templateLoader(tl).build()
-                    .getTemplate("foo.ftl", Locale.US);
+                    .getTemplate("foo.f3ah", Locale.US);
             fail();
         } catch (ParseException e) {
             System.out.println(e.getMessage());
-            assertEquals("foo_en.ftl", e.getTemplateSourceName());
-            assertEquals("foo.ftl", e.getTemplateLookupName());
+            assertEquals("foo_en.f3ah", e.getTemplateSourceName());
+            assertEquals("foo.f3ah", 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("foo_en.f3ah"));
             assertThat(e.getMessage(), containsString("noSuchDirective"));
         }
     }

http://git-wip-us.apache.org/repos/asf/freemarker/blob/7a3c4817/freemarker-core-test/src/test/java/org/apache/freemarker/core/GetOptionalTemplateTest.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/GetOptionalTemplateTest.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/GetOptionalTemplateTest.java
index 4149e02..22d6aff 100644
--- 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/GetOptionalTemplateTest.java
+++ 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/GetOptionalTemplateTest.java
@@ -22,13 +22,13 @@ public class GetOptionalTemplateTest extends TemplateTest {
 
     @Test
     public void testBasicsWhenTemplateExists() throws Exception {
-        addTemplate("inc.ftl", "<#assign x = (x!0) + 1>inc ${x}");
+        addTemplate("inc.f3ah", "<#assign x = (x!0) + 1>inc ${x}");
         assertOutput(""
-                + "<#assign t = .getOptionalTemplate('inc.ftl')>"
+                + "<#assign t = .getOptionalTemplate('inc.f3ah')>"
                 + "Exists: ${t.exists?c}; "
                 + "Include: <@t.include />, <@t.include />; "
                 + "Import: <#assign ns1 = t.import()><#assign ns2 = 
t.import()>${ns1.x}, ${ns2.x}; "
-                + "Aliased: <#assign x = 9 in ns1>${ns1.x}, ${ns2.x}, <#import 
'inc.ftl' as ns3>${ns3.x}",
+                + "Aliased: <#assign x = 9 in ns1>${ns1.x}, ${ns2.x}, <#import 
'inc.f3ah' as ns3>${ns3.x}",
                 "Exists: true; "
                 + "Include: inc 1, inc 2; "
                 + "Import: 1, 1; "
@@ -39,7 +39,7 @@ public class GetOptionalTemplateTest extends TemplateTest {
     @Test
     public void testBasicsWhenTemplateIsMissing() throws Exception {
         assertOutput(""
-                + "<#assign t = .getOptionalTemplate('missing.ftl')>"
+                + "<#assign t = .getOptionalTemplate('missing.f3ah')>"
                 + "Exists: ${t.exists?c}; "
                 + "Include: ${t.include???c}; "
                 + "Import: ${t.import???c}",
@@ -51,24 +51,24 @@ public class GetOptionalTemplateTest extends TemplateTest {
 
     @Test
     public void testRelativeAndAbsolutePath() throws Exception {
-        addTemplate("lib/inc.ftl", "included");
+        addTemplate("lib/inc.f3ah", "included");
         
-        addTemplate("test1.ftl", 
"<@.getOptionalTemplate('lib/inc.ftl').include />");
-        assertOutputForNamed("test1.ftl", "included");
+        addTemplate("test1.f3ah", 
"<@.getOptionalTemplate('lib/inc.f3ah').include />");
+        assertOutputForNamed("test1.f3ah", "included");
         
-        addTemplate("lib/test2.ftl", 
"<@.getOptionalTemplate('/lib/inc.ftl').include />");
-        assertOutputForNamed("lib/test2.ftl", "included");
+        addTemplate("lib/test2.f3ah", 
"<@.getOptionalTemplate('/lib/inc.f3ah').include />");
+        assertOutputForNamed("lib/test2.f3ah", "included");
         
-        addTemplate("lib/test3.ftl", 
"<@.getOptionalTemplate('inc.ftl').include />");
-        assertOutputForNamed("lib/test3.ftl", "included");
+        addTemplate("lib/test3.f3ah", 
"<@.getOptionalTemplate('inc.f3ah').include />");
+        assertOutputForNamed("lib/test3.f3ah", "included");
         
-        addTemplate("sub/test4.ftl", 
"<@.getOptionalTemplate('../lib/inc.ftl').include />");
-        assertOutputForNamed("sub/test4.ftl", "included");
+        addTemplate("sub/test4.f3ah", 
"<@.getOptionalTemplate('../lib/inc.f3ah').include />");
+        assertOutputForNamed("sub/test4.f3ah", "included");
     }
 
     @Test
     public void testUseCase1() throws Exception {
-        addTemplate("lib/inc.ftl", "included");
+        addTemplate("lib/inc.f3ah", "included");
         assertOutput(""
                 + "<#macro test templateName{positional}>"
                 + "<#local t = .getOptionalTemplate(templateName)>"
@@ -78,27 +78,27 @@ public class GetOptionalTemplateTest extends TemplateTest {
                 + "missing"
                 + "</#if>"
                 + "</#macro>"
-                + "<@test 'lib/inc.ftl' />; "
-                + "<@test 'inc.ftl' />",
+                + "<@test 'lib/inc.f3ah' />; "
+                + "<@test 'inc.f3ah' />",
                 "before included after; missing");
     }
 
     @Test
     public void testUseCase2() throws Exception {
-        addTemplate("found.ftl", "found");
+        addTemplate("found.f3ah", "found");
         assertOutput(""
                 + "<@("
-                + ".getOptionalTemplate('missing1.ftl').include!"
-                + ".getOptionalTemplate('missing2.ftl').include!"
-                + ".getOptionalTemplate('found.ftl').include!"
-                + ".getOptionalTemplate('missing3.ftl').include"
+                + ".getOptionalTemplate('missing1.f3ah').include!"
+                + ".getOptionalTemplate('missing2.f3ah').include!"
+                + ".getOptionalTemplate('found.f3ah').include!"
+                + ".getOptionalTemplate('missing3.f3ah').include"
                 + ") />",
                 "found");
         assertOutput(""
                 + "<#macro fallback>fallback</#macro>"
                 + "<@("
-                + ".getOptionalTemplate('missing1.ftl').include!"
-                + ".getOptionalTemplate('missing2.ftl').include!"
+                + ".getOptionalTemplate('missing1.f3ah').include!"
+                + ".getOptionalTemplate('missing2.f3ah').include!"
                 + "fallback"
                 + ") />",
                 "fallback");

http://git-wip-us.apache.org/repos/asf/freemarker/blob/7a3c4817/freemarker-core-test/src/test/java/org/apache/freemarker/core/IncludeAndImportConfigurableLayersTest.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/IncludeAndImportConfigurableLayersTest.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/IncludeAndImportConfigurableLayersTest.java
index 9c07d44..90ec941 100644
--- 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/IncludeAndImportConfigurableLayersTest.java
+++ 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/IncludeAndImportConfigurableLayersTest.java
@@ -35,26 +35,26 @@ public class IncludeAndImportConfigurableLayersTest {
     @Test
     public void test3LayerImportNoClashes() throws Exception {
         TestConfigurationBuilder cfgB = createConfigurationBuilder()
-                .autoImports(ImmutableMap.of("t1", "t1.ftl"))
+                .autoImports(ImmutableMap.of("t1", "t1.f3ah"))
                 .templateConfigurations(
                         new ConditionalTemplateConfigurationFactory(
-                                new FileNameGlobMatcher("main.ftl"),
+                                new FileNameGlobMatcher("main.f3ah"),
                                 new TemplateConfiguration.Builder()
-                                        .autoImports(ImmutableMap.of("t2", 
"t2.ftl"))
+                                        .autoImports(ImmutableMap.of("t2", 
"t2.f3ah"))
                                         .build()));
         Configuration cfg = cfgB.build();
 
         {
-            Template t = cfg.getTemplate("main.ftl");
+            Template t = cfg.getTemplate("main.f3ah");
             StringWriter sw = new StringWriter();
             t.createProcessingEnvironment(null, sw)
-                    .autoImports(ImmutableMap.of("t3", "t3.ftl"))
+                    .autoImports(ImmutableMap.of("t3", "t3.f3ah"))
                     .process();
             assertEquals("In main: t1;t2;t3;", sw.toString());
         }
 
         {
-            Template t = cfg.getTemplate("main.ftl");
+            Template t = cfg.getTemplate("main.f3ah");
             StringWriter sw = new StringWriter();
             t.createProcessingEnvironment(null, sw)
                     .process();
@@ -62,10 +62,10 @@ public class IncludeAndImportConfigurableLayersTest {
         }
         
         {
-            Template t = cfg.getTemplate("main2.ftl");
+            Template t = cfg.getTemplate("main2.f3ah");
             StringWriter sw = new StringWriter();
             t.createProcessingEnvironment(null, sw)
-                    .autoImports(ImmutableMap.of("t3", "t3.ftl"))
+                    .autoImports(ImmutableMap.of("t3", "t3.f3ah"))
                     .process();
             assertEquals("In main2: t1;t3;", sw.toString());
         }
@@ -75,37 +75,37 @@ public class IncludeAndImportConfigurableLayersTest {
     public void test3LayerImportClashes() throws Exception {
         Configuration cfg = createConfigurationBuilder()
                 .autoImports(ImmutableMap.of(
-                        "t1", "t1.ftl",
-                        "t2", "t2.ftl",
-                        "t3", "t3.ftl"))
+                        "t1", "t1.f3ah",
+                        "t2", "t2.f3ah",
+                        "t3", "t3.f3ah"))
                 .templateConfigurations(
                         new ConditionalTemplateConfigurationFactory(
-                                new FileNameGlobMatcher("main.ftl"),
+                                new FileNameGlobMatcher("main.f3ah"),
                                 new TemplateConfiguration.Builder()
-                                        .autoImports(ImmutableMap.of("t2", 
"t2b.ftl"))
+                                        .autoImports(ImmutableMap.of("t2", 
"t2b.f3ah"))
                                         .build()))
                 .build();
 
         {
-            Template t = cfg.getTemplate("main.ftl");
+            Template t = cfg.getTemplate("main.f3ah");
             StringWriter sw = new StringWriter();
             t.createProcessingEnvironment(null, sw)
-                    .autoImports(ImmutableMap.of("t3", "t3b.ftl"))
+                    .autoImports(ImmutableMap.of("t3", "t3b.f3ah"))
                     .process();
             assertEquals("In main: t1;t2b;t3b;", sw.toString());
         }
         
         {
-            Template t = cfg.getTemplate("main2.ftl");
+            Template t = cfg.getTemplate("main2.f3ah");
             StringWriter sw = new StringWriter();
             t.createProcessingEnvironment(null, sw)
-                    .autoImports(ImmutableMap.of("t3", "t3b.ftl"))
+                    .autoImports(ImmutableMap.of("t3", "t3b.f3ah"))
                     .process();
             assertEquals("In main2: t1;t2;t3b;", sw.toString());
         }
         
         {
-            Template t = cfg.getTemplate("main.ftl");
+            Template t = cfg.getTemplate("main.f3ah");
             StringWriter sw = new StringWriter();
             t.createProcessingEnvironment(null, sw)
                     .process();
@@ -116,26 +116,26 @@ public class IncludeAndImportConfigurableLayersTest {
     @Test
     public void test3LayerIncludesNoClashes() throws Exception {
         Configuration cfg = createConfigurationBuilder()
-                .autoIncludes("t1.ftl")
+                .autoIncludes("t1.f3ah")
                 .templateConfigurations(
                         new ConditionalTemplateConfigurationFactory(
-                                new FileNameGlobMatcher("main.ftl"),
+                                new FileNameGlobMatcher("main.f3ah"),
                                 new TemplateConfiguration.Builder()
-                                        .autoIncludes("t2.ftl")
+                                        .autoIncludes("t2.f3ah")
                                         .build()))
                 .build();
 
         {
-            Template t = cfg.getTemplate("main.ftl");
+            Template t = cfg.getTemplate("main.f3ah");
             StringWriter sw = new StringWriter();
             t.createProcessingEnvironment(null, sw)
-                    .autoIncludes("t3.ftl")
+                    .autoIncludes("t3.f3ah")
                     .process();
             assertEquals("T1;T2;T3;In main: t1;t2;t3;", sw.toString());
         }
 
         {
-            Template t = cfg.getTemplate("main.ftl");
+            Template t = cfg.getTemplate("main.f3ah");
             StringWriter sw = new StringWriter();
             t.createProcessingEnvironment(null, sw)
                     .process();
@@ -143,10 +143,10 @@ public class IncludeAndImportConfigurableLayersTest {
         }
         
         {
-            Template t = cfg.getTemplate("main2.ftl");
+            Template t = cfg.getTemplate("main2.f3ah");
             StringWriter sw = new StringWriter();
             t.createProcessingEnvironment(null, sw)
-                    .autoIncludes("t3.ftl")
+                    .autoIncludes("t3.f3ah")
                     .process();
             assertEquals("T1;T3;In main2: t1;t3;", sw.toString());
         }
@@ -155,34 +155,34 @@ public class IncludeAndImportConfigurableLayersTest {
     @Test
     public void test3LayerIncludeClashes() throws Exception {
         Configuration cfg = createConfigurationBuilder()
-                .autoIncludes("t1.ftl", "t2.ftl", "t3.ftl")
+                .autoIncludes("t1.f3ah", "t2.f3ah", "t3.f3ah")
                 .templateConfigurations(new 
ConditionalTemplateConfigurationFactory(
-                        new FileNameGlobMatcher("main.ftl"),
+                        new FileNameGlobMatcher("main.f3ah"),
                         new TemplateConfiguration.Builder()
-                                .autoIncludes("t2.ftl")
+                                .autoIncludes("t2.f3ah")
                                 .build()))
                 .build();
 
         {
-            Template t = cfg.getTemplate("main.ftl");
+            Template t = cfg.getTemplate("main.f3ah");
             StringWriter sw = new StringWriter();
             t.createProcessingEnvironment(null, sw)
-                    .autoIncludes("t3.ftl")
+                    .autoIncludes("t3.f3ah")
                     .process();
             assertEquals("T1;T2;T3;In main: t1;t2;t3;", sw.toString());
         }
         
         {
-            Template t = cfg.getTemplate("main2.ftl");
+            Template t = cfg.getTemplate("main2.f3ah");
             StringWriter sw = new StringWriter();
             t.createProcessingEnvironment(null, sw)
-                    .autoIncludes("t3.ftl")
+                    .autoIncludes("t3.f3ah")
                     .process();
             assertEquals("T1;T2;T3;In main2: t1;t2;t3;", sw.toString());
         }
         
         {
-            Template t = cfg.getTemplate("main.ftl");
+            Template t = cfg.getTemplate("main.f3ah");
             StringWriter sw = new StringWriter();
             t.createProcessingEnvironment(null, sw)
                     .process();
@@ -190,10 +190,10 @@ public class IncludeAndImportConfigurableLayersTest {
         }
         
         {
-            Template t = cfg.getTemplate("main.ftl");
+            Template t = cfg.getTemplate("main.f3ah");
             StringWriter sw = new StringWriter();
             t.createProcessingEnvironment(null, sw)
-                    .autoIncludes("t1.ftl")
+                    .autoIncludes("t1.f3ah")
                     .process();
             assertEquals("T3;T2;T1;In main: t3;t2;t1;", sw.toString());
         }
@@ -202,20 +202,20 @@ public class IncludeAndImportConfigurableLayersTest {
     @Test
     public void test3LayerIncludesClashes2() throws Exception {
         Configuration cfg = createConfigurationBuilder()
-                .autoIncludes("t1.ftl", "t1.ftl")
+                .autoIncludes("t1.f3ah", "t1.f3ah")
                 .templateConfigurations(
                         new ConditionalTemplateConfigurationFactory(
-                                new FileNameGlobMatcher("main.ftl"),
+                                new FileNameGlobMatcher("main.f3ah"),
                                 new TemplateConfiguration.Builder()
-                                        .autoIncludes("t2.ftl", "t2.ftl")
+                                        .autoIncludes("t2.f3ah", "t2.f3ah")
                                         .build()))
                 .build();
 
         {
-            Template t = cfg.getTemplate("main.ftl");
+            Template t = cfg.getTemplate("main.f3ah");
             StringWriter sw = new StringWriter();
             t.createProcessingEnvironment(null, sw)
-                    .autoIncludes("t3.ftl", "t3.ftl", "t1.ftl", "t1.ftl")
+                    .autoIncludes("t3.f3ah", "t3.f3ah", "t1.f3ah", "t1.f3ah")
                     .process();
             assertEquals("T2;T3;T1;In main: t2;t3;t1;", sw.toString());
         }
@@ -250,7 +250,7 @@ public class IncludeAndImportConfigurableLayersTest {
         Configuration cfg;
         {
             TestConfigurationBuilder cfgB = createConfigurationBuilder()
-                    .autoImports(ImmutableMap.of("t1", "t1.ftl"));
+                    .autoImports(ImmutableMap.of("t1", "t1.f3ah"));
             if (layer == Configuration.class) {
                 setLazinessOfConfigurable(cfgB, lazyImports, lazyAutoImports, 
setLazyAutoImports);
             }
@@ -266,7 +266,7 @@ public class IncludeAndImportConfigurableLayersTest {
             tc = null;
         }
 
-        Template t = new Template(null, "<#import 't2.ftl' as t2>${loaded!}", 
cfg, tc);
+        Template t = new Template(null, "<#import 't2.f3ah' as t2>${loaded!}", 
cfg, tc);
         StringWriter sw = new StringWriter();
 
         Environment env = t.createProcessingEnvironment(null, sw);
@@ -291,14 +291,14 @@ public class IncludeAndImportConfigurableLayersTest {
     
     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;");
+        loader.putTemplate("main.f3ah", "In main: ${loaded}");
+        loader.putTemplate("main2.f3ah", "In main2: ${loaded}");
+        loader.putTemplate("t1.f3ah", "<#global loaded = (loaded!) + 
't1;'>T1;");
+        loader.putTemplate("t2.f3ah", "<#global loaded = (loaded!) + 
't2;'>T2;");
+        loader.putTemplate("t3.f3ah", "<#global loaded = (loaded!) + 
't3;'>T3;");
+        loader.putTemplate("t1b.f3ah", "<#global loaded = (loaded!) + 
't1b;'>T1b;");
+        loader.putTemplate("t2b.f3ah", "<#global loaded = (loaded!) + 
't2b;'>T2b;");
+        loader.putTemplate("t3b.f3ah", "<#global loaded = (loaded!) + 
't3b;'>T3b;");
 
         return new TestConfigurationBuilder().templateLoader(loader);
     }

http://git-wip-us.apache.org/repos/asf/freemarker/blob/7a3c4817/freemarker-core-test/src/test/java/org/apache/freemarker/core/IncludeAndImportTest.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/IncludeAndImportTest.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/IncludeAndImportTest.java
index ac1b907..b2dbf59 100644
--- 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/IncludeAndImportTest.java
+++ 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/IncludeAndImportTest.java
@@ -39,41 +39,41 @@ 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'>"
+        addTemplate("inc1.f3ah", "[inc1]<#global inc1Cnt = (inc1Cnt!0) + 
1><#global history = (history!) + 'I'>");
+        addTemplate("inc2.f3ah", "[inc2]");
+        addTemplate("inc3.f3ah", "[inc3]");
+        addTemplate("lib1.f3ah", "<#global lib1Cnt = (lib1Cnt!0) + 1><#global 
history = (history!) + 'L1'>"
                 + "<#macro m>In lib1</#macro>");
-        addTemplate("lib2.ftl", "<#global history = (history!) + 'L2'>"
+        addTemplate("lib2.f3ah", "<#global history = (history!) + 'L2'>"
                 + "<#macro m>In lib2</#macro>");
-        addTemplate("lib3.ftl", "<#global history = (history!) + 'L3'>"
+        addTemplate("lib3.f3ah", "<#global history = (history!) + 'L3'>"
                 + "<#macro m>In lib3</#macro>");
         
-        addTemplate("lib2CallsLib1.ftl", "<#global history = (history!) + 
'L2'>"
+        addTemplate("lib2CallsLib1.f3ah", "<#global history = (history!) + 
'L2'>"
                 + "<#macro m>In lib2 (<@lib1.m/>)</#macro>");
-        addTemplate("lib3ImportsLib1.ftl", "<#import 'lib1.ftl' as 
lib1><#global history = (history!) + 'L3'>"
+        addTemplate("lib3ImportsLib1.f3ah", "<#import 'lib1.f3ah' as 
lib1><#global history = (history!) + 'L3'>"
                 + "<#macro m>In lib3 (<@lib1.m/>)</#macro>");
         
-        addTemplate("lib_de.ftl", "<#global history = (history!) + 
'LDe'><#assign initLocale=.locale>"
+        addTemplate("lib_de.f3ah", "<#global history = (history!) + 
'LDe'><#assign initLocale=.locale>"
                 + "<#macro m>de</#macro>");
-        addTemplate("lib_en.ftl", "<#global history = (history!) + 
'LEn'><#assign initLocale=.locale>"
+        addTemplate("lib_en.f3ah", "<#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");
+        assertOutput("<#include 'inc1.f3ah'>${inc1Cnt}<#include 
'inc1.f3ah'>${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");
+        assertOutput("<#import 'lib1.f3ah' as i1>${lib1Cnt} <#import 
'lib1.f3ah' 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}";
+                + "<#import 'lib1.f3ah' as lib1> ${.main.lib1???c} 
${.globals.lib1???c}";
         String expectedOut = "false false true true";
         assertOutput(ftl, expectedOut);
     }
@@ -82,8 +82,8 @@ public class IncludeAndImportTest extends TemplateTest {
     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}";
+        String ftl = "<#import 'lib3ImportsLib1.f3ah' as lib3>${lib1Cnt} 
${.main.lib1???c} ${.globals.lib1???c}, "
+        + "<#import 'lib1.f3ah' as lib1>${lib1Cnt} ${.main.lib1???c} 
${.globals.lib1???c}";
         assertOutput(ftl, "1 false false, 1 true true");
     }
 
@@ -94,13 +94,13 @@ public class IncludeAndImportTest extends TemplateTest {
     public void autoIncludeAndAutoImport() throws IOException, 
TemplateException {
         setConfiguration(new TestConfigurationBuilder()
                 .autoImports(ImmutableMap.of(
-                        "lib1", "lib1.ftl",
-                        "lib2", "lib2CallsLib1.ftl"
+                        "lib1", "lib1.f3ah",
+                        "lib2", "lib2CallsLib1.f3ah"
                 ))
-                .autoIncludes("inc1.ftl", "inc2.ftl")
+                .autoIncludes("inc1.f3ah", "inc2.f3ah")
                 .build());
         assertOutput(
-                "<#include 'inc3.ftl'>[main] ${inc1Cnt}, ${history}, 
<@lib1.m/>, <@lib2.m/>",
+                "<#include 'inc3.f3ah'>[main] ${inc1Cnt}, ${history}, 
<@lib1.m/>, <@lib2.m/>",
                 "[inc1][inc2][inc3][main] 1, L1L2I, In lib1, In lib2 (In 
lib1)");
     }
     
@@ -113,23 +113,23 @@ public class IncludeAndImportTest extends TemplateTest {
         // 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>"
+                "<#setting locale='en_US'><#import 'lib.f3ah' as ns1>"
+                + "<#setting locale='de_DE'><#import 'lib.f3ah' as ns2>"
                 + "<@ns1.m/> <@ns2.m/> ${history}",
                 "en en LEn");
         
         // The opposite of the previous, where different names refer to the 
same template after a lookup:
         assertOutput(
                 "<#setting locale='en_US'>"
-                + "<#import 'x/*/lib.ftl' as ns1>"
-                + "<#import 'lib.ftl' as ns2>"
+                + "<#import 'x/*/lib.f3ah' as ns1>"
+                + "<#import 'lib.f3ah' 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 ftlImports = "<#import 'lib1.f3ah' as l1><#import 'lib2.f3ah' 
as l2><#import 'lib3ImportsLib1.f3ah' as l3>";
         String ftlCalls = "<@l2.m/>, <@l1.m/>; ${history}";
         String ftl = ftlImports + ftlCalls;
         
@@ -144,7 +144,7 @@ public class IncludeAndImportTest extends TemplateTest {
     @Test
     public void lazyImportAndLocale() throws IOException, TemplateException {
         setConfiguration(new 
TestConfigurationBuilder().lazyImports(true).build());
-        assertOutput("<#setting locale = 'de_DE'><#import 'lib.ftl' as lib>"
+        assertOutput("<#setting locale = 'de_DE'><#import 'lib.f3ah' as lib>"
                 + "[${history!}] "
                 + "<#setting locale = 'en'>"
                 + "<@lib.m/> ${lib.initLocale} [${history}]",
@@ -154,9 +154,9 @@ public class IncludeAndImportTest extends TemplateTest {
     @Test
     public void lazyAutoImportSettings() throws IOException, TemplateException 
{
         ImmutableMap<String, String> autoImports = ImmutableMap.of(
-                "l1", "lib1.ftl",
-                "l2", "lib2.ftl",
-                "l3", "lib3.ftl"
+                "l1", "lib1.f3ah",
+                "l2", "lib2.f3ah",
+                "l3", "lib3.f3ah"
         );
         String ftl = "<@l2.m/>, <@l1.m/>; ${history}";
         String expectedEagerOutput = "In lib2, In lib1; L1L2L3";
@@ -205,9 +205,9 @@ public class IncludeAndImportTest extends TemplateTest {
     @Test
     public void lazyAutoImportMixedWithManualImport() throws IOException, 
TemplateException {
         ImmutableMap<String, String> autoImports = ImmutableMap.of(
-                "l1", "lib1.ftl",
-                "l2", "/./lib2.ftl",
-                "l3", "lib3.ftl");
+                "l1", "lib1.f3ah",
+                "l2", "/./lib2.f3ah",
+                "l3", "lib3.f3ah");
         String ftl = "<@l2.m/>, <@l1.m/>; ${history}";
         String expectOutputWithoutHistory = "In lib2, In lib1; ";
         String expecedOutput = expectOutputWithoutHistory + "L2L1";
@@ -217,20 +217,20 @@ public class IncludeAndImportTest extends TemplateTest {
                 .lazyAutoImports(true)
                 .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");
+        assertOutput("<#import 'lib1.f3ah' as l1>" + ftl, 
expectOutputWithoutHistory + "L1L2");
+        assertOutput("<#import './x/../lib1.f3ah' as l1>" + ftl, 
expectOutputWithoutHistory + "L1L2");
+        assertOutput("<#import 'lib2.f3ah' as l2>" + ftl, expecedOutput);
+        assertOutput("<#import 'lib3.f3ah' as l3>" + ftl, 
expectOutputWithoutHistory + "L3L2L1");
 
         setConfiguration(new TestConfigurationBuilder()
                 .autoImports(autoImports)
                 .lazyAutoImports(true)
                 .lazyImports(true)
                 .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);
+        assertOutput("<#import 'lib1.f3ah' as l1>" + ftl, expecedOutput);
+        assertOutput("<#import './x/../lib1.f3ah' as l1>" + ftl, 
expecedOutput);
+        assertOutput("<#import 'lib2.f3ah' as l2>" + ftl, expecedOutput);
+        assertOutput("<#import 'lib3.f3ah' as l3>" + ftl, expecedOutput);
     }
 
     @Test
@@ -238,11 +238,11 @@ public class IncludeAndImportTest extends TemplateTest {
         setConfiguration(new TestConfigurationBuilder()
                 .lazyImports(true)
                 .build());
-        assertOutput("<#import 'noSuchTemplate.ftl' as wrong>x", "x");
+        assertOutput("<#import 'noSuchTemplate.f3ah' as wrong>x", "x");
         
         setConfiguration(new TestConfigurationBuilder()
                 .lazyImports(true)
-                .autoImports(ImmutableMap.of("wrong", "noSuchTemplate.ftl"))
+                .autoImports(ImmutableMap.of("wrong", "noSuchTemplate.f3ah"))
                 .build());
         assertOutput("x", "x");
 
@@ -251,17 +251,17 @@ public class IncludeAndImportTest extends TemplateTest {
             fail();
         } catch (TemplateException e) {
             assertThat(e.getMessage(),
-                    allOf(containsString("Lazy initialization"), 
containsString("noSuchTemplate.ftl")));
+                    allOf(containsString("Lazy initialization"), 
containsString("noSuchTemplate.f3ah")));
             assertThat(e.getCause(), 
instanceOf(TemplateNotFoundException.class));
         }
         
-        addTemplate("containsError.ftl", "${noSuchVar}");
+        addTemplate("containsError.f3ah", "${noSuchVar}");
         try {
-            assertOutput("<#import 'containsError.ftl' as lib>${lib.x}", "");
+            assertOutput("<#import 'containsError.f3ah' as lib>${lib.x}", "");
             fail();
         } catch (TemplateException e) {
             assertThat(e.getMessage(),
-                    allOf(containsString("Lazy initialization"), 
containsString("containsError.ftl")));
+                    allOf(containsString("Lazy initialization"), 
containsString("containsError.f3ah")));
             assertThat(e.getCause(), 
instanceOf(InvalidReferenceException.class));
             assertThat(e.getCause().getMessage(), containsString("noSuchVar"));
         }

http://git-wip-us.apache.org/repos/asf/freemarker/blob/7a3c4817/freemarker-core-test/src/test/java/org/apache/freemarker/core/IncudeFromNamelessTest.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/IncudeFromNamelessTest.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/IncudeFromNamelessTest.java
index f4908b8..2a50e7b 100644
--- 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/IncudeFromNamelessTest.java
+++ 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/IncudeFromNamelessTest.java
@@ -36,18 +36,18 @@ public class IncudeFromNamelessTest extends TestCase {
     
     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>");
+        loader.putTemplate("i.f3ah", "[i]");
+        loader.putTemplate("sub/i.f3ah", "[sub/i]");
+        loader.putTemplate("import.f3ah", "<#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}"
+                    "<#include 'i.f3ah'>\n"
+                    + "<#include '/i.f3ah'>\n"
+                    + "<#include 'sub/i.f3ah'>\n"
+                    + "<#include '/sub/i.f3ah'>"
+                    + "<#import 'import.f3ah' as i>${i.x}"
                 ),
                 cfg);
         StringWriter out = new StringWriter();

http://git-wip-us.apache.org/repos/asf/freemarker/blob/7a3c4817/freemarker-core-test/src/test/java/org/apache/freemarker/core/InterpretAndEvalTemplateNameTest.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/InterpretAndEvalTemplateNameTest.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/InterpretAndEvalTemplateNameTest.java
index 8b4b2d5..a07d929 100644
--- 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/InterpretAndEvalTemplateNameTest.java
+++ 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/InterpretAndEvalTemplateNameTest.java
@@ -39,31 +39,31 @@ public class InterpretAndEvalTemplateNameTest extends 
TemplateTest {
                 }) {
             StringTemplateLoader tl = new StringTemplateLoader();
             tl.putTemplate(
-                    "main.ftl",
+                    "main.f3au",
                     getTemplateNames + " "
-                    + "{<#include 'sub/t.ftl'>}");
+                    + "{<#include 'sub/t.f3au'>}");
             tl.putTemplate(
-                    "sub/t.ftl",
+                    "sub/t.f3au",
                     getTemplateNames + " "
-                    + "i{<@r'" + getTemplateNames + " {<#include 
\"a.ftl\">'?interpret />}} "
-                    + "i{<@[r'" + getTemplateNames + " {<#include 
\"a.ftl\">','named_interpreted']?interpret />}}");
-            tl.putTemplate("sub/a.ftl", "In sub/a.ftl, " + getTemplateNames);
-            tl.putTemplate("a.ftl", "In a.ftl");
+                    + "i{<@r'" + getTemplateNames + " {<#include 
\"a.f3au\">'?interpret />}} "
+                    + "i{<@[r'" + getTemplateNames + " {<#include 
\"a.f3au\">','named_interpreted']?interpret />}}");
+            tl.putTemplate("sub/a.f3au", "In sub/a.f3au, " + getTemplateNames);
+            tl.putTemplate("a.f3au", "In a.f3au");
 
             setConfiguration(new 
TestConfigurationBuilder().templateLoader(tl).build());
             
-            assertOutputForNamed("main.ftl",
-                    "c=main.ftl, m=main.ftl "
+            assertOutputForNamed("main.f3au",
+                    "c=main.f3au, m=main.f3au "
                     + "{"
-                        + "c=sub/t.ftl, m=main.ftl "
-                        + "i{c=sub/t.ftl->anonymous_interpreted, m=main.ftl 
{In sub/a.ftl, c=sub/a.ftl, m=main.ftl}} "
-                        + "i{c=sub/t.ftl->named_interpreted, m=main.ftl {In 
sub/a.ftl, c=sub/a.ftl, m=main.ftl}}"
+                    + "c=sub/t.f3au, m=main.f3au "
+                    + "i{c=sub/t.f3au->anonymous_interpreted, m=main.f3au {In 
sub/a.f3au, c=sub/a.f3au, m=main.f3au}} "
+                    + "i{c=sub/t.f3au->named_interpreted, m=main.f3au {In 
sub/a.f3au, c=sub/a.f3au, m=main.f3au}}"
                     + "}");
             
-            assertOutputForNamed("sub/t.ftl",
-                    "c=sub/t.ftl, m=sub/t.ftl "
-                    + "i{c=sub/t.ftl->anonymous_interpreted, m=sub/t.ftl {In 
sub/a.ftl, c=sub/a.ftl, m=sub/t.ftl}} "
-                    + "i{c=sub/t.ftl->named_interpreted, m=sub/t.ftl {In 
sub/a.ftl, c=sub/a.ftl, m=sub/t.ftl}}");
+            assertOutputForNamed("sub/t.f3au",
+                    "c=sub/t.f3au, m=sub/t.f3au "
+                    + "i{c=sub/t.f3au->anonymous_interpreted, m=sub/t.f3au {In 
sub/a.f3au, c=sub/a.f3au, m=sub/t.f3au}} "
+                    + "i{c=sub/t.f3au->named_interpreted, m=sub/t.f3au {In 
sub/a.f3au, c=sub/a.f3au, m=sub/t.f3au}}");
         }
     }
     

http://git-wip-us.apache.org/repos/asf/freemarker/blob/7a3c4817/freemarker-core-test/src/test/java/org/apache/freemarker/core/MutableProcessingConfigurationTest.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/MutableProcessingConfigurationTest.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/MutableProcessingConfigurationTest.java
index 62a9bfb..7fc890e 100644
--- 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/MutableProcessingConfigurationTest.java
+++ 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/MutableProcessingConfigurationTest.java
@@ -95,13 +95,13 @@ public class MutableProcessingConfigurationTest {
         {
             
assertTrue(_CollectionUtils.isMapKnownToBeUnmodifiable(mpc.getAutoImports()));
             Map<String, String> mutableValue = new HashMap<>();
-            mutableValue.put("x", "x.ftl");
+            mutableValue.put("x", "x.f3ah");
             mpc.setAutoImports(mutableValue);
             Map<String, String> immutableValue = mpc.getAutoImports();
             assertNotSame(mutableValue, immutableValue); // Must be a copy
             
assertTrue(_CollectionUtils.isMapKnownToBeUnmodifiable(immutableValue));
             assertEquals(mutableValue, immutableValue);
-            mutableValue.put("y", "y.ftl");
+            mutableValue.put("y", "y.f3ah");
             assertNotEquals(mutableValue, immutableValue); // No aliasing
         }
 

http://git-wip-us.apache.org/repos/asf/freemarker/blob/7a3c4817/freemarker-core-test/src/test/java/org/apache/freemarker/core/OptInTemplateClassResolverTest.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/OptInTemplateClassResolverTest.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/OptInTemplateClassResolverTest.java
index 1a24838..ca21391 100644
--- 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/OptInTemplateClassResolverTest.java
+++ 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/OptInTemplateClassResolverTest.java
@@ -46,7 +46,7 @@ public class OptInTemplateClassResolverTest extends TestCase {
     static {
         TRUSTED_TEMPLATES.add("lib/*");
         TRUSTED_TEMPLATES.add("/include/*");
-        TRUSTED_TEMPLATES.add("trusted.ftl");
+        TRUSTED_TEMPLATES.add("trusted.f3ah");
     }
     
     private OptInTemplateClassResolver resolver = new 
OptInTemplateClassResolver(
@@ -54,7 +54,7 @@ public class OptInTemplateClassResolverTest extends TestCase {
     
 
     public void testOptIn() throws TemplateException {
-        Template dummyTemp = Template.createPlainTextTemplate("foo.ftl", "",
+        Template dummyTemp = Template.createPlainTextTemplate("foo.f3ah", "",
                 new TestConfigurationBuilder().build());
 
         assertEquals(String.class, resolver.resolve("java.lang.String", null, 
dummyTemp));
@@ -71,42 +71,42 @@ public class OptInTemplateClassResolverTest extends 
TestCase {
         Configuration cfg = new TestConfigurationBuilder().build();
 
         assertEquals(Long.class, resolver.resolve("java.lang.Long", null,
-                Template.createPlainTextTemplate("lib/foo.ftl", "", cfg)));
+                Template.createPlainTextTemplate("lib/foo.f3ah", "", cfg)));
         assertEquals(String.class, resolver.resolve("java.lang.String", null,
-                Template.createPlainTextTemplate("lib/foo.ftl", "", cfg)));
+                Template.createPlainTextTemplate("lib/foo.f3ah", "", cfg)));
         assertEquals(Long.class, resolver.resolve("java.lang.Long", null,
-                Template.createPlainTextTemplate("/lib/foo.ftl", "", cfg)));
+                Template.createPlainTextTemplate("/lib/foo.f3ah", "", cfg)));
         assertEquals(Long.class, resolver.resolve("java.lang.Long", null,
-                Template.createPlainTextTemplate("include/foo.ftl", "", cfg)));
+                Template.createPlainTextTemplate("include/foo.f3ah", "", 
cfg)));
         assertEquals(Long.class, resolver.resolve("java.lang.Long", null,
-                Template.createPlainTextTemplate("trusted.ftl", "", cfg)));
+                Template.createPlainTextTemplate("trusted.f3ah", "", cfg)));
         assertEquals(Long.class, resolver.resolve("java.lang.Long", null,
-                Template.createPlainTextTemplate("/trusted.ftl", "", cfg)));
+                Template.createPlainTextTemplate("/trusted.f3ah", "", cfg)));
     }
 
     public void testCraftedTrusted() throws TemplateException {
-        testTrusted_checkFails("lib/../foo.ftl");
-        testTrusted_checkFails("lib\\..\\foo.ftl");
-        testTrusted_checkFails("lib\\../foo.ftl");
-        testTrusted_checkFails("lib/..\\foo.ftl");
+        testTrusted_checkFails("lib/../foo.f3ah");
+        testTrusted_checkFails("lib\\..\\foo.f3ah");
+        testTrusted_checkFails("lib\\../foo.f3ah");
+        testTrusted_checkFails("lib/..\\foo.f3ah");
         testTrusted_checkFails("lib/..");
-        testTrusted_checkFails("lib%2f%2E%2e%5cfoo.ftl");
-        testTrusted_checkFails("/lib%5C%.%2e%2Efoo.ftl");
+        testTrusted_checkFails("lib%2f%2E%2e%5cfoo.f3ah");
+        testTrusted_checkFails("/lib%5C%.%2e%2Efoo.f3ah");
         
         try {
-            testTrusted_checkFails("lib/./foo.ftl");
+            testTrusted_checkFails("lib/./foo.f3ah");
             fail();
         } catch (AssertionFailedError e) {
             // Expected
         }
         try {
-            testTrusted_checkFails("lib/foo..ftl");
+            testTrusted_checkFails("lib/foo..f3ah");
             fail();
         } catch (AssertionFailedError e) {
             // Expected
         }
         try {
-            testTrusted_checkFails("lib/%2e/foo.ftl");
+            testTrusted_checkFails("lib/%2e/foo.f3ah");
             fail();
         } catch (AssertionFailedError e) {
             // Expected
@@ -129,17 +129,17 @@ public class OptInTemplateClassResolverTest extends 
TestCase {
             Configuration cfg = new TestConfigurationBuilder()
                     .setting(
                             "newBuiltinClassResolver",
-                            "trustedTemplates: foo.ftl, \"lib/*\"")
+                            "trustedTemplates: foo.f3ah, \"lib/*\"")
                     .build();
 
             TemplateClassResolver res = cfg.getNewBuiltinClassResolver();
             assertEquals(String.class, res.resolve("java.lang.String", null,
-                    Template.createPlainTextTemplate("foo.ftl", "", cfg)));
+                    Template.createPlainTextTemplate("foo.f3ah", "", cfg)));
             assertEquals(String.class, res.resolve("java.lang.String", null,
-                    Template.createPlainTextTemplate("lib/bar.ftl", "", cfg)));
+                    Template.createPlainTextTemplate("lib/bar.f3ah", "", 
cfg)));
             try {
                 res.resolve("java.lang.String", null,
-                        Template.createPlainTextTemplate("bar.ftl", "", cfg));
+                        Template.createPlainTextTemplate("bar.f3ah", "", cfg));
                 fail();
             } catch (TemplateException e) {
                 // Expected
@@ -155,12 +155,12 @@ public class OptInTemplateClassResolverTest extends 
TestCase {
 
             TemplateClassResolver res = cfg.getNewBuiltinClassResolver();
             assertEquals(String.class, res.resolve("java.lang.String", null,
-                    Template.createPlainTextTemplate("foo.ftl", "", cfg)));
+                    Template.createPlainTextTemplate("foo.f3ah", "", cfg)));
             assertEquals(Integer.class, res.resolve("java.lang.Integer", null,
-                    Template.createPlainTextTemplate("foo.ftl", "", cfg)));
+                    Template.createPlainTextTemplate("foo.f3ah", "", cfg)));
             try {
                 res.resolve("java.lang.Long", null,
-                        Template.createPlainTextTemplate("foo.ftl", "", cfg));
+                        Template.createPlainTextTemplate("foo.f3ah", "", cfg));
                 fail();
             } catch (TemplateException e) {
                 // good
@@ -171,28 +171,28 @@ public class OptInTemplateClassResolverTest extends 
TestCase {
             Configuration cfg = new TestConfigurationBuilder()
                     .setting(
                             "newBuiltinClassResolver",
-                            "trustedTemplates: foo.ftl, 'lib/*', 
allowedClasses: 'java.lang.String',"
+                            "trustedTemplates: foo.f3ah, 'lib/*', 
allowedClasses: 'java.lang.String',"
                             + " java.lang.Integer")
                     .build();
             TemplateClassResolver res = cfg.getNewBuiltinClassResolver();
             assertEquals(String.class, res.resolve("java.lang.String", null,
-                    Template.createPlainTextTemplate("x.ftl", "", cfg)));
+                    Template.createPlainTextTemplate("x.f3ah", "", cfg)));
             assertEquals(Integer.class, res.resolve("java.lang.Integer", null,
-                    Template.createPlainTextTemplate("x.ftl", "", cfg)));
+                    Template.createPlainTextTemplate("x.f3ah", "", cfg)));
             try {
                 res.resolve("java.lang.Long", null,
-                        Template.createPlainTextTemplate("x.ftl", "", cfg));
+                        Template.createPlainTextTemplate("x.f3ah", "", cfg));
                 fail();
             } catch (TemplateException e) {
                 // Expected
             }
             assertEquals(Long.class, res.resolve("java.lang.Long", null,
-                    Template.createPlainTextTemplate("foo.ftl", "", cfg)));
+                    Template.createPlainTextTemplate("foo.f3ah", "", cfg)));
             assertEquals(Long.class, res.resolve("java.lang.Long", null,
-                    Template.createPlainTextTemplate("lib/bar.ftl", "", cfg)));
+                    Template.createPlainTextTemplate("lib/bar.f3ah", "", 
cfg)));
             try {
                 res.resolve("java.lang.Long", null,
-                        Template.createPlainTextTemplate("x.ftl", "", cfg));
+                        Template.createPlainTextTemplate("x.f3ah", "", cfg));
                 fail();
             } catch (TemplateException e) {
                 // Expected
@@ -214,16 +214,16 @@ public class OptInTemplateClassResolverTest extends 
TestCase {
                     .build();
             TemplateClassResolver res = cfg.getNewBuiltinClassResolver();
             assertEquals(String.class, res.resolve("java.lang.String", null,
-                    Template.createPlainTextTemplate("x.ftl", "", cfg)));
+                    Template.createPlainTextTemplate("x.f3ah", "", cfg)));
             try {
                 res.resolve("java.lang.Long", null,
-                        Template.createPlainTextTemplate("x.ftl", "", cfg));
+                        Template.createPlainTextTemplate("x.f3ah", "", cfg));
                 fail();
             } catch (TemplateException e) {
                 // Expected
             }
             assertEquals(Long.class, res.resolve("java.lang.Long", null,
-                    Template.createPlainTextTemplate("lib:bar.ftl", "", cfg)));
+                    Template.createPlainTextTemplate("lib:bar.f3ah", "", 
cfg)));
         }
     }
     

http://git-wip-us.apache.org/repos/asf/freemarker/blob/7a3c4817/freemarker-core-test/src/test/java/org/apache/freemarker/core/OutputFormatTest.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/OutputFormatTest.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/OutputFormatTest.java
index 9f1c7d3..8ce2396 100644
--- 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/OutputFormatTest.java
+++ 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/OutputFormatTest.java
@@ -176,7 +176,7 @@ public class OutputFormatTest extends TemplateTest {
     public void testStandardFileExtensionsSettingOverriding() throws Exception 
{
         addTemplate("t.f3ax",
                 "${\"'\"} ${\"'\"?esc} ${\"'\"?noEsc}");
-        addTemplate("t.ftl",
+        addTemplate("t.f3ah",
                 "${'{}'} ${'{}'?esc} ${'{}'?noEsc}");
         
         ConditionalTemplateConfigurationFactory tcfHTML = new 
ConditionalTemplateConfigurationFactory(
@@ -231,8 +231,8 @@ public class OutputFormatTest extends TemplateTest {
     public void testStandardFileExtensionsWithConstructor() throws Exception {
         Configuration cfg = getConfiguration();
         String commonFTL = "${'\\''}";
-        {
-            Template t = new Template("foo.ftl", commonFTL, cfg);
+        for (String ext : new String[] { "f3au", "f3ac" } ){
+            Template t = new Template("foo." + ext, commonFTL, cfg);
             assertSame(UndefinedOutputFormat.INSTANCE, t.getOutputFormat());
             StringWriter out = new StringWriter();
             t.process(null, out);
@@ -533,15 +533,16 @@ public class OutputFormatTest extends TemplateTest {
         addTemplate("t.f3ah", commonFTL);
         assertOutputForNamed("t.f3ah", "HTML true");
 
-        addTemplate("t.ftl", commonFTL);
-        assertOutputForNamed("t.ftl", "undefined false");
+        addTemplate("t.f3au", commonFTL);
+        assertOutputForNamed("t.f3au", "undefined false");
         
-        addTemplate("tX.ftl", "<#ftl outputFormat='XML'>" + commonFTL);
+        addTemplate("tX.f3ah", "<#ftl outputFormat='XML'>" + commonFTL);
+        assertOutputForNamed("tX.f3ah", "XML true");
         addTemplate("tX.f3ax", commonFTL);
         assertOutputForNamed("t.f3ax", "XML true");
         
-        addTemplate("tN.ftl", "<#ftl outputFormat='RTF' autoEsc=false>" + 
commonFTL);
-        assertOutputForNamed("tN.ftl", "RTF false");
+        addTemplate("tN.f3ac", "<#ftl outputFormat='RTF' autoEsc=false>" + 
commonFTL);
+        assertOutputForNamed("tN.f3ac", "RTF false");
         
         assertOutput("${.outputFormat} ${.autoEsc?c}", "undefined false");
     }
@@ -551,10 +552,10 @@ public class OutputFormatTest extends TemplateTest {
         String commonFTL = "${'<x>'} ${'<x>'?esc} ${'<x>'?noEsc}";
         addTemplate("t.f3ah", commonFTL);
         addTemplate("t-noAuto.f3ah", "<#ftl autoEsc=false>" + commonFTL);
-        addTemplate("t.ftl", commonFTL);
+        addTemplate("t.f3au", commonFTL);
         assertOutputForNamed("t.f3ah", "&lt;x&gt; &lt;x&gt; <x>");
         assertOutputForNamed("t-noAuto.f3ah", "<x> &lt;x&gt; <x>");
-        assertErrorContainsForNamed("t.ftl", "output format", "undefined");
+        assertErrorContainsForNamed("t.f3au", "output format", "undefined");
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/freemarker/blob/7a3c4817/freemarker-core-test/src/test/java/org/apache/freemarker/core/TemplateCallableModelTest.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/TemplateCallableModelTest.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/TemplateCallableModelTest.java
index ec7b225..a1e684d 100644
--- 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/TemplateCallableModelTest.java
+++ 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/TemplateCallableModelTest.java
@@ -247,8 +247,8 @@ public class TemplateCallableModelTest extends TemplateTest 
{
         assertErrorContains("<#function myF(p1)></#function>${myF()}", 
"function", "\"myF\"", "1st", "null");
         assertErrorContains("${'x'?leftPad(1, 2)}", "?leftPad", "2nd", 
"string", "number");
         assertErrorContains("${'x'?leftPad(null)}", "?leftPad", "1st", "null");
-        addTemplate("foo.ftl", "<#macro m n1></#macro>");
-        assertErrorContains("<#import 'foo.ftl' as f><@f.m/>", "macro", 
"\"foo.ftl:m\"");
+        addTemplate("foo.f3ah", "<#macro m n1></#macro>");
+        assertErrorContains("<#import 'foo.f3ah' as f><@f.m/>", "macro", 
"\"foo.f3ah:m\"");
         assertErrorContains("<#function myF(p1)></#function><#assign f2 = 
myF>${f2()}", "\"myF\"");
         addToDataModel("bean", new TestBean());
         assertErrorContains("${bean.intMP()}", "method", 
"org.apache.freemarker.test.TemplateTest$TestBean.intMP");
@@ -316,11 +316,11 @@ public class TemplateCallableModelTest extends 
TemplateTest {
         // Default expression sees previous argument:
         assertOutput("<#macro m a{positional} b=a>${a}${b}</#macro><@m 1/> <@m 
2 b=3/>", "11 23");
 
-        addTemplate("lib.ftl", ""
+        addTemplate("lib.f3ah", ""
                 + "<#assign defaultA=1>"
                 + "<#assign b=2>"
                 + "<#macro m a=defaultA>${a} ${b}[<#nested>]${b} 
${a}</#macro>");
-        assertOutput("<#import 'lib.ftl' as lib>"
+        assertOutput("<#import 'lib.f3ah' as lib>"
                 + "<#assign a='a'>"
                 + "<#assign b='b'>"
                 + "<@lib.m>${a}${b}</@> "

Reply via email to