Split tests according to the new "modules". Also had to adjust FileTestCase.getTestClassDirectory() to work from Gradle when not passing the "freemarker.test.resourcesDir" system property (which is the case when executing say TemplateTestSuite.main).
diff --git a/build.gradle.kts b/build.gradle.kts
index 5c9905f..46fe258 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -36,6 +36,18 @@
     options.encoding = "UTF-8"
 }
 
+freemarkerRoot {
+    configureTestUtils("16")
+
+    configureSourceSet(SourceSet.MAIN_SOURCE_SET_NAME, "8") { enableTests() }
+    configureSourceSet("jsp20", "8")
+    configureSourceSet("jsp21", "8") { enableTests() }
+    configureSourceSet("jython20", "8")
+    configureSourceSet("jython22", "8")
+    configureSourceSet("jython25", "8") { enableTests() }
+    configureSourceSet("core16", "16")
+}
+
 val compileJavacc = tasks.register<freemarker.build.CompileJavaccTask>("compileJavacc") {
     sourceDirectory.set(file("freemarker-core/src/main/javacc"))
     destinationDirectory.set(buildDir.toPath().resolve("generated").resolve("javacc").toFile())
@@ -70,81 +82,48 @@
         "final class SimpleCharStream"
     )
 }
+sourceSets.main.get().java.srcDir(compileJavacc)
 
-val allSourceSetNames = ArrayList<String>()
+tasks.named<Jar>(sourceSets.named(SourceSet.MAIN_SOURCE_SET_NAME).get().sourcesJarTaskName) {
+    from(compileJavacc.flatMap { it.sourceDirectory })
 
-fun configureSourceSet(sourceSetName: String, defaultCompilerVersionStr: String) {
-    allSourceSetNames.add(sourceSetName)
-
-    val compilerVersion = fmExt.freemarkerCompilerVersionOverrideRef
-        .orElse(providers.gradleProperty("java${defaultCompilerVersionStr}CompilerOverride"))
-        .getOrElse(defaultCompilerVersionStr)
-        .let { JavaLanguageVersion.of(it) }
-
-    val baseDirName = if (sourceSetName == SourceSet.MAIN_SOURCE_SET_NAME) "core" else sourceSetName
-
-    val sourceSet = sourceSets.maybeCreate(sourceSetName)
-    sourceSet.java.setSrcDirs(listOf("freemarker-${baseDirName}/src/main/java"))
-    sourceSet.resources.setSrcDirs(listOf("freemarker-${baseDirName}/src/main/resources"))
-
-    val mainSourceSet = sourceSets.named(SourceSet.MAIN_SOURCE_SET_NAME).get()
-
-    if (sourceSetName == SourceSet.MAIN_SOURCE_SET_NAME) {
-        sourceSet.java.srcDir(compileJavacc)
-    } else {
-        tasks.named<Jar>(mainSourceSet.sourcesJarTaskName) {
-            from(sourceSet.allSource)
-        }
-
-        val compileOnlyConfigName = "${sourceSetName}${JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME.capitalize()}"
-
-        configurations.getByName(compileOnlyConfigName) {
-            extendsFrom(configurations.named(JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME).get())
-        }
-
-        tasks.named<Jar>(JavaPlugin.JAR_TASK_NAME) {
-            from(sourceSet.output)
-        }
-
-        tasks.named<Javadoc>(JavaPlugin.JAVADOC_TASK_NAME) {
-            source(sourceSet.java)
-        }
-
-        dependencies {
-            add(compileOnlyConfigName, mainSourceSet.output)
-            testImplementation(sourceSet.output)
-        }
-    }
-
-    if (compilerVersion != java.toolchain.languageVersion.get()) {
-        tasks.named<JavaCompile>(sourceSet.compileJavaTaskName) {
-            javaCompiler.set(javaToolchains.compilerFor {
-                languageVersion.set(compilerVersion)
-            })
-        }
+    from(files("LICENSE", "NOTICE")) {
+        into("META-INF")
     }
 }
 
-configureSourceSet(SourceSet.MAIN_SOURCE_SET_NAME, "8")
-configureSourceSet("jsp20", "8")
-configureSourceSet("jsp21", "8")
-configureSourceSet("jython20", "8")
-configureSourceSet("jython22", "8")
-configureSourceSet("jython25", "8")
-configureSourceSet("core16", "16")
-
-sourceSets {
-    test {
-        val baseDir = "freemarker-test/src/test"
-        java.setSrcDirs(listOf("${baseDir}/java"))
-        resources.setSrcDirs(listOf("${baseDir}/resources"))
+configurations {
+    register("combinedClasspath") {
+        extendsFrom(named("jython25CompileClasspath").get())
+        extendsFrom(named("jsp21CompileClasspath").get())
     }
 }
 
-tasks.named<JavaCompile>(sourceSets["test"].compileJavaTaskName) {
-    javaCompiler.set(javaToolchains.compilerFor {
-        languageVersion.set(JavaLanguageVersion.of(fmExt.testJavaVersion))
-    })
+// This source set is only needed, because the OSGI plugin supports only a single sourceSet.
+// We are deleting it, because otherwise it would fool IDEs that a source root has multiple owners.
+val osgiSourceSet = sourceSets
+    .create("osgi") {
+        val otherSourceSets = fmExt.allConfiguredSourceSetNames.get().map { name -> sourceSets.named(name).get() }
+
+        java.setSrcDirs(otherSourceSets.flatMap { s -> s.java.srcDirs })
+        resources.setSrcDirs(otherSourceSets.flatMap { s -> s.resources.srcDirs })
+    }
+    .apply {
+        val osgiClasspath = configurations.named("combinedClasspath").get()
+        compileClasspath = osgiClasspath
+        runtimeClasspath = osgiClasspath
+    }
+    .also { sourceSets.remove(it) }
+
+tasks.named<Jar>(JavaPlugin.JAR_TASK_NAME) {
+    configure<aQute.bnd.gradle.BundleTaskExtension> {
+        bndfile.set(file("osgi.bnd"))
+
+        setSourceSet(osgiSourceSet)
+        properties.putAll(fmExt.versionDef.versionProperties)
+        properties.put("moduleOrg", project.group.toString())
+        properties.put("moduleName", project.name)
+    }
 }
 
 tasks.named<Javadoc>(JavaPlugin.JAVADOC_TASK_NAME) {
@@ -182,98 +161,29 @@
                 parentDirName == "log" && logExcludes.contains(fileName)
                 )
     })
-}
 
-tasks.named<Test>(JavaPlugin.TEST_TASK_NAME) {
-    val processResourcesName = sourceSets[SourceSet.TEST_SOURCE_SET_NAME].processResourcesTaskName
-    val resourcesDestDir = tasks.named<ProcessResources>(processResourcesName).get().destinationDir.toString()
-    systemProperty("freemarker.test.resourcesDir", resourcesDestDir)
-
-    javaLauncher.set(javaToolchains.launcherFor {
-        languageVersion.set(JavaLanguageVersion.of(fmExt.testJavaVersion))
-    })
-}
-
-configurations {
-    compileOnly {
-        exclude(group = "xml-apis", module = "xml-apis")
-    }
-    testImplementation {
-        // Excluding to avoid test failures due to SAX parser conflict.
-        exclude(group = "pull-parser", module = "pull-parser")
-    }
-
-    register("combinedClasspath") {
-        extendsFrom(named("jython25CompileOnly").get())
-        extendsFrom(named("jsp21CompileOnly").get())
-    }
-
-    testImplementation {
-        extendsFrom(named("jython25CompileOnly").get())
-    }
-}
-
-tasks.named<Jar>(sourceSets.named(SourceSet.MAIN_SOURCE_SET_NAME).get().sourcesJarTaskName) {
-    from(compileJavacc.flatMap { it.sourceDirectory })
-
-    from(files("LICENSE", "NOTICE")) {
-        into("META-INF")
-    }
-}
-
-// This source set is only needed, because the OSGI plugin supports only a single sourceSet.
-// We are deleting it, because otherwise it would fool IDEs that a source root has multiple owners.
-val osgiSourceSet = sourceSets.create("osgi") {
-    val otherSourceSets = allSourceSetNames.map { name -> sourceSets.named(name).get() }
-
-    java {
-        setSrcDirs(otherSourceSets.flatMap { s -> s.java.srcDirs })
-    }
-    resources {
-        setSrcDirs(otherSourceSets.flatMap { s -> s.resources.srcDirs })
-    }
-}
-val osgiClasspath = configurations.named("combinedClasspath").get()
-osgiSourceSet.compileClasspath = osgiClasspath
-osgiSourceSet.runtimeClasspath = osgiClasspath
-sourceSets.remove(osgiSourceSet)
-
-tasks.named<Jar>(JavaPlugin.JAR_TASK_NAME) {
-    configure<aQute.bnd.gradle.BundleTaskExtension> {
-        bndfile.set(file("osgi.bnd"))
-
-        setSourceSet(osgiSourceSet)
-        properties.putAll(fmExt.versionDef.versionProperties)
-        properties.put("moduleOrg", project.group.toString())
-        properties.put("moduleName", project.name)
-    }
-}
-
-tasks.named<Javadoc>(JavaPlugin.JAVADOC_TASK_NAME) {
     javadocTool.set(javaToolchains.javadocToolFor {
         languageVersion.set(JavaLanguageVersion.of(fmExt.javadocJavaVersion))
     })
 
-    val javadocEncoding = StandardCharsets.UTF_8
-
-    options {
+    (options as StandardJavadocDocletOptions).apply {
         val displayVersion = fmExt.versionDef.displayVersion
+        val javadocEncoding = StandardCharsets.UTF_8
 
         locale = "en_US"
         encoding = javadocEncoding.name()
         windowTitle = "FreeMarker ${displayVersion} API"
 
-        val extraOptions = this as StandardJavadocDocletOptions
-        extraOptions.links("https://docs.oracle.com/en/java/javase/16/docs/api/")
+        links("https://docs.oracle.com/en/java/javase/16/docs/api/")
 
-        extraOptions.author(true)
-        extraOptions.version(true)
-        extraOptions.docEncoding = javadocEncoding.name()
-        extraOptions.charSet = javadocEncoding.name()
-        extraOptions.docTitle = "FreeMarker ${displayVersion}"
+        author(true)
+        version(true)
+        docEncoding = javadocEncoding.name()
+        charSet = javadocEncoding.name()
+        docTitle = "FreeMarker ${displayVersion}"
 
         // There are too many to check
-        extraOptions.addStringOption("Xdoclint:-missing", "-quiet")
+        addStringOption("Xdoclint:-missing", "-quiet")
     }
 
     classpath = files(configurations.named("combinedClasspath"))
@@ -318,9 +228,9 @@
                         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
@@ -536,10 +446,24 @@
 val springVersion = "2.5.6.SEC03"
 val tagLibsVersion = "1.2.5"
 
+configurations {
+    compileOnly {
+        exclude(group = "xml-apis", module = "xml-apis")
+    }
+
+    "jsp21TestImplementation" {
+        extendsFrom(compileClasspath.get())
+        exclude(group = "javax.servlet.jsp")
+        exclude(group = "javax.servlet", module = "servlet-api")
+    }
+}
+
 dependencies {
+    val xalan = "xalan:xalan:2.7.0"
+
     compileOnly("jaxen:jaxen:1.0-FCS")
     compileOnly("saxpath:saxpath:1.0-FCS")
-    compileOnly("xalan:xalan:2.7.0")
+    compileOnly(xalan)
     compileOnly("jdom:jdom:1.0b8")
     compileOnly("ant:ant:1.6.5") // FIXME: This could be moved to "jython20CompileOnly"
     compileOnly("rhino:js:1.6R1")
@@ -549,7 +473,12 @@
     compileOnly("org.slf4j:jcl-over-slf4j:${slf4jVersion}") // FIXME: This seems to be unused
     compileOnly("commons-logging:commons-logging:1.1.1") // FIXME: This seems to be unused
     compileOnly("org.zeroturnaround:javarebel-sdk:1.2.2")
-    compileOnly("org.dom4j:dom4j:2.1.3")
+    compileOnly("org.dom4j:dom4j:2.1.3") {
+        // Excluding "pull-parser" to avoid test failures due to SAX parser conflict.
+        exclude(group = "pull-parser", module = "pull-parser")
+    }
+
+    testImplementation(xalan)
 
     "jsp20CompileOnly"("javax.servlet.jsp:jsp-api:2.0")
     "jsp20CompileOnly"("javax.servlet:servlet-api:2.4")
@@ -558,6 +487,23 @@
     "jsp21CompileOnly"("javax.servlet.jsp:jsp-api:2.1")
     "jsp21CompileOnly"("javax.servlet:servlet-api:2.5")
 
+    "jsp21TestImplementation"("org.eclipse.jetty:jetty-server:${jettyVersion}")
+    "jsp21TestImplementation"("org.eclipse.jetty:jetty-webapp:${jettyVersion}")
+    "jsp21TestImplementation"("org.eclipse.jetty:jetty-util:${jettyVersion}")
+    "jsp21TestImplementation"("org.eclipse.jetty:apache-jsp:${jettyVersion}")
+    // Jetty also contains the servlet-api and jsp-api classes
+
+    // JSP JSTL (not included in Jetty):
+    "jsp21TestImplementation"("org.apache.taglibs:taglibs-standard-impl:${tagLibsVersion}")
+    "jsp21TestImplementation"("org.apache.taglibs:taglibs-standard-spec:${tagLibsVersion}")
+
+    "jsp21TestImplementation"("org.springframework:spring-core:${springVersion}") {
+        exclude(group = "commons-logging", module = "commons-logging")
+    }
+    "jsp21TestImplementation"("org.springframework:spring-test:${springVersion}") {
+        exclude(group = "commons-logging", module = "commons-logging")
+    }
+
     "jython20CompileOnly"("jython:jython:2.1")
 
     "jython22CompileOnly"(sourceSets["jython20"].output)
@@ -566,37 +512,22 @@
     "jython25CompileOnly"(sourceSets["jython20"].output)
     "jython25CompileOnly"("org.python:jython:2.5.0")
 
-    testImplementation("com.google.code.findbugs:annotations:3.0.0")
-    testImplementation("junit:junit:4.12")
-    testImplementation("org.hamcrest:hamcrest-library:1.3")
-    testImplementation("ch.qos.logback:logback-classic:1.1.2")
-    testImplementation("commons-io:commons-io:2.7")
-    testImplementation("com.google.guava:guava:29.0-jre")
-    testImplementation("org.eclipse.jetty:jetty-server:${jettyVersion}")
-    testImplementation("org.eclipse.jetty:jetty-webapp:${jettyVersion}")
-    testImplementation("org.eclipse.jetty:jetty-util:${jettyVersion}")
-    testImplementation("org.eclipse.jetty:apache-jsp:${jettyVersion}")
-    // Jetty also contains the servlet-api and jsp-api classes
-
-    testImplementation("displaytag:displaytag:1.2") {
+    "testUtilsImplementation"("displaytag:displaytag:1.2") {
         exclude(group = "com.lowagie", module = "itext")
         // We manage logging centrally:
         exclude(group = "org.slf4j", module = "slf4j-log4j12")
         exclude(group = "rg.slf4j", module = "jcl104-over-slf4j")
         exclude(group = "log4j", module = "log4j")
     }
-
-    // JSP JSTL (not included in Jetty):
-    testImplementation("org.apache.taglibs:taglibs-standard-impl:${tagLibsVersion}")
-    testImplementation("org.apache.taglibs:taglibs-standard-spec:${tagLibsVersion}")
+    "testUtilsImplementation"(sourceSets.main.get().output)
+    "testUtilsImplementation"("com.google.code.findbugs:annotations:3.0.0")
+    "testUtilsImplementation"(libs.junit)
+    "testUtilsImplementation"("org.hamcrest:hamcrest-library:1.3")
+    "testUtilsImplementation"("ch.qos.logback:logback-classic:1.1.2")
+    "testUtilsImplementation"("commons-io:commons-io:2.7")
+    "testUtilsImplementation"("com.google.guava:guava:29.0-jre")
+    "testUtilsImplementation"("commons-collections:commons-collections:3.1")
 
     // Override Java 9 incompatible version (coming from displaytag):
-    testImplementation("commons-lang:commons-lang:2.6")
-
-    testImplementation("org.springframework:spring-core:${springVersion}") {
-        exclude(group = "commons-logging", module = "commons-logging")
-    }
-    testImplementation("org.springframework:spring-test:${springVersion}") {
-        exclude(group = "commons-logging", module = "commons-logging")
-    }
+    "testUtilsImplementation"("commons-lang:commons-lang:2.6")
 }
diff --git a/buildSrc/src/main/kotlin/freemarker/build/CompileJavaccTask.kt b/buildSrc/src/main/kotlin/freemarker/build/CompileJavaccTask.kt
index dbf9444..4acf27e 100644
--- a/buildSrc/src/main/kotlin/freemarker/build/CompileJavaccTask.kt
+++ b/buildSrc/src/main/kotlin/freemarker/build/CompileJavaccTask.kt
@@ -189,7 +189,7 @@
     }
 
     private fun withProcessJavaccRunner(action: JavaccRunner.() -> Unit) {
-        action.invoke { actionArgs ->
+        action { actionArgs ->
             val execResult = execOps.javaexec {
                 classpath = javaccClasspath
                 mainClass.set(JAVACC_MAIN_CLASS)
@@ -203,7 +203,7 @@
 
     private fun withClasspathJavaccRunner(action: JavaccRunner.() -> Unit) {
         val workQueue = exec.classLoaderIsolation { classpath.from(javaccClasspath) }
-        action.invoke { actionArgs ->
+        action { actionArgs ->
             workQueue.submit(JavaccRunnerWorkAction::class) { arguments.set(actionArgs) }
         }
         workQueue.await()
diff --git a/buildSrc/src/main/kotlin/freemarker/build/FreemarkerPathExtensions.kt b/buildSrc/src/main/kotlin/freemarker/build/FreemarkerPathExtensions.kt
new file mode 100644
index 0000000..5c60824
--- /dev/null
+++ b/buildSrc/src/main/kotlin/freemarker/build/FreemarkerPathExtensions.kt
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package freemarker.build
+
+import java.nio.file.Path
+
+fun Path.withChildren(children: List<String>): Path {
+    return children.fold(this) { parent, child -> parent.resolve(child) }
+}
diff --git a/buildSrc/src/main/kotlin/freemarker/build/FreemarkerRootExtension.kt b/buildSrc/src/main/kotlin/freemarker/build/FreemarkerRootExtension.kt
index d687754..d1f16e6 100644
--- a/buildSrc/src/main/kotlin/freemarker/build/FreemarkerRootExtension.kt
+++ b/buildSrc/src/main/kotlin/freemarker/build/FreemarkerRootExtension.kt
@@ -19,20 +19,271 @@
 
 package freemarker.build
 
-import org.gradle.api.provider.ProviderFactory
+import org.gradle.api.NamedDomainObjectProvider
+import org.gradle.api.Project
+import org.gradle.api.artifacts.VersionCatalogsExtension
+import org.gradle.api.plugins.JavaPlugin
+import org.gradle.api.plugins.JavaPluginExtension
+import org.gradle.api.plugins.JvmTestSuitePlugin
+import org.gradle.api.plugins.jvm.JvmTestSuite
+import org.gradle.api.plugins.jvm.JvmTestSuiteTarget
+import org.gradle.api.provider.Provider
+import org.gradle.api.tasks.SourceSet
+import org.gradle.api.tasks.bundling.Jar
+import org.gradle.api.tasks.compile.JavaCompile
+import org.gradle.api.tasks.javadoc.Javadoc
+import org.gradle.jvm.toolchain.JavaLanguageVersion
+import org.gradle.jvm.toolchain.JavaToolchainService
+import org.gradle.kotlin.dsl.dependencies
+import org.gradle.kotlin.dsl.named
+import org.gradle.kotlin.dsl.setProperty
+import org.gradle.kotlin.dsl.the
+import org.gradle.language.base.plugins.LifecycleBasePlugin
+import org.gradle.language.jvm.tasks.ProcessResources
+import org.gradle.testing.base.TestingExtension
 
-class FreemarkerRootExtension constructor(val versionDef: FreemarkerVersionDef, providers: ProviderFactory) {
-    val freemarkerCompilerVersionOverrideRef = providers.gradleProperty("freemarkerCompilerVersionOverride")
+private const val TEST_UTILS_SOURCE_SET_NAME = "test-utils"
+
+internal class JavaProjectContext constructor(
+    val project: Project
+) {
+    val providers = project.providers
+    val tasks = project.tasks
+    val libs = project.the<VersionCatalogsExtension>().named("libs")
+    val testing = project.the<TestingExtension>()
+    val javaToolchains = project.the<JavaToolchainService>()
+    val java = project.the<JavaPluginExtension>()
+    val sourceSets = java.sourceSets
+
+    val mainSourceSet = sourceSets.named(SourceSet.MAIN_SOURCE_SET_NAME).get()
+
+    fun version(versionStr: String): String {
+        return libs
+            .findVersion(versionStr)
+            .orElseThrow { NoSuchElementException("Missing version for $versionStr") }
+            .requiredVersion
+    }
+
+    fun javaVersion(preferredJavaVersion: String, javaVersionOverride: Provider<String>): JavaLanguageVersion {
+        return javaVersionOverride
+            .orElse(providers.gradleProperty("java${preferredJavaVersion}CompilerOverride"))
+            .getOrElse(preferredJavaVersion)
+            .let { JavaLanguageVersion.of(it) }
+    }
+
+    fun inheritConfig(child: SourceSet, parent: SourceSet, nameProvider: ((SourceSet) -> String)) {
+        val configurations = project.configurations
+        val childConfigRef = configurations.named(nameProvider.invoke(child))
+        childConfigRef.configure {
+            extendsFrom(configurations.named(nameProvider.invoke(parent)).get())
+        }
+    }
+
+    fun inheritCompileRuntime(child: SourceSet, parent: SourceSet) {
+        inheritConfig(child, parent, SourceSet::getCompileClasspathConfigurationName)
+        inheritConfig(child, parent, SourceSet::getRuntimeClasspathConfigurationName)
+    }
+
+    fun inheritCompileRuntimeAndOutput(child: SourceSet, parent: SourceSet) {
+        project.dependencies {
+            add(child.implementationConfigurationName, parent.output)
+        }
+
+        inheritCompileRuntime(child, parent)
+    }
+}
+
+class FreemarkerModuleDef internal constructor(
+    private val context: JavaProjectContext,
+    private val ext: FreemarkerRootExtension,
+    val sourceSetName: String,
+    defaultCompilerVersion: String
+) {
+    val compilerVersion = context.javaVersion(
+        defaultCompilerVersion,
+        ext.freemarkerCompilerVersionOverrideRef
+    )
+
+    val main = sourceSetName == SourceSet.MAIN_SOURCE_SET_NAME
+    val baseDirName = if (main) "core" else sourceSetName
+
+    val sourceSet = context.sourceSets.maybeCreate(sourceSetName)
+
+    val sourceSetRootDirName = "freemarker-${baseDirName}"
+    val sourceSetSrcPath = "${sourceSetRootDirName}/src"
+
+    fun enableTests(preferredTestJavaVersion: String = ext.testJavaVersion) {
+        configureTests(context.javaVersion(preferredTestJavaVersion, ext.testRunnerJavaVersionOverrideRef))
+    }
+
+    private fun configureTests(testJavaVersion: JavaLanguageVersion) {
+        getOrCreateTestSuiteRef().configure {
+            useJUnit(context.version("junit"))
+
+            configureSources(sources, testJavaVersion)
+            targets.all { configureTarget(this, sources, testJavaVersion) }
+        }
+    }
+
+    private fun getOrCreateTestSuiteRef(): NamedDomainObjectProvider<JvmTestSuite> {
+        val suites = context.testing.suites
+        if (main) {
+            return suites.named<JvmTestSuite>(JvmTestSuitePlugin.DEFAULT_TEST_SUITE_NAME)
+        } else {
+            return suites.register("${sourceSetName}Test", JvmTestSuite::class.java)
+        }
+    }
+
+    private fun testUtils(): SourceSet {
+        val testUtilsRef = context.sourceSets.named(TEST_UTILS_SOURCE_SET_NAME)
+        if (!testUtilsRef.isPresent) {
+            throw IllegalStateException("Forgot to configure the ${TEST_UTILS_SOURCE_SET_NAME} source set." +
+                    " Call the configureTestUtils method.")
+        }
+        return testUtilsRef.get()
+    }
+
+    private fun configureSources(sources: SourceSet, testJavaVersion: JavaLanguageVersion) {
+        sources.apply {
+            val testSrcPath = "${sourceSetSrcPath}/test"
+            java.setSrcDirs(listOf("${testSrcPath}/java"))
+            resources.setSrcDirs(listOf("${testSrcPath}/resources"))
+
+            if (!main) {
+                context.inheritCompileRuntimeAndOutput(this, sourceSet)
+            }
+
+            context.inheritCompileRuntimeAndOutput(this, testUtils())
+
+            // Because of the compileOnly hacks on the source sets, we have to add the compilation classpath to runtime.
+            val configurations = context.project.configurations
+            configurations.named(runtimeClasspathConfigurationName) {
+                extendsFrom(configurations.named(compileClasspathConfigurationName).get())
+            }
+
+            context.tasks.named<JavaCompile>(compileJavaTaskName) {
+                javaCompiler.set(context.javaToolchains.compilerFor {
+                    languageVersion.set(testJavaVersion)
+                })
+            }
+        }
+    }
+
+    private fun configureTarget(target: JvmTestSuiteTarget, sources: SourceSet, testRunnerJavaVersion: JavaLanguageVersion) {
+        target.apply {
+            testTask.configure {
+                description = "Runs the tests in ${sourceSetRootDirName}."
+                val processResourcesName = sources.processResourcesTaskName
+                val resourcesDestDir = context.tasks
+                    .named<ProcessResources>(processResourcesName)
+                    .get()
+                    .destinationDir
+                    .toString()
+                systemProperty("freemarker.test.resourcesDir", resourcesDestDir)
+
+                javaLauncher.set(context.javaToolchains.launcherFor {
+                    languageVersion.set(testRunnerJavaVersion)
+                })
+            }
+
+            context.tasks.named(LifecycleBasePlugin.CHECK_TASK_NAME) { dependsOn(testTask) }
+        }
+    }
+}
+
+class FreemarkerRootExtension constructor(
+    project: Project,
+    val versionService: FreemarkerVersionService
+) {
+
+    private val context = JavaProjectContext(project)
+
+    val versionDef = versionService.versionDef
+
+    val freemarkerCompilerVersionOverrideRef = context.providers
+        .gradleProperty("freemarkerCompilerVersionOverride")
 
     val defaultJavaVersion = freemarkerCompilerVersionOverrideRef
-        .orElse(providers.gradleProperty("freemarkerDefaultJavaVersion"))
-        .getOrElse("8")
+        .orElse(context.providers.gradleProperty("freemarkerDefaultJavaVersion"))
+        .getOrElse(context.version("defaultJava"))
 
-    val testJavaVersion = providers.gradleProperty("freeMarkerTestJavaVersion")
+    val testJavaVersion = context.providers.gradleProperty("freeMarkerTestJavaVersion")
         .getOrElse("16")
 
-    val javadocJavaVersion = providers.gradleProperty("freeMarkerJavadocJavaVersion")
+    val testRunnerJavaVersionOverrideRef = context.providers
+        .gradleProperty("freeMarkerTestRunnerJavaVersionOverride")
+
+    val javadocJavaVersion = context.providers
+        .gradleProperty("freeMarkerJavadocJavaVersion")
         .getOrElse(defaultJavaVersion)
 
-    val doSignPackages = providers.gradleProperty("signPublication").map { it.toBoolean() }.orElse(true)
+    val doSignPackages = context.providers
+        .gradleProperty("signPublication")
+        .map { it.toBoolean() }
+        .orElse(true)
+
+    private val allConfiguredSourceSetNamesRef = project.objects.setProperty<String>()
+    val allConfiguredSourceSetNames: Provider<Set<String>> = allConfiguredSourceSetNamesRef
+
+    private val tasks = project.tasks
+    private val java = project.the<JavaPluginExtension>()
+    private val sourceSets = java.sourceSets
+
+    fun isPublishedVersion(): Boolean {
+        return !versionDef.version.endsWith("-SNAPSHOT") ||
+                !versionDef.displayVersion.contains("-nightly")
+}
+
+    fun configureTestUtils(preferredJavaVersion: String) {
+        sourceSets.register(TEST_UTILS_SOURCE_SET_NAME) {
+            val baseDir = "freemarker-${TEST_UTILS_SOURCE_SET_NAME}/src/main"
+            java.setSrcDirs(listOf("${baseDir}/java"))
+            resources.setSrcDirs(listOf("${baseDir}/resources"))
+
+            tasks.named<JavaCompile>(compileJavaTaskName) {
+                javaCompiler.set(context.javaToolchains.compilerFor {
+                    languageVersion.set(context.javaVersion(preferredJavaVersion, freemarkerCompilerVersionOverrideRef))
+                })
+            }
+        }
+    }
+
+    fun configureSourceSet(
+        sourceSetName: String,
+        sourceSetVersion: String,
+        configuration: FreemarkerModuleDef.() -> Unit = { }) {
+
+        allConfiguredSourceSetNamesRef.add(sourceSetName)
+
+        FreemarkerModuleDef(context, this, sourceSetName, sourceSetVersion).apply {
+            val sourceSetSrcMainPath = "${sourceSetSrcPath}/main"
+
+            sourceSet.apply {
+                java.setSrcDirs(listOf("${sourceSetSrcMainPath}/java"))
+                resources.setSrcDirs(listOf("${sourceSetSrcMainPath}/resources"))
+            }
+
+            if (!main) {
+                context.apply {
+                    inheritCompileRuntimeAndOutput(sourceSet, mainSourceSet)
+
+                    tasks.apply {
+                        named<Jar>(mainSourceSet.sourcesJarTaskName) { from(sourceSet.allSource) }
+                        named<Jar>(JavaPlugin.JAR_TASK_NAME) { from(sourceSet.output) }
+                        named<Javadoc>(JavaPlugin.JAVADOC_TASK_NAME) { source(sourceSet.java) }
+                    }
+
+                    project.dependencies { add(sourceSet.compileOnlyConfigurationName, mainSourceSet.output) }
+                }
+            }
+
+            tasks.named<JavaCompile>(sourceSet.compileJavaTaskName) {
+                javaCompiler.set(context.javaToolchains.compilerFor {
+                    languageVersion.set(compilerVersion)
+                })
+            }
+
+            configuration.invoke(this)
+        }
+    }
 }
diff --git a/buildSrc/src/main/kotlin/freemarker/build/FreemarkerRootPlugin.kt b/buildSrc/src/main/kotlin/freemarker/build/FreemarkerRootPlugin.kt
index 4b51ec8..7db8c19 100644
--- a/buildSrc/src/main/kotlin/freemarker/build/FreemarkerRootPlugin.kt
+++ b/buildSrc/src/main/kotlin/freemarker/build/FreemarkerRootPlugin.kt
@@ -19,53 +19,23 @@
 
 package freemarker.build
 
-import java.nio.charset.StandardCharsets
-import java.nio.file.Files
-import java.nio.file.Path
-import java.time.Instant
-import java.time.ZoneOffset
-import java.time.format.DateTimeFormatter
-import java.util.Properties
-import kotlin.collections.component1
-import kotlin.collections.component2
-import kotlin.collections.set
 import org.apache.tools.ant.filters.ReplaceTokens
 import org.gradle.api.Plugin
 import org.gradle.api.Project
 import org.gradle.api.plugins.JavaPlugin
 import org.gradle.api.plugins.JavaPluginExtension
+import org.gradle.api.publish.maven.tasks.AbstractPublishToMaven
 import org.gradle.api.tasks.SourceSet
 import org.gradle.api.tasks.bundling.Jar
 import org.gradle.jvm.toolchain.JavaLanguageVersion
 import org.gradle.kotlin.dsl.configure
 import org.gradle.kotlin.dsl.filter
-import org.gradle.kotlin.dsl.getByType
 import org.gradle.kotlin.dsl.named
+import org.gradle.kotlin.dsl.the
 import org.gradle.kotlin.dsl.withType
+import org.gradle.language.base.plugins.LifecycleBasePlugin
 import org.gradle.language.jvm.tasks.ProcessResources
 
-private val RESOURCE_TEMPLATES_PATH = listOf("freemarker-core", "src", "main", "resource-templates")
-private val VERSION_PROPERTIES_PATH = listOf("freemarker", "version.properties")
-
-class FreemarkerVersionDef(versionFileTokens: Map<String, String>, versionProperties: Map<String, String>) {
-    val versionFileTokens: Map<String, String>
-    val versionProperties: Map<String, String>
-    val version: String
-    val displayVersion: String
-
-    init {
-        this.versionFileTokens = versionFileTokens.toMap()
-        this.versionProperties = versionProperties.toMap()
-        this.version = this.versionProperties["mavenVersion"]!!
-        this.displayVersion = this.versionProperties["version"]!!
-    }
-}
-
-private fun withChildPaths(root: Path, children: List<String>): Path {
-    return children
-            .fold(root) { parent, child -> parent.resolve(child) }
-}
-
 open class FreemarkerRootPlugin : Plugin<Project> {
     private class Configurer(
         private val project: Project,
@@ -73,7 +43,7 @@
         ) {
 
         private val tasks = project.tasks
-        private val java = project.extensions.getByType<JavaPluginExtension>()
+        private val java = project.the<JavaPluginExtension>()
         private val mainSourceSet = java.sourceSets.named(SourceSet.MAIN_SOURCE_SET_NAME).get()
 
         fun configure() {
@@ -89,23 +59,53 @@
                 }
             }
 
-            val resourceTemplatesDir = withChildPaths(project.projectDir.toPath(), RESOURCE_TEMPLATES_PATH)
+            tasks.apply {
+                val resourceTemplatesDir = ext.versionService.resourceTemplatesDir
 
-            tasks.named<ProcessResources>(JavaPlugin.PROCESS_RESOURCES_TASK_NAME) {
-                with(project.copySpec {
-                    from(resourceTemplatesDir)
-                    filter<ReplaceTokens>(mapOf("tokens" to ext.versionDef.versionFileTokens))
-                })
-            }
-
-            tasks.named<Jar>(mainSourceSet.sourcesJarTaskName) {
-                from(resourceTemplatesDir)
-            }
-
-            tasks.withType<org.nosphere.apache.rat.RatTask>() {
-                doLast {
-                    println("RAT (${name} task) report was successful: ${reportDir.get().asFile.toPath().resolve("index.html").toUri()}")
+                named<ProcessResources>(JavaPlugin.PROCESS_RESOURCES_TASK_NAME) {
+                    with(project.copySpec {
+                        from(resourceTemplatesDir)
+                        filter<ReplaceTokens>(mapOf("tokens" to ext.versionDef.versionFileTokens))
+                    })
                 }
+
+                named<Jar>(mainSourceSet.sourcesJarTaskName) {
+                    from(resourceTemplatesDir)
+                }
+
+                withType<org.nosphere.apache.rat.RatTask>() {
+                    doLast {
+                        println("RAT (${name} task) report was successful: ${reportDir.get().asFile.toPath().resolve("index.html").toUri()}")
+                    }
+                }
+            }
+
+            configureReleaseVerification()
+        }
+
+        private fun configureReleaseVerification() {
+            val verifyReleaseSetup = project.tasks.register("verifyReleaseSetup") {
+                group = LifecycleBasePlugin.VERIFICATION_GROUP
+                description = "Basic checks to check to avoid accidental development configuration"
+
+                doLast {
+                    if (ext.versionService.developmentBuild) {
+                        throw IllegalStateException("The development build configuration is active!")
+                    }
+                    if (!ext.doSignPackages.get()) {
+                        throw IllegalStateException("Package signing is disabled!")
+                    }
+                }
+            }
+
+            if (ext.isPublishedVersion()) {
+                project.tasks.named(LifecycleBasePlugin.CHECK_TASK_NAME) {
+                    dependsOn(verifyReleaseSetup)
+                }
+            }
+
+            project.tasks.withType<AbstractPublishToMaven>() {
+                shouldRunAfter(verifyReleaseSetup)
             }
         }
     }
@@ -114,7 +114,8 @@
         project.pluginManager.apply("java-library")
         project.pluginManager.apply("org.nosphere.apache.rat")
 
-        val ext = FreemarkerRootExtension(readVersions(project), project.providers)
+        val versionService = FreemarkerVersionService(project.layout, project.providers)
+        val ext = FreemarkerRootExtension(project, versionService)
 
         Configurer(project, ext).configure()
 
@@ -123,40 +124,4 @@
             System.setProperty("line.separator", "\n")
         }
     }
-
-    private fun readVersions(project: Project): FreemarkerVersionDef {
-        val developmentBuild = project.providers
-                .gradleProperty("developmentBuild")
-                .map { it.toBoolean() }
-                .getOrElse(false)
-
-        if (developmentBuild) {
-            println("DEVELOPMENT BUILD: Using EPOCH as timestamp.")
-        }
-
-        val buildTimeStamp = if (developmentBuild) Instant.EPOCH else Instant.now()
-
-        val buildTimeStampUtc = buildTimeStamp.atOffset(ZoneOffset.UTC)
-        val versionFileTokens = mapOf(
-            "timestampNice" to buildTimeStampUtc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'")),
-            "timestampInVersion" to buildTimeStampUtc.format(DateTimeFormatter.ofPattern("yyyyMMdd'T'HHmmss'Z'"))
-        )
-
-        val versionPropertiesPath = withChildPaths(project.projectDir.toPath(), RESOURCE_TEMPLATES_PATH + VERSION_PROPERTIES_PATH)
-
-        val versionPropertiesTemplate = Properties()
-        Files.newBufferedReader(versionPropertiesPath, StandardCharsets.ISO_8859_1).use {
-            versionPropertiesTemplate.load(it)
-        }
-
-        val versionProperties = HashMap<String, String>()
-        versionPropertiesTemplate.forEach { (key, value) ->
-            var updatedValue = value.toString()
-            for (token in versionFileTokens) {
-                updatedValue = updatedValue.replace("@${token.key}@", token.value)
-            }
-            versionProperties[key.toString()] = updatedValue.trim()
-        }
-        return FreemarkerVersionDef(versionFileTokens, versionProperties)
-    }
 }
diff --git a/buildSrc/src/main/kotlin/freemarker/build/FreemarkerVersionService.kt b/buildSrc/src/main/kotlin/freemarker/build/FreemarkerVersionService.kt
new file mode 100644
index 0000000..7a3690f
--- /dev/null
+++ b/buildSrc/src/main/kotlin/freemarker/build/FreemarkerVersionService.kt
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package freemarker.build
+
+import java.nio.charset.StandardCharsets
+import java.nio.file.Files
+import java.time.Instant
+import java.time.ZoneOffset
+import java.time.format.DateTimeFormatter
+import java.util.Properties
+import org.gradle.api.file.ProjectLayout
+import org.gradle.api.provider.ProviderFactory
+
+private val RESOURCE_TEMPLATES_PATH = listOf("freemarker-core", "src", "main", "resource-templates")
+private val VERSION_PROPERTIES_PATH = listOf("freemarker", "version.properties")
+
+class FreemarkerVersionDef(versionFileTokens: Map<String, String>, versionProperties: Map<String, String>) {
+    val versionFileTokens = versionFileTokens.toMap()
+    val versionProperties = versionProperties.toMap()
+    val version = this.versionProperties["mavenVersion"]!!
+    val displayVersion = this.versionProperties["version"]!!
+}
+
+class FreemarkerVersionService constructor(
+    layout: ProjectLayout,
+    providers: ProviderFactory
+) {
+
+    val developmentBuild = providers
+        .gradleProperty("developmentBuild")
+        .map { it.toBoolean() }
+        .getOrElse(false)
+
+    val buildTimeStamp = if (developmentBuild) Instant.EPOCH else Instant.now()
+
+    val resourceTemplatesDir = layout.projectDirectory.asFile.toPath().withChildren(RESOURCE_TEMPLATES_PATH)
+
+    val versionFileTokens = buildTimeStamp.atOffset(ZoneOffset.UTC).let { buildTimeStampUtc ->
+        mapOf(
+            "timestampNice" to buildTimeStampUtc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'")),
+            "timestampInVersion" to buildTimeStampUtc.format(DateTimeFormatter.ofPattern("yyyyMMdd'T'HHmmss'Z'"))
+        )
+    }
+
+    val versionDef = run {
+        val versionPropertiesPath = resourceTemplatesDir.withChildren(VERSION_PROPERTIES_PATH)
+
+        val versionPropertiesTemplate = Properties()
+        Files.newBufferedReader(versionPropertiesPath, StandardCharsets.ISO_8859_1).use {
+            versionPropertiesTemplate.load(it)
+        }
+
+        val versionProperties = HashMap<String, String>()
+        versionPropertiesTemplate.forEach { (key, value) ->
+            var updatedValue = value.toString()
+            for (token in versionFileTokens) {
+                updatedValue = updatedValue.replace("@${token.key}@", token.value)
+            }
+            versionProperties[key.toString()] = updatedValue.trim()
+        }
+
+        FreemarkerVersionDef(versionFileTokens, versionProperties)
+    }
+}
diff --git a/buildSrc/src/main/kotlin/freemarker/build/ManualBuildTask.kt b/buildSrc/src/main/kotlin/freemarker/build/ManualBuildTask.kt
index db084b1..794762d 100644
--- a/buildSrc/src/main/kotlin/freemarker/build/ManualBuildTask.kt
+++ b/buildSrc/src/main/kotlin/freemarker/build/ManualBuildTask.kt
@@ -22,10 +22,8 @@
 import javax.inject.Inject
 import org.freemarker.docgen.core.Transform
 import org.gradle.api.DefaultTask
-import org.gradle.api.file.DirectoryProperty
 import org.gradle.api.file.ProjectLayout
 import org.gradle.api.model.ObjectFactory
-import org.gradle.api.provider.Property
 import org.gradle.api.tasks.Input
 import org.gradle.api.tasks.InputDirectory
 import org.gradle.api.tasks.OutputDirectory
@@ -43,29 +41,21 @@
     @InputDirectory
     @SkipWhenEmpty
     @PathSensitive(PathSensitivity.NONE)
-    val inputDirectory: DirectoryProperty
+    val inputDirectory = objects.directoryProperty()
 
     @Input
-    val offline: Property<Boolean>
+    val offline = objects.property<Boolean>().value(true)
 
     @Input
-    val locale: Property<String>
+    val locale = objects.property<String>().value("unknown")
 
     @OutputDirectory
-    val destinationDirectory: DirectoryProperty
-
-    init {
-        this.offline = objects.property<Boolean>().value(true)
-        this.locale = objects.property<String>().value("unknown")
-
-        this.inputDirectory = objects.directoryProperty()
-        this.destinationDirectory = this.offline
-            .zip(layout.buildDirectory) {
-                    offlineValue, buildDirValue -> buildDirValue.asFile.toPath().resolve("manual-${if (offlineValue) "offline" else "online"}")
-            }
-            .zip(this.locale) { localelessDirValue, localeValue -> localelessDirValue.resolve(localeValue).toFile() }
-            .let { objects.directoryProperty().value(layout.dir(it)) }
-    }
+    val destinationDirectory = this.offline
+        .zip(layout.buildDirectory) { offlineValue, buildDirValue ->
+            buildDirValue.asFile.toPath().resolve("manual-${if (offlineValue) "offline" else "online"}")
+        }
+        .zip(this.locale) { localelessDirValue, localeValue -> localelessDirValue.resolve(localeValue).toFile() }
+        .let { objects.directoryProperty().value(layout.dir(it)) }
 
     @TaskAction
     fun buildManual() {
diff --git a/buildSrc/src/main/kotlin/freemarker/build/SignatureTask.kt b/buildSrc/src/main/kotlin/freemarker/build/SignatureTask.kt
index ec66de0..b11d485 100644
--- a/buildSrc/src/main/kotlin/freemarker/build/SignatureTask.kt
+++ b/buildSrc/src/main/kotlin/freemarker/build/SignatureTask.kt
@@ -30,7 +30,7 @@
 import org.gradle.api.tasks.PathSensitive
 import org.gradle.api.tasks.PathSensitivity
 import org.gradle.api.tasks.TaskAction
-import org.gradle.kotlin.dsl.getByType
+import org.gradle.kotlin.dsl.the
 import org.gradle.plugins.signing.SigningExtension
 
 open class SignatureTask @Inject constructor(
@@ -49,7 +49,7 @@
     init {
         this.inputFile = objects.fileProperty()
         this.outputFile = this.inputFile.map { f -> File("${f.asFile}.asc") }
-        this.signing = project.extensions.getByType()
+        this.signing = project.the()
     }
 
     @TaskAction
diff --git a/freemarker-test/src/test/java/freemarker/cache/FileTemplateLoaderTest.java b/freemarker-core/src/test/java/freemarker/cache/FileTemplateLoaderTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/cache/FileTemplateLoaderTest.java
rename to freemarker-core/src/test/java/freemarker/cache/FileTemplateLoaderTest.java
diff --git a/freemarker-test/src/test/java/freemarker/cache/MultiTemplateLoaderTest.java b/freemarker-core/src/test/java/freemarker/cache/MultiTemplateLoaderTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/cache/MultiTemplateLoaderTest.java
rename to freemarker-core/src/test/java/freemarker/cache/MultiTemplateLoaderTest.java
diff --git a/freemarker-test/src/test/java/freemarker/cache/TemplateCacheTest.java b/freemarker-core/src/test/java/freemarker/cache/TemplateCacheTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/cache/TemplateCacheTest.java
rename to freemarker-core/src/test/java/freemarker/cache/TemplateCacheTest.java
diff --git a/freemarker-test/src/test/java/freemarker/cache/TemplateConfigurationFactoryTest.java b/freemarker-core/src/test/java/freemarker/cache/TemplateConfigurationFactoryTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/cache/TemplateConfigurationFactoryTest.java
rename to freemarker-core/src/test/java/freemarker/cache/TemplateConfigurationFactoryTest.java
diff --git a/freemarker-test/src/test/java/freemarker/cache/TemplateNameFormatTest.java b/freemarker-core/src/test/java/freemarker/cache/TemplateNameFormatTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/cache/TemplateNameFormatTest.java
rename to freemarker-core/src/test/java/freemarker/cache/TemplateNameFormatTest.java
diff --git a/freemarker-test/src/test/java/freemarker/cache/TemplateSourceMatcherTest.java b/freemarker-core/src/test/java/freemarker/cache/TemplateSourceMatcherTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/cache/TemplateSourceMatcherTest.java
rename to freemarker-core/src/test/java/freemarker/cache/TemplateSourceMatcherTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/ASTBasedErrorMessagesTest.java b/freemarker-core/src/test/java/freemarker/core/ASTBasedErrorMessagesTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/ASTBasedErrorMessagesTest.java
rename to freemarker-core/src/test/java/freemarker/core/ASTBasedErrorMessagesTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/ASTTest.java b/freemarker-core/src/test/java/freemarker/core/ASTTest.java
similarity index 96%
rename from freemarker-test/src/test/java/freemarker/core/ASTTest.java
rename to freemarker-core/src/test/java/freemarker/core/ASTTest.java
index b1b308e..57aabf5 100644
--- a/freemarker-test/src/test/java/freemarker/core/ASTTest.java
+++ b/freemarker-core/src/test/java/freemarker/core/ASTTest.java
@@ -22,11 +22,15 @@
 import java.io.FileNotFoundException;
 import java.io.IOException;
 
+import org.junit.internal.runners.JUnit38ClassRunner;
+import org.junit.runner.RunWith;
+
 import freemarker.core.ASTPrinter.Options;
 import freemarker.template.utility.StringUtil;
 import freemarker.test.utility.FileTestCase;
 import freemarker.test.utility.TestUtil;
 
+@RunWith(JUnit38ClassRunner.class)
 public class ASTTest extends FileTestCase {
 
     public ASTTest(String name) {
diff --git a/freemarker-test/src/test/java/freemarker/core/AbsoluteTemplateNameBITest.java b/freemarker-core/src/test/java/freemarker/core/AbsoluteTemplateNameBITest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/AbsoluteTemplateNameBITest.java
rename to freemarker-core/src/test/java/freemarker/core/AbsoluteTemplateNameBITest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/AppMetaTemplateDateFormatFactory.java b/freemarker-core/src/test/java/freemarker/core/AppMetaTemplateDateFormatFactory.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/AppMetaTemplateDateFormatFactory.java
rename to freemarker-core/src/test/java/freemarker/core/AppMetaTemplateDateFormatFactory.java
diff --git a/freemarker-test/src/test/java/freemarker/core/ArgsSpecialVariableTest.java b/freemarker-core/src/test/java/freemarker/core/ArgsSpecialVariableTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/ArgsSpecialVariableTest.java
rename to freemarker-core/src/test/java/freemarker/core/ArgsSpecialVariableTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/ArithmeticEngineTest.java b/freemarker-core/src/test/java/freemarker/core/ArithmeticEngineTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/ArithmeticEngineTest.java
rename to freemarker-core/src/test/java/freemarker/core/ArithmeticEngineTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/AttemptLoggingTest.java b/freemarker-core/src/test/java/freemarker/core/AttemptLoggingTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/AttemptLoggingTest.java
rename to freemarker-core/src/test/java/freemarker/core/AttemptLoggingTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/BaseNTemplateNumberFormatFactory.java b/freemarker-core/src/test/java/freemarker/core/BaseNTemplateNumberFormatFactory.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/BaseNTemplateNumberFormatFactory.java
rename to freemarker-core/src/test/java/freemarker/core/BaseNTemplateNumberFormatFactory.java
diff --git a/freemarker-test/src/test/java/freemarker/core/BooleanFormatEnvironmentCachingTest.java b/freemarker-core/src/test/java/freemarker/core/BooleanFormatEnvironmentCachingTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/BooleanFormatEnvironmentCachingTest.java
rename to freemarker-core/src/test/java/freemarker/core/BooleanFormatEnvironmentCachingTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/BreakAndContinuePlacementTest.java b/freemarker-core/src/test/java/freemarker/core/BreakAndContinuePlacementTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/BreakAndContinuePlacementTest.java
rename to freemarker-core/src/test/java/freemarker/core/BreakAndContinuePlacementTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/CAndCnBuiltInTest.java b/freemarker-core/src/test/java/freemarker/core/CAndCnBuiltInTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/CAndCnBuiltInTest.java
rename to freemarker-core/src/test/java/freemarker/core/CAndCnBuiltInTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/CFormatTemplateTest.java b/freemarker-core/src/test/java/freemarker/core/CFormatTemplateTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/CFormatTemplateTest.java
rename to freemarker-core/src/test/java/freemarker/core/CFormatTemplateTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/CTemplateNumberFormatTest.java b/freemarker-core/src/test/java/freemarker/core/CTemplateNumberFormatTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/CTemplateNumberFormatTest.java
rename to freemarker-core/src/test/java/freemarker/core/CTemplateNumberFormatTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/CallerTemplateNameTest.java b/freemarker-core/src/test/java/freemarker/core/CallerTemplateNameTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/CallerTemplateNameTest.java
rename to freemarker-core/src/test/java/freemarker/core/CallerTemplateNameTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/CamelCaseTest.java b/freemarker-core/src/test/java/freemarker/core/CamelCaseTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/CamelCaseTest.java
rename to freemarker-core/src/test/java/freemarker/core/CamelCaseTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/CanonicalFormTest.java b/freemarker-core/src/test/java/freemarker/core/CanonicalFormTest.java
similarity index 95%
rename from freemarker-test/src/test/java/freemarker/core/CanonicalFormTest.java
rename to freemarker-core/src/test/java/freemarker/core/CanonicalFormTest.java
index 79c1136..a7bbdab 100644
--- a/freemarker-test/src/test/java/freemarker/core/CanonicalFormTest.java
+++ b/freemarker-core/src/test/java/freemarker/core/CanonicalFormTest.java
@@ -22,6 +22,9 @@
 import java.io.IOException;
 import java.io.StringWriter;
 
+import org.junit.internal.runners.JUnit38ClassRunner;
+import org.junit.runner.RunWith;
+
 import freemarker.cache.ClassTemplateLoader;
 import freemarker.template.Configuration;
 import freemarker.template.MalformedTemplateNameException;
@@ -29,6 +32,7 @@
 import freemarker.test.CopyrightCommentRemoverTemplateLoader;
 import freemarker.test.utility.FileTestCase;
 
+@RunWith(JUnit38ClassRunner.class)
 public class CanonicalFormTest extends FileTestCase {
 
     public CanonicalFormTest(String name) {
diff --git a/freemarker-test/src/test/java/freemarker/core/CapturingAssignmentTest.java b/freemarker-core/src/test/java/freemarker/core/CapturingAssignmentTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/CapturingAssignmentTest.java
rename to freemarker-core/src/test/java/freemarker/core/CapturingAssignmentTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/CoercionToTextualTest.java b/freemarker-core/src/test/java/freemarker/core/CoercionToTextualTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/CoercionToTextualTest.java
rename to freemarker-core/src/test/java/freemarker/core/CoercionToTextualTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/CombinedMarkupOutputFormatTest.java b/freemarker-core/src/test/java/freemarker/core/CombinedMarkupOutputFormatTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/CombinedMarkupOutputFormatTest.java
rename to freemarker-core/src/test/java/freemarker/core/CombinedMarkupOutputFormatTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/ConcatenatedSequenceTest.java b/freemarker-core/src/test/java/freemarker/core/ConcatenatedSequenceTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/ConcatenatedSequenceTest.java
rename to freemarker-core/src/test/java/freemarker/core/ConcatenatedSequenceTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/ConfigurableTest.java b/freemarker-core/src/test/java/freemarker/core/ConfigurableTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/ConfigurableTest.java
rename to freemarker-core/src/test/java/freemarker/core/ConfigurableTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/CoreLocaleUtilsTest.java b/freemarker-core/src/test/java/freemarker/core/CoreLocaleUtilsTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/CoreLocaleUtilsTest.java
rename to freemarker-core/src/test/java/freemarker/core/CoreLocaleUtilsTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/CustomCFormat.java b/freemarker-core/src/test/java/freemarker/core/CustomCFormat.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/CustomCFormat.java
rename to freemarker-core/src/test/java/freemarker/core/CustomCFormat.java
diff --git a/freemarker-test/src/test/java/freemarker/core/CustomHTMLOutputFormat.java b/freemarker-core/src/test/java/freemarker/core/CustomHTMLOutputFormat.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/CustomHTMLOutputFormat.java
rename to freemarker-core/src/test/java/freemarker/core/CustomHTMLOutputFormat.java
diff --git a/freemarker-test/src/test/java/freemarker/core/CustomTemplateHTMLModel.java b/freemarker-core/src/test/java/freemarker/core/CustomTemplateHTMLModel.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/CustomTemplateHTMLModel.java
rename to freemarker-core/src/test/java/freemarker/core/CustomTemplateHTMLModel.java
diff --git a/freemarker-test/src/test/java/freemarker/core/DateFormatTest.java b/freemarker-core/src/test/java/freemarker/core/DateFormatTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/DateFormatTest.java
rename to freemarker-core/src/test/java/freemarker/core/DateFormatTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/DefaultTruncateBuiltinAlgorithmTest.java b/freemarker-core/src/test/java/freemarker/core/DefaultTruncateBuiltinAlgorithmTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/DefaultTruncateBuiltinAlgorithmTest.java
rename to freemarker-core/src/test/java/freemarker/core/DefaultTruncateBuiltinAlgorithmTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/DirectiveCallPlaceTest.java b/freemarker-core/src/test/java/freemarker/core/DirectiveCallPlaceTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/DirectiveCallPlaceTest.java
rename to freemarker-core/src/test/java/freemarker/core/DirectiveCallPlaceTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/DummyOutputFormat.java b/freemarker-core/src/test/java/freemarker/core/DummyOutputFormat.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/DummyOutputFormat.java
rename to freemarker-core/src/test/java/freemarker/core/DummyOutputFormat.java
diff --git a/freemarker-test/src/test/java/freemarker/core/EncodingOverrideTest.java b/freemarker-core/src/test/java/freemarker/core/EncodingOverrideTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/EncodingOverrideTest.java
rename to freemarker-core/src/test/java/freemarker/core/EncodingOverrideTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/EndTagSyntaxTest.java b/freemarker-core/src/test/java/freemarker/core/EndTagSyntaxTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/EndTagSyntaxTest.java
rename to freemarker-core/src/test/java/freemarker/core/EndTagSyntaxTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/EnvironmentCustomStateTest.java b/freemarker-core/src/test/java/freemarker/core/EnvironmentCustomStateTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/EnvironmentCustomStateTest.java
rename to freemarker-core/src/test/java/freemarker/core/EnvironmentCustomStateTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/EnvironmentGetTemplateVariantsTest.java b/freemarker-core/src/test/java/freemarker/core/EnvironmentGetTemplateVariantsTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/EnvironmentGetTemplateVariantsTest.java
rename to freemarker-core/src/test/java/freemarker/core/EnvironmentGetTemplateVariantsTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/EpochMillisDivTemplateDateFormatFactory.java b/freemarker-core/src/test/java/freemarker/core/EpochMillisDivTemplateDateFormatFactory.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/EpochMillisDivTemplateDateFormatFactory.java
rename to freemarker-core/src/test/java/freemarker/core/EpochMillisDivTemplateDateFormatFactory.java
diff --git a/freemarker-test/src/test/java/freemarker/core/EpochMillisTemplateDateFormatFactory.java b/freemarker-core/src/test/java/freemarker/core/EpochMillisTemplateDateFormatFactory.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/EpochMillisTemplateDateFormatFactory.java
rename to freemarker-core/src/test/java/freemarker/core/EpochMillisTemplateDateFormatFactory.java
diff --git a/freemarker-test/src/test/java/freemarker/core/EvalJsonBuiltInTest.java b/freemarker-core/src/test/java/freemarker/core/EvalJsonBuiltInTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/EvalJsonBuiltInTest.java
rename to freemarker-core/src/test/java/freemarker/core/EvalJsonBuiltInTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/ExtendedDecimalFormatTest.java b/freemarker-core/src/test/java/freemarker/core/ExtendedDecimalFormatTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/ExtendedDecimalFormatTest.java
rename to freemarker-core/src/test/java/freemarker/core/ExtendedDecimalFormatTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/FilterBiTest.java b/freemarker-core/src/test/java/freemarker/core/FilterBiTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/FilterBiTest.java
rename to freemarker-core/src/test/java/freemarker/core/FilterBiTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/GetOptionalTemplateTest.java b/freemarker-core/src/test/java/freemarker/core/GetOptionalTemplateTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/GetOptionalTemplateTest.java
rename to freemarker-core/src/test/java/freemarker/core/GetOptionalTemplateTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/HTMLISOTemplateDateFormatFactory.java b/freemarker-core/src/test/java/freemarker/core/HTMLISOTemplateDateFormatFactory.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/HTMLISOTemplateDateFormatFactory.java
rename to freemarker-core/src/test/java/freemarker/core/HTMLISOTemplateDateFormatFactory.java
diff --git a/freemarker-test/src/test/java/freemarker/core/HTMLOutputFormatTest.java b/freemarker-core/src/test/java/freemarker/core/HTMLOutputFormatTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/HTMLOutputFormatTest.java
rename to freemarker-core/src/test/java/freemarker/core/HTMLOutputFormatTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/HeaderParsingTest.java b/freemarker-core/src/test/java/freemarker/core/HeaderParsingTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/HeaderParsingTest.java
rename to freemarker-core/src/test/java/freemarker/core/HeaderParsingTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/HexTemplateNumberFormatFactory.java b/freemarker-core/src/test/java/freemarker/core/HexTemplateNumberFormatFactory.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/HexTemplateNumberFormatFactory.java
rename to freemarker-core/src/test/java/freemarker/core/HexTemplateNumberFormatFactory.java
diff --git a/freemarker-test/src/test/java/freemarker/core/IncludeAndImportConfigurableLayersTest.java b/freemarker-core/src/test/java/freemarker/core/IncludeAndImportConfigurableLayersTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/IncludeAndImportConfigurableLayersTest.java
rename to freemarker-core/src/test/java/freemarker/core/IncludeAndImportConfigurableLayersTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/IncludeAndImportTest.java b/freemarker-core/src/test/java/freemarker/core/IncludeAndImportTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/IncludeAndImportTest.java
rename to freemarker-core/src/test/java/freemarker/core/IncludeAndImportTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/InterpolationSyntaxTest.java b/freemarker-core/src/test/java/freemarker/core/InterpolationSyntaxTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/InterpolationSyntaxTest.java
rename to freemarker-core/src/test/java/freemarker/core/InterpolationSyntaxTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/InterpretAndEvalTemplateNameTest.java b/freemarker-core/src/test/java/freemarker/core/InterpretAndEvalTemplateNameTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/InterpretAndEvalTemplateNameTest.java
rename to freemarker-core/src/test/java/freemarker/core/InterpretAndEvalTemplateNameTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/InterpretSettingInheritanceTest.java b/freemarker-core/src/test/java/freemarker/core/InterpretSettingInheritanceTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/InterpretSettingInheritanceTest.java
rename to freemarker-core/src/test/java/freemarker/core/InterpretSettingInheritanceTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/IteratorIssuesTest.java b/freemarker-core/src/test/java/freemarker/core/IteratorIssuesTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/IteratorIssuesTest.java
rename to freemarker-core/src/test/java/freemarker/core/IteratorIssuesTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/JSONParserTest.java b/freemarker-core/src/test/java/freemarker/core/JSONParserTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/JSONParserTest.java
rename to freemarker-core/src/test/java/freemarker/core/JSONParserTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/LambdaParsingTest.java b/freemarker-core/src/test/java/freemarker/core/LambdaParsingTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/LambdaParsingTest.java
rename to freemarker-core/src/test/java/freemarker/core/LambdaParsingTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/LamdaAndEscapeTest.java b/freemarker-core/src/test/java/freemarker/core/LamdaAndEscapeTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/LamdaAndEscapeTest.java
rename to freemarker-core/src/test/java/freemarker/core/LamdaAndEscapeTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/LazilyGeneratedCollectionTest.java b/freemarker-core/src/test/java/freemarker/core/LazilyGeneratedCollectionTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/LazilyGeneratedCollectionTest.java
rename to freemarker-core/src/test/java/freemarker/core/LazilyGeneratedCollectionTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/LegacyFMParserConstructorsTest.java b/freemarker-core/src/test/java/freemarker/core/LegacyFMParserConstructorsTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/LegacyFMParserConstructorsTest.java
rename to freemarker-core/src/test/java/freemarker/core/LegacyFMParserConstructorsTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/ListBreakContinueTest.java b/freemarker-core/src/test/java/freemarker/core/ListBreakContinueTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/ListBreakContinueTest.java
rename to freemarker-core/src/test/java/freemarker/core/ListBreakContinueTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/ListErrorsTest.java b/freemarker-core/src/test/java/freemarker/core/ListErrorsTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/ListErrorsTest.java
rename to freemarker-core/src/test/java/freemarker/core/ListErrorsTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/ListWithStreamLikeBuiltinsTest.java b/freemarker-core/src/test/java/freemarker/core/ListWithStreamLikeBuiltinsTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/ListWithStreamLikeBuiltinsTest.java
rename to freemarker-core/src/test/java/freemarker/core/ListWithStreamLikeBuiltinsTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/LocAndTZSensitiveTemplateDateFormatFactory.java b/freemarker-core/src/test/java/freemarker/core/LocAndTZSensitiveTemplateDateFormatFactory.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/LocAndTZSensitiveTemplateDateFormatFactory.java
rename to freemarker-core/src/test/java/freemarker/core/LocAndTZSensitiveTemplateDateFormatFactory.java
diff --git a/freemarker-test/src/test/java/freemarker/core/LocaleSensitiveTemplateNumberFormatFactory.java b/freemarker-core/src/test/java/freemarker/core/LocaleSensitiveTemplateNumberFormatFactory.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/LocaleSensitiveTemplateNumberFormatFactory.java
rename to freemarker-core/src/test/java/freemarker/core/LocaleSensitiveTemplateNumberFormatFactory.java
diff --git a/freemarker-test/src/test/java/freemarker/core/MapBiTest.java b/freemarker-core/src/test/java/freemarker/core/MapBiTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/MapBiTest.java
rename to freemarker-core/src/test/java/freemarker/core/MapBiTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/MinMaxBITest.java b/freemarker-core/src/test/java/freemarker/core/MinMaxBITest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/MinMaxBITest.java
rename to freemarker-core/src/test/java/freemarker/core/MinMaxBITest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/MiscErrorMessagesTest.java b/freemarker-core/src/test/java/freemarker/core/MiscErrorMessagesTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/MiscErrorMessagesTest.java
rename to freemarker-core/src/test/java/freemarker/core/MiscErrorMessagesTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/NullTransparencyTest.java b/freemarker-core/src/test/java/freemarker/core/NullTransparencyTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/NullTransparencyTest.java
rename to freemarker-core/src/test/java/freemarker/core/NullTransparencyTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/NumberBiTest.java b/freemarker-core/src/test/java/freemarker/core/NumberBiTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/NumberBiTest.java
rename to freemarker-core/src/test/java/freemarker/core/NumberBiTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/NumberFormatTest.java b/freemarker-core/src/test/java/freemarker/core/NumberFormatTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/NumberFormatTest.java
rename to freemarker-core/src/test/java/freemarker/core/NumberFormatTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/OptInTemplateClassResolverTest.java b/freemarker-core/src/test/java/freemarker/core/OptInTemplateClassResolverTest.java
similarity index 98%
rename from freemarker-test/src/test/java/freemarker/core/OptInTemplateClassResolverTest.java
rename to freemarker-core/src/test/java/freemarker/core/OptInTemplateClassResolverTest.java
index b0a9d29..89dfbf7 100644
--- a/freemarker-test/src/test/java/freemarker/core/OptInTemplateClassResolverTest.java
+++ b/freemarker-core/src/test/java/freemarker/core/OptInTemplateClassResolverTest.java
@@ -24,6 +24,9 @@
 import java.util.List;
 import java.util.Set;
 
+import org.junit.internal.runners.JUnit38ClassRunner;
+import org.junit.runner.RunWith;
+
 import freemarker.template.Configuration;
 import freemarker.template.Template;
 import freemarker.template.TemplateException;
@@ -31,6 +34,7 @@
 import junit.framework.AssertionFailedError;
 import junit.framework.TestCase;
 
+@RunWith(JUnit38ClassRunner.class)
 public class OptInTemplateClassResolverTest extends TestCase {
 
     public OptInTemplateClassResolverTest(String name) {
diff --git a/freemarker-test/src/test/java/freemarker/core/OutputFormatTest.java b/freemarker-core/src/test/java/freemarker/core/OutputFormatTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/OutputFormatTest.java
rename to freemarker-core/src/test/java/freemarker/core/OutputFormatTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/ParseTimeParameterBIErrorMessagesTest.java b/freemarker-core/src/test/java/freemarker/core/ParseTimeParameterBIErrorMessagesTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/ParseTimeParameterBIErrorMessagesTest.java
rename to freemarker-core/src/test/java/freemarker/core/ParseTimeParameterBIErrorMessagesTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/ParsingErrorMessagesTest.java b/freemarker-core/src/test/java/freemarker/core/ParsingErrorMessagesTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/ParsingErrorMessagesTest.java
rename to freemarker-core/src/test/java/freemarker/core/ParsingErrorMessagesTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/PrintfGTemplateNumberFormatFactory.java b/freemarker-core/src/test/java/freemarker/core/PrintfGTemplateNumberFormatFactory.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/PrintfGTemplateNumberFormatFactory.java
rename to freemarker-core/src/test/java/freemarker/core/PrintfGTemplateNumberFormatFactory.java
diff --git a/freemarker-test/src/test/java/freemarker/core/RTFOutputFormatTest.java b/freemarker-core/src/test/java/freemarker/core/RTFOutputFormatTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/RTFOutputFormatTest.java
rename to freemarker-core/src/test/java/freemarker/core/RTFOutputFormatTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/SQLTimeZoneTest.java b/freemarker-core/src/test/java/freemarker/core/SQLTimeZoneTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/SQLTimeZoneTest.java
rename to freemarker-core/src/test/java/freemarker/core/SQLTimeZoneTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/SeldomEscapedOutputFormat.java b/freemarker-core/src/test/java/freemarker/core/SeldomEscapedOutputFormat.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/SeldomEscapedOutputFormat.java
rename to freemarker-core/src/test/java/freemarker/core/SeldomEscapedOutputFormat.java
diff --git a/freemarker-test/src/test/java/freemarker/core/SequenceBuiltInTest.java b/freemarker-core/src/test/java/freemarker/core/SequenceBuiltInTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/SequenceBuiltInTest.java
rename to freemarker-core/src/test/java/freemarker/core/SequenceBuiltInTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/SettingDirectiveTest.java b/freemarker-core/src/test/java/freemarker/core/SettingDirectiveTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/SettingDirectiveTest.java
rename to freemarker-core/src/test/java/freemarker/core/SettingDirectiveTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/SpecialVariableTest.java b/freemarker-core/src/test/java/freemarker/core/SpecialVariableTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/SpecialVariableTest.java
rename to freemarker-core/src/test/java/freemarker/core/SpecialVariableTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/StringLiteralInterpolationTest.java b/freemarker-core/src/test/java/freemarker/core/StringLiteralInterpolationTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/StringLiteralInterpolationTest.java
rename to freemarker-core/src/test/java/freemarker/core/StringLiteralInterpolationTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/TabSizeTest.java b/freemarker-core/src/test/java/freemarker/core/TabSizeTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/TabSizeTest.java
rename to freemarker-core/src/test/java/freemarker/core/TabSizeTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/TagSyntaxVariationsTest.java b/freemarker-core/src/test/java/freemarker/core/TagSyntaxVariationsTest.java
similarity index 98%
rename from freemarker-test/src/test/java/freemarker/core/TagSyntaxVariationsTest.java
rename to freemarker-core/src/test/java/freemarker/core/TagSyntaxVariationsTest.java
index 7343796..b5cb659 100644
--- a/freemarker-test/src/test/java/freemarker/core/TagSyntaxVariationsTest.java
+++ b/freemarker-core/src/test/java/freemarker/core/TagSyntaxVariationsTest.java
@@ -23,6 +23,9 @@
 import java.io.StringReader;
 import java.io.StringWriter;
 
+import org.junit.internal.runners.JUnit38ClassRunner;
+import org.junit.runner.RunWith;
+
 import freemarker.template.Configuration;
 import freemarker.template.Template;
 import freemarker.template.TemplateException;
@@ -33,6 +36,7 @@
  * Test various generated templates (permutations), including some deliberately
  * wrong ones, with various tag_syntax settings.  
  */
+@RunWith(JUnit38ClassRunner.class)
 public class TagSyntaxVariationsTest extends TestCase {
     
     private static final String HDR_ANG = "<#ftl>";
diff --git a/freemarker-test/src/test/java/freemarker/core/TakeWhileAndDropWhileBiTest.java b/freemarker-core/src/test/java/freemarker/core/TakeWhileAndDropWhileBiTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/TakeWhileAndDropWhileBiTest.java
rename to freemarker-core/src/test/java/freemarker/core/TakeWhileAndDropWhileBiTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/TemplatGetEncodingTest.java b/freemarker-core/src/test/java/freemarker/core/TemplatGetEncodingTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/TemplatGetEncodingTest.java
rename to freemarker-core/src/test/java/freemarker/core/TemplatGetEncodingTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/TemplateConfigurationTest.java b/freemarker-core/src/test/java/freemarker/core/TemplateConfigurationTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/TemplateConfigurationTest.java
rename to freemarker-core/src/test/java/freemarker/core/TemplateConfigurationTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/TemplateConfigurationWithTemplateCacheTest.java b/freemarker-core/src/test/java/freemarker/core/TemplateConfigurationWithTemplateCacheTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/TemplateConfigurationWithTemplateCacheTest.java
rename to freemarker-core/src/test/java/freemarker/core/TemplateConfigurationWithTemplateCacheTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/TemplateDummyOutputModel.java b/freemarker-core/src/test/java/freemarker/core/TemplateDummyOutputModel.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/TemplateDummyOutputModel.java
rename to freemarker-core/src/test/java/freemarker/core/TemplateDummyOutputModel.java
diff --git a/freemarker-test/src/test/java/freemarker/core/TemplateLevelSettings.java b/freemarker-core/src/test/java/freemarker/core/TemplateLevelSettings.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/TemplateLevelSettings.java
rename to freemarker-core/src/test/java/freemarker/core/TemplateLevelSettings.java
diff --git a/freemarker-test/src/test/java/freemarker/core/TemplateNameSpecialVariablesTest.java b/freemarker-core/src/test/java/freemarker/core/TemplateNameSpecialVariablesTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/TemplateNameSpecialVariablesTest.java
rename to freemarker-core/src/test/java/freemarker/core/TemplateNameSpecialVariablesTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/TemplateProcessingTracerTest.java b/freemarker-core/src/test/java/freemarker/core/TemplateProcessingTracerTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/TemplateProcessingTracerTest.java
rename to freemarker-core/src/test/java/freemarker/core/TemplateProcessingTracerTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/TemplateSeldomEscapedOutputModel.java b/freemarker-core/src/test/java/freemarker/core/TemplateSeldomEscapedOutputModel.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/TemplateSeldomEscapedOutputModel.java
rename to freemarker-core/src/test/java/freemarker/core/TemplateSeldomEscapedOutputModel.java
diff --git a/freemarker-test/src/test/java/freemarker/core/TemplateTransformModelTest.java b/freemarker-core/src/test/java/freemarker/core/TemplateTransformModelTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/TemplateTransformModelTest.java
rename to freemarker-core/src/test/java/freemarker/core/TemplateTransformModelTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/ThreadInterruptingSupportTest.java b/freemarker-core/src/test/java/freemarker/core/ThreadInterruptingSupportTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/ThreadInterruptingSupportTest.java
rename to freemarker-core/src/test/java/freemarker/core/ThreadInterruptingSupportTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/TruncateBuiltInTest.java b/freemarker-core/src/test/java/freemarker/core/TruncateBuiltInTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/TruncateBuiltInTest.java
rename to freemarker-core/src/test/java/freemarker/core/TruncateBuiltInTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/TypeErrorMessagesTest.java b/freemarker-core/src/test/java/freemarker/core/TypeErrorMessagesTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/TypeErrorMessagesTest.java
rename to freemarker-core/src/test/java/freemarker/core/TypeErrorMessagesTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/UncheckedExceptionHandlingTest.java b/freemarker-core/src/test/java/freemarker/core/UncheckedExceptionHandlingTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/UncheckedExceptionHandlingTest.java
rename to freemarker-core/src/test/java/freemarker/core/UncheckedExceptionHandlingTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/UnclosedCommentTest.java b/freemarker-core/src/test/java/freemarker/core/UnclosedCommentTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/UnclosedCommentTest.java
rename to freemarker-core/src/test/java/freemarker/core/UnclosedCommentTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/WhitespaceStrippingTest.java b/freemarker-core/src/test/java/freemarker/core/WhitespaceStrippingTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/WhitespaceStrippingTest.java
rename to freemarker-core/src/test/java/freemarker/core/WhitespaceStrippingTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/WithArgsBuiltInTest.java b/freemarker-core/src/test/java/freemarker/core/WithArgsBuiltInTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/WithArgsBuiltInTest.java
rename to freemarker-core/src/test/java/freemarker/core/WithArgsBuiltInTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/XHTMLOutputFormatTest.java b/freemarker-core/src/test/java/freemarker/core/XHTMLOutputFormatTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/XHTMLOutputFormatTest.java
rename to freemarker-core/src/test/java/freemarker/core/XHTMLOutputFormatTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/XMLOutputFormatTest.java b/freemarker-core/src/test/java/freemarker/core/XMLOutputFormatTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/XMLOutputFormatTest.java
rename to freemarker-core/src/test/java/freemarker/core/XMLOutputFormatTest.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/AbstractParallelIntrospectionTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/AbstractParallelIntrospectionTest.java
similarity index 97%
rename from freemarker-test/src/test/java/freemarker/ext/beans/AbstractParallelIntrospectionTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/AbstractParallelIntrospectionTest.java
index e6d8b01..3c310d6 100644
--- a/freemarker-test/src/test/java/freemarker/ext/beans/AbstractParallelIntrospectionTest.java
+++ b/freemarker-core/src/test/java/freemarker/ext/beans/AbstractParallelIntrospectionTest.java
@@ -19,12 +19,16 @@
 
 package freemarker.ext.beans;
 
+import org.junit.internal.runners.JUnit38ClassRunner;
+import org.junit.runner.RunWith;
+
 import freemarker.template.TemplateHashModel;
 import freemarker.template.TemplateMethodModel;
 import freemarker.template.TemplateModelException;
 import freemarker.template.TemplateNumberModel;
 import junit.framework.TestCase;
 
+@RunWith(JUnit38ClassRunner.class)
 public abstract class AbstractParallelIntrospectionTest extends TestCase {
     
     private static final int NUM_THREADS = 8;
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/BeansAPINewInstanceTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/BeansAPINewInstanceTest.java
similarity index 97%
rename from freemarker-test/src/test/java/freemarker/ext/beans/BeansAPINewInstanceTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/BeansAPINewInstanceTest.java
index fac6e45..7ea5a54 100644
--- a/freemarker-test/src/test/java/freemarker/ext/beans/BeansAPINewInstanceTest.java
+++ b/freemarker-core/src/test/java/freemarker/ext/beans/BeansAPINewInstanceTest.java
@@ -19,10 +19,14 @@
 
 package freemarker.ext.beans;
 
+import org.junit.internal.runners.JUnit38ClassRunner;
+import org.junit.runner.RunWith;
+
 import freemarker.template.Configuration;
 import freemarker.test.utility.TestUtil;
 import junit.framework.TestCase;
 
+@RunWith(JUnit38ClassRunner.class)
 public class BeansAPINewInstanceTest extends TestCase {
 
     private BeansWrapper beansWrapper = new BeansWrapperBuilder(Configuration.VERSION_2_3_21).build();
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperBasics.java b/freemarker-core/src/test/java/freemarker/ext/beans/BeansWrapperBasics.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperBasics.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/BeansWrapperBasics.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperCachesTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/BeansWrapperCachesTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperCachesTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/BeansWrapperCachesTest.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperMiscTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/BeansWrapperMiscTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperMiscTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/BeansWrapperMiscTest.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperReadOnlyTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/BeansWrapperReadOnlyTest.java
similarity index 96%
rename from freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperReadOnlyTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/BeansWrapperReadOnlyTest.java
index 5cbcd6e..d979092 100644
--- a/freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperReadOnlyTest.java
+++ b/freemarker-core/src/test/java/freemarker/ext/beans/BeansWrapperReadOnlyTest.java
@@ -25,6 +25,9 @@
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 
+import org.junit.internal.runners.JUnit38ClassRunner;
+import org.junit.runner.RunWith;
+
 import freemarker.template.DefaultObjectWrapper;
 import freemarker.template.ObjectWrapper;
 import freemarker.template.utility.ClassUtil;
@@ -35,6 +38,7 @@
  * Tests if all JavaBean properties of the standard {@link ObjectWrapper} classes are locked by
  * {@link WriteProtectable#writeProtect()}. 
  */
+@RunWith(JUnit38ClassRunner.class)
 public class BeansWrapperReadOnlyTest extends TestCase {
 
     private static final String EXPECTED_MESSAGE_PART = "write protected";
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperSingletonsTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/BeansWrapperSingletonsTest.java
similarity index 99%
rename from freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperSingletonsTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/BeansWrapperSingletonsTest.java
index d5054e8..28ba8df 100644
--- a/freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperSingletonsTest.java
+++ b/freemarker-core/src/test/java/freemarker/ext/beans/BeansWrapperSingletonsTest.java
@@ -29,6 +29,9 @@
 import java.util.List;
 import java.util.Map;
 
+import org.junit.internal.runners.JUnit38ClassRunner;
+import org.junit.runner.RunWith;
+
 import freemarker.ext.beans.BeansWrapper.MethodAppearanceDecision;
 import freemarker.ext.beans.BeansWrapper.MethodAppearanceDecisionInput;
 import freemarker.template.Configuration;
@@ -42,6 +45,7 @@
 import freemarker.test.utility.TestUtil;
 import junit.framework.TestCase;
 
+@RunWith(JUnit38ClassRunner.class)
 public class BeansWrapperSingletonsTest extends TestCase {
 
     public BeansWrapperSingletonsTest(String name) {
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/BridgeMethodsBean.java b/freemarker-core/src/test/java/freemarker/ext/beans/BridgeMethodsBean.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/BridgeMethodsBean.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/BridgeMethodsBean.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/BridgeMethodsBeanBase.java b/freemarker-core/src/test/java/freemarker/ext/beans/BridgeMethodsBeanBase.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/BridgeMethodsBeanBase.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/BridgeMethodsBeanBase.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/CommonSupertypeForUnwrappingHintTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/CommonSupertypeForUnwrappingHintTest.java
similarity index 98%
rename from freemarker-test/src/test/java/freemarker/ext/beans/CommonSupertypeForUnwrappingHintTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/CommonSupertypeForUnwrappingHintTest.java
index 68db7e2..db749d8 100644
--- a/freemarker-test/src/test/java/freemarker/ext/beans/CommonSupertypeForUnwrappingHintTest.java
+++ b/freemarker-core/src/test/java/freemarker/ext/beans/CommonSupertypeForUnwrappingHintTest.java
@@ -22,10 +22,14 @@
 import java.io.Serializable;
 import java.util.List;
 
+import org.junit.internal.runners.JUnit38ClassRunner;
+import org.junit.runner.RunWith;
+
 import freemarker.template.Configuration;
 import freemarker.template.TemplateModelException;
 import junit.framework.TestCase;
 
+@RunWith(JUnit38ClassRunner.class)
 public class CommonSupertypeForUnwrappingHintTest extends TestCase {
     
     final OverloadedMethodsSubset buggy
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/DefaultMemberAccessPolicyTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/DefaultMemberAccessPolicyTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/DefaultMemberAccessPolicyTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/DefaultMemberAccessPolicyTest.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperMemberAccessPolicyTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/DefaultObjectWrapperMemberAccessPolicyTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperMemberAccessPolicyTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/DefaultObjectWrapperMemberAccessPolicyTest.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/EnumModelsTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/EnumModelsTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/EnumModelsTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/EnumModelsTest.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/ErrorMessagesTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/ErrorMessagesTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/ErrorMessagesTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/ErrorMessagesTest.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/FineTuneMethodAppearanceTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/FineTuneMethodAppearanceTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/FineTuneMethodAppearanceTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/FineTuneMethodAppearanceTest.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/GetPropertyNameFromReaderMethodNameTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/GetPropertyNameFromReaderMethodNameTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/GetPropertyNameFromReaderMethodNameTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/GetPropertyNameFromReaderMethodNameTest.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/GetlessMethodsAsPropertyGettersRule.java b/freemarker-core/src/test/java/freemarker/ext/beans/GetlessMethodsAsPropertyGettersRule.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/GetlessMethodsAsPropertyGettersRule.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/GetlessMethodsAsPropertyGettersRule.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/IsApplicableTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/IsApplicableTest.java
similarity index 98%
rename from freemarker-test/src/test/java/freemarker/ext/beans/IsApplicableTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/IsApplicableTest.java
index df5a221..f28f292 100644
--- a/freemarker-test/src/test/java/freemarker/ext/beans/IsApplicableTest.java
+++ b/freemarker-core/src/test/java/freemarker/ext/beans/IsApplicableTest.java
@@ -26,9 +26,13 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.junit.internal.runners.JUnit38ClassRunner;
+import org.junit.runner.RunWith;
+
 import junit.framework.TestCase;
 
 @SuppressWarnings("boxing")
+@RunWith(JUnit38ClassRunner.class)
 public class IsApplicableTest extends TestCase {
 
     public IsApplicableTest(String name) {
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/IsMoreSpecificParameterTypeTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/IsMoreSpecificParameterTypeTest.java
similarity index 97%
rename from freemarker-test/src/test/java/freemarker/ext/beans/IsMoreSpecificParameterTypeTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/IsMoreSpecificParameterTypeTest.java
index 4d456de..8a1dbcb 100644
--- a/freemarker-test/src/test/java/freemarker/ext/beans/IsMoreSpecificParameterTypeTest.java
+++ b/freemarker-core/src/test/java/freemarker/ext/beans/IsMoreSpecificParameterTypeTest.java
@@ -23,8 +23,12 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.junit.internal.runners.JUnit38ClassRunner;
+import org.junit.runner.RunWith;
+
 import junit.framework.TestCase;
 
+@RunWith(JUnit38ClassRunner.class)
 public class IsMoreSpecificParameterTypeTest extends TestCase {
 
     public IsMoreSpecificParameterTypeTest(String name) {
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/Java8BeansWrapperBridgeMethodsTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/Java8BeansWrapperBridgeMethodsTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/Java8BeansWrapperBridgeMethodsTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/Java8BeansWrapperBridgeMethodsTest.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/Java8BeansWrapperTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/Java8BeansWrapperTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/Java8BeansWrapperTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/Java8BeansWrapperTest.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBean.java b/freemarker-core/src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBean.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBean.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBean.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBean2.java b/freemarker-core/src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBean2.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBean2.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBean2.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBeanBase.java b/freemarker-core/src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBeanBase.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBeanBase.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBeanBase.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBeanBase2.java b/freemarker-core/src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBeanBase2.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBeanBase2.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBeanBase2.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/Java8DefaultMethodsBean.java b/freemarker-core/src/test/java/freemarker/ext/beans/Java8DefaultMethodsBean.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/Java8DefaultMethodsBean.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/Java8DefaultMethodsBean.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/Java8DefaultMethodsBeanBase.java b/freemarker-core/src/test/java/freemarker/ext/beans/Java8DefaultMethodsBeanBase.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/Java8DefaultMethodsBeanBase.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/Java8DefaultMethodsBeanBase.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/Java9InstrospectorBugWorkaroundTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/Java9InstrospectorBugWorkaroundTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/Java9InstrospectorBugWorkaroundTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/Java9InstrospectorBugWorkaroundTest.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/LegacyDefaultMemberAccessPolicyTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/LegacyDefaultMemberAccessPolicyTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/LegacyDefaultMemberAccessPolicyTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/LegacyDefaultMemberAccessPolicyTest.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/ManyObjectsOfDifferentClasses.java b/freemarker-core/src/test/java/freemarker/ext/beans/ManyObjectsOfDifferentClasses.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/ManyObjectsOfDifferentClasses.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/ManyObjectsOfDifferentClasses.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/ManyStaticsOfDifferentClasses.java b/freemarker-core/src/test/java/freemarker/ext/beans/ManyStaticsOfDifferentClasses.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/ManyStaticsOfDifferentClasses.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/ManyStaticsOfDifferentClasses.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/MemberAccessMonitoringTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/MemberAccessMonitoringTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/MemberAccessMonitoringTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/MemberAccessMonitoringTest.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/MemberSelectorListMemberAccessPolicyTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/MemberSelectorListMemberAccessPolicyTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/MemberSelectorListMemberAccessPolicyTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/MemberSelectorListMemberAccessPolicyTest.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/MethodMatcherTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/MethodMatcherTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/MethodMatcherTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/MethodMatcherTest.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/MethodUtilTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/MethodUtilTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/MethodUtilTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/MethodUtilTest.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/MethodUtilTest2.java b/freemarker-core/src/test/java/freemarker/ext/beans/MethodUtilTest2.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/MethodUtilTest2.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/MethodUtilTest2.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/MiscNumericalOperationsTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/MiscNumericalOperationsTest.java
similarity index 97%
rename from freemarker-test/src/test/java/freemarker/ext/beans/MiscNumericalOperationsTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/MiscNumericalOperationsTest.java
index 508bbcb..db2959d 100644
--- a/freemarker-test/src/test/java/freemarker/ext/beans/MiscNumericalOperationsTest.java
+++ b/freemarker-core/src/test/java/freemarker/ext/beans/MiscNumericalOperationsTest.java
@@ -23,10 +23,13 @@
 import java.math.BigInteger;
 
 import org.junit.Assert;
+import org.junit.internal.runners.JUnit38ClassRunner;
+import org.junit.runner.RunWith;
 
 import freemarker.template.Configuration;
 import junit.framework.TestCase;
 
+@RunWith(JUnit38ClassRunner.class)
 public class MiscNumericalOperationsTest extends TestCase {
 
     public MiscNumericalOperationsTest(String name) {
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/ModelCacheTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/ModelCacheTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/ModelCacheTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/ModelCacheTest.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/OverloadedNumberUtilTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/OverloadedNumberUtilTest.java
similarity index 99%
rename from freemarker-test/src/test/java/freemarker/ext/beans/OverloadedNumberUtilTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/OverloadedNumberUtilTest.java
index 68a83fd..f3d251d 100644
--- a/freemarker-test/src/test/java/freemarker/ext/beans/OverloadedNumberUtilTest.java
+++ b/freemarker-core/src/test/java/freemarker/ext/beans/OverloadedNumberUtilTest.java
@@ -22,9 +22,13 @@
 import java.math.BigDecimal;
 import java.math.BigInteger;
 
+import org.junit.internal.runners.JUnit38ClassRunner;
+import org.junit.runner.RunWith;
+
 import junit.framework.TestCase;
 
 @SuppressWarnings("boxing")
+@RunWith(JUnit38ClassRunner.class)
 public class OverloadedNumberUtilTest extends TestCase {
 
     public OverloadedNumberUtilTest(String name) {
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/ParameterListPreferabilityTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/ParameterListPreferabilityTest.java
similarity index 99%
rename from freemarker-test/src/test/java/freemarker/ext/beans/ParameterListPreferabilityTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/ParameterListPreferabilityTest.java
index e2c3976..9025fde 100644
--- a/freemarker-test/src/test/java/freemarker/ext/beans/ParameterListPreferabilityTest.java
+++ b/freemarker-core/src/test/java/freemarker/ext/beans/ParameterListPreferabilityTest.java
@@ -27,10 +27,14 @@
 import java.util.Map;
 import java.util.TreeMap;
 
+import org.junit.internal.runners.JUnit38ClassRunner;
+import org.junit.runner.RunWith;
+
 import freemarker.template.utility.NumberUtil;
 import junit.framework.TestCase;
 
 @SuppressWarnings("boxing")
+@RunWith(JUnit38ClassRunner.class)
 public class ParameterListPreferabilityTest extends TestCase {
 
     public ParameterListPreferabilityTest(String name) {
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/PrallelObjectIntrospectionTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/PrallelObjectIntrospectionTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/PrallelObjectIntrospectionTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/PrallelObjectIntrospectionTest.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/PrallelStaticIntrospectionTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/PrallelStaticIntrospectionTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/PrallelStaticIntrospectionTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/PrallelStaticIntrospectionTest.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/StaticModelsTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/StaticModelsTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/StaticModelsTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/StaticModelsTest.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/TypeFlagsTest.java b/freemarker-core/src/test/java/freemarker/ext/beans/TypeFlagsTest.java
similarity index 99%
rename from freemarker-test/src/test/java/freemarker/ext/beans/TypeFlagsTest.java
rename to freemarker-core/src/test/java/freemarker/ext/beans/TypeFlagsTest.java
index d1584c5..192ea57 100644
--- a/freemarker-test/src/test/java/freemarker/ext/beans/TypeFlagsTest.java
+++ b/freemarker-core/src/test/java/freemarker/ext/beans/TypeFlagsTest.java
@@ -34,9 +34,13 @@
 import java.util.Map;
 import java.util.Set;
 
+import org.junit.internal.runners.JUnit38ClassRunner;
+import org.junit.runner.RunWith;
+
 import freemarker.template.Configuration;
 import junit.framework.TestCase;
 
+@RunWith(JUnit38ClassRunner.class)
 public class TypeFlagsTest extends TestCase {
 
     public TypeFlagsTest(String name) {
diff --git a/freemarker-test/src/test/java/freemarker/ext/dom/DOMConvenienceStaticsTest.java b/freemarker-core/src/test/java/freemarker/ext/dom/DOMConvenienceStaticsTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/dom/DOMConvenienceStaticsTest.java
rename to freemarker-core/src/test/java/freemarker/ext/dom/DOMConvenienceStaticsTest.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/dom/DOMSiblingTest.java b/freemarker-core/src/test/java/freemarker/ext/dom/DOMSiblingTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/dom/DOMSiblingTest.java
rename to freemarker-core/src/test/java/freemarker/ext/dom/DOMSiblingTest.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/dom/DOMTest.java b/freemarker-core/src/test/java/freemarker/ext/dom/DOMTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/dom/DOMTest.java
rename to freemarker-core/src/test/java/freemarker/ext/dom/DOMTest.java
diff --git a/freemarker-test/src/test/java/freemarker/manual/AbsoluteTemplateNameBIExample.java b/freemarker-core/src/test/java/freemarker/manual/AbsoluteTemplateNameBIExample.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/manual/AbsoluteTemplateNameBIExample.java
rename to freemarker-core/src/test/java/freemarker/manual/AbsoluteTemplateNameBIExample.java
diff --git a/freemarker-test/src/test/java/freemarker/manual/AutoEscapingExample.java b/freemarker-core/src/test/java/freemarker/manual/AutoEscapingExample.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/manual/AutoEscapingExample.java
rename to freemarker-core/src/test/java/freemarker/manual/AutoEscapingExample.java
diff --git a/freemarker-test/src/test/java/freemarker/manual/ConfigureOutputFormatExamples.java b/freemarker-core/src/test/java/freemarker/manual/ConfigureOutputFormatExamples.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/manual/ConfigureOutputFormatExamples.java
rename to freemarker-core/src/test/java/freemarker/manual/ConfigureOutputFormatExamples.java
diff --git a/freemarker-test/src/test/java/freemarker/manual/CustomFormatsExample.java b/freemarker-core/src/test/java/freemarker/manual/CustomFormatsExample.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/manual/CustomFormatsExample.java
rename to freemarker-core/src/test/java/freemarker/manual/CustomFormatsExample.java
diff --git a/freemarker-test/src/test/java/freemarker/manual/ExamplesTest.java b/freemarker-core/src/test/java/freemarker/manual/ExamplesTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/manual/ExamplesTest.java
rename to freemarker-core/src/test/java/freemarker/manual/ExamplesTest.java
diff --git a/freemarker-test/src/test/java/freemarker/manual/GettingStartedExample.java b/freemarker-core/src/test/java/freemarker/manual/GettingStartedExample.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/manual/GettingStartedExample.java
rename to freemarker-core/src/test/java/freemarker/manual/GettingStartedExample.java
diff --git a/freemarker-test/src/test/java/freemarker/manual/Product.java b/freemarker-core/src/test/java/freemarker/manual/Product.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/manual/Product.java
rename to freemarker-core/src/test/java/freemarker/manual/Product.java
diff --git a/freemarker-test/src/test/java/freemarker/manual/TemplateConfigurationExamples.java b/freemarker-core/src/test/java/freemarker/manual/TemplateConfigurationExamples.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/manual/TemplateConfigurationExamples.java
rename to freemarker-core/src/test/java/freemarker/manual/TemplateConfigurationExamples.java
diff --git a/freemarker-test/src/test/java/freemarker/manual/UnitAwareTemplateNumberFormatFactory.java b/freemarker-core/src/test/java/freemarker/manual/UnitAwareTemplateNumberFormatFactory.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/manual/UnitAwareTemplateNumberFormatFactory.java
rename to freemarker-core/src/test/java/freemarker/manual/UnitAwareTemplateNumberFormatFactory.java
diff --git a/freemarker-test/src/test/java/freemarker/manual/UnitAwareTemplateNumberModel.java b/freemarker-core/src/test/java/freemarker/manual/UnitAwareTemplateNumberModel.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/manual/UnitAwareTemplateNumberModel.java
rename to freemarker-core/src/test/java/freemarker/manual/UnitAwareTemplateNumberModel.java
diff --git a/freemarker-test/src/test/java/freemarker/manual/WithArgsExamples.java b/freemarker-core/src/test/java/freemarker/manual/WithArgsExamples.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/manual/WithArgsExamples.java
rename to freemarker-core/src/test/java/freemarker/manual/WithArgsExamples.java
diff --git a/freemarker-test/src/test/java/freemarker/manual/WithArgsLastExamples.java b/freemarker-core/src/test/java/freemarker/manual/WithArgsLastExamples.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/manual/WithArgsLastExamples.java
rename to freemarker-core/src/test/java/freemarker/manual/WithArgsLastExamples.java
diff --git a/freemarker-test/src/test/java/freemarker/template/ActualNamingConvetionTest.java b/freemarker-core/src/test/java/freemarker/template/ActualNamingConvetionTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/template/ActualNamingConvetionTest.java
rename to freemarker-core/src/test/java/freemarker/template/ActualNamingConvetionTest.java
diff --git a/freemarker-test/src/test/java/freemarker/template/ActualTagSyntaxTest.java b/freemarker-core/src/test/java/freemarker/template/ActualTagSyntaxTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/template/ActualTagSyntaxTest.java
rename to freemarker-core/src/test/java/freemarker/template/ActualTagSyntaxTest.java
diff --git a/freemarker-test/src/test/java/freemarker/template/ConfigurationTest.java b/freemarker-core/src/test/java/freemarker/template/ConfigurationTest.java
similarity index 99%
rename from freemarker-test/src/test/java/freemarker/template/ConfigurationTest.java
rename to freemarker-core/src/test/java/freemarker/template/ConfigurationTest.java
index 72287e6..6a08ea9 100644
--- a/freemarker-test/src/test/java/freemarker/template/ConfigurationTest.java
+++ b/freemarker-core/src/test/java/freemarker/template/ConfigurationTest.java
@@ -37,6 +37,8 @@
 import java.util.TimeZone;
 
 import org.junit.Test;
+import org.junit.internal.runners.JUnit38ClassRunner;
+import org.junit.runner.RunWith;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
@@ -98,6 +100,7 @@
 import freemarker.template.utility.NullWriter;
 import junit.framework.TestCase;
 
+@RunWith(JUnit38ClassRunner.class)
 public class ConfigurationTest extends TestCase {
 
     public ConfigurationTest(String name) {
diff --git a/freemarker-test/src/test/java/freemarker/template/CustomAttributeTest.java b/freemarker-core/src/test/java/freemarker/template/CustomAttributeTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/template/CustomAttributeTest.java
rename to freemarker-core/src/test/java/freemarker/template/CustomAttributeTest.java
diff --git a/freemarker-test/src/test/java/freemarker/template/ExceptionTest.java b/freemarker-core/src/test/java/freemarker/template/ExceptionTest.java
similarity index 97%
rename from freemarker-test/src/test/java/freemarker/template/ExceptionTest.java
rename to freemarker-core/src/test/java/freemarker/template/ExceptionTest.java
index 938cc16..d795c95 100644
--- a/freemarker-test/src/test/java/freemarker/template/ExceptionTest.java
+++ b/freemarker-core/src/test/java/freemarker/template/ExceptionTest.java
@@ -32,10 +32,15 @@
 import java.util.Collections;
 import java.util.Locale;
 
+import org.junit.internal.runners.JUnit38ClassRunner;
+import org.junit.runner.RunWith;
+
 import freemarker.cache.StringTemplateLoader;
 import freemarker.core.ParseException;
 import freemarker.template.utility.NullWriter;
 import junit.framework.TestCase;
+
+@RunWith(JUnit38ClassRunner.class)
 public class ExceptionTest extends TestCase {
     
     public ExceptionTest(String name) {
diff --git a/freemarker-test/src/test/java/freemarker/template/GetSourceTest.java b/freemarker-core/src/test/java/freemarker/template/GetSourceTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/template/GetSourceTest.java
rename to freemarker-core/src/test/java/freemarker/template/GetSourceTest.java
diff --git a/freemarker-test/src/test/java/freemarker/template/IncudeFromNamelessTest.java b/freemarker-core/src/test/java/freemarker/template/IncudeFromNamelessTest.java
similarity index 93%
rename from freemarker-test/src/test/java/freemarker/template/IncudeFromNamelessTest.java
rename to freemarker-core/src/test/java/freemarker/template/IncudeFromNamelessTest.java
index 19dbe58..539871d 100644
--- a/freemarker-test/src/test/java/freemarker/template/IncudeFromNamelessTest.java
+++ b/freemarker-core/src/test/java/freemarker/template/IncudeFromNamelessTest.java
@@ -23,9 +23,13 @@
 import java.io.StringReader;
 import java.io.StringWriter;
 
+import org.junit.internal.runners.JUnit38ClassRunner;
+import org.junit.runner.RunWith;
+
 import freemarker.cache.StringTemplateLoader;
 import junit.framework.TestCase;
 
+@RunWith(JUnit38ClassRunner.class)
 public class IncudeFromNamelessTest extends TestCase {
 
     public IncudeFromNamelessTest(String name) {
diff --git a/freemarker-test/src/test/java/freemarker/template/JavaCCExceptionAsEOFFixTest.java b/freemarker-core/src/test/java/freemarker/template/JavaCCExceptionAsEOFFixTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/template/JavaCCExceptionAsEOFFixTest.java
rename to freemarker-core/src/test/java/freemarker/template/JavaCCExceptionAsEOFFixTest.java
diff --git a/freemarker-test/src/test/java/freemarker/template/MistakenlyPublicImportAPIsTest.java b/freemarker-core/src/test/java/freemarker/template/MistakenlyPublicImportAPIsTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/template/MistakenlyPublicImportAPIsTest.java
rename to freemarker-core/src/test/java/freemarker/template/MistakenlyPublicImportAPIsTest.java
diff --git a/freemarker-test/src/test/java/freemarker/template/MistakenlyPublicMacroAPIsTest.java b/freemarker-core/src/test/java/freemarker/template/MistakenlyPublicMacroAPIsTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/template/MistakenlyPublicMacroAPIsTest.java
rename to freemarker-core/src/test/java/freemarker/template/MistakenlyPublicMacroAPIsTest.java
diff --git a/freemarker-test/src/test/java/freemarker/template/NullConfigurationTest.java b/freemarker-core/src/test/java/freemarker/template/NullConfigurationTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/template/NullConfigurationTest.java
rename to freemarker-core/src/test/java/freemarker/template/NullConfigurationTest.java
diff --git a/freemarker-test/src/test/java/freemarker/template/StaticObjectWrappersTest.java b/freemarker-core/src/test/java/freemarker/template/StaticObjectWrappersTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/template/StaticObjectWrappersTest.java
rename to freemarker-core/src/test/java/freemarker/template/StaticObjectWrappersTest.java
diff --git a/freemarker-test/src/test/java/freemarker/template/TemplateConstructorsTest.java b/freemarker-core/src/test/java/freemarker/template/TemplateConstructorsTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/template/TemplateConstructorsTest.java
rename to freemarker-core/src/test/java/freemarker/template/TemplateConstructorsTest.java
diff --git a/freemarker-test/src/test/java/freemarker/template/TemplateLanguageVersionTest.java b/freemarker-core/src/test/java/freemarker/template/TemplateLanguageVersionTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/template/TemplateLanguageVersionTest.java
rename to freemarker-core/src/test/java/freemarker/template/TemplateLanguageVersionTest.java
diff --git a/freemarker-test/src/test/java/freemarker/template/TemplateLookupStrategyTest.java b/freemarker-core/src/test/java/freemarker/template/TemplateLookupStrategyTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/template/TemplateLookupStrategyTest.java
rename to freemarker-core/src/test/java/freemarker/template/TemplateLookupStrategyTest.java
diff --git a/freemarker-test/src/test/java/freemarker/template/VersionTest.java b/freemarker-core/src/test/java/freemarker/template/VersionTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/template/VersionTest.java
rename to freemarker-core/src/test/java/freemarker/template/VersionTest.java
diff --git a/freemarker-test/src/test/java/freemarker/template/utility/ConstantsTest.java b/freemarker-core/src/test/java/freemarker/template/utility/ConstantsTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/template/utility/ConstantsTest.java
rename to freemarker-core/src/test/java/freemarker/template/utility/ConstantsTest.java
diff --git a/freemarker-test/src/test/java/freemarker/template/utility/DateUtilTest.java b/freemarker-core/src/test/java/freemarker/template/utility/DateUtilTest.java
similarity index 99%
rename from freemarker-test/src/test/java/freemarker/template/utility/DateUtilTest.java
rename to freemarker-core/src/test/java/freemarker/template/utility/DateUtilTest.java
index 27243d9..af84948 100644
--- a/freemarker-test/src/test/java/freemarker/template/utility/DateUtilTest.java
+++ b/freemarker-core/src/test/java/freemarker/template/utility/DateUtilTest.java
@@ -30,12 +30,16 @@
 import javax.xml.datatype.DatatypeFactory;
 import javax.xml.datatype.XMLGregorianCalendar;
 
+import org.junit.internal.runners.JUnit38ClassRunner;
+import org.junit.runner.RunWith;
+
 import freemarker.template.utility.DateUtil.CalendarFieldsToDateConverter;
 import freemarker.template.utility.DateUtil.DateParseException;
 import freemarker.template.utility.DateUtil.DateToISO8601CalendarFactory;
 import freemarker.template.utility.DateUtil.TrivialCalendarFieldsToDateConverter;
 import junit.framework.TestCase;
 
+@RunWith(JUnit38ClassRunner.class)
 public class DateUtilTest extends TestCase {
     
     private final TimeZone originalDefaultTZ = TimeZone.getDefault();
diff --git a/freemarker-test/src/test/java/freemarker/template/utility/DeepUnwrapTest.java b/freemarker-core/src/test/java/freemarker/template/utility/DeepUnwrapTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/template/utility/DeepUnwrapTest.java
rename to freemarker-core/src/test/java/freemarker/template/utility/DeepUnwrapTest.java
diff --git a/freemarker-test/src/test/java/freemarker/template/utility/NumberUtilTest.java b/freemarker-core/src/test/java/freemarker/template/utility/NumberUtilTest.java
similarity index 98%
rename from freemarker-test/src/test/java/freemarker/template/utility/NumberUtilTest.java
rename to freemarker-core/src/test/java/freemarker/template/utility/NumberUtilTest.java
index 3e13b6c..307a773 100644
--- a/freemarker-test/src/test/java/freemarker/template/utility/NumberUtilTest.java
+++ b/freemarker-core/src/test/java/freemarker/template/utility/NumberUtilTest.java
@@ -23,9 +23,12 @@
 import java.math.BigInteger;
 
 import org.junit.Test;
+import org.junit.internal.runners.JUnit38ClassRunner;
+import org.junit.runner.RunWith;
 
 import junit.framework.TestCase;
 
+@RunWith(JUnit38ClassRunner.class)
 public class NumberUtilTest extends TestCase {
 
     @Test
diff --git a/freemarker-test/src/test/java/freemarker/template/utility/StringUtilTest.java b/freemarker-core/src/test/java/freemarker/template/utility/StringUtilTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/template/utility/StringUtilTest.java
rename to freemarker-core/src/test/java/freemarker/template/utility/StringUtilTest.java
diff --git a/freemarker-test/src/test/java/freemarker/template/utility/TemplateModelUtilTest.java b/freemarker-core/src/test/java/freemarker/template/utility/TemplateModelUtilTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/template/utility/TemplateModelUtilTest.java
rename to freemarker-core/src/test/java/freemarker/template/utility/TemplateModelUtilTest.java
diff --git a/freemarker-test/src/test/java/freemarker/test/MonitoredTemplateLoader.java b/freemarker-core/src/test/java/freemarker/test/MonitoredTemplateLoader.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/MonitoredTemplateLoader.java
rename to freemarker-core/src/test/java/freemarker/test/MonitoredTemplateLoader.java
diff --git a/freemarker-test/src/test/java/freemarker/test/RuntimeEnvironmentReporterTest.java b/freemarker-core/src/test/java/freemarker/test/RuntimeEnvironmentReporterTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/RuntimeEnvironmentReporterTest.java
rename to freemarker-core/src/test/java/freemarker/test/RuntimeEnvironmentReporterTest.java
diff --git a/freemarker-test/src/test/java/freemarker/test/TemplateTest.java b/freemarker-core/src/test/java/freemarker/test/TemplateTest.java
similarity index 98%
rename from freemarker-test/src/test/java/freemarker/test/TemplateTest.java
rename to freemarker-core/src/test/java/freemarker/test/TemplateTest.java
index b55eb62..a730b3e 100644
--- a/freemarker-test/src/test/java/freemarker/test/TemplateTest.java
+++ b/freemarker-core/src/test/java/freemarker/test/TemplateTest.java
@@ -45,11 +45,11 @@
 import freemarker.template.Template;
 import freemarker.template.TemplateException;
 import freemarker.template.utility.StringUtil;
-import freemarker.test.templatesuite.TemplateTestSuite;
 import freemarker.test.utility.TestUtil;
 
 /**
- * Superclass of JUnit tests that process templates but aren't practical to implement via {@link TemplateTestSuite}. 
+ * Superclass of JUnit tests that process templates but aren't practical to implement via
+ * {@code freemarker.test.templatesuite.TemplateTestSuite}.
  */
 @Ignore
 public abstract class TemplateTest {
diff --git a/freemarker-test/src/test/java/freemarker/test/TreeView.java b/freemarker-core/src/test/java/freemarker/test/TreeView.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/TreeView.java
rename to freemarker-core/src/test/java/freemarker/test/TreeView.java
diff --git a/freemarker-test/src/test/resources/freemarker/cache/test.ftl b/freemarker-core/src/test/resources/freemarker/cache/test.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/cache/test.ftl
rename to freemarker-core/src/test/resources/freemarker/cache/test.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/core/ast-1.ast b/freemarker-core/src/test/resources/freemarker/core/ast-1.ast
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/ast-1.ast
rename to freemarker-core/src/test/resources/freemarker/core/ast-1.ast
diff --git a/freemarker-test/src/test/resources/freemarker/core/ast-1.ftl b/freemarker-core/src/test/resources/freemarker/core/ast-1.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/ast-1.ftl
rename to freemarker-core/src/test/resources/freemarker/core/ast-1.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/core/ast-assignments.ast b/freemarker-core/src/test/resources/freemarker/core/ast-assignments.ast
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/ast-assignments.ast
rename to freemarker-core/src/test/resources/freemarker/core/ast-assignments.ast
diff --git a/freemarker-test/src/test/resources/freemarker/core/ast-assignments.ftl b/freemarker-core/src/test/resources/freemarker/core/ast-assignments.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/ast-assignments.ftl
rename to freemarker-core/src/test/resources/freemarker/core/ast-assignments.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/core/ast-builtins.ast b/freemarker-core/src/test/resources/freemarker/core/ast-builtins.ast
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/ast-builtins.ast
rename to freemarker-core/src/test/resources/freemarker/core/ast-builtins.ast
diff --git a/freemarker-test/src/test/resources/freemarker/core/ast-builtins.ftl b/freemarker-core/src/test/resources/freemarker/core/ast-builtins.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/ast-builtins.ftl
rename to freemarker-core/src/test/resources/freemarker/core/ast-builtins.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/core/ast-lambda.ast b/freemarker-core/src/test/resources/freemarker/core/ast-lambda.ast
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/ast-lambda.ast
rename to freemarker-core/src/test/resources/freemarker/core/ast-lambda.ast
diff --git a/freemarker-test/src/test/resources/freemarker/core/ast-lambda.ftl b/freemarker-core/src/test/resources/freemarker/core/ast-lambda.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/ast-lambda.ftl
rename to freemarker-core/src/test/resources/freemarker/core/ast-lambda.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/core/ast-locations.ast b/freemarker-core/src/test/resources/freemarker/core/ast-locations.ast
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/ast-locations.ast
rename to freemarker-core/src/test/resources/freemarker/core/ast-locations.ast
diff --git a/freemarker-test/src/test/resources/freemarker/core/ast-locations.ftl b/freemarker-core/src/test/resources/freemarker/core/ast-locations.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/ast-locations.ftl
rename to freemarker-core/src/test/resources/freemarker/core/ast-locations.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/core/ast-mixedcontentsimplifications.ast b/freemarker-core/src/test/resources/freemarker/core/ast-mixedcontentsimplifications.ast
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/ast-mixedcontentsimplifications.ast
rename to freemarker-core/src/test/resources/freemarker/core/ast-mixedcontentsimplifications.ast
diff --git a/freemarker-test/src/test/resources/freemarker/core/ast-mixedcontentsimplifications.ftl b/freemarker-core/src/test/resources/freemarker/core/ast-mixedcontentsimplifications.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/ast-mixedcontentsimplifications.ftl
rename to freemarker-core/src/test/resources/freemarker/core/ast-mixedcontentsimplifications.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/core/ast-multipleignoredchildren.ast b/freemarker-core/src/test/resources/freemarker/core/ast-multipleignoredchildren.ast
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/ast-multipleignoredchildren.ast
rename to freemarker-core/src/test/resources/freemarker/core/ast-multipleignoredchildren.ast
diff --git a/freemarker-test/src/test/resources/freemarker/core/ast-multipleignoredchildren.ftl b/freemarker-core/src/test/resources/freemarker/core/ast-multipleignoredchildren.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/ast-multipleignoredchildren.ftl
rename to freemarker-core/src/test/resources/freemarker/core/ast-multipleignoredchildren.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/core/ast-nestedignoredchildren.ast b/freemarker-core/src/test/resources/freemarker/core/ast-nestedignoredchildren.ast
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/ast-nestedignoredchildren.ast
rename to freemarker-core/src/test/resources/freemarker/core/ast-nestedignoredchildren.ast
diff --git a/freemarker-test/src/test/resources/freemarker/core/ast-nestedignoredchildren.ftl b/freemarker-core/src/test/resources/freemarker/core/ast-nestedignoredchildren.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/ast-nestedignoredchildren.ftl
rename to freemarker-core/src/test/resources/freemarker/core/ast-nestedignoredchildren.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/core/ast-range.ast b/freemarker-core/src/test/resources/freemarker/core/ast-range.ast
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/ast-range.ast
rename to freemarker-core/src/test/resources/freemarker/core/ast-range.ast
diff --git a/freemarker-test/src/test/resources/freemarker/core/ast-range.ftl b/freemarker-core/src/test/resources/freemarker/core/ast-range.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/ast-range.ftl
rename to freemarker-core/src/test/resources/freemarker/core/ast-range.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/core/ast-strlitinterpolation.ast b/freemarker-core/src/test/resources/freemarker/core/ast-strlitinterpolation.ast
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/ast-strlitinterpolation.ast
rename to freemarker-core/src/test/resources/freemarker/core/ast-strlitinterpolation.ast
diff --git a/freemarker-test/src/test/resources/freemarker/core/ast-strlitinterpolation.ftl b/freemarker-core/src/test/resources/freemarker/core/ast-strlitinterpolation.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/ast-strlitinterpolation.ftl
rename to freemarker-core/src/test/resources/freemarker/core/ast-strlitinterpolation.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/core/ast-whitespacestripping.ast b/freemarker-core/src/test/resources/freemarker/core/ast-whitespacestripping.ast
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/ast-whitespacestripping.ast
rename to freemarker-core/src/test/resources/freemarker/core/ast-whitespacestripping.ast
diff --git a/freemarker-test/src/test/resources/freemarker/core/ast-whitespacestripping.ftl b/freemarker-core/src/test/resources/freemarker/core/ast-whitespacestripping.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/ast-whitespacestripping.ftl
rename to freemarker-core/src/test/resources/freemarker/core/ast-whitespacestripping.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/core/cano-assignments.ftl b/freemarker-core/src/test/resources/freemarker/core/cano-assignments.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/cano-assignments.ftl
rename to freemarker-core/src/test/resources/freemarker/core/cano-assignments.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/core/cano-assignments.ftl.out b/freemarker-core/src/test/resources/freemarker/core/cano-assignments.ftl.out
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/cano-assignments.ftl.out
rename to freemarker-core/src/test/resources/freemarker/core/cano-assignments.ftl.out
diff --git a/freemarker-test/src/test/resources/freemarker/core/cano-builtins.ftl b/freemarker-core/src/test/resources/freemarker/core/cano-builtins.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/cano-builtins.ftl
rename to freemarker-core/src/test/resources/freemarker/core/cano-builtins.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/core/cano-builtins.ftl.out b/freemarker-core/src/test/resources/freemarker/core/cano-builtins.ftl.out
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/cano-builtins.ftl.out
rename to freemarker-core/src/test/resources/freemarker/core/cano-builtins.ftl.out
diff --git a/freemarker-test/src/test/resources/freemarker/core/cano-identifier-escaping.ftl b/freemarker-core/src/test/resources/freemarker/core/cano-identifier-escaping.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/cano-identifier-escaping.ftl
rename to freemarker-core/src/test/resources/freemarker/core/cano-identifier-escaping.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/core/cano-identifier-escaping.ftl.out b/freemarker-core/src/test/resources/freemarker/core/cano-identifier-escaping.ftl.out
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/cano-identifier-escaping.ftl.out
rename to freemarker-core/src/test/resources/freemarker/core/cano-identifier-escaping.ftl.out
diff --git a/freemarker-test/src/test/resources/freemarker/core/cano-macros.ftl b/freemarker-core/src/test/resources/freemarker/core/cano-macros.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/cano-macros.ftl
rename to freemarker-core/src/test/resources/freemarker/core/cano-macros.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/core/cano-macros.ftl.out b/freemarker-core/src/test/resources/freemarker/core/cano-macros.ftl.out
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/cano-macros.ftl.out
rename to freemarker-core/src/test/resources/freemarker/core/cano-macros.ftl.out
diff --git a/freemarker-test/src/test/resources/freemarker/core/cano-strlitinterpolation.ftl b/freemarker-core/src/test/resources/freemarker/core/cano-strlitinterpolation.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/cano-strlitinterpolation.ftl
rename to freemarker-core/src/test/resources/freemarker/core/cano-strlitinterpolation.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/core/cano-strlitinterpolation.ftl.out b/freemarker-core/src/test/resources/freemarker/core/cano-strlitinterpolation.ftl.out
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/cano-strlitinterpolation.ftl.out
rename to freemarker-core/src/test/resources/freemarker/core/cano-strlitinterpolation.ftl.out
diff --git a/freemarker-test/src/test/resources/freemarker/core/encodingOverride-ISO-8859-1.ftl b/freemarker-core/src/test/resources/freemarker/core/encodingOverride-ISO-8859-1.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/encodingOverride-ISO-8859-1.ftl
rename to freemarker-core/src/test/resources/freemarker/core/encodingOverride-ISO-8859-1.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/core/encodingOverride-UTF-8.ftl b/freemarker-core/src/test/resources/freemarker/core/encodingOverride-UTF-8.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/core/encodingOverride-UTF-8.ftl
rename to freemarker-core/src/test/resources/freemarker/core/encodingOverride-UTF-8.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/ext/dom/DOMSiblingTest.xml b/freemarker-core/src/test/resources/freemarker/ext/dom/DOMSiblingTest.xml
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/dom/DOMSiblingTest.xml
rename to freemarker-core/src/test/resources/freemarker/ext/dom/DOMSiblingTest.xml
diff --git a/freemarker-test/src/test/resources/freemarker/manual/AbsoluteTemplateNameBIExample-foo.ftl b/freemarker-core/src/test/resources/freemarker/manual/AbsoluteTemplateNameBIExample-foo.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/AbsoluteTemplateNameBIExample-foo.ftl
rename to freemarker-core/src/test/resources/freemarker/manual/AbsoluteTemplateNameBIExample-foo.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/manual/AbsoluteTemplateNameBIExample-lib.ftl b/freemarker-core/src/test/resources/freemarker/manual/AbsoluteTemplateNameBIExample-lib.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/AbsoluteTemplateNameBIExample-lib.ftl
rename to freemarker-core/src/test/resources/freemarker/manual/AbsoluteTemplateNameBIExample-lib.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-capture.ftlh b/freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-capture.ftlh
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-capture.ftlh
rename to freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-capture.ftlh
diff --git a/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-capture.ftlh.out b/freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-capture.ftlh.out
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-capture.ftlh.out
rename to freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-capture.ftlh.out
diff --git a/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-convert.ftlh b/freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-convert.ftlh
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-convert.ftlh
rename to freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-convert.ftlh
diff --git a/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-convert.ftlh.out b/freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-convert.ftlh.out
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-convert.ftlh.out
rename to freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-convert.ftlh.out
diff --git a/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-convert2.ftl b/freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-convert2.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-convert2.ftl
rename to freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-convert2.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-convert2.ftl.out b/freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-convert2.ftl.out
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-convert2.ftl.out
rename to freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-convert2.ftl.out
diff --git a/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-infoBox.ftlh b/freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-infoBox.ftlh
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-infoBox.ftlh
rename to freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-infoBox.ftlh
diff --git a/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-infoBox.ftlh.out b/freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-infoBox.ftlh.out
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-infoBox.ftlh.out
rename to freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-infoBox.ftlh.out
diff --git a/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-markup.ftlh b/freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-markup.ftlh
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-markup.ftlh
rename to freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-markup.ftlh
diff --git a/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-markup.ftlh.out b/freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-markup.ftlh.out
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-markup.ftlh.out
rename to freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-markup.ftlh.out
diff --git a/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-stringConcat.ftlh b/freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-stringConcat.ftlh
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-stringConcat.ftlh
rename to freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-stringConcat.ftlh
diff --git a/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-stringConcat.ftlh.out b/freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-stringConcat.ftlh.out
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-stringConcat.ftlh.out
rename to freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-stringConcat.ftlh.out
diff --git a/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral.ftlh b/freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral.ftlh
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral.ftlh
rename to freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral.ftlh
diff --git a/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral.ftlh.out b/freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral.ftlh.out
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral.ftlh.out
rename to freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral.ftlh.out
diff --git a/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral2.ftlh b/freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral2.ftlh
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral2.ftlh
rename to freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral2.ftlh
diff --git a/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral2.ftlh.out b/freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral2.ftlh.out
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral2.ftlh.out
rename to freemarker-core/src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral2.ftlh.out
diff --git a/freemarker-test/src/test/resources/freemarker/manual/ConfigureOutputFormatExamples1.properties b/freemarker-core/src/test/resources/freemarker/manual/ConfigureOutputFormatExamples1.properties
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/ConfigureOutputFormatExamples1.properties
rename to freemarker-core/src/test/resources/freemarker/manual/ConfigureOutputFormatExamples1.properties
diff --git a/freemarker-test/src/test/resources/freemarker/manual/ConfigureOutputFormatExamples2.properties b/freemarker-core/src/test/resources/freemarker/manual/ConfigureOutputFormatExamples2.properties
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/ConfigureOutputFormatExamples2.properties
rename to freemarker-core/src/test/resources/freemarker/manual/ConfigureOutputFormatExamples2.properties
diff --git a/freemarker-test/src/test/resources/freemarker/manual/CustomFormatsExample-alias1.ftlh b/freemarker-core/src/test/resources/freemarker/manual/CustomFormatsExample-alias1.ftlh
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/CustomFormatsExample-alias1.ftlh
rename to freemarker-core/src/test/resources/freemarker/manual/CustomFormatsExample-alias1.ftlh
diff --git a/freemarker-test/src/test/resources/freemarker/manual/CustomFormatsExample-alias1.ftlh.out b/freemarker-core/src/test/resources/freemarker/manual/CustomFormatsExample-alias1.ftlh.out
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/CustomFormatsExample-alias1.ftlh.out
rename to freemarker-core/src/test/resources/freemarker/manual/CustomFormatsExample-alias1.ftlh.out
diff --git a/freemarker-test/src/test/resources/freemarker/manual/CustomFormatsExample-alias2.ftlh b/freemarker-core/src/test/resources/freemarker/manual/CustomFormatsExample-alias2.ftlh
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/CustomFormatsExample-alias2.ftlh
rename to freemarker-core/src/test/resources/freemarker/manual/CustomFormatsExample-alias2.ftlh
diff --git a/freemarker-test/src/test/resources/freemarker/manual/CustomFormatsExample-alias2.ftlh.out b/freemarker-core/src/test/resources/freemarker/manual/CustomFormatsExample-alias2.ftlh.out
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/CustomFormatsExample-alias2.ftlh.out
rename to freemarker-core/src/test/resources/freemarker/manual/CustomFormatsExample-alias2.ftlh.out
diff --git a/freemarker-test/src/test/resources/freemarker/manual/CustomFormatsExample-modelAware.ftlh b/freemarker-core/src/test/resources/freemarker/manual/CustomFormatsExample-modelAware.ftlh
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/CustomFormatsExample-modelAware.ftlh
rename to freemarker-core/src/test/resources/freemarker/manual/CustomFormatsExample-modelAware.ftlh
diff --git a/freemarker-test/src/test/resources/freemarker/manual/CustomFormatsExample-modelAware.ftlh.out b/freemarker-core/src/test/resources/freemarker/manual/CustomFormatsExample-modelAware.ftlh.out
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/CustomFormatsExample-modelAware.ftlh.out
rename to freemarker-core/src/test/resources/freemarker/manual/CustomFormatsExample-modelAware.ftlh.out
diff --git a/freemarker-test/src/test/resources/freemarker/manual/TemplateConfigurationExamples1.properties b/freemarker-core/src/test/resources/freemarker/manual/TemplateConfigurationExamples1.properties
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/TemplateConfigurationExamples1.properties
rename to freemarker-core/src/test/resources/freemarker/manual/TemplateConfigurationExamples1.properties
diff --git a/freemarker-test/src/test/resources/freemarker/manual/TemplateConfigurationExamples2.properties b/freemarker-core/src/test/resources/freemarker/manual/TemplateConfigurationExamples2.properties
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/TemplateConfigurationExamples2.properties
rename to freemarker-core/src/test/resources/freemarker/manual/TemplateConfigurationExamples2.properties
diff --git a/freemarker-test/src/test/resources/freemarker/manual/TemplateConfigurationExamples3.properties b/freemarker-core/src/test/resources/freemarker/manual/TemplateConfigurationExamples3.properties
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/TemplateConfigurationExamples3.properties
rename to freemarker-core/src/test/resources/freemarker/manual/TemplateConfigurationExamples3.properties
diff --git a/freemarker-test/src/test/resources/freemarker/manual/WithArgsExamples-usingWithArgsSpecialVariable.ftl b/freemarker-core/src/test/resources/freemarker/manual/WithArgsExamples-usingWithArgsSpecialVariable.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/WithArgsExamples-usingWithArgsSpecialVariable.ftl
rename to freemarker-core/src/test/resources/freemarker/manual/WithArgsExamples-usingWithArgsSpecialVariable.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/manual/WithArgsExamples-usingWithArgsSpecialVariable.ftl.out b/freemarker-core/src/test/resources/freemarker/manual/WithArgsExamples-usingWithArgsSpecialVariable.ftl.out
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/WithArgsExamples-usingWithArgsSpecialVariable.ftl.out
rename to freemarker-core/src/test/resources/freemarker/manual/WithArgsExamples-usingWithArgsSpecialVariable.ftl.out
diff --git a/freemarker-test/src/test/resources/freemarker/manual/WithArgsLastExamples.ftl b/freemarker-core/src/test/resources/freemarker/manual/WithArgsLastExamples.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/WithArgsLastExamples.ftl
rename to freemarker-core/src/test/resources/freemarker/manual/WithArgsLastExamples.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/manual/WithArgsLastExamples.ftl.out b/freemarker-core/src/test/resources/freemarker/manual/WithArgsLastExamples.ftl.out
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/WithArgsLastExamples.ftl.out
rename to freemarker-core/src/test/resources/freemarker/manual/WithArgsLastExamples.ftl.out
diff --git a/freemarker-test/src/test/resources/freemarker/manual/dir/AbsoluteTemplateNameBIExample-foo.ftl b/freemarker-core/src/test/resources/freemarker/manual/dir/AbsoluteTemplateNameBIExample-foo.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/dir/AbsoluteTemplateNameBIExample-foo.ftl
rename to freemarker-core/src/test/resources/freemarker/manual/dir/AbsoluteTemplateNameBIExample-foo.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/manual/dir/AbsoluteTemplateNameBIExample-main.ftl b/freemarker-core/src/test/resources/freemarker/manual/dir/AbsoluteTemplateNameBIExample-main.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/dir/AbsoluteTemplateNameBIExample-main.ftl
rename to freemarker-core/src/test/resources/freemarker/manual/dir/AbsoluteTemplateNameBIExample-main.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/manual/dir/AbsoluteTemplateNameBIExample-main.ftl.out b/freemarker-core/src/test/resources/freemarker/manual/dir/AbsoluteTemplateNameBIExample-main.ftl.out
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/dir/AbsoluteTemplateNameBIExample-main.ftl.out
rename to freemarker-core/src/test/resources/freemarker/manual/dir/AbsoluteTemplateNameBIExample-main.ftl.out
diff --git a/freemarker-test/src/test/resources/freemarker/manual/test.ftlh b/freemarker-core/src/test/resources/freemarker/manual/test.ftlh
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/manual/test.ftlh
rename to freemarker-core/src/test/resources/freemarker/manual/test.ftlh
diff --git a/freemarker-test/src/test/resources/freemarker/template/toCache1.ftl b/freemarker-core/src/test/resources/freemarker/template/toCache1.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/template/toCache1.ftl
rename to freemarker-core/src/test/resources/freemarker/template/toCache1.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/template/toCache2.ftl b/freemarker-core/src/test/resources/freemarker/template/toCache2.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/template/toCache2.ftl
rename to freemarker-core/src/test/resources/freemarker/template/toCache2.ftl
diff --git a/freemarker-test/src/test/java/freemarker/ext/jsp/JspTestFreemarkerServlet.java b/freemarker-jsp21/src/test/java/freemarker/ext/jsp/JspTestFreemarkerServlet.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/jsp/JspTestFreemarkerServlet.java
rename to freemarker-jsp21/src/test/java/freemarker/ext/jsp/JspTestFreemarkerServlet.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/jsp/JspTestFreemarkerServletWithDefaultOverride.java b/freemarker-jsp21/src/test/java/freemarker/ext/jsp/JspTestFreemarkerServletWithDefaultOverride.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/jsp/JspTestFreemarkerServletWithDefaultOverride.java
rename to freemarker-jsp21/src/test/java/freemarker/ext/jsp/JspTestFreemarkerServletWithDefaultOverride.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/jsp/RealServletContainertTest.java b/freemarker-jsp21/src/test/java/freemarker/ext/jsp/RealServletContainertTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/jsp/RealServletContainertTest.java
rename to freemarker-jsp21/src/test/java/freemarker/ext/jsp/RealServletContainertTest.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/jsp/TLDParsingTest.java b/freemarker-jsp21/src/test/java/freemarker/ext/jsp/TLDParsingTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/jsp/TLDParsingTest.java
rename to freemarker-jsp21/src/test/java/freemarker/ext/jsp/TLDParsingTest.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/jsp/TaglibMethodUtilTest.java b/freemarker-jsp21/src/test/java/freemarker/ext/jsp/TaglibMethodUtilTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/jsp/TaglibMethodUtilTest.java
rename to freemarker-jsp21/src/test/java/freemarker/ext/jsp/TaglibMethodUtilTest.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/AttributeAccessorTag.java b/freemarker-jsp21/src/test/java/freemarker/ext/jsp/taglibmembers/AttributeAccessorTag.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/AttributeAccessorTag.java
rename to freemarker-jsp21/src/test/java/freemarker/ext/jsp/taglibmembers/AttributeAccessorTag.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/AttributeInfoTag.java b/freemarker-jsp21/src/test/java/freemarker/ext/jsp/taglibmembers/AttributeInfoTag.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/AttributeInfoTag.java
rename to freemarker-jsp21/src/test/java/freemarker/ext/jsp/taglibmembers/AttributeInfoTag.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/EnclosingClass.java b/freemarker-jsp21/src/test/java/freemarker/ext/jsp/taglibmembers/EnclosingClass.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/EnclosingClass.java
rename to freemarker-jsp21/src/test/java/freemarker/ext/jsp/taglibmembers/EnclosingClass.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/GetAndSetTag.java b/freemarker-jsp21/src/test/java/freemarker/ext/jsp/taglibmembers/GetAndSetTag.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/GetAndSetTag.java
rename to freemarker-jsp21/src/test/java/freemarker/ext/jsp/taglibmembers/GetAndSetTag.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/TestFunctions.java b/freemarker-jsp21/src/test/java/freemarker/ext/jsp/taglibmembers/TestFunctions.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/TestFunctions.java
rename to freemarker-jsp21/src/test/java/freemarker/ext/jsp/taglibmembers/TestFunctions.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/TestSimpleTag.java b/freemarker-jsp21/src/test/java/freemarker/ext/jsp/taglibmembers/TestSimpleTag.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/TestSimpleTag.java
rename to freemarker-jsp21/src/test/java/freemarker/ext/jsp/taglibmembers/TestSimpleTag.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/TestSimpleTag2.java b/freemarker-jsp21/src/test/java/freemarker/ext/jsp/taglibmembers/TestSimpleTag2.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/TestSimpleTag2.java
rename to freemarker-jsp21/src/test/java/freemarker/ext/jsp/taglibmembers/TestSimpleTag2.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/TestSimpleTag3.java b/freemarker-jsp21/src/test/java/freemarker/ext/jsp/taglibmembers/TestSimpleTag3.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/TestSimpleTag3.java
rename to freemarker-jsp21/src/test/java/freemarker/ext/jsp/taglibmembers/TestSimpleTag3.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/TestTag.java b/freemarker-jsp21/src/test/java/freemarker/ext/jsp/taglibmembers/TestTag.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/TestTag.java
rename to freemarker-jsp21/src/test/java/freemarker/ext/jsp/taglibmembers/TestTag.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/TestTag2.java b/freemarker-jsp21/src/test/java/freemarker/ext/jsp/taglibmembers/TestTag2.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/TestTag2.java
rename to freemarker-jsp21/src/test/java/freemarker/ext/jsp/taglibmembers/TestTag2.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/TestTag3.java b/freemarker-jsp21/src/test/java/freemarker/ext/jsp/taglibmembers/TestTag3.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/TestTag3.java
rename to freemarker-jsp21/src/test/java/freemarker/ext/jsp/taglibmembers/TestTag3.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/jsp/webapps/config/WebappLocalFreemarkerServlet.java b/freemarker-jsp21/src/test/java/freemarker/ext/jsp/webapps/config/WebappLocalFreemarkerServlet.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/jsp/webapps/config/WebappLocalFreemarkerServlet.java
rename to freemarker-jsp21/src/test/java/freemarker/ext/jsp/webapps/config/WebappLocalFreemarkerServlet.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/servlet/FreemarkerServletTest.java b/freemarker-jsp21/src/test/java/freemarker/ext/servlet/FreemarkerServletTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/servlet/FreemarkerServletTest.java
rename to freemarker-jsp21/src/test/java/freemarker/ext/servlet/FreemarkerServletTest.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/servlet/InitParamParserTest.java b/freemarker-jsp21/src/test/java/freemarker/ext/servlet/InitParamParserTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/servlet/InitParamParserTest.java
rename to freemarker-jsp21/src/test/java/freemarker/ext/servlet/InitParamParserTest.java
diff --git a/freemarker-test/src/test/java/freemarker/template/MockServletContext.java b/freemarker-jsp21/src/test/java/freemarker/template/MockServletContext.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/template/MockServletContext.java
rename to freemarker-jsp21/src/test/java/freemarker/template/MockServletContext.java
diff --git a/freemarker-test/src/test/java/freemarker/template/TemplateNotFoundMessageTest.java b/freemarker-jsp21/src/test/java/freemarker/template/TemplateNotFoundMessageTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/template/TemplateNotFoundMessageTest.java
rename to freemarker-jsp21/src/test/java/freemarker/template/TemplateNotFoundMessageTest.java
diff --git a/freemarker-test/src/test/java/freemarker/test/servlet/DefaultModel2TesterAction.java b/freemarker-jsp21/src/test/java/freemarker/test/servlet/DefaultModel2TesterAction.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/servlet/DefaultModel2TesterAction.java
rename to freemarker-jsp21/src/test/java/freemarker/test/servlet/DefaultModel2TesterAction.java
diff --git a/freemarker-test/src/test/java/freemarker/test/servlet/Model2Action.java b/freemarker-jsp21/src/test/java/freemarker/test/servlet/Model2Action.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/servlet/Model2Action.java
rename to freemarker-jsp21/src/test/java/freemarker/test/servlet/Model2Action.java
diff --git a/freemarker-test/src/test/java/freemarker/test/servlet/Model2TesterServlet.java b/freemarker-jsp21/src/test/java/freemarker/test/servlet/Model2TesterServlet.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/servlet/Model2TesterServlet.java
rename to freemarker-jsp21/src/test/java/freemarker/test/servlet/Model2TesterServlet.java
diff --git a/freemarker-test/src/test/java/freemarker/test/servlet/WebAppTestCase.java b/freemarker-jsp21/src/test/java/freemarker/test/servlet/WebAppTestCase.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/servlet/WebAppTestCase.java
rename to freemarker-jsp21/src/test/java/freemarker/test/servlet/WebAppTestCase.java
diff --git a/freemarker-test/src/test/resources/META-INF/tldDiscovery MetaInfTldSources-1.tld b/freemarker-jsp21/src/test/resources/META-INF/tldDiscovery MetaInfTldSources-1.tld
similarity index 100%
rename from freemarker-test/src/test/resources/META-INF/tldDiscovery MetaInfTldSources-1.tld
rename to freemarker-jsp21/src/test/resources/META-INF/tldDiscovery MetaInfTldSources-1.tld
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/TLDParsingTest.tld b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/TLDParsingTest.tld
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/TLDParsingTest.tld
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/TLDParsingTest.tld
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/templates/classpath-test.ftl b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/templates/classpath-test.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/templates/classpath-test.ftl
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/templates/classpath-test.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/tldDiscovery-ClassPathTlds-1.tld b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/tldDiscovery-ClassPathTlds-1.tld
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/tldDiscovery-ClassPathTlds-1.tld
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/tldDiscovery-ClassPathTlds-1.tld
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/tldDiscovery-ClassPathTlds-2.tld b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/tldDiscovery-ClassPathTlds-2.tld
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/tldDiscovery-ClassPathTlds-2.tld
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/tldDiscovery-ClassPathTlds-2.tld
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/CONTENTS.txt b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/CONTENTS.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/CONTENTS.txt
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/CONTENTS.txt
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/el-function-tag-name-clash.tld b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/el-function-tag-name-clash.tld
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/el-function-tag-name-clash.tld
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/el-function-tag-name-clash.tld
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/el-functions.tld b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/el-functions.tld
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/el-functions.tld
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/el-functions.tld
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/attributes-2.3.0.txt b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/attributes-2.3.0.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/attributes-2.3.0.txt
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/attributes-2.3.0.txt
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/attributes-2.3.22-future.txt b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/attributes-2.3.22-future.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/attributes-2.3.22-future.txt
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/attributes-2.3.22-future.txt
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/attributes.txt b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/attributes.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/attributes.txt
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/attributes.txt
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/customTags1.txt b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/customTags1.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/customTags1.txt
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/customTags1.txt
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/test.tld b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/test.tld
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/test.tld
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/test.tld
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/web.xml b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/web.xml
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/web.xml
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/web.xml
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/attributes.ftl b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/attributes.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/attributes.ftl
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/attributes.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/customELFunctions1.ftl b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/customELFunctions1.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/customELFunctions1.ftl
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/customELFunctions1.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/customELFunctions1.jsp b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/customELFunctions1.jsp
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/customELFunctions1.jsp
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/customELFunctions1.jsp
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/customTags1.ftl b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/customTags1.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/customTags1.ftl
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/customTags1.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/elFunctionsTagNameClash.ftl b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/elFunctionsTagNameClash.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/elFunctionsTagNameClash.ftl
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/elFunctionsTagNameClash.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/elFunctionsTagNameClash.jsp b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/elFunctionsTagNameClash.jsp
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/elFunctionsTagNameClash.jsp
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/elFunctionsTagNameClash.jsp
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/trivial-jstl-@Ignore.ftl b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/trivial-jstl-@Ignore.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/trivial-jstl-@Ignore.ftl
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/trivial-jstl-@Ignore.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/trivial.ftl b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/trivial.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/trivial.ftl
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/trivial.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/trivial.jsp b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/trivial.jsp
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/trivial.jsp
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/basic/trivial.jsp
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/config/CONTENTS.txt b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/config/CONTENTS.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/config/CONTENTS.txt
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/config/CONTENTS.txt
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/classes/sub/test.ftl b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/classes/sub/test.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/classes/sub/test.ftl
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/classes/sub/test.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/classes/test.ftl b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/classes/test.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/classes/test.ftl
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/classes/test.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/lib/templates.jar/sub/test2.ftl b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/lib/templates.jar/sub/test2.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/lib/templates.jar/sub/test2.ftl
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/lib/templates.jar/sub/test2.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/templates/test.ftl b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/templates/test.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/templates/test.ftl
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/templates/test.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/web.xml b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/web.xml
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/web.xml
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/web.xml
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/config/test.ftl b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/config/test.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/config/test.ftl
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/config/test.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/errors/CONTENTS.txt b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/errors/CONTENTS.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/errors/CONTENTS.txt
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/errors/CONTENTS.txt
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/errors/WEB-INF/web.xml b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/errors/WEB-INF/web.xml
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/errors/WEB-INF/web.xml
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/errors/WEB-INF/web.xml
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/errors/failing-parsetime.ftlnv b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/errors/failing-parsetime.ftlnv
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/errors/failing-parsetime.ftlnv
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/errors/failing-parsetime.ftlnv
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/errors/failing-parsetime.jsp b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/errors/failing-parsetime.jsp
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/errors/failing-parsetime.jsp
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/errors/failing-parsetime.jsp
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/errors/failing-runtime.ftl b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/errors/failing-runtime.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/errors/failing-runtime.ftl
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/errors/failing-runtime.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/errors/failing-runtime.jsp b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/errors/failing-runtime.jsp
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/errors/failing-runtime.jsp
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/errors/failing-runtime.jsp
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/errors/not-failing.ftl b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/errors/not-failing.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/errors/not-failing.ftl
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/errors/not-failing.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/multipleLoaders/CONTENTS.txt b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/multipleLoaders/CONTENTS.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/multipleLoaders/CONTENTS.txt
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/multipleLoaders/CONTENTS.txt
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/multipleLoaders/WEB-INF/templates/test.ftl b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/multipleLoaders/WEB-INF/templates/test.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/multipleLoaders/WEB-INF/templates/test.ftl
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/multipleLoaders/WEB-INF/templates/test.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/multipleLoaders/WEB-INF/web.xml b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/multipleLoaders/WEB-INF/web.xml
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/multipleLoaders/WEB-INF/web.xml
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/multipleLoaders/WEB-INF/web.xml
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/CONTENTS.txt b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/CONTENTS.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/CONTENTS.txt
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/CONTENTS.txt
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/expected/subdir/test-rel.txt b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/expected/subdir/test-rel.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/expected/subdir/test-rel.txt
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/expected/subdir/test-rel.txt
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/expected/test-noClasspath.txt b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/expected/test-noClasspath.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/expected/test-noClasspath.txt
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/expected/test-noClasspath.txt
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/expected/test1.txt b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/expected/test1.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/expected/test1.txt
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/expected/test1.txt
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/fmtesttag 2.tld b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/fmtesttag 2.tld
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/fmtesttag 2.tld
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/fmtesttag 2.tld
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/fmtesttag4.tld b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/fmtesttag4.tld
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/fmtesttag4.tld
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/fmtesttag4.tld
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/lib/taglib-foo.jar/META-INF/foo bar.tld b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/lib/taglib-foo.jar/META-INF/foo bar.tld
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/lib/taglib-foo.jar/META-INF/foo bar.tld
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/lib/taglib-foo.jar/META-INF/foo bar.tld
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/subdir-with-tld/fmtesttag3.tld b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/subdir-with-tld/fmtesttag3.tld
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/subdir-with-tld/fmtesttag3.tld
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/subdir-with-tld/fmtesttag3.tld
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/taglib 2.jar/META-INF/taglib.tld b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/taglib 2.jar/META-INF/taglib.tld
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/taglib 2.jar/META-INF/taglib.tld
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/taglib 2.jar/META-INF/taglib.tld
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/web.xml b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/web.xml
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/web.xml
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/web.xml
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/not-auto-scanned/fmtesttag.tld b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/not-auto-scanned/fmtesttag.tld
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/not-auto-scanned/fmtesttag.tld
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/not-auto-scanned/fmtesttag.tld
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/subdir/test-rel.ftl b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/subdir/test-rel.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/subdir/test-rel.ftl
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/subdir/test-rel.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/test-noClasspath.ftl b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/test-noClasspath.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/test-noClasspath.ftl
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/test-noClasspath.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/test1.ftl b/freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/test1.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/test1.ftl
rename to freemarker-jsp21/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/test1.ftl
diff --git a/freemarker-test/src/test/java/freemarker/test/servlet/web.xml b/freemarker-jsp21/src/test/resources/freemarker/test/servlet/web.xml
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/servlet/web.xml
rename to freemarker-jsp21/src/test/resources/freemarker/test/servlet/web.xml
diff --git a/freemarker-test/src/test/java/freemarker/core/ObjectBuilderSettingsTest.java b/freemarker-jython25/src/test/java/freemarker/core/ObjectBuilderSettingsTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/ObjectBuilderSettingsTest.java
rename to freemarker-jython25/src/test/java/freemarker/core/ObjectBuilderSettingsTest.java
diff --git a/freemarker-test/src/test/java/freemarker/core/subpkg/PackageVisibleAll.java b/freemarker-jython25/src/test/java/freemarker/core/subpkg/PackageVisibleAll.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/subpkg/PackageVisibleAll.java
rename to freemarker-jython25/src/test/java/freemarker/core/subpkg/PackageVisibleAll.java
diff --git a/freemarker-test/src/test/java/freemarker/core/subpkg/PackageVisibleAllWithBuilder.java b/freemarker-jython25/src/test/java/freemarker/core/subpkg/PackageVisibleAllWithBuilder.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/subpkg/PackageVisibleAllWithBuilder.java
rename to freemarker-jython25/src/test/java/freemarker/core/subpkg/PackageVisibleAllWithBuilder.java
diff --git a/freemarker-test/src/test/java/freemarker/core/subpkg/PackageVisibleAllWithBuilderBuilder.java b/freemarker-jython25/src/test/java/freemarker/core/subpkg/PackageVisibleAllWithBuilderBuilder.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/subpkg/PackageVisibleAllWithBuilderBuilder.java
rename to freemarker-jython25/src/test/java/freemarker/core/subpkg/PackageVisibleAllWithBuilderBuilder.java
diff --git a/freemarker-test/src/test/java/freemarker/core/subpkg/PackageVisibleWithPublicConstructor.java b/freemarker-jython25/src/test/java/freemarker/core/subpkg/PackageVisibleWithPublicConstructor.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/subpkg/PackageVisibleWithPublicConstructor.java
rename to freemarker-jython25/src/test/java/freemarker/core/subpkg/PackageVisibleWithPublicConstructor.java
diff --git a/freemarker-test/src/test/java/freemarker/core/subpkg/PublicAll.java b/freemarker-jython25/src/test/java/freemarker/core/subpkg/PublicAll.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/subpkg/PublicAll.java
rename to freemarker-jython25/src/test/java/freemarker/core/subpkg/PublicAll.java
diff --git a/freemarker-test/src/test/java/freemarker/core/subpkg/PublicWithMixedConstructors.java b/freemarker-jython25/src/test/java/freemarker/core/subpkg/PublicWithMixedConstructors.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/subpkg/PublicWithMixedConstructors.java
rename to freemarker-jython25/src/test/java/freemarker/core/subpkg/PublicWithMixedConstructors.java
diff --git a/freemarker-test/src/test/java/freemarker/core/subpkg/PublicWithPackageVisibleConstructor.java b/freemarker-jython25/src/test/java/freemarker/core/subpkg/PublicWithPackageVisibleConstructor.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/subpkg/PublicWithPackageVisibleConstructor.java
rename to freemarker-jython25/src/test/java/freemarker/core/subpkg/PublicWithPackageVisibleConstructor.java
diff --git a/freemarker-test/src/test/java/freemarker/template/DefaultObjectWrapperTest.java b/freemarker-jython25/src/test/java/freemarker/template/DefaultObjectWrapperTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/template/DefaultObjectWrapperTest.java
rename to freemarker-jython25/src/test/java/freemarker/template/DefaultObjectWrapperTest.java
diff --git a/freemarker-test/src/test/java/freemarker/template/SimpleObjectWrapperTest.java b/freemarker-jython25/src/test/java/freemarker/template/SimpleObjectWrapperTest.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/template/SimpleObjectWrapperTest.java
rename to freemarker-jython25/src/test/java/freemarker/template/SimpleObjectWrapperTest.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/TemplateTestCase.java b/freemarker-jython25/src/test/java/freemarker/test/templatesuite/TemplateTestCase.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/TemplateTestCase.java
rename to freemarker-jython25/src/test/java/freemarker/test/templatesuite/TemplateTestCase.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/TemplateTestSuite.java b/freemarker-jython25/src/test/java/freemarker/test/templatesuite/TemplateTestSuite.java
similarity index 98%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/TemplateTestSuite.java
rename to freemarker-jython25/src/test/java/freemarker/test/templatesuite/TemplateTestSuite.java
index 52435d1..1fd83e5 100644
--- a/freemarker-test/src/test/java/freemarker/test/templatesuite/TemplateTestSuite.java
+++ b/freemarker-jython25/src/test/java/freemarker/test/templatesuite/TemplateTestSuite.java
@@ -32,6 +32,8 @@
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 
+import org.junit.runner.RunWith;
+import org.junit.runners.AllTests;
 import org.w3c.dom.Attr;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -53,6 +55,7 @@
  * If you only want to run certain tests, you can specify a regular expression for
  * the test name in the {@link #TEST_FILTER_PROPERTY_NAME} system property.
  */
+@RunWith(AllTests.class)
 public class TemplateTestSuite extends TestSuite {
     
     private static final String ELEM_TEST_CASE = "testCase";
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/package.html b/freemarker-jython25/src/test/java/freemarker/test/templatesuite/package.html
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/package.html
rename to freemarker-jython25/src/test/java/freemarker/test/templatesuite/package.html
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/arithmetic.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/arithmetic.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/arithmetic.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/arithmetic.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/bean-maps.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/bean-maps.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/bean-maps.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/bean-maps.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/beans.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/beans.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/beans.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/beans.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/boolean-formatting.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/boolean-formatting.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/boolean-formatting.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/boolean-formatting.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/boolean.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/boolean.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/boolean.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/boolean.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/charset-in-header.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/charset-in-header.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/charset-in-header.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/charset-in-header.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/classic-compatible.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/classic-compatible.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/classic-compatible.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/classic-compatible.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/comment.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/comment.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/comment.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/comment.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/comparisons.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/comparisons.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/comparisons.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/comparisons.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/compress.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/compress.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/compress.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/compress.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/dateformat-java.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/dateformat-java.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/dateformat-java.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/dateformat-java.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/default-xmlns.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/default-xmlns.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/default-xmlns.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/default-xmlns.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/default.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/default.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/default.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/default.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/encoding-builtins-ici-2.3.20.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/encoding-builtins-ici-2.3.20.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/encoding-builtins-ici-2.3.20.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/encoding-builtins-ici-2.3.20.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/encoding-builtins.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/encoding-builtins.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/encoding-builtins.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/encoding-builtins.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/escapes.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/escapes.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/escapes.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/escapes.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/exception.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/exception.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/exception.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/exception.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/exception2.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/exception2.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/exception2.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/exception2.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/exception3.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/exception3.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/exception3.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/exception3.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/exthash.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/exthash.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/exthash.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/exthash.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/hashconcat.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/hashconcat.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/hashconcat.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/hashconcat.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/hashliteral.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/hashliteral.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/hashliteral.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/hashliteral.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/helloworld.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/helloworld.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/helloworld.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/helloworld.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/identifier-escaping.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/identifier-escaping.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/identifier-escaping.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/identifier-escaping.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/identifier-non-ascii.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/identifier-non-ascii.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/identifier-non-ascii.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/identifier-non-ascii.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/if.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/if.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/if.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/if.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/import.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/import.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/import.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/import.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/include.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/include.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/include.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/include.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/include2.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/include2.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/include2.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/include2.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/interpret.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/interpret.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/interpret.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/interpret.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/iterators.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/iterators.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/iterators.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/iterators.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/lastcharacter.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/lastcharacter.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/lastcharacter.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/lastcharacter.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/list-bis.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/list-bis.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/list-bis.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/list-bis.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/list.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/list.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/list.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/list.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/list2.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/list2.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/list2.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/list2.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/list3.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/list3.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/list3.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/list3.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/listhash.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/listhash.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/listhash.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/listhash.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/listhashliteral-ici-2.3.20.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/listhashliteral-ici-2.3.20.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/listhashliteral-ici-2.3.20.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/listhashliteral-ici-2.3.20.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/listhashliteral-ici-2.3.21.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/listhashliteral-ici-2.3.21.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/listhashliteral-ici-2.3.21.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/listhashliteral-ici-2.3.21.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/listliteral.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/listliteral.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/listliteral.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/listliteral.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/localization.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/localization.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/localization.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/localization.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/logging.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/logging.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/logging.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/logging.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/loopvariable.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/loopvariable.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/loopvariable.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/loopvariable.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/macros-return.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/macros-return.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/macros-return.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/macros-return.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/macros.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/macros.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/macros.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/macros.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/macros2.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/macros2.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/macros2.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/macros2.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/multimodels.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/multimodels.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/multimodels.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/multimodels.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/nested.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/nested.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/nested.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/nested.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/new-allowsnothing.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/new-allowsnothing.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/new-allowsnothing.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/new-allowsnothing.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/new-defaultresolver.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/new-defaultresolver.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/new-defaultresolver.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/new-defaultresolver.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/new-optin.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/new-optin.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/new-optin.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/new-optin.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/new-safer.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/new-safer.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/new-safer.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/new-safer.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/new-unrestricted.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/new-unrestricted.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/new-unrestricted.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/new-unrestricted.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/newlines1.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/newlines1.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/newlines1.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/newlines1.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/newlines2.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/newlines2.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/newlines2.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/newlines2.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/non-strict-syntax.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/non-strict-syntax.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/non-strict-syntax.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/non-strict-syntax.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/noparse.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/noparse.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/noparse.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/noparse.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/number-format.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/number-format.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/number-format.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/number-format.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/number-literal.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/number-literal.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/number-literal.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/number-literal.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/number-to-date.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/number-to-date.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/number-to-date.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/number-to-date.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/numerical-cast.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/numerical-cast.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/numerical-cast.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/numerical-cast.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/output-encoding1.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/output-encoding1.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/output-encoding1.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/output-encoding1.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/output-encoding2.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/output-encoding2.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/output-encoding2.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/output-encoding2.txt
Binary files differ
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/output-encoding3.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/output-encoding3.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/output-encoding3.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/output-encoding3.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/precedence.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/precedence.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/precedence.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/precedence.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/recover.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/recover.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/recover.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/recover.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/root.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/root.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/root.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/root.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/sequence-builtins.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/sequence-builtins.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/sequence-builtins.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/sequence-builtins.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/specialvars.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/specialvars.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/specialvars.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/specialvars.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/strictinheader.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/strictinheader.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/strictinheader.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/strictinheader.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/string-builtins-regexps-matches.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/string-builtins-regexps-matches.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/string-builtins-regexps-matches.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/string-builtins-regexps-matches.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/string-builtins-regexps.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/string-builtins-regexps.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/string-builtins-regexps.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/string-builtins-regexps.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/string-builtins1.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/string-builtins1.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/string-builtins1.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/string-builtins1.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/string-builtins2.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/string-builtins2.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/string-builtins2.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/string-builtins2.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/stringbimethods.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/stringbimethods.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/stringbimethods.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/stringbimethods.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/stringliteral.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/stringliteral.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/stringliteral.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/stringliteral.txt
Binary files differ
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/switch.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/switch.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/switch.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/switch.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/transforms.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/transforms.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/transforms.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/transforms.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/type-builtins-ici-2.3.21.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/type-builtins-ici-2.3.21.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/type-builtins-ici-2.3.21.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/type-builtins-ici-2.3.21.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/type-builtins-ici-2.3.24.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/type-builtins-ici-2.3.24.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/type-builtins-ici-2.3.24.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/type-builtins-ici-2.3.24.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/type-builtins.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/type-builtins.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/type-builtins.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/type-builtins.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/var-layers.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/var-layers.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/var-layers.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/var-layers.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/varargs.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/varargs.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/varargs.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/varargs.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/variables.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/variables.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/variables.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/variables.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/whitespace-trim.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/whitespace-trim.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/whitespace-trim.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/whitespace-trim.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/wstrip-in-header.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/wstrip-in-header.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/wstrip-in-header.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/wstrip-in-header.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/wstripping.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/wstripping.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/wstripping.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/wstripping.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/xml-fragment.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/xml-fragment.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/xml-fragment.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/xml-fragment.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/xml-ns_prefix-scope.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/xml-ns_prefix-scope.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/xml-ns_prefix-scope.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/xml-ns_prefix-scope.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/xml.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/xml.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/xml.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/xml.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/xmlns1.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/xmlns1.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/xmlns1.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/xmlns1.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/xmlns3.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/xmlns3.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/xmlns3.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/xmlns3.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/xmlns4.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/xmlns4.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/xmlns4.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/xmlns4.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/xmlns5.txt b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/xmlns5.txt
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/xmlns5.txt
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/expected/xmlns5.txt
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/models/BeansTestResources.properties b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/models/BeansTestResources.properties
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/models/BeansTestResources.properties
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/models/BeansTestResources.properties
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/models/defaultxmlns1.xml b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/models/defaultxmlns1.xml
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/models/defaultxmlns1.xml
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/models/defaultxmlns1.xml
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/models/xml-ns_prefix-scope.xml b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/models/xml-ns_prefix-scope.xml
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/models/xml-ns_prefix-scope.xml
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/models/xml-ns_prefix-scope.xml
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/models/xml.xml b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/models/xml.xml
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/models/xml.xml
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/models/xml.xml
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/models/xmlfragment.xml b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/models/xmlfragment.xml
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/models/xmlfragment.xml
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/models/xmlfragment.xml
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/models/xmlns.xml b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/models/xmlns.xml
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/models/xmlns.xml
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/models/xmlns.xml
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/models/xmlns2.xml b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/models/xmlns2.xml
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/models/xmlns2.xml
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/models/xmlns2.xml
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/models/xmlns3.xml b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/models/xmlns3.xml
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/models/xmlns3.xml
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/models/xmlns3.xml
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/api-builtins.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/api-builtins.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/api-builtins.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/api-builtins.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/arithmetic.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/arithmetic.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/arithmetic.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/arithmetic.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/assignments.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/assignments.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/assignments.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/assignments.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/bean-maps.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/bean-maps.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/bean-maps.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/bean-maps.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/beans.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/beans.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/beans.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/beans.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/boolean-formatting.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/boolean-formatting.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/boolean-formatting.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/boolean-formatting.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/boolean.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/boolean.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/boolean.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/boolean.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/charset-in-header.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/charset-in-header.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/charset-in-header.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/charset-in-header.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/charset-in-header_inc1.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/charset-in-header_inc1.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/charset-in-header_inc1.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/charset-in-header_inc1.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/charset-in-header_inc2.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/charset-in-header_inc2.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/charset-in-header_inc2.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/charset-in-header_inc2.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/classic-compatible-mode2.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/classic-compatible-mode2.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/classic-compatible-mode2.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/classic-compatible-mode2.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/classic-compatible.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/classic-compatible.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/classic-compatible.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/classic-compatible.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/comment.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/comment.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/comment.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/comment.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/comparisons.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/comparisons.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/comparisons.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/comparisons.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/compress.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/compress.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/compress.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/compress.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/date-type-builtins.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/date-type-builtins.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/date-type-builtins.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/date-type-builtins.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-bi-common.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-bi-common.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-bi-common.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-bi-common.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-bi-ici-2.3.21.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-bi-ici-2.3.21.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-bi-ici-2.3.21.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-bi-ici-2.3.21.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-bi.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-bi.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-bi.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-bi.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-like.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-like.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-like.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-like.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/dateformat-java.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/dateformat-java.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/dateformat-java.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/dateformat-java.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/dateparsing.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/dateparsing.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/dateparsing.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/dateparsing.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/default-xmlns.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/default-xmlns.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/default-xmlns.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/default-xmlns.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/default.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/default.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/default.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/default.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/encoding-builtins.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/encoding-builtins.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/encoding-builtins.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/encoding-builtins.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/escapes.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/escapes.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/escapes.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/escapes.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/exception.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/exception.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/exception.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/exception.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/exception2.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/exception2.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/exception2.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/exception2.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/exception3.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/exception3.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/exception3.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/exception3.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/existence-operators.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/existence-operators.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/existence-operators.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/existence-operators.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/hashconcat.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/hashconcat.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/hashconcat.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/hashconcat.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/hashliteral.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/hashliteral.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/hashliteral.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/hashliteral.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/helloworld.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/helloworld.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/helloworld.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/helloworld.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/identifier-escaping.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/identifier-escaping.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/identifier-escaping.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/identifier-escaping.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/identifier-non-ascii.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/identifier-non-ascii.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/identifier-non-ascii.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/identifier-non-ascii.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/if.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/if.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/if.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/if.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/import.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/import.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/import.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/import.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/import_lib.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/import_lib.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/import_lib.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/import_lib.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/include.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/include.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/include.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/include.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/include2-included-encoding.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/include2-included-encoding.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/include2-included-encoding.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/include2-included-encoding.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/include2-included.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/include2-included.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/include2-included.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/include2-included.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/include2.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/include2.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/include2.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/include2.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/included.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/included.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/included.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/included.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/interpret.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/interpret.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/interpret.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/interpret.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/iterators.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/iterators.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/iterators.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/iterators.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/lastcharacter.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/lastcharacter.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/lastcharacter.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/lastcharacter.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/list-bis.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/list-bis.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/list-bis.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/list-bis.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/list.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/list.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/list.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/list.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/list2.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/list2.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/list2.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/list2.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/list3.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/list3.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/list3.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/list3.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/listhash.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/listhash.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/listhash.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/listhash.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/listhashliteral.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/listhashliteral.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/listhashliteral.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/listhashliteral.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/listliteral.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/listliteral.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/listliteral.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/listliteral.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/localization.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/localization.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/localization.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/localization.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/localization_en.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/localization_en.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/localization_en.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/localization_en.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/localization_en_AU.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/localization_en_AU.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/localization_en_AU.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/localization_en_AU.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/logging.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/logging.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/logging.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/logging.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/loopvariable.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/loopvariable.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/loopvariable.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/loopvariable.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/macros-return.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/macros-return.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/macros-return.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/macros-return.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/macros.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/macros.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/macros.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/macros.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/macros2.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/macros2.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/macros2.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/macros2.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/multimodels.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/multimodels.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/multimodels.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/multimodels.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/nested.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/nested.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/nested.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/nested.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/nestedinclude.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/nestedinclude.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/nestedinclude.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/nestedinclude.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/new-allowsnothing.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/new-allowsnothing.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/new-allowsnothing.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/new-allowsnothing.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/new-defaultresolver.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/new-defaultresolver.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/new-defaultresolver.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/new-defaultresolver.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/new-optin.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/new-optin.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/new-optin.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/new-optin.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/new-safer.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/new-safer.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/new-safer.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/new-safer.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/new-unrestricted.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/new-unrestricted.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/new-unrestricted.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/new-unrestricted.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/newlines1.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/newlines1.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/newlines1.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/newlines1.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/newlines2.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/newlines2.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/newlines2.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/newlines2.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/non-strict-syntax.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/non-strict-syntax.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/non-strict-syntax.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/non-strict-syntax.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/noparse.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/noparse.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/noparse.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/noparse.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/number-format.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/number-format.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/number-format.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/number-format.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/number-literal.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/number-literal.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/number-literal.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/number-literal.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/number-math-builtins.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/number-math-builtins.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/number-math-builtins.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/number-math-builtins.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/number-to-date.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/number-to-date.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/number-to-date.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/number-to-date.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/numerical-cast.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/numerical-cast.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/numerical-cast.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/numerical-cast.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/output-encoding1.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/output-encoding1.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/output-encoding1.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/output-encoding1.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/output-encoding2.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/output-encoding2.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/output-encoding2.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/output-encoding2.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/output-encoding3.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/output-encoding3.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/output-encoding3.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/output-encoding3.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-bwici-2.3.20.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-bwici-2.3.20.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-bwici-2.3.20.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-bwici-2.3.20.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-bwici-2.3.21.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-bwici-2.3.21.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-bwici-2.3.21.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-bwici-2.3.21.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-common.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-common.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-common.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-common.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-desc-bwici-2.3.20.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-desc-bwici-2.3.20.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-desc-bwici-2.3.20.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-desc-bwici-2.3.20.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-inc-bwici-2.3.20.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-inc-bwici-2.3.20.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-inc-bwici-2.3.20.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-inc-bwici-2.3.20.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-23bc.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-23bc.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-23bc.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-23bc.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/precedence.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/precedence.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/precedence.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/precedence.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/range-common.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/range-common.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/range-common.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/range-common.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/range-ici-2.3.20.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/range-ici-2.3.20.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/range-ici-2.3.20.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/range-ici-2.3.20.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/range-ici-2.3.21.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/range-ici-2.3.21.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/range-ici-2.3.21.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/range-ici-2.3.21.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/range-lazy.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/range-lazy.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/range-lazy.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/range-lazy.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/recover.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/recover.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/recover.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/recover.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/root.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/root.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/root.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/root.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/sequence-builtins.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/sequence-builtins.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/sequence-builtins.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/sequence-builtins.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/setting.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/setting.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/setting.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/setting.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/simplehash-char-key.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/simplehash-char-key.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/simplehash-char-key.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/simplehash-char-key.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/specialvars.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/specialvars.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/specialvars.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/specialvars.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/strictinheader.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/strictinheader.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/strictinheader.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/strictinheader.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/strictinheader_inc1.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/strictinheader_inc1.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/strictinheader_inc1.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/strictinheader_inc1.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/strictinheader_inc2.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/strictinheader_inc2.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/strictinheader_inc2.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/strictinheader_inc2.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtin-coercion.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/string-builtin-coercion.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtin-coercion.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/string-builtin-coercion.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtins-ici-2.3.19.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/string-builtins-ici-2.3.19.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtins-ici-2.3.19.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/string-builtins-ici-2.3.19.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtins-ici-2.3.20.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/string-builtins-ici-2.3.20.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtins-ici-2.3.20.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/string-builtins-ici-2.3.20.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtins-regexps-matches.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/string-builtins-regexps-matches.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtins-regexps-matches.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/string-builtins-regexps-matches.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtins-regexps.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/string-builtins-regexps.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtins-regexps.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/string-builtins-regexps.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtins1.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/string-builtins1.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtins1.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/string-builtins1.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtins2.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/string-builtins2.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtins2.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/string-builtins2.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtins3.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/string-builtins3.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtins3.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/string-builtins3.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/stringbimethods.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/stringbimethods.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/stringbimethods.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/stringbimethods.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/stringliteral.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/stringliteral.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/stringliteral.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/stringliteral.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/subdir/include-subdir.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/subdir/include-subdir.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/subdir/include-subdir.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/subdir/include-subdir.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/subdir/include-subdir2.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/subdir/include-subdir2.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/subdir/include-subdir2.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/subdir/include-subdir2.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/subdir/new-optin-2.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/subdir/new-optin-2.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/subdir/new-optin-2.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/subdir/new-optin-2.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/subdir/new-optin.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/subdir/new-optin.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/subdir/new-optin.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/subdir/new-optin.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/subdir/subsub/new-optin.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/subdir/subsub/new-optin.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/subdir/subsub/new-optin.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/subdir/subsub/new-optin.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/switch-builtin.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/switch-builtin.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/switch-builtin.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/switch-builtin.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/switch.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/switch.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/switch.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/switch.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/then-builtin.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/then-builtin.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/then-builtin.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/then-builtin.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/transforms.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/transforms.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/transforms.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/transforms.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/type-builtins.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/type-builtins.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/type-builtins.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/type-builtins.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/undefined.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/undefined.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/undefined.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/undefined.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/url.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/url.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/url.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/url.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/var-layers.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/var-layers.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/var-layers.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/var-layers.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/varargs.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/varargs.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/varargs.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/varargs.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/variables.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/variables.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/variables.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/variables.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/varlayers_lib.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/varlayers_lib.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/varlayers_lib.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/varlayers_lib.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/whitespace-trim.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/whitespace-trim.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/whitespace-trim.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/whitespace-trim.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/wsstripinheader_inc.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/wsstripinheader_inc.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/wsstripinheader_inc.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/wsstripinheader_inc.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/wstrip-in-header.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/wstrip-in-header.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/wstrip-in-header.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/wstrip-in-header.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xml-fragment.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/xml-fragment.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xml-fragment.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/xml-fragment.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xml-ns_prefix-scope-lib.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/xml-ns_prefix-scope-lib.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xml-ns_prefix-scope-lib.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/xml-ns_prefix-scope-lib.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xml-ns_prefix-scope-main.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/xml-ns_prefix-scope-main.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xml-ns_prefix-scope-main.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/xml-ns_prefix-scope-main.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xml.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/xml.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xml.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/xml.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xmlns1.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/xmlns1.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xmlns1.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/xmlns1.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xmlns3.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/xmlns3.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xmlns3.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/xmlns3.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xmlns4.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/xmlns4.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xmlns4.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/xmlns4.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xmlns5.ftl b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/xmlns5.ftl
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xmlns5.ftl
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/templates/xmlns5.ftl
diff --git a/freemarker-test/src/test/resources/freemarker/test/templatesuite/testcases.xml b/freemarker-jython25/src/test/resources/freemarker/test/templatesuite/testcases.xml
similarity index 100%
rename from freemarker-test/src/test/resources/freemarker/test/templatesuite/testcases.xml
rename to freemarker-jython25/src/test/resources/freemarker/test/templatesuite/testcases.xml
diff --git a/freemarker-test/src/test/java/freemarker/core/ASTPrinter.java b/freemarker-test-utils/src/main/java/freemarker/core/ASTPrinter.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/core/ASTPrinter.java
rename to freemarker-test-utils/src/main/java/freemarker/core/ASTPrinter.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/AlphabeticalMethodSorter.java b/freemarker-test-utils/src/main/java/freemarker/ext/beans/AlphabeticalMethodSorter.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/AlphabeticalMethodSorter.java
rename to freemarker-test-utils/src/main/java/freemarker/ext/beans/AlphabeticalMethodSorter.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperDesc2003020.java b/freemarker-test-utils/src/main/java/freemarker/ext/beans/BeansWrapperDesc2003020.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperDesc2003020.java
rename to freemarker-test-utils/src/main/java/freemarker/ext/beans/BeansWrapperDesc2003020.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperDesc2003021.java b/freemarker-test-utils/src/main/java/freemarker/ext/beans/BeansWrapperDesc2003021.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperDesc2003021.java
rename to freemarker-test-utils/src/main/java/freemarker/ext/beans/BeansWrapperDesc2003021.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperInc2003020.java b/freemarker-test-utils/src/main/java/freemarker/ext/beans/BeansWrapperInc2003020.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperInc2003020.java
rename to freemarker-test-utils/src/main/java/freemarker/ext/beans/BeansWrapperInc2003020.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperInc2003021.java b/freemarker-test-utils/src/main/java/freemarker/ext/beans/BeansWrapperInc2003021.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperInc2003021.java
rename to freemarker-test-utils/src/main/java/freemarker/ext/beans/BeansWrapperInc2003021.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperWithShortedMethods.java b/freemarker-test-utils/src/main/java/freemarker/ext/beans/BeansWrapperWithShortedMethods.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperWithShortedMethods.java
rename to freemarker-test-utils/src/main/java/freemarker/ext/beans/BeansWrapperWithShortedMethods.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperDesc2003020.java b/freemarker-test-utils/src/main/java/freemarker/ext/beans/DefaultObjectWrapperDesc2003020.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperDesc2003020.java
rename to freemarker-test-utils/src/main/java/freemarker/ext/beans/DefaultObjectWrapperDesc2003020.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperDesc2003021.java b/freemarker-test-utils/src/main/java/freemarker/ext/beans/DefaultObjectWrapperDesc2003021.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperDesc2003021.java
rename to freemarker-test-utils/src/main/java/freemarker/ext/beans/DefaultObjectWrapperDesc2003021.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperDesc2003022.java b/freemarker-test-utils/src/main/java/freemarker/ext/beans/DefaultObjectWrapperDesc2003022.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperDesc2003022.java
rename to freemarker-test-utils/src/main/java/freemarker/ext/beans/DefaultObjectWrapperDesc2003022.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperInc2003020.java b/freemarker-test-utils/src/main/java/freemarker/ext/beans/DefaultObjectWrapperInc2003020.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperInc2003020.java
rename to freemarker-test-utils/src/main/java/freemarker/ext/beans/DefaultObjectWrapperInc2003020.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperInc2003021.java b/freemarker-test-utils/src/main/java/freemarker/ext/beans/DefaultObjectWrapperInc2003021.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperInc2003021.java
rename to freemarker-test-utils/src/main/java/freemarker/ext/beans/DefaultObjectWrapperInc2003021.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperInc2003022.java b/freemarker-test-utils/src/main/java/freemarker/ext/beans/DefaultObjectWrapperInc2003022.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperInc2003022.java
rename to freemarker-test-utils/src/main/java/freemarker/ext/beans/DefaultObjectWrapperInc2003022.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperWithSortedMethods.java b/freemarker-test-utils/src/main/java/freemarker/ext/beans/DefaultObjectWrapperWithSortedMethods.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperWithSortedMethods.java
rename to freemarker-test-utils/src/main/java/freemarker/ext/beans/DefaultObjectWrapperWithSortedMethods.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/Java7MembersOnlyBeansWrapper.java b/freemarker-test-utils/src/main/java/freemarker/ext/beans/Java7MembersOnlyBeansWrapper.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/Java7MembersOnlyBeansWrapper.java
rename to freemarker-test-utils/src/main/java/freemarker/ext/beans/Java7MembersOnlyBeansWrapper.java
diff --git a/freemarker-test/src/test/java/freemarker/ext/beans/RationalNumber.java b/freemarker-test-utils/src/main/java/freemarker/ext/beans/RationalNumber.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/ext/beans/RationalNumber.java
rename to freemarker-test-utils/src/main/java/freemarker/ext/beans/RationalNumber.java
diff --git a/freemarker-test/src/test/java/freemarker/test/CopyrightCommentRemoverTemplateLoader.java b/freemarker-test-utils/src/main/java/freemarker/test/CopyrightCommentRemoverTemplateLoader.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/CopyrightCommentRemoverTemplateLoader.java
rename to freemarker-test-utils/src/main/java/freemarker/test/CopyrightCommentRemoverTemplateLoader.java
diff --git a/freemarker-test/src/test/java/freemarker/test/ResourcesExtractor.java b/freemarker-test-utils/src/main/java/freemarker/test/ResourcesExtractor.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/ResourcesExtractor.java
rename to freemarker-test-utils/src/main/java/freemarker/test/ResourcesExtractor.java
diff --git a/freemarker-test/src/test/java/freemarker/test/hamcerst/Matchers.java b/freemarker-test-utils/src/main/java/freemarker/test/hamcerst/Matchers.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/hamcerst/Matchers.java
rename to freemarker-test-utils/src/main/java/freemarker/test/hamcerst/Matchers.java
diff --git a/freemarker-test/src/test/java/freemarker/test/hamcerst/StringContainsIgnoringCase.java b/freemarker-test-utils/src/main/java/freemarker/test/hamcerst/StringContainsIgnoringCase.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/hamcerst/StringContainsIgnoringCase.java
rename to freemarker-test-utils/src/main/java/freemarker/test/hamcerst/StringContainsIgnoringCase.java
diff --git a/freemarker-test/src/test/java/freemarker/test/package.html b/freemarker-test-utils/src/main/java/freemarker/test/package.html
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/package.html
rename to freemarker-test-utils/src/main/java/freemarker/test/package.html
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/AllTemplateModels.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/AllTemplateModels.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/AllTemplateModels.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/AllTemplateModels.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/BeanTestClass.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/BeanTestClass.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/BeanTestClass.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/BeanTestClass.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/BeanTestInterface.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/BeanTestInterface.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/BeanTestInterface.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/BeanTestInterface.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/BeanTestSuperclass.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/BeanTestSuperclass.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/BeanTestSuperclass.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/BeanTestSuperclass.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/BooleanAndScalarModel.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/BooleanAndScalarModel.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/BooleanAndScalarModel.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/BooleanAndScalarModel.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/BooleanAndStringTemplateModel.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/BooleanAndStringTemplateModel.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/BooleanAndStringTemplateModel.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/BooleanAndStringTemplateModel.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/BooleanHash1.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/BooleanHash1.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/BooleanHash1.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/BooleanHash1.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/BooleanHash2.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/BooleanHash2.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/BooleanHash2.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/BooleanHash2.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/BooleanList1.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/BooleanList1.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/BooleanList1.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/BooleanList1.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/BooleanList2.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/BooleanList2.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/BooleanList2.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/BooleanList2.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/BooleanVsStringMethods.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/BooleanVsStringMethods.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/BooleanVsStringMethods.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/BooleanVsStringMethods.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/EnumTestClass.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/EnumTestClass.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/EnumTestClass.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/EnumTestClass.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/ExceptionModel.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/ExceptionModel.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/ExceptionModel.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/ExceptionModel.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/HashAndScalarModel.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/HashAndScalarModel.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/HashAndScalarModel.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/HashAndScalarModel.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/JavaObjectInfo.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/JavaObjectInfo.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/JavaObjectInfo.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/JavaObjectInfo.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/LegacyList.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/LegacyList.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/LegacyList.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/LegacyList.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/Listables.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/Listables.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/Listables.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/Listables.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/MultiModel1.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/MultiModel1.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/MultiModel1.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/MultiModel1.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/MultiModel2.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/MultiModel2.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/MultiModel2.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/MultiModel2.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/MultiModel3.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/MultiModel3.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/MultiModel3.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/MultiModel3.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/MultiModel4.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/MultiModel4.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/MultiModel4.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/MultiModel4.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/MultiModel5.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/MultiModel5.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/MultiModel5.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/MultiModel5.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/NewTestModel.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/NewTestModel.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/NewTestModel.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/NewTestModel.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/NewTestModel2.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/NewTestModel2.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/NewTestModel2.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/NewTestModel2.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/NumberAndStringModel.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/NumberAndStringModel.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/NumberAndStringModel.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/NumberAndStringModel.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/OverloadedConstructor.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/OverloadedConstructor.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/OverloadedConstructor.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/OverloadedConstructor.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/OverloadedMethods.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/OverloadedMethods.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/OverloadedMethods.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/OverloadedMethods.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/OverloadedMethods2.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/OverloadedMethods2.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/OverloadedMethods2.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/OverloadedMethods2.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/SimpleTestMethod.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/SimpleTestMethod.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/SimpleTestMethod.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/SimpleTestMethod.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/TransformHashWrapper.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/TransformHashWrapper.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/TransformHashWrapper.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/TransformHashWrapper.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/TransformMethodWrapper1.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/TransformMethodWrapper1.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/TransformMethodWrapper1.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/TransformMethodWrapper1.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/TransformMethodWrapper2.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/TransformMethodWrapper2.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/TransformMethodWrapper2.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/TransformMethodWrapper2.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/TransformModel1.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/TransformModel1.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/TransformModel1.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/TransformModel1.java
diff --git a/freemarker-test/src/test/java/freemarker/test/templatesuite/models/VarArgTestModel.java b/freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/VarArgTestModel.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/templatesuite/models/VarArgTestModel.java
rename to freemarker-test-utils/src/main/java/freemarker/test/templatesuite/models/VarArgTestModel.java
diff --git a/freemarker-test/src/test/java/freemarker/test/utility/AssertDirective.java b/freemarker-test-utils/src/main/java/freemarker/test/utility/AssertDirective.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/utility/AssertDirective.java
rename to freemarker-test-utils/src/main/java/freemarker/test/utility/AssertDirective.java
diff --git a/freemarker-test/src/test/java/freemarker/test/utility/AssertEqualsDirective.java b/freemarker-test-utils/src/main/java/freemarker/test/utility/AssertEqualsDirective.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/utility/AssertEqualsDirective.java
rename to freemarker-test-utils/src/main/java/freemarker/test/utility/AssertEqualsDirective.java
diff --git a/freemarker-test/src/test/java/freemarker/test/utility/AssertFailsDirective.java b/freemarker-test-utils/src/main/java/freemarker/test/utility/AssertFailsDirective.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/utility/AssertFailsDirective.java
rename to freemarker-test-utils/src/main/java/freemarker/test/utility/AssertFailsDirective.java
diff --git a/freemarker-test/src/test/java/freemarker/test/utility/AssertationFailedInTemplateException.java b/freemarker-test-utils/src/main/java/freemarker/test/utility/AssertationFailedInTemplateException.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/utility/AssertationFailedInTemplateException.java
rename to freemarker-test-utils/src/main/java/freemarker/test/utility/AssertationFailedInTemplateException.java
diff --git a/freemarker-test/src/test/java/freemarker/test/utility/BadParameterTypeException.java b/freemarker-test-utils/src/main/java/freemarker/test/utility/BadParameterTypeException.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/utility/BadParameterTypeException.java
rename to freemarker-test-utils/src/main/java/freemarker/test/utility/BadParameterTypeException.java
diff --git a/freemarker-test/src/test/java/freemarker/test/utility/FileTestCase.java b/freemarker-test-utils/src/main/java/freemarker/test/utility/FileTestCase.java
similarity index 63%
rename from freemarker-test/src/test/java/freemarker/test/utility/FileTestCase.java
rename to freemarker-test-utils/src/main/java/freemarker/test/utility/FileTestCase.java
index c35b4c5..652f107 100644
--- a/freemarker-test/src/test/java/freemarker/test/utility/FileTestCase.java
+++ b/freemarker-test-utils/src/main/java/freemarker/test/utility/FileTestCase.java
@@ -29,9 +29,12 @@
 import java.io.OutputStreamWriter;
 import java.io.Reader;
 import java.io.Writer;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
 import java.net.URL;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import freemarker.template.utility.StringUtil;
 import junit.framework.AssertionFailedError;
 import junit.framework.TestCase;
@@ -133,19 +136,121 @@
         return getExpectedFileDirectory();
     }
 
-    @SuppressFBWarnings(value="UI_INHERITANCE_UNSAFE_GETRESOURCE", justification="By design relative to subclass")
-    private File getTestClassDirectoryLegacy() throws IOException {
-        URL url = this.getClass().getResource(".");
-        if (url == null) throw new IOException("Couldn't get resource URL for \".\"");
-        return new File(url.getFile());
+    private static String extractRawPathFromJarUrl(URL url) {
+        String jarPathTerminator = "!/";
+
+        String path = url.getPath();
+        if (path.endsWith(jarPathTerminator)) {
+            return path.substring(0, path.length() - jarPathTerminator.length());
+        }
+
+        int jarPathEnd = path.indexOf(jarPathTerminator);
+        return path.substring(0, jarPathEnd);
+    }
+
+    private static URL extractUrlFromJarUrl(URL url) {
+        try {
+            return new URL(extractRawPathFromJarUrl(url));
+        } catch (MalformedURLException ex) {
+            throw new IllegalArgumentException("Unexpected URL: " + url, ex);
+        }
+    }
+
+    private static URL extractFileUrlFromUrl(URL url) {
+        String protocol = url.getProtocol();
+        if ("jar".equals(protocol)) {
+            return extractUrlFromJarUrl(url);
+        }
+        else{
+            return url;
+        }
+    }
+
+    private static File urlToFile(URL url) {
+        try {
+            return new File(url.toURI());
+        } catch (URISyntaxException ex) {
+            throw new IllegalArgumentException(ex);
+        }
+    }
+
+    private static File extractPathFromURL(URL url) {
+        URL fileUrl = extractFileUrlFromUrl(url);
+        if ("file".equals(fileUrl.getProtocol())) {
+            return urlToFile(fileUrl);
+        }
+        else {
+            throw new IllegalArgumentException("Unexpected URL: " + url);
+        }
+    }
+
+    private static URL findUrlClassPathOfClass(Class<?> cl) {
+        URL urlOfClassPath = cl.getProtectionDomain().getCodeSource().getLocation();
+        if (urlOfClassPath == null) {
+            throw new IllegalArgumentException("Unable to locate classpath of " + cl);
+        }
+
+        return extractFileUrlFromUrl(urlOfClassPath);
+    }
+
+    private static File toCanonicalFile(File file) {
+        if (file == null) {
+            return null;
+        }
+
+        try {
+            return file.getCanonicalFile();
+        } catch (IOException ex) {
+            return file;
+        }
+    }
+
+    private static File findClassPathOfClass(Class<?> cl) {
+        return toCanonicalFile(extractPathFromURL(findUrlClassPathOfClass(cl)));
+    }
+
+    private static Path switchToResourceRoot(Path classesClasspathRoot) {
+        Path javaDir = classesClasspathRoot.getParent();
+        if (javaDir == null || !javaDir.endsWith("java")) {
+            return classesClasspathRoot;
+        }
+
+        Path classesDir = javaDir.getParent();
+        if (classesDir == null || !classesDir.endsWith("classes")) {
+            return classesClasspathRoot;
+        }
+
+        Path parent = classesDir.getParent();
+        if (parent == null) {
+            return classesClasspathRoot;
+        }
+
+        return parent.resolve("resources").resolve(classesClasspathRoot.getFileName());
+    }
+
+    private static Path addPackageDir(Path root, Class<?> relPathClass) {
+        Path result = root;
+        for (String child : relPathClass.getPackage().getName().split("\\.")) {
+            result = result.resolve(child);
+        }
+        return result;
+    }
+
+    private File getTestClassDirectoryAssumingGradleStructure() throws IOException {
+        File classpathRoot = findClassPathOfClass(getClass());
+        if (classpathRoot != null) {
+            Path resourcesRoot = switchToResourceRoot(classpathRoot.toPath());
+            return addPackageDir(resourcesRoot, getClass()).toFile();
+        }
+        throw new IOException("Couldn't get resource URL for " + getClass().getPackage().getName());
     }
 
     protected final File getTestClassDirectory() throws IOException {
         String rootStr = System.getProperty("freemarker.test.resourcesDir");
         if (rootStr == null) {
-            return getTestClassDirectoryLegacy();
+            return getTestClassDirectoryAssumingGradleStructure();
         }
-        return new File(rootStr, getClass().getPackage().getName().replace('.', File.separatorChar));
+        return addPackageDir(Paths.get(rootStr), getClass()).toFile();
     }
 
     protected String loadFile(File f) throws FileNotFoundException, IOException {
diff --git a/freemarker-test/src/test/java/freemarker/test/utility/MissingRequiredParameterException.java b/freemarker-test-utils/src/main/java/freemarker/test/utility/MissingRequiredParameterException.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/utility/MissingRequiredParameterException.java
rename to freemarker-test-utils/src/main/java/freemarker/test/utility/MissingRequiredParameterException.java
diff --git a/freemarker-test/src/test/java/freemarker/test/utility/NoOutputDirective.java b/freemarker-test-utils/src/main/java/freemarker/test/utility/NoOutputDirective.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/utility/NoOutputDirective.java
rename to freemarker-test-utils/src/main/java/freemarker/test/utility/NoOutputDirective.java
diff --git a/freemarker-test/src/test/java/freemarker/test/utility/ParameterException.java b/freemarker-test-utils/src/main/java/freemarker/test/utility/ParameterException.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/utility/ParameterException.java
rename to freemarker-test-utils/src/main/java/freemarker/test/utility/ParameterException.java
diff --git a/freemarker-test/src/test/java/freemarker/test/utility/TestUtil.java b/freemarker-test-utils/src/main/java/freemarker/test/utility/TestUtil.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/utility/TestUtil.java
rename to freemarker-test-utils/src/main/java/freemarker/test/utility/TestUtil.java
diff --git a/freemarker-test/src/test/java/freemarker/test/utility/UnsupportedParameterException.java b/freemarker-test-utils/src/main/java/freemarker/test/utility/UnsupportedParameterException.java
similarity index 100%
rename from freemarker-test/src/test/java/freemarker/test/utility/UnsupportedParameterException.java
rename to freemarker-test-utils/src/main/java/freemarker/test/utility/UnsupportedParameterException.java
diff --git a/freemarker-test/src/test/resources/logback-test.xml b/freemarker-test-utils/src/main/resources/logback-test.xml
similarity index 100%
rename from freemarker-test/src/test/resources/logback-test.xml
rename to freemarker-test-utils/src/main/resources/logback-test.xml
diff --git a/settings.gradle.kts b/settings.gradle.kts
index aabfb19..2595bd6 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -20,3 +20,14 @@
 rootProject.name = "freemarker-gae"
 
 apply(from = rootDir.toPath().resolve("gradle").resolve("repositories.gradle.kts"))
+
+dependencyResolutionManagement {
+    versionCatalogs {
+        create("libs") {
+            version("defaultJava", "8")
+            version("junit", "4.12")
+
+            library("junit", "junit", "junit").versionRef("junit")
+        }
+    }
+}