This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-io.git
The following commit(s) were added to refs/heads/master by this push:
new d428a080 [IO-829] Don't decode and reencode characters in a
potentially different charset in
AbstractOrigin.CharSequenceOrigin.getReader(Charset)
d428a080 is described below
commit d428a080db16298ad1daa63a205e7c4f0c5bd932
Author: Gary Gregory <[email protected]>
AuthorDate: Thu Dec 28 08:23:33 2023 -0500
[IO-829] Don't decode and reencode characters in a potentially different
charset in AbstractOrigin.CharSequenceOrigin.getReader(Charset)
- Add unit test
- Javadoc
- Use API internally
---
src/changes/changes.xml | 1 +
.../org/apache/commons/io/build/AbstractOrigin.java | 16 ++++++++++++++--
.../commons/io/build/CharSequenceOriginTest.java | 18 +++++++++++++++++-
3 files changed, 32 insertions(+), 3 deletions(-)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 76f0c630..2cf58617 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -83,6 +83,7 @@ The <action> type attribute can be add,update,fix,remove.
<action dev="ggregory" type="fix" issue="IO-828" due-to="Gary
Gregory">Deprecate CountingInputStream.getMaxLength() in favor of
getMaxCount()).</action>
<action dev="ggregory" type="fix" issue="IO-818" due-to="Gary
Gregory">NullInputStream breaks InputStream's read method contract.</action>
<action dev="ggregory" type="fix" due-to="Elliotte Rusty
Harold">Javadoc shouldn't reference 1.x behavior #539.</action>
+ <action dev="ggregory" type="fix" issue="IO-829" due-to="Elliotte Rusty
Harold, Gary Gregory">Don't decode and reencode characters in a potentially
different charset in
AbstractOrigin.CharSequenceOrigin.getReader(Charset).</action>
<!-- Add -->
<action dev="ggregory" type="add" due-to="Gary
Gregory">Add and use PathUtils.getFileName(Path, Function<Path,
R>).</action>
<action dev="ggregory" type="add" due-to="Gary
Gregory">Add and use PathUtils.getFileNameString().</action>
diff --git a/src/main/java/org/apache/commons/io/build/AbstractOrigin.java
b/src/main/java/org/apache/commons/io/build/AbstractOrigin.java
index 479a54d5..ddf1936d 100644
--- a/src/main/java/org/apache/commons/io/build/AbstractOrigin.java
+++ b/src/main/java/org/apache/commons/io/build/AbstractOrigin.java
@@ -115,6 +115,12 @@ public abstract class AbstractOrigin<T, B extends
AbstractOrigin<T, B>> extends
return origin.toString().getBytes(Charset.defaultCharset());
}
+ /**
+ * {@inheritDoc}
+ * <p>
+ * In this case, the {@code charset} parameter is ignored, since a
{@link CharSequence} does not need a {@link Charset} to be read.
+ * </p>
+ */
@Override
public CharSequence getCharSequence(final Charset charset) {
// No conversion
@@ -127,9 +133,15 @@ public abstract class AbstractOrigin<T, B extends
AbstractOrigin<T, B>> extends
return
CharSequenceInputStream.builder().setCharSequence(getCharSequence(Charset.defaultCharset())).get();
}
+ /**
+ * {@inheritDoc}
+ * <p>
+ * In this case, the {@code charset} parameter is ignored, since a
{@link CharSequence} does not need a {@link Charset} to be read.
+ * </p>
+ */
@Override
- public Reader getReader(final Charset charset) throws IOException {
- return new CharSequenceReader(origin);
+ public Reader getReader(final Charset ignore) throws IOException {
+ return new CharSequenceReader(get());
}
@Override
diff --git
a/src/test/java/org/apache/commons/io/build/CharSequenceOriginTest.java
b/src/test/java/org/apache/commons/io/build/CharSequenceOriginTest.java
index f506047e..d1361b32 100644
--- a/src/test/java/org/apache/commons/io/build/CharSequenceOriginTest.java
+++ b/src/test/java/org/apache/commons/io/build/CharSequenceOriginTest.java
@@ -16,10 +16,13 @@
*/
package org.apache.commons.io.build;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import java.io.FileNotFoundException;
import java.io.IOException;
+import java.io.Reader;
import java.nio.charset.StandardCharsets;
import org.apache.commons.io.IOUtils;
@@ -36,10 +39,14 @@ public class CharSequenceOriginTest extends
AbstractOriginTest<CharSequence, Cha
@BeforeEach
public void beforeEach() throws FileNotFoundException, IOException {
- setOriginRo(new
CharSequenceOrigin(IOUtils.resourceToString(FILE_RES_RO,
StandardCharsets.UTF_8)));
+ setOriginRo(new CharSequenceOrigin(getFixtureStringFromFile()));
setOriginRw(new CharSequenceOrigin("World"));
}
+ private String getFixtureStringFromFile() throws IOException {
+ return IOUtils.resourceToString(FILE_RES_RO, StandardCharsets.UTF_8);
+ }
+
@Override
@Test
public void testGetFile() {
@@ -61,6 +68,15 @@ public class CharSequenceOriginTest extends
AbstractOriginTest<CharSequence, Cha
assertThrows(UnsupportedOperationException.class, super::testGetPath);
}
+ @Test
+ public void testGetReaderIgnoreCharset() throws IOException {
+ // The CharSequenceOrigin ignores the given Charset.
+ try (final Reader reader =
getOriginRo().getReader(StandardCharsets.UTF_16LE)) {
+ assertNotNull(reader);
+ assertEquals(getFixtureStringFromFile(), IOUtils.toString(reader));
+ }
+ }
+
@Override
@Test
public void testGetWriter() {