Author: ggregory
Date: Fri Aug 10 13:51:48 2012
New Revision: 1371703

URL: http://svn.apache.org/viewvc?rev=1371703&view=rev
Log:
More tests while working out possible issue with UTF-32.

Modified:
    
commons/proper/io/trunk/src/test/java/org/apache/commons/io/input/BOMInputStreamTest.java

Modified: 
commons/proper/io/trunk/src/test/java/org/apache/commons/io/input/BOMInputStreamTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/io/trunk/src/test/java/org/apache/commons/io/input/BOMInputStreamTest.java?rev=1371703&r1=1371702&r2=1371703&view=diff
==============================================================================
--- 
commons/proper/io/trunk/src/test/java/org/apache/commons/io/input/BOMInputStreamTest.java
 (original)
+++ 
commons/proper/io/trunk/src/test/java/org/apache/commons/io/input/BOMInputStreamTest.java
 Fri Aug 10 13:51:48 2012
@@ -23,6 +23,7 @@ import java.io.InputStream;
 import junit.framework.TestCase;
 
 import org.apache.commons.io.ByteOrderMark;
+import org.apache.commons.io.Charsets;
 import org.junit.Assert;
 
 /**
@@ -38,7 +39,7 @@ public class BOMInputStreamTest extends 
     /**
      *  Creates the underlying data stream, with or without BOM.
      */
-    public InputStream createDataStream(byte[] baseData, boolean addBOM) {
+    public InputStream createUtf8DataStream(byte[] baseData, boolean addBOM) {
         byte[] data = baseData;
         if (addBOM) {
             data = new byte[baseData.length + 3];
@@ -50,6 +51,34 @@ public class BOMInputStreamTest extends 
         return new ByteArrayInputStream(data);
     }
 
+    /**
+     *  Creates the underlying data stream, with or without BOM.
+     */
+    public InputStream createUtf16BeDataStream(byte[] baseData, boolean 
addBOM) {
+        byte[] data = baseData;
+        if (addBOM) {
+            data = new byte[baseData.length + 2];
+            data[0] = (byte) 0xFE;
+            data[1] = (byte) 0xFF;
+            System.arraycopy(baseData, 0, data, 2, baseData.length);
+        }
+        return new ByteArrayInputStream(data);
+    }
+
+    /**
+     *  Creates the underlying data stream, with or without BOM.
+     */
+    public InputStream createUtf16LeDataStream(byte[] baseData, boolean 
addBOM) {
+        byte[] data = baseData;
+        if (addBOM) {
+            data = new byte[baseData.length + 2];
+            data[0] = (byte) 0xFF;
+            data[1] = (byte) 0xFE;
+            System.arraycopy(baseData, 0, data, 2, baseData.length);
+        }
+        return new ByteArrayInputStream(data);
+    }
+
     private void assertData(byte[] expected, byte[] actual, int len)
         throws Exception {
         assertEquals("length", expected.length, len);
@@ -85,7 +114,7 @@ public class BOMInputStreamTest extends 
 
     // make sure that our support code works as expected
     public void testSupportCode() throws Exception {
-        InputStream in = createDataStream(new byte[] { 'A', 'B' }, true);
+        InputStream in = createUtf8DataStream(new byte[] { 'A', 'B' }, true);
         byte[] buf = new byte[1024];
         int len = in.read(buf);
         assertEquals(5, len);
@@ -102,7 +131,7 @@ public class BOMInputStreamTest extends 
 
     public void testReadWithoutBOM() throws Exception {
         byte[] data = new byte[] { 'A', 'B', 'C' };
-        BOMInputStream in = new BOMInputStream(createDataStream(data, false));
+        BOMInputStream in = new BOMInputStream(createUtf8DataStream(data, 
false));
         assertEquals('A', in.read());
         assertEquals('B', in.read());
         assertEquals('C', in.read());
@@ -114,7 +143,7 @@ public class BOMInputStreamTest extends 
 
     public void testReadEmpty() throws Exception {
         byte[] data = new byte[] {};
-        BOMInputStream in = new BOMInputStream(createDataStream(data, false));
+        BOMInputStream in = new BOMInputStream(createUtf8DataStream(data, 
false));
         assertEquals(-1, in.read());
         assertFalse("hasBOM()", in.hasBOM());
         assertFalse("hasBOM(UTF-8)", in.hasBOM(ByteOrderMark.UTF_8));
@@ -123,7 +152,7 @@ public class BOMInputStreamTest extends 
 
     public void testReadSmall() throws Exception {
         byte[] data = new byte[] { 'A', 'B' };
-        BOMInputStream in = new BOMInputStream(createDataStream(data, false));
+        BOMInputStream in = new BOMInputStream(createUtf8DataStream(data, 
false));
         assertEquals('A', in.read());
         assertEquals('B', in.read());
         assertEquals(-1, in.read());
@@ -132,9 +161,27 @@ public class BOMInputStreamTest extends 
         assertNull("getBOM", in.getBOM());
     }
 
-    public void testReadWithBOM() throws Exception {
+    public void testReadWithBOMUtf8Bytes() throws Exception {
         byte[] data = new byte[] { 'A', 'B', 'C' };
-        BOMInputStream in = new BOMInputStream(createDataStream(data, true));
+        BOMInputStream in = new BOMInputStream(createUtf8DataStream(data, 
true));
+        assertEquals('A', in.read());
+        assertEquals('B', in.read());
+        assertEquals('C', in.read());
+        assertEquals(-1, in.read());
+        assertTrue("hasBOM()", in.hasBOM());
+        assertTrue("hasBOM(UTF-8)", in.hasBOM(ByteOrderMark.UTF_8));
+        assertEquals("getBOM", ByteOrderMark.UTF_8, in.getBOM());
+        try {
+            in.hasBOM(ByteOrderMark.UTF_16BE);
+            fail("Expected IllegalArgumentException");
+        } catch (IllegalArgumentException e) {
+            // expected - not configured for UTF-16BE
+        }
+    }
+
+    public void testReadWithBOMUtf8String() throws Exception {
+        byte[] data = "ABC".getBytes(Charsets.UTF_8);
+        BOMInputStream in = new BOMInputStream(createUtf8DataStream(data, 
true));
         assertEquals('A', in.read());
         assertEquals('B', in.read());
         assertEquals('C', in.read());
@@ -144,6 +191,49 @@ public class BOMInputStreamTest extends 
         assertEquals("getBOM", ByteOrderMark.UTF_8, in.getBOM());
         try {
             in.hasBOM(ByteOrderMark.UTF_16BE);
+            fail("Expected IllegalArgumentException");
+        } catch (IllegalArgumentException e) {
+            // expected - not configured for UTF-16BE
+        }
+    }
+
+    public void testReadWithBOMUtf16Be() throws Exception {
+        byte[] data = "ABC".getBytes(Charsets.UTF_16BE);
+        BOMInputStream in = new BOMInputStream(createUtf16BeDataStream(data, 
true), ByteOrderMark.UTF_16BE);
+        assertEquals(0, in.read());
+        assertEquals('A', in.read());
+        assertEquals(0, in.read());
+        assertEquals('B', in.read());
+        assertEquals(0, in.read());
+        assertEquals('C', in.read());
+        assertEquals(-1, in.read());
+        assertTrue("hasBOM()", in.hasBOM());
+        assertTrue("hasBOM(UTF-16BE)", in.hasBOM(ByteOrderMark.UTF_16BE));
+        assertEquals("getBOM", ByteOrderMark.UTF_16BE, in.getBOM());
+        try {
+            in.hasBOM(ByteOrderMark.UTF_16LE);
+            fail("Expected IllegalArgumentException");
+        } catch (IllegalArgumentException e) {
+            // expected - not configured for UTF-16LE
+        }
+    }
+
+    public void testReadWithBOMUtf16Le() throws Exception {
+        byte[] data = "ABC".getBytes(Charsets.UTF_16LE);
+        BOMInputStream in = new BOMInputStream(createUtf16LeDataStream(data, 
true), ByteOrderMark.UTF_16LE);
+        assertEquals('A', in.read());
+        assertEquals(0, in.read());
+        assertEquals('B', in.read());
+        assertEquals(0, in.read());
+        assertEquals('C', in.read());
+        assertEquals(0, in.read());
+        assertEquals(-1, in.read());
+        assertTrue("hasBOM()", in.hasBOM());
+        assertTrue("hasBOM(UTF-16LE)", in.hasBOM(ByteOrderMark.UTF_16LE));
+        assertEquals("getBOM", ByteOrderMark.UTF_16LE, in.getBOM());
+        try {
+            in.hasBOM(ByteOrderMark.UTF_16BE);
+            fail("Expected IllegalArgumentException");
         } catch (IllegalArgumentException e) {
             // expected - not configured for UTF-16BE
         }
@@ -151,7 +241,7 @@ public class BOMInputStreamTest extends 
 
     public void testGetBOMFirstThenRead() throws Exception {
         byte[] data = new byte[] { 'A', 'B', 'C' };
-        BOMInputStream in = new BOMInputStream(createDataStream(data, true));
+        BOMInputStream in = new BOMInputStream(createUtf8DataStream(data, 
true));
         assertEquals("getBOM", ByteOrderMark.UTF_8, in.getBOM());
         assertTrue("hasBOM()", in.hasBOM());
         assertTrue("hasBOM(UTF-8)", in.hasBOM(ByteOrderMark.UTF_8));
@@ -163,7 +253,7 @@ public class BOMInputStreamTest extends 
 
     public void testReadWithBOMInclude() throws Exception {
         byte[] data = new byte[] { 'A', 'B', 'C' };
-        BOMInputStream in = new BOMInputStream(createDataStream(data, true), 
true);
+        BOMInputStream in = new BOMInputStream(createUtf8DataStream(data, 
true), true);
         assertEquals(0xEF, in.read());
         assertEquals(0xBB, in.read());
         assertEquals(0xBF, in.read());
@@ -178,7 +268,7 @@ public class BOMInputStreamTest extends 
 
     public void testGetBOMFirstThenReadInclude() throws Exception {
         byte[] data = new byte[] { 'A', 'B', 'C' };
-        BOMInputStream in = new BOMInputStream(createDataStream(data, true), 
true);
+        BOMInputStream in = new BOMInputStream(createUtf8DataStream(data, 
true), true);
         assertTrue("hasBOM()", in.hasBOM());
         assertTrue("hasBOM(UTF-8)", in.hasBOM(ByteOrderMark.UTF_8));
         assertEquals("getBOM", ByteOrderMark.UTF_8, in.getBOM());
@@ -193,7 +283,7 @@ public class BOMInputStreamTest extends 
 
     public void testReadWithMultipleBOM() throws Exception {
         byte[] data = new byte[] { 'A', 'B', 'C' };
-        BOMInputStream in = new BOMInputStream(createDataStream(data, true), 
+        BOMInputStream in = new BOMInputStream(createUtf8DataStream(data, 
true), 
                                             ByteOrderMark.UTF_16BE, 
ByteOrderMark.UTF_8);
         assertEquals('A', in.read());
         assertEquals('B', in.read());
@@ -207,35 +297,35 @@ public class BOMInputStreamTest extends 
 
     public void testEmptyBufferWithoutBOM() throws Exception {
         byte[] data = new byte[] {};
-        InputStream in = new BOMInputStream(createDataStream(data, false));
+        InputStream in = new BOMInputStream(createUtf8DataStream(data, false));
         byte[] buf = new byte[1024];
         assertEquals(-1, in.read(buf));
     }
 
     public void testEmptyBufferWithBOM() throws Exception {
         byte[] data = new byte[] {};
-        InputStream in = new BOMInputStream(createDataStream(data, true));
+        InputStream in = new BOMInputStream(createUtf8DataStream(data, true));
         byte[] buf = new byte[1024];
         assertEquals(-1, in.read(buf));
     }
 
     public void testLargeBufferWithoutBOM() throws Exception {
         byte[] data = new byte[] { 'A', 'B', 'C' };
-        InputStream in = new BOMInputStream(createDataStream(data, false));
+        InputStream in = new BOMInputStream(createUtf8DataStream(data, false));
         byte[] buf = new byte[1024];
         assertData(data, buf, in.read(buf));
     }
 
     public void testLargeBufferWithBOM() throws Exception {
         byte[] data = new byte[] { 'A', 'B', 'C' };
-        InputStream in = new BOMInputStream(createDataStream(data, true));
+        InputStream in = new BOMInputStream(createUtf8DataStream(data, true));
         byte[] buf = new byte[1024];
         assertData(data, buf, in.read(buf));
     }
 
     public void testSmallBufferWithoutBOM() throws Exception {
         byte[] data = new byte[] { 'A', 'B', 'C' };
-        InputStream in = new BOMInputStream(createDataStream(data, false));
+        InputStream in = new BOMInputStream(createUtf8DataStream(data, false));
         byte[] buf = new byte[1024];
         assertData(new byte[] { 'A', 'B' }, buf, in.read(buf, 0, 2));
         assertData(new byte[] { 'C' }, buf, in.read(buf, 0, 2));
@@ -243,7 +333,7 @@ public class BOMInputStreamTest extends 
 
     public void testSmallBufferWithBOM() throws Exception {
         byte[] data = new byte[] { 'A', 'B', 'C' };
-        InputStream in = new BOMInputStream(createDataStream(data, true));
+        InputStream in = new BOMInputStream(createUtf8DataStream(data, true));
         byte[] buf = new byte[1024];
         assertData(new byte[] { 'A', 'B' }, buf, in.read(buf, 0, 2));
         assertData(new byte[] { 'C' }, buf, in.read(buf, 0, 2));
@@ -251,7 +341,7 @@ public class BOMInputStreamTest extends 
 
     public void testLeadingNonBOMSingleRead() throws Exception {
         byte[] data = new byte[] { (byte) 0xEF, (byte) 0xAB, (byte) 0xCD };
-        InputStream in = new BOMInputStream(createDataStream(data, false));
+        InputStream in = new BOMInputStream(createUtf8DataStream(data, false));
         assertEquals(0xEF, in.read());
         assertEquals(0xAB, in.read());
         assertEquals(0xCD, in.read());
@@ -260,28 +350,28 @@ public class BOMInputStreamTest extends 
 
     public void testLeadingNonBOMBufferedRead() throws Exception {
         byte[] data = new byte[] { (byte) 0xEF, (byte) 0xAB, (byte) 0xCD };
-        InputStream in = new BOMInputStream(createDataStream(data, false));
+        InputStream in = new BOMInputStream(createUtf8DataStream(data, false));
         byte[] buf = new byte[1024];
         assertData(data, buf, in.read(buf));
     }
 
     public void testSkipWithoutBOM() throws Exception {
         byte[] data = new byte[] { 'A', 'B', 'C', 'D' };
-        InputStream in = new BOMInputStream(createDataStream(data, false));
+        InputStream in = new BOMInputStream(createUtf8DataStream(data, false));
         in.skip(2L);
         assertEquals('C', in.read());
     }
 
     public void testSkipWithBOM() throws Exception {
         byte[] data = new byte[] { 'A', 'B', 'C', 'D' };
-        InputStream in = new BOMInputStream(createDataStream(data, true));
+        InputStream in = new BOMInputStream(createUtf8DataStream(data, true));
         in.skip(2L);
         assertEquals('C', in.read());
     }
 
     public void testMarkResetAfterReadWithoutBOM() throws Exception {
         byte[] data = new byte[] { 'A', 'B', 'C', 'D' };
-        InputStream in = new BOMInputStream(createDataStream(data, false));
+        InputStream in = new BOMInputStream(createUtf8DataStream(data, false));
         assertTrue(in.markSupported());
 
         in.read();
@@ -295,7 +385,7 @@ public class BOMInputStreamTest extends 
 
     public void testMarkResetAfterReadWithBOM() throws Exception {
         byte[] data = new byte[] { 'A', 'B', 'C', 'D' };
-        InputStream in = new BOMInputStream(createDataStream(data, true));
+        InputStream in = new BOMInputStream(createUtf8DataStream(data, true));
         assertTrue(in.markSupported());
 
         in.read();
@@ -309,7 +399,7 @@ public class BOMInputStreamTest extends 
 
     public void testMarkResetBeforeReadWithoutBOM() throws Exception {
         byte[] data = new byte[] { 'A', 'B', 'C', 'D' };
-        InputStream in = new BOMInputStream(createDataStream(data, false));
+        InputStream in = new BOMInputStream(createUtf8DataStream(data, false));
         assertTrue(in.markSupported());
 
         in.mark(10);
@@ -322,7 +412,7 @@ public class BOMInputStreamTest extends 
 
     public void testMarkResetBeforeReadWithBOM() throws Exception {
         byte[] data = new byte[] { 'A', 'B', 'C', 'D' };
-        InputStream in = new BOMInputStream(createDataStream(data, true));
+        InputStream in = new BOMInputStream(createUtf8DataStream(data, true));
         assertTrue(in.markSupported());
 
         in.mark(10);
@@ -335,26 +425,26 @@ public class BOMInputStreamTest extends 
 
     public void testAvailableWithoutBOM() throws Exception {
         byte[] data = new byte[] { 'A', 'B', 'C', 'D' };
-        InputStream in = new BOMInputStream(createDataStream(data, false));
+        InputStream in = new BOMInputStream(createUtf8DataStream(data, false));
         assertEquals(4, in.available());
     }
 
     public void testAvailableWithBOM() throws Exception {
         byte[] data = new byte[] { 'A', 'B', 'C', 'D' };
-        InputStream in = new BOMInputStream(createDataStream(data, true));
+        InputStream in = new BOMInputStream(createUtf8DataStream(data, true));
         assertEquals(7, in.available());
     }
 
     public void testNoBoms() throws Exception {
         byte[] data = new byte[] { 'A', 'B', 'C' };
         try {
-            new BOMInputStream(createDataStream(data, true), false, 
(ByteOrderMark[])null);
+            new BOMInputStream(createUtf8DataStream(data, true), false, 
(ByteOrderMark[])null);
             fail("Null BOMs, expected IllegalArgumentException");
         } catch (IllegalArgumentException e) {
             // expected
         }
         try {
-            new BOMInputStream(createDataStream(data, true), false, new 
ByteOrderMark[0]);
+            new BOMInputStream(createUtf8DataStream(data, true), false, new 
ByteOrderMark[0]);
             fail("Null BOMs, expected IllegalArgumentException");
         } catch (IllegalArgumentException e) {
             // expected


Reply via email to