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]);
}
}