aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org/apache/commons/io/input/XmlStreamReaderTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/org/apache/commons/io/input/XmlStreamReaderTest.java')
-rw-r--r--src/test/java/org/apache/commons/io/input/XmlStreamReaderTest.java32
1 files changed, 30 insertions, 2 deletions
diff --git a/src/test/java/org/apache/commons/io/input/XmlStreamReaderTest.java b/src/test/java/org/apache/commons/io/input/XmlStreamReaderTest.java
index 555cf7ca..63d587a8 100644
--- a/src/test/java/org/apache/commons/io/input/XmlStreamReaderTest.java
+++ b/src/test/java/org/apache/commons/io/input/XmlStreamReaderTest.java
@@ -30,6 +30,7 @@ import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.URL;
import java.net.URLConnection;
+import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -37,10 +38,15 @@ import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.text.MessageFormat;
import java.util.HashMap;
+import java.util.Locale;
import java.util.Map;
+import org.apache.commons.io.CharsetsTest;
import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.function.IOFunction;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
import org.junitpioneer.jupiter.DefaultLocale;
public class XmlStreamReaderTest {
@@ -162,6 +168,14 @@ public class XmlStreamReaderTest {
return new ByteArrayInputStream(baos.toByteArray());
}
+ private void parseCharset(final String hdr, final String enc, final IOFunction<InputStream, XmlStreamReader> factory) throws Exception {
+ try (final InputStream stream = new ByteArrayInputStream(hdr.getBytes(StandardCharsets.UTF_8))) {
+ try (final XmlStreamReader xml = factory.apply(stream)) {
+ assertEquals(enc.toUpperCase(Locale.ROOT), xml.getEncoding(), enc);
+ }
+ }
+ }
+
public void testAlternateDefaultEncoding(final String contentType, final String bomEnc, final String streamEnc, final String prologEnc,
final String alternateEnc) throws Exception {
try (InputStream is = getXmlInputStream(bomEnc, prologEnc == null ? XML1 : XML3, streamEnc, prologEnc);
@@ -276,6 +290,8 @@ public class XmlStreamReaderTest {
assertThrows(NullPointerException.class, () -> new XmlStreamReader((URL) null));
}
+ // XML Stream generator
+
@Test
public void testEncodingAttributeXML() throws Exception {
try (InputStream is = new ByteArrayInputStream(ENCODING_ATTRIBUTE_XML.getBytes(StandardCharsets.UTF_8));
@@ -294,8 +310,6 @@ public class XmlStreamReaderTest {
}
}
- // XML Stream generator
-
@Test
public void testHttp() throws Exception {
// niallp 2010-10-06 - remove following 2 tests - I reinstated
@@ -431,6 +445,20 @@ public class XmlStreamReaderTest {
}
}
+ @ParameterizedTest(name = "{0}")
+ @MethodSource(CharsetsTest.AVAIL_CHARSETS)
+ public void testIO_815(final String csName) throws Exception {
+ final MessageFormat fmt = new MessageFormat("<?xml version=\"1.0\" encoding=''{0}''?>\n<root>text</root>");
+ final IOFunction<InputStream, XmlStreamReader> factoryCtor = XmlStreamReader::new;
+ final IOFunction<InputStream, XmlStreamReader> factoryBuilder = stream -> XmlStreamReader.builder().setInputStream(stream).get();
+ parseCharset(fmt.format(new Object[] { csName }), csName, factoryCtor);
+ parseCharset(fmt.format(new Object[] { csName }), csName, factoryBuilder);
+ for (final String alias : Charset.forName(csName).aliases()) {
+ parseCharset(fmt.format(new Object[] { alias }), alias, factoryCtor);
+ parseCharset(fmt.format(new Object[] { alias }), alias, factoryBuilder);
+ }
+ }
+
// Turkish language has specific rules to convert dotted and dotless i character.
@Test
@DefaultLocale(language = "tr")