From a5b49c1aa390f9fcc10f5e37df011f814ebf0b2a Mon Sep 17 00:00:00 2001 From: Gintas Grigelionis Date: Sun, 11 Nov 2018 13:34:11 +0100 Subject: [PATCH] Simplify tests, use Charset --- .../org/apache/tools/ant/taskdefs/Sync.java | 1 - .../tools/ant/util/ReaderInputStream.java | 20 +++++++++- .../apache/tools/ant/taskdefs/EchoTest.java | 31 ++++++++------- .../tools/ant/util/ReaderInputStreamTest.java | 38 ++++++++----------- 4 files changed, 48 insertions(+), 42 deletions(-) diff --git a/src/main/org/apache/tools/ant/taskdefs/Sync.java b/src/main/org/apache/tools/ant/taskdefs/Sync.java index e51156306..3c2f40ba9 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Sync.java +++ b/src/main/org/apache/tools/ant/taskdefs/Sync.java @@ -23,7 +23,6 @@ import java.util.Collections; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Map; -import java.util.Optional; import java.util.Set; import java.util.stream.Stream; diff --git a/src/main/org/apache/tools/ant/util/ReaderInputStream.java b/src/main/org/apache/tools/ant/util/ReaderInputStream.java index e9abc8027..a6fb3fd27 100644 --- a/src/main/org/apache/tools/ant/util/ReaderInputStream.java +++ b/src/main/org/apache/tools/ant/util/ReaderInputStream.java @@ -20,6 +20,7 @@ package org.apache.tools.ant.util; import java.io.IOException; import java.io.InputStream; import java.io.Reader; +import java.nio.charset.Charset; /** * Adapts a Reader as an InputStream. @@ -64,6 +65,22 @@ public class ReaderInputStream extends InputStream { this.encoding = encoding; } + /** + * Construct a ReaderInputStream + * for the specified Reader, + * with the specified encoding. + * + * @param reader non-null Reader. + * @param charset non-null Charset charset. + */ + public ReaderInputStream(Reader reader, Charset charset) { + this(reader); + if (charset == null) { + throw new IllegalArgumentException("encoding must not be null"); + } + this.encoding = charset.name(); + } + /** * Reads from the Reader, returning the same value. * @@ -105,8 +122,7 @@ public class ReaderInputStream extends InputStream { * @exception IOException if an error occurs */ @Override - public synchronized int read(byte[] b, int off, int len) - throws IOException { + public synchronized int read(byte[] b, int off, int len) throws IOException { if (in == null) { throw new IOException("Stream Closed"); } diff --git a/src/tests/junit/org/apache/tools/ant/taskdefs/EchoTest.java b/src/tests/junit/org/apache/tools/ant/taskdefs/EchoTest.java index d703687c6..0cfcbe2e9 100644 --- a/src/tests/junit/org/apache/tools/ant/taskdefs/EchoTest.java +++ b/src/tests/junit/org/apache/tools/ant/taskdefs/EchoTest.java @@ -24,15 +24,17 @@ import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; +import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import org.apache.tools.ant.DefaultLogger; import org.apache.tools.ant.Project; -import org.apache.tools.ant.util.FileUtils; -import org.junit.After; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.TemporaryFolder; +import static org.apache.tools.ant.util.FileUtils.readFully; import static org.junit.Assert.assertEquals; /** @@ -40,12 +42,13 @@ import static org.junit.Assert.assertEquals; */ public class EchoTest { + @Rule + public TemporaryFolder folder = new TemporaryFolder(); + private EchoTestLogger logger; private Echo echo; - private File removeThis; - @Before public void setUp() { Project p = new Project(); @@ -56,13 +59,6 @@ public class EchoTest { echo.setProject(p); } - @After - public void tearDown() { - if (removeThis != null && removeThis.exists() && !removeThis.delete()) { - removeThis.deleteOnExit(); - } - } - @Test public void testLogBlankEcho() { echo.setTaskName("testLogBlankEcho"); @@ -72,14 +68,17 @@ public class EchoTest { @Test public void testLogUTF8Echo() throws IOException { + File removeThis = folder.newFile("abc.txt"); + Charset cs = StandardCharsets.UTF_8; + String msg = "\u00e4\u00a9"; + echo.setTaskName("testLogUTF8Echo"); - echo.setMessage("\u00e4\u00a9"); - removeThis = new File("abc.txt"); + echo.setMessage(msg); echo.setFile(removeThis); - echo.setEncoding("UTF-8"); + echo.setEncoding(cs.name()); echo.execute(); - String x = FileUtils.readFully(new InputStreamReader(new FileInputStream(removeThis), StandardCharsets.UTF_8)); - assertEquals(x, "\u00e4\u00a9"); + + assertEquals(msg, readFully(new InputStreamReader(new FileInputStream(removeThis), cs))); } private class EchoTestLogger extends DefaultLogger { diff --git a/src/tests/junit/org/apache/tools/ant/util/ReaderInputStreamTest.java b/src/tests/junit/org/apache/tools/ant/util/ReaderInputStreamTest.java index 6e5280f34..01fc3e7ba 100644 --- a/src/tests/junit/org/apache/tools/ant/util/ReaderInputStreamTest.java +++ b/src/tests/junit/org/apache/tools/ant/util/ReaderInputStreamTest.java @@ -89,40 +89,32 @@ public class ReaderInputStreamTest { @Test public void testIso88591ToUtf8() throws Exception { - InputStreamReader fin = null; - ReaderInputStream r = null; - FileInputStream utf8 = null; - try { - fin = new InputStreamReader(new FileInputStream(new File(ROOT, - "src/tests/antunit/taskdefs/exec/input/iso8859-1")), "ISO8859_1"); - r = new ReaderInputStream(fin, "UTF8"); - - ByteArrayOutputStream actualOS = new ByteArrayOutputStream(); + ByteArrayOutputStream actualOS = new ByteArrayOutputStream(); + try (ReaderInputStream r = new ReaderInputStream(new InputStreamReader(new FileInputStream(new File(ROOT, + "src/tests/antunit/taskdefs/exec/input/iso8859-1")), StandardCharsets.ISO_8859_1), + StandardCharsets.UTF_8)) { int b = r.read(); while (b > -1) { actualOS.write((byte) b); b = r.read(); } + } - utf8 = new FileInputStream(new File(ROOT, - "src/tests/antunit/taskdefs/exec/expected/utf-8")); - ByteArrayOutputStream expectedOS = new ByteArrayOutputStream(); - b = utf8.read(); + ByteArrayOutputStream expectedOS = new ByteArrayOutputStream(); + try (FileInputStream utf8 = new FileInputStream(new File(ROOT, + "src/tests/antunit/taskdefs/exec/expected/utf-8"))) { + int b = utf8.read(); while (b > -1) { expectedOS.write((byte) b); b = utf8.read(); } + } - byte[] expected = expectedOS.toByteArray(); - byte[] actual = actualOS.toByteArray(); - assertEquals("length", expected.length, actual.length); - for (int i = 0; i < actual.length; i++) { - assertEquals("byte " + i, expected[i], actual[i]); - } - } finally { - FileUtils.close(fin); - FileUtils.close(r); - FileUtils.close(utf8); + byte[] expected = expectedOS.toByteArray(); + byte[] actual = actualOS.toByteArray(); + assertEquals("length", expected.length, actual.length); + for (int i = 0; i < actual.length; i++) { + assertEquals("byte " + i, expected[i], actual[i]); } }