You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by dd...@apache.org on 2017/05/06 21:09:38 UTC
incubator-freemarker git commit: Changed FileTestCase (the superclass
of some tests) to use URL-s instead of File-s. This allows the test suite to
run from unextracted jar (among others).
Repository: incubator-freemarker
Updated Branches:
refs/heads/3 7d61a45d9 -> 7486e23b3
Changed FileTestCase (the superclass of some tests) to use URL-s instead of File-s. This allows the test suite to run from unextracted jar (among others).
Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/7486e23b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/7486e23b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/7486e23b
Branch: refs/heads/3
Commit: 7486e23b31014d3451dd9e794165549aaf53a834
Parents: 7d61a45
Author: ddekany <dd...@apache.org>
Authored: Sat May 6 23:09:26 2017 +0200
Committer: ddekany <dd...@apache.org>
Committed: Sat May 6 23:09:26 2017 +0200
----------------------------------------------------------------------
.../org/apache/freemarker/core/ASTTest.java | 6 +-
.../test/templatesuite/TemplateTestCase.java | 19 +++--
.../freemarker/test/util/FileTestCase.java | 88 ++++++++------------
3 files changed, 52 insertions(+), 61 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/7486e23b/src/test/java/org/apache/freemarker/core/ASTTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/freemarker/core/ASTTest.java b/src/test/java/org/apache/freemarker/core/ASTTest.java
index d99c62c..ff67cfb 100644
--- a/src/test/java/org/apache/freemarker/core/ASTTest.java
+++ b/src/test/java/org/apache/freemarker/core/ASTTest.java
@@ -21,6 +21,7 @@ package org.apache.freemarker.core;
import java.io.FileNotFoundException;
import java.io.IOException;
+import java.net.URL;
import org.apache.freemarker.core.ASTPrinter.Options;
import org.apache.freemarker.core.util._StringUtil;
@@ -88,7 +89,10 @@ public class ASTTest extends FileTestCase {
assertExpectedFileEqualsString(
testName + ".ast",
ASTPrinter.getASTAsString(templateName,
- TestUtil.removeFTLCopyrightComment(normalizeLineBreaks(loadResource(templateName))), ops));
+ TestUtil.removeFTLCopyrightComment(
+ normalizeLineBreaks(
+ loadTestTextResource(new URL(getTestClassDirectory(), templateName))
+ )), ops));
}
private String normalizeLineBreaks(final String s) throws FileNotFoundException, IOException {
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/7486e23b/src/test/java/org/apache/freemarker/test/templatesuite/TemplateTestCase.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/freemarker/test/templatesuite/TemplateTestCase.java b/src/test/java/org/apache/freemarker/test/templatesuite/TemplateTestCase.java
index 9dbccc7..2a24b5b 100644
--- a/src/test/java/org/apache/freemarker/test/templatesuite/TemplateTestCase.java
+++ b/src/test/java/org/apache/freemarker/test/templatesuite/TemplateTestCase.java
@@ -19,12 +19,12 @@
package org.apache.freemarker.test.templatesuite;
-import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.net.URL;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
@@ -62,7 +62,7 @@ import org.apache.freemarker.core.model.impl.ResourceBundleModel;
import org.apache.freemarker.core.model.impl.SimpleCollection;
import org.apache.freemarker.core.model.impl.SimpleDate;
import org.apache.freemarker.core.model.impl.SimpleNumber;
-import org.apache.freemarker.core.templateresolver.impl.FileTemplateLoader;
+import org.apache.freemarker.core.templateresolver.impl.ClassTemplateLoader;
import org.apache.freemarker.core.util._NullArgumentException;
import org.apache.freemarker.core.util._NullWriter;
import org.apache.freemarker.core.util._StringUtil;
@@ -174,8 +174,9 @@ public class TemplateTestCase extends FileTestCase {
@Override
@SuppressWarnings("boxing")
public void setUp() throws Exception {
- confB.setTemplateLoader(new CopyrightCommentRemoverTemplateLoader(
- new FileTemplateLoader(new File(getTestClassDirectory(), "templates"))));
+ confB.setTemplateLoader(
+ new CopyrightCommentRemoverTemplateLoader(
+ new ClassTemplateLoader(TemplateTestCase.class, "templates")));
DefaultObjectWrapper dow = new DefaultObjectWrapper.Builder(Configuration.VERSION_3_0_0).build();
@@ -423,18 +424,18 @@ public class TemplateTestCase extends FileTestCase {
}
@Override
- protected File getExpectedFileDirectory() throws IOException {
- return new File(super.getExpectedFileDirectory(), "expected");
+ protected URL getExpectedFileDirectory() throws IOException {
+ return new URL(super.getExpectedFileDirectory(), "expected/");
}
@Override
- protected Charset getFileCharset() {
+ protected Charset getTestResourceCharset() {
return confB.getOutputEncoding() != null ? confB.getOutputEncoding() : StandardCharsets.UTF_8;
}
@Override
- protected File getExpectedFileFor(String testCaseFileName) throws IOException {
- return new File(getExpectedFileDirectory(), expectedFileName);
+ protected URL getExpectedFileFor(String testCaseFileName) throws IOException {
+ return new URL(getExpectedFileDirectory(), expectedFileName);
}
static class TestBoolean implements TemplateBooleanModel, TemplateScalarModel {
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/7486e23b/src/test/java/org/apache/freemarker/test/util/FileTestCase.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/freemarker/test/util/FileTestCase.java b/src/test/java/org/apache/freemarker/test/util/FileTestCase.java
index c0990ba..144592a 100644
--- a/src/test/java/org/apache/freemarker/test/util/FileTestCase.java
+++ b/src/test/java/org/apache/freemarker/test/util/FileTestCase.java
@@ -20,8 +20,6 @@
package org.apache.freemarker.test.util;
import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -33,6 +31,8 @@ import java.net.URL;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
import org.apache.freemarker.core.util._StringUtil;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -48,41 +48,20 @@ public abstract class FileTestCase extends TestCase {
super(name);
}
- protected void assertFilesEqual(String testCaseFileName) throws IOException {
- try {
- multilineAssertEquals(
- loadFile(getExpectedFileFor(testCaseFileName)),
- loadFile(getActualFileFor(testCaseFileName)));
- } catch (IOException e) {
- throw new RuntimeException("Failed to do assertion", e);
- }
- }
-
protected void assertExpectedFileEqualsString(String expectedFileName, String actualContent) {
try {
- final File expectedFile = getExpectedFileFor(expectedFileName);
+ final URL expectedFile = getExpectedFileFor(expectedFileName);
- AssertionFailedError assertionException = null;
- boolean successful = false;
try {
- if (expectedFile.exists()) {
- multilineAssertEquals(loadFile(expectedFile), actualContent);
- successful = true;
- }
+ multilineAssertEquals(loadTestTextResource(expectedFile), actualContent);
} catch (AssertionFailedError e) {
- assertionException = e;
- }
-
- if (!successful) {
File actualFile = getActualFileFor(expectedFileName);
- saveString(actualFile, actualContent);
- reportActualFileSaved(actualFile);
-
- if (assertionException != null) {
- throw assertionException;
- } else {
- throw new FileNotFoundException(expectedFile.getPath());
+ if (actualFile == null) {
+ saveString(actualFile, actualContent);
+ reportActualFileSaved(actualFile);
}
+
+ throw e;
}
} catch (IOException e) {
throw new RuntimeException("Failed to do assertion", e);
@@ -116,12 +95,19 @@ public abstract class FileTestCase extends TestCase {
}
}
- protected File getExpectedFileFor(String testCaseFileName) throws IOException {
- return new File(getExpectedFileDirectory(), testCaseFileName);
+ protected URL getExpectedFileFor(String testCaseFileName) throws IOException {
+ return new URL(getExpectedFileDirectory(), testCaseFileName);
}
-
+
+ /**
+ * @return {@code null} if there's no place to write the actual files to
+ */
protected File getActualFileFor(String testCaseFileName) throws IOException {
- return new File(getActualFileDirectory(), deduceActualFileName(testCaseFileName));
+ File actualFileDirectory = getActualFileDirectory();
+ if (actualFileDirectory == null) {
+ return null;
+ }
+ return new File(actualFileDirectory, deduceActualFileName(testCaseFileName));
}
private String deduceActualFileName(String testCaseFileName) {
@@ -131,38 +117,38 @@ public abstract class FileTestCase extends TestCase {
: testCaseFileName.substring(0, lastDotIdx) + "-actual" + testCaseFileName.substring(lastDotIdx);
}
- protected File getExpectedFileDirectory() throws IOException {
+ /**
+ * The URL of the directory that contains the expected files; must end with "/" or "/." or else relative paths won't
+ * be resolved correctly.
+ */
+ protected URL getExpectedFileDirectory() throws IOException {
return getTestClassDirectory();
}
+ /**
+ * @return {@code null} if there's no directory to write the actual files to
+ */
protected File getActualFileDirectory() throws IOException {
- return getExpectedFileDirectory();
+ return FileUtils.toFile(getExpectedFileDirectory());
}
@SuppressFBWarnings(value="UI_INHERITANCE_UNSAFE_GETRESOURCE", justification="By design relative to subclass")
- protected final File getTestClassDirectory() throws IOException {
+ protected final URL getTestClassDirectory() throws IOException {
URL url = getClass().getResource(".");
if (url == null) throw new IOException("Couldn't get resource URL for \".\"");
- return new File(url.getFile());
- }
-
- protected String loadFile(File f) throws IOException {
- return TestUtil.removeTxtCopyrightComment(loadFile(f, getFileCharset()));
- }
-
- protected String loadFile(File f, Charset charset) throws IOException {
- return loadString(new FileInputStream(f), charset);
+ return url;
}
- protected String loadResource(String resourceName) throws IOException {
- return loadResource(resourceName, getFileCharset());
+ protected String loadTestTextResource(URL resource) throws IOException {
+ return loadTestTextResource(resource, getTestResourceCharset());
}
- protected String loadResource(String resourceName, Charset charset) throws IOException {
- return loadString(new FileInputStream(new File(getTestClassDirectory(), resourceName)), charset);
+ protected String loadTestTextResource(URL resource, Charset charset) throws IOException {
+ return TestUtil.removeTxtCopyrightComment(
+ IOUtils.toString(resource, charset.name()));
}
- protected Charset getFileCharset() {
+ protected Charset getTestResourceCharset() {
return StandardCharsets.UTF_8;
}