http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/7d784b2b/src/test/java/org/apache/freemarker/core/ast/HeaderParsingTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/freemarker/core/ast/HeaderParsingTest.java 
b/src/test/java/org/apache/freemarker/core/ast/HeaderParsingTest.java
deleted file mode 100644
index 5cb4e79..0000000
--- a/src/test/java/org/apache/freemarker/core/ast/HeaderParsingTest.java
+++ /dev/null
@@ -1,64 +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.ast;
-
-import java.io.IOException;
-
-import org.apache.freemarker.core.Configuration;
-import org.apache.freemarker.core.TemplateException;
-import org.apache.freemarker.test.TemplateTest;
-import org.junit.Test;
-
-public class HeaderParsingTest extends TemplateTest {
-
-    private final Configuration cfgStripWS = new 
Configuration(Configuration.VERSION_3_0_0);
-    private final Configuration cfgNoStripWS = new 
Configuration(Configuration.VERSION_3_0_0);
-    {
-        cfgNoStripWS.setWhitespaceStripping(false);
-    }
-    
-    @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/7d784b2b/src/test/java/org/apache/freemarker/core/ast/HexTemplateNumberFormatFactory.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/freemarker/core/ast/HexTemplateNumberFormatFactory.java
 
b/src/test/java/org/apache/freemarker/core/ast/HexTemplateNumberFormatFactory.java
deleted file mode 100644
index 9ae2fe0..0000000
--- 
a/src/test/java/org/apache/freemarker/core/ast/HexTemplateNumberFormatFactory.java
+++ /dev/null
@@ -1,77 +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.ast;
-
-import java.util.Locale;
-
-import org.apache.freemarker.core.ast.Environment;
-import org.apache.freemarker.core.ast.InvalidFormatParametersException;
-import org.apache.freemarker.core.ast.TemplateFormatUtil;
-import org.apache.freemarker.core.ast.TemplateNumberFormat;
-import org.apache.freemarker.core.ast.TemplateNumberFormatFactory;
-import org.apache.freemarker.core.ast.UnformattableValueException;
-import org.apache.freemarker.core.model.TemplateModelException;
-import org.apache.freemarker.core.model.TemplateNumberModel;
-import org.apache.freemarker.core.util._NumberUtil;
-
-public class HexTemplateNumberFormatFactory extends 
TemplateNumberFormatFactory {
-
-    public static final HexTemplateNumberFormatFactory INSTANCE = new 
HexTemplateNumberFormatFactory();
-    
-    private HexTemplateNumberFormatFactory() {
-        // Defined to decrease visibility
-    }
-    
-    @Override
-    public TemplateNumberFormat get(String params, Locale locale, Environment 
env)
-            throws InvalidFormatParametersException {
-        TemplateFormatUtil.checkHasNoParameters(params);
-        return HexTemplateNumberFormat.INSTANCE;
-    }
-
-    private static class HexTemplateNumberFormat extends TemplateNumberFormat {
-
-        private static final HexTemplateNumberFormat INSTANCE = new 
HexTemplateNumberFormat();
-        
-        private HexTemplateNumberFormat() { }
-        
-        @Override
-        public String formatToPlainText(TemplateNumberModel numberModel)
-                throws UnformattableValueException, TemplateModelException {
-            Number n = TemplateFormatUtil.getNonNullNumber(numberModel);
-            try {
-                return Integer.toHexString(_NumberUtil.toIntExact(n));
-            } catch (ArithmeticException e) {
-                throw new UnformattableValueException(n + " doesn't fit into 
an int");
-            }
-        }
-
-        @Override
-        public boolean isLocaleBound() {
-            return false;
-        }
-
-        @Override
-        public String getDescription() {
-            return "hexadecimal int";
-        }
-        
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/7d784b2b/src/test/java/org/apache/freemarker/core/ast/IncludeAndImportConfigurableLayersTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/freemarker/core/ast/IncludeAndImportConfigurableLayersTest.java
 
b/src/test/java/org/apache/freemarker/core/ast/IncludeAndImportConfigurableLayersTest.java
deleted file mode 100644
index b194ac8..0000000
--- 
a/src/test/java/org/apache/freemarker/core/ast/IncludeAndImportConfigurableLayersTest.java
+++ /dev/null
@@ -1,333 +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.ast;
-
-import static org.junit.Assert.assertEquals;
-
-import java.io.StringWriter;
-
-import org.apache.freemarker.core.Configuration;
-import org.apache.freemarker.core.Template;
-import 
org.apache.freemarker.core.templateresolver.ConditionalTemplateConfigurationFactory;
-import org.apache.freemarker.core.templateresolver.FileNameGlobMatcher;
-import org.apache.freemarker.test.TemplateTest;
-import org.junit.Test;
-
-public class IncludeAndImportConfigurableLayersTest extends TemplateTest {
-
-    @Test
-    public void test3LayerImportNoClashes() throws Exception {
-        Configuration cfg = getConfiguration();
-        cfg.addAutoImport("t1", "t1.ftl");
-
-        TemplateConfiguration tc = new TemplateConfiguration();
-        tc.addAutoImport("t2", "t2.ftl");
-        cfg.setTemplateConfigurations(
-                new ConditionalTemplateConfigurationFactory(new 
FileNameGlobMatcher("main.ftl"), tc));
-
-        {
-            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());
-        }
-        
-        cfg.removeAutoImport("t1");
-        
-        {
-            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 = getConfiguration();
-        cfg.addAutoImport("t1", "t1.ftl");
-        cfg.addAutoImport("t2", "t2.ftl");
-        cfg.addAutoImport("t3", "t3.ftl");
-
-        TemplateConfiguration tc = new TemplateConfiguration();
-        tc.addAutoImport("t2", "t2b.ftl");
-        cfg.setTemplateConfigurations(
-                new ConditionalTemplateConfigurationFactory(new 
FileNameGlobMatcher("main.ftl"), tc));
-
-        {
-            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 {
-        Configuration cfg = getConfiguration();
-        cfg.addAutoInclude("t1.ftl");
-
-        TemplateConfiguration tc = new TemplateConfiguration();
-        tc.addAutoInclude("t2.ftl");
-        cfg.setTemplateConfigurations(
-                new ConditionalTemplateConfigurationFactory(new 
FileNameGlobMatcher("main.ftl"), tc));
-
-        {
-            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());
-        }
-        
-        cfg.removeAutoInclude("t1.ftl");
-        
-        {
-            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 = getConfiguration();
-        cfg.addAutoInclude("t1.ftl");
-        cfg.addAutoInclude("t2.ftl");
-        cfg.addAutoInclude("t3.ftl");
-
-        TemplateConfiguration tc = new TemplateConfiguration();
-        tc.addAutoInclude("t2.ftl");
-        cfg.setTemplateConfigurations(
-                new ConditionalTemplateConfigurationFactory(new 
FileNameGlobMatcher("main.ftl"), tc));
-
-        {
-            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 = getConfiguration();
-        cfg.addAutoInclude("t1.ftl");
-        cfg.addAutoInclude("t1.ftl");
-
-        TemplateConfiguration tc = new TemplateConfiguration();
-        tc.addAutoInclude("t2.ftl");
-        tc.addAutoInclude("t2.ftl");
-        cfg.setTemplateConfigurations(
-                new ConditionalTemplateConfigurationFactory(new 
FileNameGlobMatcher("main.ftl"), tc));
-
-        {
-            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 test3LayerLazyness() throws Exception {
-        for (Class<?> layer : new Class<?>[] { Configuration.class, 
Template.class, Environment.class }) {
-            test3LayerLazyness(layer, null, null, false, "t1;t2;");
-            test3LayerLazyness(layer, null, null, true, "t1;t2;");
-            test3LayerLazyness(layer, null, false, true, "t1;t2;");
-            test3LayerLazyness(layer, null, true, true, "t2;");
-            
-            test3LayerLazyness(layer, false, null, false, "t1;t2;");
-            test3LayerLazyness(layer, false, null, true, "t1;t2;");
-            test3LayerLazyness(layer, false, false, true, "t1;t2;");
-            test3LayerLazyness(layer, false, true, true, "t2;");
-
-            test3LayerLazyness(layer, true, null, false, "");
-            test3LayerLazyness(layer, true, null, true, "");
-            test3LayerLazyness(layer, true, false, true, "t1;");
-            test3LayerLazyness(layer, true, true, true, "");
-        }
-    }
-    
-    private void test3LayerLazyness(
-            Class<?> layer,
-            Boolean lazyImports,
-            Boolean lazyAutoImports, boolean setLazyAutoImports,
-            String expectedOutput)
-            throws Exception {
-        dropConfiguration();
-        Configuration cfg = getConfiguration();
-        cfg.addAutoImport("t1", "t1.ftl");
-        Template t = new Template(null, "<#import 't2.ftl' as t2>${loaded!}", 
cfg);
-
-        StringWriter sw = new StringWriter();
-        Environment env = t.createProcessingEnvironment(null, sw);
-        
-        if (layer == Configuration.class) {
-            setLazynessOfConfigurable(cfg, lazyImports, lazyAutoImports, 
setLazyAutoImports);
-        } else if (layer == Template.class) {
-            setLazynessOfConfigurable(t, lazyImports, lazyAutoImports, 
setLazyAutoImports);
-        } else if (layer == Environment.class) {
-            setLazynessOfConfigurable(env, lazyImports, lazyAutoImports, 
setLazyAutoImports);
-        } else {
-            throw new IllegalArgumentException();
-        }
-        
-        env.process();
-        assertEquals(expectedOutput, sw.toString());
-    }
-
-    private void setLazynessOfConfigurable(Configurable cfg, Boolean 
lazyImports, Boolean lazyAutoImports,
-            boolean setLazyAutoImports) {
-        if (lazyImports != null) {
-            cfg.setLazyImports(lazyImports);
-        }
-        if (setLazyAutoImports) {
-            cfg.setLazyAutoImports(lazyAutoImports);
-        }
-    }
-    
-    @Override
-    protected Configuration createConfiguration() throws Exception {
-        return new Configuration(Configuration.VERSION_3_0_0);
-    }
-
-    @Override
-    protected void addCommonTemplates() {
-        addTemplate("main.ftl", "In main: ${loaded}");
-        addTemplate("main2.ftl", "In main2: ${loaded}");
-        addTemplate("t1.ftl", "<#global loaded = (loaded!) + 't1;'>T1;");
-        addTemplate("t2.ftl", "<#global loaded = (loaded!) + 't2;'>T2;");
-        addTemplate("t3.ftl", "<#global loaded = (loaded!) + 't3;'>T3;");
-        addTemplate("t1b.ftl", "<#global loaded = (loaded!) + 't1b;'>T1b;");
-        addTemplate("t2b.ftl", "<#global loaded = (loaded!) + 't2b;'>T2b;");
-        addTemplate("t3b.ftl", "<#global loaded = (loaded!) + 't3b;'>T3b;");
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/7d784b2b/src/test/java/org/apache/freemarker/core/ast/IncludeAndImportTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/freemarker/core/ast/IncludeAndImportTest.java 
b/src/test/java/org/apache/freemarker/core/ast/IncludeAndImportTest.java
deleted file mode 100644
index dc3e266..0000000
--- a/src/test/java/org/apache/freemarker/core/ast/IncludeAndImportTest.java
+++ /dev/null
@@ -1,254 +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.ast;
-
-import static org.hamcrest.Matchers.allOf;
-import static org.hamcrest.Matchers.containsString;
-import static org.hamcrest.Matchers.instanceOf;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.fail;
-
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-
-import org.apache.freemarker.core.Configuration;
-import org.apache.freemarker.core.TemplateException;
-import org.apache.freemarker.core.TemplateNotFoundException;
-import org.apache.freemarker.core.ast.Environment.LazilyInitializedNamespace;
-import org.apache.freemarker.core.ast.Environment.Namespace;
-import org.apache.freemarker.core.model.WrappingTemplateModel;
-import org.apache.freemarker.test.TemplateTest;
-import org.junit.Before;
-import org.junit.Test;
-
-@SuppressWarnings("boxing")
-public class IncludeAndImportTest extends TemplateTest {
-
-    @Before
-    public void setup() {
-        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 create 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 {
-        getConfiguration().addAutoInclude("inc1.ftl");
-        getConfiguration().addAutoInclude("inc2.ftl");
-        getConfiguration().addAutoImport("lib1", "lib1.ftl");
-        getConfiguration().addAutoImport("lib2", "lib2CallsLib1.ftl");
-        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");
-        
-        getConfiguration().setLazyImports(true);
-        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 {
-        getConfiguration().setLazyImports(true);
-        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 
{
-        Configuration cfg = getConfiguration();
-        cfg.addAutoImport("l1", "lib1.ftl");
-        cfg.addAutoImport("l2", "lib2.ftl");
-        cfg.addAutoImport("l3", "lib3.ftl");
-        
-        String ftl = "<@l2.m/>, <@l1.m/>; ${history}";
-        String expectedEagerOutput = "In lib2, In lib1; L1L2L3";
-        String expecedLazyOutput = "In lib2, In lib1; L2L1";
-        
-        assertOutput(ftl, expectedEagerOutput);
-        cfg.setLazyImports(true);
-        assertOutput(ftl, expecedLazyOutput);
-        cfg.setLazyImports(false);
-        assertOutput(ftl, expectedEagerOutput);
-        cfg.setLazyAutoImports(true);
-        assertOutput(ftl, expecedLazyOutput);
-        cfg.setLazyAutoImports(null);
-        assertOutput(ftl, expectedEagerOutput);
-        cfg.setLazyImports(true);
-        cfg.setLazyAutoImports(false);
-        assertOutput(ftl, expectedEagerOutput);
-    }
-    
-    @Test
-    public void lazyAutoImportMixedWithManualImport() throws IOException, 
TemplateException {
-        Configuration cfg = getConfiguration();
-        cfg.addAutoImport("l1", "lib1.ftl");
-        cfg.addAutoImport("l2", "/./lib2.ftl");
-        cfg.addAutoImport("l3", "lib3.ftl");
-        cfg.setLazyAutoImports(true);
-
-        String ftl = "<@l2.m/>, <@l1.m/>; ${history}";
-        String expectOutputWithoutHistory = "In lib2, In lib1; ";
-        String expecedOutput = expectOutputWithoutHistory + "L2L1";
-        
-        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");
-        cfg.setLazyImports(true);
-        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 {
-        Configuration cfg = getConfiguration();
-        cfg.setLazyImports(true);
-        
-        assertOutput("<#import 'noSuchTemplate.ftl' as wrong>x", "x");
-        
-        cfg.addAutoImport("wrong", "noSuchTemplate.ftl");
-        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/7d784b2b/src/test/java/org/apache/freemarker/core/ast/InterpretAndEvalTemplateNameTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/freemarker/core/ast/InterpretAndEvalTemplateNameTest.java
 
b/src/test/java/org/apache/freemarker/core/ast/InterpretAndEvalTemplateNameTest.java
deleted file mode 100644
index 2579d60..0000000
--- 
a/src/test/java/org/apache/freemarker/core/ast/InterpretAndEvalTemplateNameTest.java
+++ /dev/null
@@ -1,70 +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.ast;
-
-import java.io.IOException;
-
-import org.apache.freemarker.core.TemplateException;
-import org.apache.freemarker.core.templateresolver.impl.StringTemplateLoader;
-import org.apache.freemarker.test.TemplateTest;
-import org.junit.Test;
-
-/**
- * Test template names returned by special variables and relative path 
resolution in {@code ?interpret}-ed and
- * {@code ?eval}-ed parts.  
- */
-public class InterpretAndEvalTemplateNameTest extends TemplateTest {
-    
-    @Test
-    public void testInterpret() throws IOException, TemplateException {
-        for (String getTemplateNames : new String[] {
-                "c=${.current_template_name}, m=${.main_template_name}",
-                "c=${\".current_template_name\"?eval}, 
m=${\".main_template_name\"?eval}"
-                }) {
-            StringTemplateLoader tl = new StringTemplateLoader();
-            tl.putTemplate(
-                    "main.ftl",
-                    getTemplateNames + " "
-                    + "{<#include 'sub/t.ftl'>}");
-            tl.putTemplate(
-                    "sub/t.ftl",
-                    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");
-            
-            getConfiguration().setTemplateLoader(tl);
-            
-            assertOutputForNamed("main.ftl",
-                    "c=main.ftl, m=main.ftl "
-                    + "{"
-                        + "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}}"
-                    + "}");
-            
-            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}}");
-        }
-    }
-    
-}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/7d784b2b/src/test/java/org/apache/freemarker/core/ast/InterpretSettingInheritanceTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/freemarker/core/ast/InterpretSettingInheritanceTest.java
 
b/src/test/java/org/apache/freemarker/core/ast/InterpretSettingInheritanceTest.java
deleted file mode 100644
index 3834b53..0000000
--- 
a/src/test/java/org/apache/freemarker/core/ast/InterpretSettingInheritanceTest.java
+++ /dev/null
@@ -1,95 +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.ast;
-
-import java.io.IOException;
-
-import org.apache.freemarker.core.Configuration;
-import org.apache.freemarker.core.TemplateException;
-import org.apache.freemarker.test.TemplateTest;
-import org.junit.Test;
-
-/**
- * The {@code interpret} built-in must not consider the settings or 
established auto-detected syntax of the surrounding
- * template. It can only depend on the {@link Configuration}.
- */
-public class InterpretSettingInheritanceTest  extends TemplateTest {
-
-    private static final String FTL_A_S_A = "<#ftl><@'[#if true]s[/#if]<#if 
true>a</#if>'?interpret />";
-    private static final String FTL_A_A_S = "<#ftl><@'<#if true>a</#if>[#if 
true]s[/#if]'?interpret />";
-    private static final String FTL_S_S_A = "[#ftl][@'[#if true]s[/#if]<#if 
true>a</#if>'?interpret /]";
-    private static final String FTL_S_A_S = "[#ftl][@'<#if true>a</#if>[#if 
true]s[/#if]'?interpret /]";
-    private static final String OUT_S_A_WHEN_SYNTAX_IS_S = "s<#if 
true>a</#if>";
-    private static final String OUT_S_A_WHEN_SYNTAX_IS_A = "[#if 
true]s[/#if]a";
-    private static final String OUT_A_S_WHEN_SYNTAX_IS_A = "a[#if 
true]s[/#if]";
-    private static final String OUT_A_S_WHEN_SYNTAX_IS_S = "<#if 
true>a</#if>s";
-
-    @Test
-    public void tagSyntaxTest() throws IOException, TemplateException {
-        Configuration cfg = getConfiguration();
-        
-        cfg.setTagSyntax(Configuration.ANGLE_BRACKET_TAG_SYNTAX);
-        assertOutput(FTL_S_A_S, OUT_A_S_WHEN_SYNTAX_IS_A);
-        assertOutput(FTL_S_S_A, OUT_S_A_WHEN_SYNTAX_IS_A);
-        assertOutput(FTL_A_A_S, OUT_A_S_WHEN_SYNTAX_IS_A);
-        assertOutput(FTL_A_S_A, OUT_S_A_WHEN_SYNTAX_IS_A);
-        
-        cfg.setTagSyntax(Configuration.SQUARE_BRACKET_TAG_SYNTAX);
-        assertOutput(FTL_S_A_S, OUT_A_S_WHEN_SYNTAX_IS_S);
-        assertOutput(FTL_S_S_A, OUT_S_A_WHEN_SYNTAX_IS_S);
-        assertOutput(FTL_A_A_S, OUT_A_S_WHEN_SYNTAX_IS_S);
-        assertOutput(FTL_A_S_A, OUT_S_A_WHEN_SYNTAX_IS_S);
-        
-        cfg.setTagSyntax(Configuration.AUTO_DETECT_TAG_SYNTAX);
-        assertOutput(FTL_S_A_S, OUT_A_S_WHEN_SYNTAX_IS_A);
-        assertOutput(FTL_S_S_A, OUT_S_A_WHEN_SYNTAX_IS_S);
-        assertOutput(FTL_A_A_S, OUT_A_S_WHEN_SYNTAX_IS_A);
-        assertOutput(FTL_A_S_A, OUT_S_A_WHEN_SYNTAX_IS_S);
-        assertOutput("<@'[#ftl]x'?interpret />[#if true]y[/#if]", "x[#if 
true]y[/#if]");
-    }
-
-    @Test
-    public void whitespaceStrippingTest() throws IOException, 
TemplateException {
-        Configuration cfg = getConfiguration();
-        
-        cfg.setWhitespaceStripping(true);
-        assertOutput("<#assign x = 1>\nX<@'<#assign x = 1>\\nY'?interpret />", 
"XY");
-        assertOutput("<#ftl stripWhitespace=false><#assign x = 
1>\nX<@'<#assign x = 1>\\nY'?interpret />", "\nXY");
-        assertOutput("<#assign x = 1>\nX<@'<#ftl 
stripWhitespace=false><#assign x = 1>\\nY'?interpret />", "X\nY");
-        
-        cfg.setWhitespaceStripping(false);
-        assertOutput("<#assign x = 1>\nX<@'<#assign x = 1>\\nY'?interpret />", 
"\nX\nY");
-        assertOutput("<#ftl stripWhitespace=true><#assign x = 1>\nX<@'<#assign 
x = 1>\\nY'?interpret />", "X\nY");
-        assertOutput("<#assign x = 1>\nX<@'<#ftl stripWhitespace=true><#assign 
x = 1>\\nY'?interpret />", "\nXY");
-    }
-
-    @Test
-    public void evalTest() throws IOException, TemplateException {
-        Configuration cfg = getConfiguration();
-        
-        cfg.setTagSyntax(Configuration.ANGLE_BRACKET_TAG_SYNTAX);
-        assertOutput("<@'\"[#if true]s[/#if]<#if 
true>a</#if>\"?interpret'?eval />", OUT_S_A_WHEN_SYNTAX_IS_A);
-        assertOutput("[#ftl][@'\"[#if true]s[/#if]<#if 
true>a</#if>\"?interpret'?eval /]", OUT_S_A_WHEN_SYNTAX_IS_A);
-        
-        cfg.setTagSyntax(Configuration.SQUARE_BRACKET_TAG_SYNTAX);
-        assertOutput("[@'\"[#if true]s[/#if]<#if 
true>a</#if>\"?interpret'?eval /]", OUT_S_A_WHEN_SYNTAX_IS_S);
-        assertOutput("<#ftl><@'\"[#if true]s[/#if]<#if 
true>a</#if>\"?interpret'?eval />", OUT_S_A_WHEN_SYNTAX_IS_S);
-    }
-    
-}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/7d784b2b/src/test/java/org/apache/freemarker/core/ast/IteratorIssuesTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/freemarker/core/ast/IteratorIssuesTest.java 
b/src/test/java/org/apache/freemarker/core/ast/IteratorIssuesTest.java
deleted file mode 100644
index 10b774f..0000000
--- a/src/test/java/org/apache/freemarker/core/ast/IteratorIssuesTest.java
+++ /dev/null
@@ -1,89 +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.ast;
-
-import java.util.Arrays;
-import java.util.Iterator;
-
-import org.apache.freemarker.core.Configuration;
-import org.apache.freemarker.core.model.impl.DefaultObjectWrapper;
-import org.apache.freemarker.core.model.impl.DefaultObjectWrapperBuilder;
-import org.apache.freemarker.core.model.impl.beans.BeansWrapper;
-import org.apache.freemarker.core.model.impl.beans.BeansWrapperBuilder;
-import org.apache.freemarker.test.TemplateTest;
-import org.junit.Test;
-
-public class IteratorIssuesTest extends TemplateTest {
-    
-    private static final String FTL_HAS_CONTENT_AND_LIST
-            = "<#if it?hasContent><#list it as 
i>${i}</#list><#else>empty</#if>";
-    private static final String OUT_HAS_CONTENT_AND_LIST_ABC = "abc";
-    private static final String OUT_HAS_CONTENT_AND_LIST_EMPTY = "empty";
-    
-    private static final String FTL_LIST_AND_HAS_CONTENT
-            = "<#list it as i>${i}${it?hasContent?then('+', '-')}</#list>";
-    private static final String OUT_LIST_AND_HAS_CONTENT_BW_GOOD = "a+b+c-";
-
-    @Test
-    public void testHasContentAndListDOW() throws Exception {
-        addToDataModel("it", getDOW300().wrap(getAbcIt()));
-        assertOutput(FTL_HAS_CONTENT_AND_LIST, OUT_HAS_CONTENT_AND_LIST_ABC);
-        
-        addToDataModel("it", getDOW300().wrap(getEmptyIt()));
-        assertOutput(FTL_HAS_CONTENT_AND_LIST, OUT_HAS_CONTENT_AND_LIST_EMPTY);
-    }
-
-    @Test
-    public void testHasContentAndListBW() throws Exception {
-        addToDataModel("it", getBW300().wrap(getAbcIt()));
-        assertOutput(FTL_HAS_CONTENT_AND_LIST, OUT_HAS_CONTENT_AND_LIST_ABC);
-        
-        addToDataModel("it", getBW300().wrap(getEmptyIt()));
-        assertOutput(FTL_HAS_CONTENT_AND_LIST, OUT_HAS_CONTENT_AND_LIST_EMPTY);
-    }
-    
-    @Test
-    public void testListAndHasContentDOW() throws Exception {
-        addToDataModel("it", getDOW300().wrap(getAbcIt()));
-        assertErrorContains(FTL_LIST_AND_HAS_CONTENT, "can be listed only 
once");
-    }
-
-    @Test
-    public void testListAndHasContentBW() throws Exception {
-        addToDataModel("it", getBW300().wrap(getAbcIt()));
-        assertOutput(FTL_LIST_AND_HAS_CONTENT, 
OUT_LIST_AND_HAS_CONTENT_BW_GOOD);
-    }
-    
-    private Iterator getAbcIt() {
-        return Arrays.asList(new String[] { "a", "b", "c" }).iterator();
-    }
-
-    private Iterator getEmptyIt() {
-        return Arrays.asList(new String[] {  }).iterator();
-    }
-    
-    private DefaultObjectWrapper getDOW300() {
-        return new 
DefaultObjectWrapperBuilder(Configuration.VERSION_3_0_0).build();
-    }
-
-    private BeansWrapper getBW300() {
-        return new BeansWrapperBuilder(Configuration.VERSION_3_0_0).build();
-    }
-    
-}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/7d784b2b/src/test/java/org/apache/freemarker/core/ast/ListErrorsTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/freemarker/core/ast/ListErrorsTest.java 
b/src/test/java/org/apache/freemarker/core/ast/ListErrorsTest.java
deleted file mode 100644
index 6f48f7c..0000000
--- a/src/test/java/org/apache/freemarker/core/ast/ListErrorsTest.java
+++ /dev/null
@@ -1,138 +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.ast;
-
-import java.io.IOException;
-
-import org.apache.freemarker.core.Configuration;
-import org.apache.freemarker.core.TemplateException;
-import org.apache.freemarker.core.model.impl.DefaultObjectWrapper;
-import org.apache.freemarker.test.TemplateTest;
-import org.apache.freemarker.test.templatesuite.models.Listables;
-import org.junit.Test;
-
-import com.google.common.collect.ImmutableMap;
-
-public class ListErrorsTest extends TemplateTest {
-    
-    @Test
-    public void testValid() throws IOException, TemplateException {
-        assertOutput("<#list 1..2 as x><#list 3..4>${x}:<#items as 
x>${x}</#items></#list>;</#list>", "1:34;2:34;");
-        assertOutput("<#list [] as x>${x}<#else><#list 1..2 as x>${x}<#sep>, 
</#list></#list>", "1, 2");
-        assertOutput("<#macro m>[<#nested 3>]</#macro>"
-                + "<#list 1..2 as x>"
-                + "${x}@${x?index}"
-                + "<@m ; x>"
-                + "${x},"
-                + "<#list 4..4 as x>${x}@${x?index}</#list>"
-                + "</@>"
-                + "${x}@${x?index}; "
-                + "</#list>",
-                "1@0[3,4@0]1@0; 2@1[3,4@0]2@1; ");
-    }
-
-    @Test
-    public void testInvalidItemsParseTime() throws IOException, 
TemplateException {
-        assertErrorContains("<#items as x>${x}</#items>",
-                "#items", "must be inside", "#list");
-        assertErrorContains("<#list xs><#macro m><#items as 
x></#items></#macro></#list>",
-                "#items", "must be inside", "#list");
-        assertErrorContains("<#list xs><#forEach x in xs><#items as 
x></#items></#forEach></#list>",
-                "#forEach", "doesn't support", "#items");
-        assertErrorContains("<#list xs as x><#items as 
x>${x}</#items></#list>",
-                "#list", "must not have", "#items", "as loopVar");
-        assertErrorContains("<#list xs><#list xs as x><#items as 
x>${x}</#items></#list></#list>",
-                "#list", "must not have", "#items", "as loopVar");
-        assertErrorContains("<#list xs></#list>",
-                "#list", "must have", "#items", "as loopVar");
-        assertErrorContains("<#forEach x in xs><#items as 
x></#items></#forEach>",
-                "#forEach", "doesn't support", "#items");
-        assertErrorContains("<#list xs><#forEach x in xs><#items as 
x></#items></#forEach></#list>",
-                "#forEach", "doesn't support", "#items");
-    }
-
-    @Test
-    public void testInvalidSepParseTime() throws IOException, 
TemplateException {
-        assertErrorContains("<#sep>, </#sep>",
-                "#sep", "must be inside", "#list", "#foreach");
-        assertErrorContains("<#sep>, ",
-                "#sep", "must be inside", "#list", "#foreach");
-        assertErrorContains("<#list xs as x><#else><#sep>, </#list>",
-                "#sep", "must be inside", "#list", "#foreach");
-        assertErrorContains("<#list xs as x><#macro m><#sep>, 
</#macro></#list>",
-                "#sep", "must be inside", "#list", "#foreach");
-    }
-
-    @Test
-    public void testInvalidItemsRuntime() throws IOException, 
TemplateException {
-        assertErrorContains("<#list 1..1><#items as x></#items><#items as 
x></#items></#list>",
-                "#items", "already entered earlier");
-        assertErrorContains("<#list 1..1><#items as x><#items as 
y>${x}/${y}</#items></#items></#list>",
-                "#items", "Can't nest #items into each other");
-    }
-    
-    @Test
-    public void testInvalidLoopVarBuiltinLHO() {
-        assertErrorContains("<#list foos>${foo?index}</#list>",
-                "?index", "foo", "no loop variable");
-        assertErrorContains("<#list foos as foo></#list>${foo?index}",
-                "?index", "foo" , "no loop variable");
-        assertErrorContains("<#list foos as foo><#macro 
m>${foo?index}</#macro></#list>",
-                "?index", "foo" , "no loop variable");
-        assertErrorContains("<#list foos as foo><#function 
f>${foo?index}</#function></#list>",
-                "?index", "foo" , "no loop variable");
-        assertErrorContains("<#list xs as x>${foo?index}</#list>",
-                "?index", "foo" , "no loop variable");
-        assertErrorContains("<#list foos as foo><@m; 
foo>${foo?index}</@></#list>",
-                "?index", "foo" , "user defined directive");
-        assertErrorContains(
-                "<#list foos as foo><@m; foo><@m; 
foo>${foo?index}</@></@></#list>",
-                "?index", "foo" , "user defined directive");
-        assertErrorContains(
-                "<#list foos as foo><@m; foo>"
-                + "<#list foos as foo><@m; foo>${foo?index}</@></#list>"
-                + "</@></#list>",
-                "?index", "foo" , "user defined directive");
-    }
-
-    @Test
-    public void testKeyValueSameName() {
-        assertErrorContains("<#list {} as foo, foo></#list>",
-                "key", "value", "both" , "foo");
-    }
-
-    @Test
-    public void testCollectionVersusHash() {
-        assertErrorContains("<#list {} as i></#list>",
-                "as k, v");
-        assertErrorContains("<#list [] as k, v></#list>",
-                "only one loop variable");
-    }
-
-    @Test
-    public void testNonEx2NonStringKey() throws IOException, TemplateException 
{
-        addToDataModel("m", new 
Listables.NonEx2MapAdapter(ImmutableMap.of("k1", "v1", 2, "v2"),
-                new DefaultObjectWrapper(Configuration.VERSION_3_0_0)));
-        assertOutput("<#list m?keys as k>${k};</#list>", "k1;2;");
-        assertErrorContains("<#list m as k, v></#list>",
-                "string", "number", ".TemplateHashModelEx2");
-    }
-    
-}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/7d784b2b/src/test/java/org/apache/freemarker/core/ast/LocAndTZSensitiveTemplateDateFormatFactory.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/freemarker/core/ast/LocAndTZSensitiveTemplateDateFormatFactory.java
 
b/src/test/java/org/apache/freemarker/core/ast/LocAndTZSensitiveTemplateDateFormatFactory.java
deleted file mode 100644
index f7ea2e9..0000000
--- 
a/src/test/java/org/apache/freemarker/core/ast/LocAndTZSensitiveTemplateDateFormatFactory.java
+++ /dev/null
@@ -1,97 +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.ast;
-
-import java.util.Date;
-import java.util.Locale;
-import java.util.TimeZone;
-
-import org.apache.freemarker.core.ast.Environment;
-import org.apache.freemarker.core.ast.InvalidFormatParametersException;
-import org.apache.freemarker.core.ast.TemplateDateFormat;
-import org.apache.freemarker.core.ast.TemplateDateFormatFactory;
-import org.apache.freemarker.core.ast.TemplateFormatUtil;
-import org.apache.freemarker.core.ast.UnformattableValueException;
-import 
org.apache.freemarker.core.ast.UnknownDateTypeFormattingUnsupportedException;
-import org.apache.freemarker.core.ast.UnparsableValueException;
-import org.apache.freemarker.core.model.TemplateDateModel;
-import org.apache.freemarker.core.model.TemplateModelException;
-
-public class LocAndTZSensitiveTemplateDateFormatFactory extends 
TemplateDateFormatFactory {
-
-    public static final LocAndTZSensitiveTemplateDateFormatFactory INSTANCE = 
new LocAndTZSensitiveTemplateDateFormatFactory();
-    
-    private LocAndTZSensitiveTemplateDateFormatFactory() {
-        // Defined to decrease visibility
-    }
-    
-    @Override
-    public TemplateDateFormat get(String params, int dateType, Locale locale, 
TimeZone timeZone, boolean zonelessInput,
-            Environment env) throws 
UnknownDateTypeFormattingUnsupportedException, InvalidFormatParametersException 
{
-        TemplateFormatUtil.checkHasNoParameters(params);
-        return new LocAndTZSensitiveTemplateDateFormat(locale, timeZone);
-    }
-
-    private static class LocAndTZSensitiveTemplateDateFormat extends 
TemplateDateFormat {
-
-        private final Locale locale;
-        private final TimeZone timeZone;
-        
-        public LocAndTZSensitiveTemplateDateFormat(Locale locale, TimeZone 
timeZone) {
-            this.locale = locale;
-            this.timeZone = timeZone;
-        }
-
-        @Override
-        public String formatToPlainText(TemplateDateModel dateModel)
-                throws UnformattableValueException, TemplateModelException {
-            return 
String.valueOf(TemplateFormatUtil.getNonNullDate(dateModel).getTime() + "@" + 
locale + ":" + timeZone.getID());
-        }
-
-        @Override
-        public boolean isLocaleBound() {
-            return true;
-        }
-
-        @Override
-        public boolean isTimeZoneBound() {
-            return true;
-        }
-
-        @Override
-        public Date parse(String s, int dateType) throws 
UnparsableValueException {
-            try {
-                int atIdx = s.indexOf("@");
-                if (atIdx == -1) {
-                    throw new UnparsableValueException("Missing @");
-                }
-                return new Date(Long.parseLong(s.substring(0, atIdx)));
-            } catch (NumberFormatException e) {
-                throw new UnparsableValueException("Malformed long");
-            }
-        }
-
-        @Override
-        public String getDescription() {
-            return "millis since the epoch";
-        }
-        
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/7d784b2b/src/test/java/org/apache/freemarker/core/ast/LocaleSensitiveTemplateNumberFormatFactory.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/freemarker/core/ast/LocaleSensitiveTemplateNumberFormatFactory.java
 
b/src/test/java/org/apache/freemarker/core/ast/LocaleSensitiveTemplateNumberFormatFactory.java
deleted file mode 100644
index 6524919..0000000
--- 
a/src/test/java/org/apache/freemarker/core/ast/LocaleSensitiveTemplateNumberFormatFactory.java
+++ /dev/null
@@ -1,78 +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.ast;
-
-import java.util.Locale;
-
-import org.apache.freemarker.core.ast.Environment;
-import org.apache.freemarker.core.ast.InvalidFormatParametersException;
-import org.apache.freemarker.core.ast.TemplateFormatUtil;
-import org.apache.freemarker.core.ast.TemplateNumberFormat;
-import org.apache.freemarker.core.ast.TemplateNumberFormatFactory;
-import org.apache.freemarker.core.ast.UnformattableValueException;
-import org.apache.freemarker.core.model.TemplateModelException;
-import org.apache.freemarker.core.model.TemplateNumberModel;
-
-public class LocaleSensitiveTemplateNumberFormatFactory extends 
TemplateNumberFormatFactory {
-
-    public static final LocaleSensitiveTemplateNumberFormatFactory INSTANCE = 
new LocaleSensitiveTemplateNumberFormatFactory();
-    
-    private LocaleSensitiveTemplateNumberFormatFactory() {
-        // Defined to decrease visibility
-    }
-    
-    @Override
-    public TemplateNumberFormat get(String params, Locale locale, Environment 
env)
-            throws InvalidFormatParametersException {
-        TemplateFormatUtil.checkHasNoParameters(params);
-        return new LocaleSensitiveTemplateNumberFormat(locale);
-    }
-
-    private static class LocaleSensitiveTemplateNumberFormat extends 
TemplateNumberFormat {
-    
-        private final Locale locale;
-        
-        private LocaleSensitiveTemplateNumberFormat(Locale locale) {
-            this.locale = locale;
-        }
-        
-        @Override
-        public String formatToPlainText(TemplateNumberModel numberModel)
-                throws UnformattableValueException, TemplateModelException {
-            Number n = numberModel.getAsNumber();
-            try {
-                return n + "_" + locale;
-            } catch (ArithmeticException e) {
-                throw new UnformattableValueException(n + " doesn't fit into 
an int");
-            }
-        }
-    
-        @Override
-        public boolean isLocaleBound() {
-            return true;
-        }
-    
-        @Override
-        public String getDescription() {
-            return "test locale sensitive";
-        }
-        
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/7d784b2b/src/test/java/org/apache/freemarker/core/ast/MiscErrorMessagesTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/freemarker/core/ast/MiscErrorMessagesTest.java 
b/src/test/java/org/apache/freemarker/core/ast/MiscErrorMessagesTest.java
deleted file mode 100644
index 368c717..0000000
--- a/src/test/java/org/apache/freemarker/core/ast/MiscErrorMessagesTest.java
+++ /dev/null
@@ -1,47 +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.ast;
-
-import 
org.apache.freemarker.core.templateresolver.impl.DefaultTemplateNameFormat;
-import org.apache.freemarker.test.TemplateTest;
-import org.junit.Test;
-
-public class MiscErrorMessagesTest extends TemplateTest {
-
-    @Test
-    public void stringIndexOutOfBounds() {
-        assertErrorContains("${'foo'[10]}", "length", "3", "10", "String index 
out of");
-    }
-    
-    @Test
-    public void wrongTemplateNameFormat() {
-        
getConfiguration().setTemplateNameFormat(DefaultTemplateNameFormat.INSTANCE);
-        
-        assertErrorContains("<#include 'foo:/bar:baaz'>", "Malformed template 
name", "':'");
-        assertErrorContains("<#include '../baaz'>", "Malformed template name", 
"root");
-        assertErrorContains("<#include '\u0000'>", "Malformed template name", 
"\\u0000");
-    }
-
-    @Test
-    public void numericalKeyHint() {
-        assertErrorContains("${{}[10]}", "[]", "?api");
-    }
-    
-}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/7d784b2b/src/test/java/org/apache/freemarker/core/ast/NumberFormatTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/freemarker/core/ast/NumberFormatTest.java 
b/src/test/java/org/apache/freemarker/core/ast/NumberFormatTest.java
deleted file mode 100644
index 12da0cd..0000000
--- a/src/test/java/org/apache/freemarker/core/ast/NumberFormatTest.java
+++ /dev/null
@@ -1,320 +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.ast;
-
-import static org.hamcrest.Matchers.instanceOf;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertThat;
-
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.Collections;
-import java.util.Locale;
-import java.util.Map;
-
-import org.apache.freemarker.core.Configuration;
-import org.apache.freemarker.core.Template;
-import org.apache.freemarker.core.TemplateException;
-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.TemplateNumberModel;
-import org.apache.freemarker.core.model.impl.SimpleNumber;
-import 
org.apache.freemarker.core.templateresolver.ConditionalTemplateConfigurationFactory;
-import org.apache.freemarker.core.templateresolver.FileNameGlobMatcher;
-import org.apache.freemarker.test.TemplateTest;
-import org.junit.Before;
-import org.junit.Test;
-
-import com.google.common.collect.ImmutableMap;
-
-@SuppressWarnings("boxing")
-public class NumberFormatTest extends TemplateTest {
-    
-    @Before
-    public void setup() {
-        Configuration cfg = getConfiguration();
-        cfg.setLocale(Locale.US);
-        
-        cfg.setCustomNumberFormats(ImmutableMap.of(
-                "hex", HexTemplateNumberFormatFactory.INSTANCE,
-                "loc", LocaleSensitiveTemplateNumberFormatFactory.INSTANCE,
-                "base", BaseNTemplateNumberFormatFactory.INSTANCE,
-                "printfG", PrintfGTemplateNumberFormatFactory.INSTANCE));
-    }
-
-    @Test
-    public void testUnknownCustomFormat() throws Exception {
-        {
-            getConfiguration().setNumberFormat("@noSuchFormat");
-            Throwable exc = assertErrorContains("${1}", "\"@noSuchFormat\"", 
"\"noSuchFormat\"");
-            assertThat(exc.getCause(), 
instanceOf(UndefinedCustomFormatException.class));
-        }
-
-        {
-            getConfiguration().setNumberFormat("number");
-            Throwable exc = 
assertErrorContains("${1?string('@noSuchFormat2')}",
-                    "\"@noSuchFormat2\"", "\"noSuchFormat2\"");
-            assertThat(exc.getCause(), 
instanceOf(UndefinedCustomFormatException.class));
-        }
-    }
-    
-    @Test
-    public void testStringBI() throws Exception {
-        assertOutput("${11} ${11?string.@hex} ${12} ${12?string.@hex}", "11 b 
12 c");
-    }
-
-    @Test
-    public void testSetting() throws Exception {
-        getConfiguration().setNumberFormat("@hex");
-        assertOutput("${11?string.number} ${11} ${12?string.number} ${12}", 
"11 b 12 c");
-    }
-
-    @Test
-    public void testSetting2() throws Exception {
-        assertOutput(
-                "<#setting numberFormat='@hex'>${11?string.number} ${11} 
${12?string.number} ${12} ${13?string}"
-                + "<#setting numberFormat='@loc'>${11?string.number} ${11} 
${12?string.number} ${12} ${13?string}",
-                "11 b 12 c d"
-                + "11 11_en_US 12 12_en_US 13_en_US");
-    }
-    
-    @Test
-    public void testUnformattableNumber() throws Exception {
-        getConfiguration().setNumberFormat("@hex");
-        assertErrorContains("${1.1}", "hexadecimal int", "doesn't fit into an 
int");
-    }
-
-    @Test
-    public void testLocaleSensitive() throws Exception {
-        Configuration cfg = getConfiguration();
-        cfg.setNumberFormat("@loc");
-        assertOutput("${1.1}", "1.1_en_US");
-        cfg.setLocale(Locale.GERMANY);
-        assertOutput("${1.1}", "1.1_de_DE");
-    }
-
-    @Test
-    public void testLocaleSensitive2() throws Exception {
-        Configuration cfg = getConfiguration();
-        cfg.setNumberFormat("@loc");
-        assertOutput("${1.1} <#setting locale='de_DE'>${1.1}", "1.1_en_US 
1.1_de_DE");
-    }
-
-    @Test
-    public void testCustomParameterized() throws Exception {
-        Configuration cfg = getConfiguration();
-        cfg.setNumberFormat("@base 2");
-        assertOutput("${11}", "1011");
-        assertOutput("${11?string}", "1011");
-        assertOutput("${11?string.@base_3}", "102");
-        
-        assertErrorContains("${11?string.@base_xyz}", "\"@base_xyz\"", 
"\"xyz\"");
-        cfg.setNumberFormat("@base");
-        assertErrorContains("${11}", "\"@base\"", "format parameter is 
required");
-    }
-
-    @Test
-    public void testCustomWithFallback() throws Exception {
-        Configuration cfg = getConfiguration();
-        cfg.setNumberFormat("@base 2|0.0#");
-        assertOutput("${11}", "1011");
-        assertOutput("${11.34}", "11.34");
-        assertOutput("${11?string('@base 3|0.00')}", "102");
-        assertOutput("${11.2?string('@base 3|0.00')}", "11.20");
-    }
-
-    @Test
-    public void testEnvironmentGetters() throws Exception {
-        Template t = new Template(null, "", getConfiguration());
-        Environment env = t.createProcessingEnvironment(null, null);
-        
-        TemplateNumberFormat defF = env.getTemplateNumberFormat();
-        //
-        TemplateNumberFormat explF = env.getTemplateNumberFormat("0.00");
-        assertEquals("1.25", explF.formatToPlainText(new SimpleNumber(1.25)));
-        //
-        TemplateNumberFormat expl2F = env.getTemplateNumberFormat("@loc");
-        assertEquals("1.25_en_US", expl2F.formatToPlainText(new 
SimpleNumber(1.25)));
-        
-        TemplateNumberFormat explFFr = env.getTemplateNumberFormat("0.00", 
Locale.FRANCE);
-        assertNotSame(explF, explFFr);
-        assertEquals("1,25", explFFr.formatToPlainText(new 
SimpleNumber(1.25)));
-        //
-        TemplateNumberFormat expl2FFr = env.getTemplateNumberFormat("@loc", 
Locale.FRANCE);
-        assertEquals("1.25_fr_FR", expl2FFr.formatToPlainText(new 
SimpleNumber(1.25)));
-        
-        assertSame(env.getTemplateNumberFormat(), defF);
-        //
-        assertSame(env.getTemplateNumberFormat("0.00"), explF);
-        //
-        assertSame(env.getTemplateNumberFormat("@loc"), expl2F);
-    }
-    
-    /**
-     * ?string formats lazily (at least in 2.3.x), so it must make a snapshot 
of the format inputs when it's called.
-     */
-    @Test
-    public void testStringBIDoesSnapshot() throws Exception {
-        // TemplateNumberModel-s shouldn't change, but we have to keep BC when 
that still happens.
-        final MutableTemplateNumberModel nm = new MutableTemplateNumberModel();
-        nm.setNumber(123);
-        addToDataModel("n", nm);
-        addToDataModel("incN", new TemplateDirectiveModel() {
-            
-            @Override
-            public void execute(Environment env, Map params, TemplateModel[] 
loopVars, TemplateDirectiveBody body)
-                    throws TemplateException, IOException {
-                nm.setNumber(nm.getAsNumber().intValue() + 1);
-            }
-        });
-        assertOutput(
-                "<#assign s1 = n?string>"
-                + "<#setting numberFormat='@loc'>"
-                + "<#assign s2 = n?string>"
-                + "<#setting numberFormat='@hex'>"
-                + "<#assign s3 = n?string>"
-                + "${s1} ${s2} ${s3}",
-                "123 123_en_US 7b");
-        assertOutput(
-                "<#assign s1 = n?string>"
-                + "<@incN />"
-                + "<#assign s2 = n?string>"
-                + "${s1} ${s2}",
-                "123 124");
-    }
-
-    @Test
-    public void testNullInModel() throws Exception {
-        addToDataModel("n", new MutableTemplateNumberModel());
-        assertErrorContains("${n}", "nothing inside it");
-        assertErrorContains("${n?string}", "nothing inside it");
-    }
-    
-    @Test
-    public void testAtPrefix() throws Exception {
-        Configuration cfg = getConfiguration();
-        
-        cfg.setNumberFormat("@hex");
-        assertOutput("${10}", "a");
-        cfg.setNumberFormat("'@'0");
-        assertOutput("${10}", "@10");
-        cfg.setNumberFormat("@@0");
-        assertOutput("${10}", "@@10");
-        
-        cfg.setCustomNumberFormats(Collections.<String, 
TemplateNumberFormatFactory>emptyMap());
-        cfg.setNumberFormat("@hex");
-        assertErrorContains("${10}", "custom", "\"hex\"");
-        cfg.setNumberFormat("'@'0");
-        assertOutput("${10}", "@10");
-        cfg.setNumberFormat("@@0");
-        assertOutput("${10}", "@@10");
-    }
-
-    @Test
-    public void testAlieses() throws Exception {
-        Configuration cfg = getConfiguration();
-        cfg.setCustomNumberFormats(ImmutableMap.of(
-                "f", new AliasTemplateNumberFormatFactory("0.#'f'"),
-                "d", new AliasTemplateNumberFormatFactory("0.0#"),
-                "hex", HexTemplateNumberFormatFactory.INSTANCE));
-        
-        TemplateConfiguration tc = new TemplateConfiguration();
-        tc.setCustomNumberFormats(ImmutableMap.of(
-                "d", new AliasTemplateNumberFormatFactory("0.#'d'"),
-                "i", new AliasTemplateNumberFormatFactory("@hex")));
-        cfg.setTemplateConfigurations(new 
ConditionalTemplateConfigurationFactory(new FileNameGlobMatcher("*2*"), tc));
-        
-        String commonFtl = "${1?string.@f} ${1?string.@d} "
-                + "<#setting locale='fr_FR'>${1.5?string.@d} "
-                + "<#attempt>${10?string.@i}<#recover>E</#attempt>";
-        addTemplate("t1.ftl", commonFtl);
-        addTemplate("t2.ftl", commonFtl);
-        
-        assertOutputForNamed("t1.ftl", "1f 1.0 1,5 E");
-        assertOutputForNamed("t2.ftl", "1f 1d 1,5d a");
-    }
-
-    @Test
-    public void testAlieses2() throws Exception {
-        Configuration cfg = getConfiguration();
-        cfg.setCustomNumberFormats(ImmutableMap.of(
-                "n", new AliasTemplateNumberFormatFactory("0.0",
-                        ImmutableMap.of(
-                                new Locale("en"), "0.0'_en'",
-                                Locale.UK, "0.0'_en_GB'",
-                                Locale.FRANCE, "0.0'_fr_FR'"))));
-        cfg.setNumberFormat("@n");
-        assertOutput(
-                "<#setting locale='en_US'>${1} "
-                + "<#setting locale='en_GB'>${1} "
-                + "<#setting locale='en_GB_Win'>${1} "
-                + "<#setting locale='fr_FR'>${1} "
-                + "<#setting locale='hu_HU'>${1}",
-                "1.0_en 1.0_en_GB 1.0_en_GB 1,0_fr_FR 1,0");
-    }
-    
-    @Test
-    public void testMarkupFormat() throws IOException, TemplateException {
-        getConfiguration().setNumberFormat("@printfG_3");
-
-        String commonFTL = "${1234567} ${'cat:' + 1234567} ${0.0000123}";
-        String commonOutput = "1.23*10<sup>6</sup> cat:1.23*10<sup>6</sup> 
1.23*10<sup>-5</sup>";
-        assertOutput(commonFTL, commonOutput);
-        assertOutput("<#ftl outputFormat='HTML'>" + commonFTL, commonOutput);
-        assertOutput("<#escape x as x?html>" + commonFTL + "</#escape>", 
commonOutput);
-        assertOutput("<#escape x as x?xhtml>" + commonFTL + "</#escape>", 
commonOutput);
-        assertOutput("<#escape x as x?xml>" + commonFTL + "</#escape>", 
commonOutput);
-        assertOutput("${\"" + commonFTL + "\"}", "1.23*10<sup>6</sup> 
cat:1.23*10<sup>6</sup> 1.23*10<sup>-5</sup>");
-        assertErrorContains("<#ftl outputFormat='plainText'>" + commonFTL, 
"HTML", "plainText", "conversion");
-    }
-
-    @Test
-    public void testPrintG() throws IOException, TemplateException {
-        for (Number n : new Number[] {
-                1234567, 1234567L, 1234567d, 1234567f, 
BigInteger.valueOf(1234567), BigDecimal.valueOf(1234567) }) {
-            addToDataModel("n", n);
-            
-            assertOutput("${n?string.@printfG}", "1.23457E+06");
-            assertOutput("${n?string.@printfG_3}", "1.23E+06");
-            assertOutput("${n?string.@printfG_7}", "1234567");
-            assertOutput("${0.0000123?string.@printfG}", "1.23000E-05");
-        }
-    }
-    
-    private static class MutableTemplateNumberModel implements 
TemplateNumberModel {
-        
-        private Number number;
-
-        public void setNumber(Number number) {
-            this.number = number;
-        }
-
-        @Override
-        public Number getAsNumber() throws TemplateModelException {
-            return number;
-        }
-        
-    }
-    
-}

Reply via email to