Modified: 
commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/icns/IcnsRoundTripTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/icns/IcnsRoundTripTest.java?rev=1212719&r1=1212718&r2=1212719&view=diff
==============================================================================
--- 
commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/icns/IcnsRoundTripTest.java
 (original)
+++ 
commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/icns/IcnsRoundTripTest.java
 Sat Dec 10 02:09:43 2011
@@ -50,389 +50,389 @@ public class IcnsRoundTripTest extends I
         {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
     };
 
-       public void test1BPPIconMaskVersus8BPPMask() throws ImageReadException, 
ImageWriteException, IOException
-       {
-               final int foreground = 0xff000000;
-               final int background = 0xff000000;
-               ByteArrayOutputStream baos = new ByteArrayOutputStream();
-               BinaryOutputStream bos = new BinaryOutputStream(baos,
-                               BinaryOutputStream.BYTE_ORDER_BIG_ENDIAN);
-               bos.write4Bytes(IcnsImageParser.ICNS_MAGIC);
-               bos.write4Bytes(4 + 4 + 4 + 4 + 2*16*16/8 + 4 + 4 + 16*16);
-               
bos.write4Bytes(IcnsType.ICNS_16x16_1BIT_IMAGE_AND_MASK.getType());
-               bos.write4Bytes(4 + 4 + 2*16*16/8);
-               // 1 BPP image - all black
-               for (int y = 0; y < 16; y++)
-               {
-                       bos.write(0xff);
-                       bos.write(0xff);
-               }
-               // 1 BPP mask - all opaque
-               for (int y = 0; y < 16; y++)
-               {
-                       bos.write(0xff);
-                       bos.write(0xff);
-               }
-               // 8 BPP alpha mask - partially transparent
-               bos.write4Bytes(IcnsType.ICNS_16x16_8BIT_MASK.getType());
-               bos.write4Bytes(4 + 4 + 16*16);
-               for (int y = 0; y < 16; y++)
-               {
-                       for (int x = 0; x < 16; x++)
-                       {
-                               if (image[y][x] != 0)
-                                       bos.write(0xff);
-                               else
-                                       bos.write(0x00);
-                       }
-               }
-               bos.flush();
-               writeAndReadImageData("1bpp-image-mask-versus-8bpp-mask",
-                               baos.toByteArray(), foreground, background);
-       }
-
-       public void test8BPPIcon8BPPMask() throws ImageReadException, 
ImageWriteException, IOException
-       {
-               final int foreground = 0xff000000;
-               final int background = 0x00cccccc;
-               ByteArrayOutputStream baos = new ByteArrayOutputStream();
-               BinaryOutputStream bos = new BinaryOutputStream(baos,
-                               BinaryOutputStream.BYTE_ORDER_BIG_ENDIAN);
-               bos.write4Bytes(IcnsImageParser.ICNS_MAGIC);
-               bos.write4Bytes(4 + 4 + 4 + 4 + 16*16 + 4 + 4 + 16*16);
-               bos.write4Bytes(IcnsType.ICNS_16x16_8BIT_IMAGE.getType());
-               bos.write4Bytes(4 + 4 + 16*16);
-               // 8 BPP image
-               for (int y = 0; y < 16; y++)
-               {
-                       for (int x = 0; x < 16; x++)
-                       {
-                               if (image[y][x] != 0)
-                                       bos.write(0xff);
-                               else
-                                       bos.write(43);
-                       }
-               }
-               // 8 BPP alpha mask
-               bos.write4Bytes(IcnsType.ICNS_16x16_8BIT_MASK.getType());
-               bos.write4Bytes(4 + 4 + 16*16);
-               for (int y = 0; y < 16; y++)
-               {
-                       for (int x = 0; x < 16; x++)
-                       {
-                               if (image[y][x] != 0)
-                                       bos.write(0xff);
-                               else
-                                       bos.write(0x00);
-                       }
-               }
-               bos.flush();
-               writeAndReadImageData("8bpp-image-8bpp-mask", 
baos.toByteArray(), foreground, background);
-       }
-
-       public void test8BPPIcon8BPPMaskVersus1BPPMask()
-                       throws ImageReadException, ImageWriteException, 
IOException
-       {
-               final int foreground = 0xff000000;
-               final int background = 0x00cccccc;
-               ByteArrayOutputStream baos = new ByteArrayOutputStream();
-               BinaryOutputStream bos = new BinaryOutputStream(baos,
-                               BinaryOutputStream.BYTE_ORDER_BIG_ENDIAN);
-               bos.write4Bytes(IcnsImageParser.ICNS_MAGIC);
-               bos.write4Bytes(4 + 4 + 4 + 4 + 16*16 + 4 + 4 + 16*16 + 4 + 4 + 
2*16*16/8);
-               bos.write4Bytes(IcnsType.ICNS_16x16_8BIT_IMAGE.getType());
-               bos.write4Bytes(4 + 4 + 16*16);
-               // 8 BPP image
-               for (int y = 0; y < 16; y++)
-               {
-                       for (int x = 0; x < 16; x++)
-                       {
-                               if (image[y][x] != 0)
-                                       bos.write(0xff);
-                               else
-                                       bos.write(43);
-                       }
-               }
-               // 8 BPP alpha mask, some transparent
-               bos.write4Bytes(IcnsType.ICNS_16x16_8BIT_MASK.getType());
-               bos.write4Bytes(4 + 4 + 16*16);
-               for (int y = 0; y < 16; y++)
-               {
-                       for (int x = 0; x < 16; x++)
-                       {
-                               if (image[y][x] != 0)
-                                       bos.write(0xff);
-                               else
-                                       bos.write(0x00);
-                       }
-               }
-               // 1 BPP mask
-               
bos.write4Bytes(IcnsType.ICNS_16x16_1BIT_IMAGE_AND_MASK.getType());
-               bos.write4Bytes(4 + 4 + 2*16*16/8);
-               // 1 bit image
-               for (int y = 0; y < 16; y++)
-               {
-                       for (int x = 0; x < 16; x += 8)
-                       {
-                               int eightBits = 0;
-                               for (int pos = 0; pos < 8; pos++)
-                               {
-                                       if (image[y][x+pos] != 0)
-                                               eightBits |= (1 << (7 - pos));
-                               }
-                               bos.write(eightBits);
-                       }
-               }
-               // 1 bit mask, all opaque
-               for (int y = 0; y < 16; y++)
-               {
-                       bos.write(0xff);
-                       bos.write(0xff);
-               }
-               bos.flush();
-               writeAndReadImageData("8bpp-image-8bpp-mask-vs-1bpp-mask",
-                               baos.toByteArray(), foreground, background);
-       }
-
-       public void test8BPPIcon1BPPMaskVersus8BPPMask()
-                       throws ImageReadException, ImageWriteException, 
IOException
-       {
-               final int foreground = 0xff000000;
-               final int background = 0x00cccccc;
-               ByteArrayOutputStream baos = new ByteArrayOutputStream();
-               BinaryOutputStream bos = new BinaryOutputStream(baos,
-                               BinaryOutputStream.BYTE_ORDER_BIG_ENDIAN);
-               bos.write4Bytes(IcnsImageParser.ICNS_MAGIC);
-               bos.write4Bytes(4 + 4 + 4 + 4 + 16*16 + 4 + 4 + 16*16 + 4 + 4 + 
2*16*16/8);
-               bos.write4Bytes(IcnsType.ICNS_16x16_8BIT_IMAGE.getType());
-               bos.write4Bytes(4 + 4 + 16*16);
-               // 8 BPP image
-               for (int y = 0; y < 16; y++)
-               {
-                       for (int x = 0; x < 16; x++)
-                       {
-                               if (image[y][x] != 0)
-                                       bos.write(0xff);
-                               else
-                                       bos.write(43);
-                       }
-               }
-               // 1 BPP mask
-               
bos.write4Bytes(IcnsType.ICNS_16x16_1BIT_IMAGE_AND_MASK.getType());
-               bos.write4Bytes(4 + 4 + 2*16*16/8);
-               // 1 bit image
-               for (int y = 0; y < 16; y++)
-               {
-                       for (int x = 0; x < 16; x += 8)
-                       {
-                               int eightBits = 0;
-                               for (int pos = 0; pos < 8; pos++)
-                               {
-                                       if (image[y][x+pos] != 0)
-                                               eightBits |= (1 << (7 - pos));
-                               }
-                               bos.write(eightBits);
-                       }
-               }
-               // 1 bit mask, all opaque
-               for (int y = 0; y < 16; y++)
-               {
-                       bos.write(0xff);
-                       bos.write(0xff);
-               }
-               // 8 BPP alpha mask, some transparent
-               bos.write4Bytes(IcnsType.ICNS_16x16_8BIT_MASK.getType());
-               bos.write4Bytes(4 + 4 + 16*16);
-               for (int y = 0; y < 16; y++)
-               {
-                       for (int x = 0; x < 16; x++)
-                       {
-                               if (image[y][x] != 0)
-                                       bos.write(0xff);
-                               else
-                                       bos.write(0x00);
-                       }
-               }
-               bos.flush();
-               writeAndReadImageData("8bpp-image-1bpp-mask-vs-8bpp-mask",
-                               baos.toByteArray(), foreground, background);
-       }
-
-       public void test8BPPIconNoMask() throws ImageReadException, 
ImageWriteException, IOException
-       {
-               final int foreground = 0xff000000;
-               final int background = 0xffcccccc;
-               ByteArrayOutputStream baos = new ByteArrayOutputStream();
-               BinaryOutputStream bos = new BinaryOutputStream(baos,
-                               BinaryOutputStream.BYTE_ORDER_BIG_ENDIAN);
-               bos.write4Bytes(IcnsImageParser.ICNS_MAGIC);
-               bos.write4Bytes(4 + 4 + 4 + 4 + 16*16);
-               bos.write4Bytes(IcnsType.ICNS_16x16_8BIT_IMAGE.getType());
-               bos.write4Bytes(4 + 4 + 16*16);
-               // 8 BPP image
-               for (int y = 0; y < 16; y++)
-               {
-                       for (int x = 0; x < 16; x++)
-                       {
-                               if (image[y][x] != 0)
-                                       bos.write(0xff);
-                               else
-                                       bos.write(43);
-                       }
-               }
-               bos.flush();
-               writeAndReadImageData("8bpp-image-no-mask", baos.toByteArray(), 
foreground, background);
-       }
-
-       public void test32BPPMaskedIcon() throws ImageReadException, 
ImageWriteException, IOException
-       {
-               final int foreground = 0xff000000;
-               final int background = 0x000000ff;
-               ByteArrayOutputStream baos = new ByteArrayOutputStream();
-               BinaryOutputStream bos = new BinaryOutputStream(baos,
-                               BinaryOutputStream.BYTE_ORDER_BIG_ENDIAN);
-               bos.write4Bytes(IcnsImageParser.ICNS_MAGIC);
-               bos.write4Bytes(4 + 4 + 4 + 4 + 4*16*16 + 4 + 4 + 2*16*16/8);
-               bos.write4Bytes(IcnsType.ICNS_16x16_32BIT_IMAGE.getType());
-               bos.write4Bytes(4 + 4 + 4*16*16);
-               for (int y = 0; y < 16; y++)
-               {
-                       for (int x = 0; x < 16; x++)
-                       {
-                               // argb, a ignored
-                               bos.write(0);
-                               final int pixel;
-                               if (image[y][x] != 0)
-                                       pixel = foreground;
-                               else
-                                       pixel = background;
-                               bos.write(0xff & (pixel >> 16));
-                               bos.write(0xff & (pixel >> 8));
-                               bos.write(0xff & pixel);
-                       }
-               }
-               
bos.write4Bytes(IcnsType.ICNS_16x16_1BIT_IMAGE_AND_MASK.getType());
-               bos.write4Bytes(4 + 4 + 2*16*16/8);
-               // 1 bit image
-               for (int y = 0; y < 16; y++)
-               {
-                       for (int x = 0; x < 16; x += 8)
-                       {
-                               int eightBits = 0;
-                               for (int pos = 0; pos < 8; pos++)
-                               {
-                                       if (image[y][x+pos] != 0)
-                                               eightBits |= (1 << (7 - pos));
-                               }
-                               bos.write(eightBits);
-                       }
-               }
-               // 1 bit mask
-               for (int y = 0; y < 16; y++)
-               {
-                       for (int x = 0; x < 16; x += 8)
-                       {
-                               int eightBits = 0;
-                               for (int pos = 0; pos < 8; pos++)
-                               {
-                                       if (image[y][x+pos] != 0)
-                                               eightBits |= (1 << (7 - pos));
-                               }
-                               bos.write(eightBits);
-                       }
-               }
-               bos.flush();
-               writeAndReadImageData("32bpp-image-1bpp-mask", 
baos.toByteArray(), foreground, background);
-       }
-
-       public void test32BPPHalfMaskedIcon() throws ImageWriteException, 
IOException
-       {
-               final int foreground = 0xff000000;
-               final int background = 0xff0000ff;
-               ByteArrayOutputStream baos = new ByteArrayOutputStream();
-               BinaryOutputStream bos = new BinaryOutputStream(baos,
-                               BinaryOutputStream.BYTE_ORDER_BIG_ENDIAN);
-               bos.write4Bytes(IcnsImageParser.ICNS_MAGIC);
-               bos.write4Bytes(4 + 4 + 4 + 4 + 4*16*16 + 4 + 4 + 16*16/8);
-               bos.write4Bytes(IcnsType.ICNS_16x16_32BIT_IMAGE.getType());
-               bos.write4Bytes(4 + 4 + 4*16*16);
-               for (int y = 0; y < 16; y++)
-               {
-                       for (int x = 0; x < 16; x++)
-                       {
-                               // argb, a ignored
-                               bos.write(0);
-                               final int pixel;
-                               if (image[y][x] != 0)
-                                       pixel = foreground;
-                               else
-                                       pixel = background;
-                               bos.write(0xff & (pixel >> 16));
-                               bos.write(0xff & (pixel >> 8));
-                               bos.write(0xff & pixel);
-                       }
-               }
-               
bos.write4Bytes(IcnsType.ICNS_16x16_1BIT_IMAGE_AND_MASK.getType());
-               bos.write4Bytes(4 + 4 + 16*16/8);
-               // 1 bit image
-               for (int y = 0; y < 16; y++)
-               {
-                       for (int x = 0; x < 16; x += 8)
-                       {
-                               int eightBits = 0;
-                               for (int pos = 0; pos < 8; pos++)
-                               {
-                                       if (image[y][x+pos] != 0)
-                                               eightBits |= (1 << (7 - pos));
-                               }
-                               bos.write(eightBits);
-                       }
-               }
-               // Missing 1 bit mask!!!
-               bos.flush();
-               
-               boolean threw = false;
-               try
-               {
-                       writeAndReadImageData("32bpp-half-masked-CORRUPT", 
baos.toByteArray(), foreground, background);
-               }
-               catch (ImageReadException imageReadException)
-               {
-                       threw = true;
-               }
-               assertTrue("ICNS file with corrupt mask didn't fail to parse", 
threw);
-       }
-
-       public void test32BPPMaskMissingIcon() throws ImageReadException, 
ImageWriteException, IOException
-       {
-               final int foreground = 0xff000000;
-               final int background = 0xff0000ff;
-               ByteArrayOutputStream baos = new ByteArrayOutputStream();
-               BinaryOutputStream bos = new BinaryOutputStream(baos,
-                               BinaryOutputStream.BYTE_ORDER_BIG_ENDIAN);
-               bos.write4Bytes(IcnsImageParser.ICNS_MAGIC);
-               bos.write4Bytes(4 + 4 + 4 + 4 + 4*16*16);
-               bos.write4Bytes(IcnsType.ICNS_16x16_32BIT_IMAGE.getType());
-               bos.write4Bytes(4 + 4 + 4*16*16);
-               for (int y = 0; y < 16; y++)
-               {
-                       for (int x = 0; x < 16; x++)
-                       {
-                               // argb, a ignored
-                               bos.write(0);
-                               final int pixel;
-                               if (image[y][x] != 0)
-                                       pixel = foreground;
-                               else
-                                       pixel = background;
-                               bos.write(0xff & (pixel >> 16));
-                               bos.write(0xff & (pixel >> 8));
-                               bos.write(0xff & pixel);
-                       }
-               }
-               bos.flush();
-               writeAndReadImageData("32bpp-mask-missing", baos.toByteArray(), 
foreground, background);
-       }
+    public void test1BPPIconMaskVersus8BPPMask() throws ImageReadException, 
ImageWriteException, IOException
+    {
+        final int foreground = 0xff000000;
+        final int background = 0xff000000;
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        BinaryOutputStream bos = new BinaryOutputStream(baos,
+                BinaryOutputStream.BYTE_ORDER_BIG_ENDIAN);
+        bos.write4Bytes(IcnsImageParser.ICNS_MAGIC);
+        bos.write4Bytes(4 + 4 + 4 + 4 + 2*16*16/8 + 4 + 4 + 16*16);
+        bos.write4Bytes(IcnsType.ICNS_16x16_1BIT_IMAGE_AND_MASK.getType());
+        bos.write4Bytes(4 + 4 + 2*16*16/8);
+        // 1 BPP image - all black
+        for (int y = 0; y < 16; y++)
+        {
+            bos.write(0xff);
+            bos.write(0xff);
+        }
+        // 1 BPP mask - all opaque
+        for (int y = 0; y < 16; y++)
+        {
+            bos.write(0xff);
+            bos.write(0xff);
+        }
+        // 8 BPP alpha mask - partially transparent
+        bos.write4Bytes(IcnsType.ICNS_16x16_8BIT_MASK.getType());
+        bos.write4Bytes(4 + 4 + 16*16);
+        for (int y = 0; y < 16; y++)
+        {
+            for (int x = 0; x < 16; x++)
+            {
+                if (image[y][x] != 0)
+                    bos.write(0xff);
+                else
+                    bos.write(0x00);
+            }
+        }
+        bos.flush();
+        writeAndReadImageData("1bpp-image-mask-versus-8bpp-mask",
+                baos.toByteArray(), foreground, background);
+    }
+
+    public void test8BPPIcon8BPPMask() throws ImageReadException, 
ImageWriteException, IOException
+    {
+        final int foreground = 0xff000000;
+        final int background = 0x00cccccc;
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        BinaryOutputStream bos = new BinaryOutputStream(baos,
+                BinaryOutputStream.BYTE_ORDER_BIG_ENDIAN);
+        bos.write4Bytes(IcnsImageParser.ICNS_MAGIC);
+        bos.write4Bytes(4 + 4 + 4 + 4 + 16*16 + 4 + 4 + 16*16);
+        bos.write4Bytes(IcnsType.ICNS_16x16_8BIT_IMAGE.getType());
+        bos.write4Bytes(4 + 4 + 16*16);
+        // 8 BPP image
+        for (int y = 0; y < 16; y++)
+        {
+            for (int x = 0; x < 16; x++)
+            {
+                if (image[y][x] != 0)
+                    bos.write(0xff);
+                else
+                    bos.write(43);
+            }
+        }
+        // 8 BPP alpha mask
+        bos.write4Bytes(IcnsType.ICNS_16x16_8BIT_MASK.getType());
+        bos.write4Bytes(4 + 4 + 16*16);
+        for (int y = 0; y < 16; y++)
+        {
+            for (int x = 0; x < 16; x++)
+            {
+                if (image[y][x] != 0)
+                    bos.write(0xff);
+                else
+                    bos.write(0x00);
+            }
+        }
+        bos.flush();
+        writeAndReadImageData("8bpp-image-8bpp-mask", baos.toByteArray(), 
foreground, background);
+    }
+
+    public void test8BPPIcon8BPPMaskVersus1BPPMask()
+            throws ImageReadException, ImageWriteException, IOException
+    {
+        final int foreground = 0xff000000;
+        final int background = 0x00cccccc;
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        BinaryOutputStream bos = new BinaryOutputStream(baos,
+                BinaryOutputStream.BYTE_ORDER_BIG_ENDIAN);
+        bos.write4Bytes(IcnsImageParser.ICNS_MAGIC);
+        bos.write4Bytes(4 + 4 + 4 + 4 + 16*16 + 4 + 4 + 16*16 + 4 + 4 + 
2*16*16/8);
+        bos.write4Bytes(IcnsType.ICNS_16x16_8BIT_IMAGE.getType());
+        bos.write4Bytes(4 + 4 + 16*16);
+        // 8 BPP image
+        for (int y = 0; y < 16; y++)
+        {
+            for (int x = 0; x < 16; x++)
+            {
+                if (image[y][x] != 0)
+                    bos.write(0xff);
+                else
+                    bos.write(43);
+            }
+        }
+        // 8 BPP alpha mask, some transparent
+        bos.write4Bytes(IcnsType.ICNS_16x16_8BIT_MASK.getType());
+        bos.write4Bytes(4 + 4 + 16*16);
+        for (int y = 0; y < 16; y++)
+        {
+            for (int x = 0; x < 16; x++)
+            {
+                if (image[y][x] != 0)
+                    bos.write(0xff);
+                else
+                    bos.write(0x00);
+            }
+        }
+        // 1 BPP mask
+        bos.write4Bytes(IcnsType.ICNS_16x16_1BIT_IMAGE_AND_MASK.getType());
+        bos.write4Bytes(4 + 4 + 2*16*16/8);
+        // 1 bit image
+        for (int y = 0; y < 16; y++)
+        {
+            for (int x = 0; x < 16; x += 8)
+            {
+                int eightBits = 0;
+                for (int pos = 0; pos < 8; pos++)
+                {
+                    if (image[y][x+pos] != 0)
+                        eightBits |= (1 << (7 - pos));
+                }
+                bos.write(eightBits);
+            }
+        }
+        // 1 bit mask, all opaque
+        for (int y = 0; y < 16; y++)
+        {
+            bos.write(0xff);
+            bos.write(0xff);
+        }
+        bos.flush();
+        writeAndReadImageData("8bpp-image-8bpp-mask-vs-1bpp-mask",
+                baos.toByteArray(), foreground, background);
+    }
+
+    public void test8BPPIcon1BPPMaskVersus8BPPMask()
+            throws ImageReadException, ImageWriteException, IOException
+    {
+        final int foreground = 0xff000000;
+        final int background = 0x00cccccc;
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        BinaryOutputStream bos = new BinaryOutputStream(baos,
+                BinaryOutputStream.BYTE_ORDER_BIG_ENDIAN);
+        bos.write4Bytes(IcnsImageParser.ICNS_MAGIC);
+        bos.write4Bytes(4 + 4 + 4 + 4 + 16*16 + 4 + 4 + 16*16 + 4 + 4 + 
2*16*16/8);
+        bos.write4Bytes(IcnsType.ICNS_16x16_8BIT_IMAGE.getType());
+        bos.write4Bytes(4 + 4 + 16*16);
+        // 8 BPP image
+        for (int y = 0; y < 16; y++)
+        {
+            for (int x = 0; x < 16; x++)
+            {
+                if (image[y][x] != 0)
+                    bos.write(0xff);
+                else
+                    bos.write(43);
+            }
+        }
+        // 1 BPP mask
+        bos.write4Bytes(IcnsType.ICNS_16x16_1BIT_IMAGE_AND_MASK.getType());
+        bos.write4Bytes(4 + 4 + 2*16*16/8);
+        // 1 bit image
+        for (int y = 0; y < 16; y++)
+        {
+            for (int x = 0; x < 16; x += 8)
+            {
+                int eightBits = 0;
+                for (int pos = 0; pos < 8; pos++)
+                {
+                    if (image[y][x+pos] != 0)
+                        eightBits |= (1 << (7 - pos));
+                }
+                bos.write(eightBits);
+            }
+        }
+        // 1 bit mask, all opaque
+        for (int y = 0; y < 16; y++)
+        {
+            bos.write(0xff);
+            bos.write(0xff);
+        }
+        // 8 BPP alpha mask, some transparent
+        bos.write4Bytes(IcnsType.ICNS_16x16_8BIT_MASK.getType());
+        bos.write4Bytes(4 + 4 + 16*16);
+        for (int y = 0; y < 16; y++)
+        {
+            for (int x = 0; x < 16; x++)
+            {
+                if (image[y][x] != 0)
+                    bos.write(0xff);
+                else
+                    bos.write(0x00);
+            }
+        }
+        bos.flush();
+        writeAndReadImageData("8bpp-image-1bpp-mask-vs-8bpp-mask",
+                baos.toByteArray(), foreground, background);
+    }
+
+    public void test8BPPIconNoMask() throws ImageReadException, 
ImageWriteException, IOException
+    {
+        final int foreground = 0xff000000;
+        final int background = 0xffcccccc;
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        BinaryOutputStream bos = new BinaryOutputStream(baos,
+                BinaryOutputStream.BYTE_ORDER_BIG_ENDIAN);
+        bos.write4Bytes(IcnsImageParser.ICNS_MAGIC);
+        bos.write4Bytes(4 + 4 + 4 + 4 + 16*16);
+        bos.write4Bytes(IcnsType.ICNS_16x16_8BIT_IMAGE.getType());
+        bos.write4Bytes(4 + 4 + 16*16);
+        // 8 BPP image
+        for (int y = 0; y < 16; y++)
+        {
+            for (int x = 0; x < 16; x++)
+            {
+                if (image[y][x] != 0)
+                    bos.write(0xff);
+                else
+                    bos.write(43);
+            }
+        }
+        bos.flush();
+        writeAndReadImageData("8bpp-image-no-mask", baos.toByteArray(), 
foreground, background);
+    }
+
+    public void test32BPPMaskedIcon() throws ImageReadException, 
ImageWriteException, IOException
+    {
+        final int foreground = 0xff000000;
+        final int background = 0x000000ff;
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        BinaryOutputStream bos = new BinaryOutputStream(baos,
+                BinaryOutputStream.BYTE_ORDER_BIG_ENDIAN);
+        bos.write4Bytes(IcnsImageParser.ICNS_MAGIC);
+        bos.write4Bytes(4 + 4 + 4 + 4 + 4*16*16 + 4 + 4 + 2*16*16/8);
+        bos.write4Bytes(IcnsType.ICNS_16x16_32BIT_IMAGE.getType());
+        bos.write4Bytes(4 + 4 + 4*16*16);
+        for (int y = 0; y < 16; y++)
+        {
+            for (int x = 0; x < 16; x++)
+            {
+                // argb, a ignored
+                bos.write(0);
+                final int pixel;
+                if (image[y][x] != 0)
+                    pixel = foreground;
+                else
+                    pixel = background;
+                bos.write(0xff & (pixel >> 16));
+                bos.write(0xff & (pixel >> 8));
+                bos.write(0xff & pixel);
+            }
+        }
+        bos.write4Bytes(IcnsType.ICNS_16x16_1BIT_IMAGE_AND_MASK.getType());
+        bos.write4Bytes(4 + 4 + 2*16*16/8);
+        // 1 bit image
+        for (int y = 0; y < 16; y++)
+        {
+            for (int x = 0; x < 16; x += 8)
+            {
+                int eightBits = 0;
+                for (int pos = 0; pos < 8; pos++)
+                {
+                    if (image[y][x+pos] != 0)
+                        eightBits |= (1 << (7 - pos));
+                }
+                bos.write(eightBits);
+            }
+        }
+        // 1 bit mask
+        for (int y = 0; y < 16; y++)
+        {
+            for (int x = 0; x < 16; x += 8)
+            {
+                int eightBits = 0;
+                for (int pos = 0; pos < 8; pos++)
+                {
+                    if (image[y][x+pos] != 0)
+                        eightBits |= (1 << (7 - pos));
+                }
+                bos.write(eightBits);
+            }
+        }
+        bos.flush();
+        writeAndReadImageData("32bpp-image-1bpp-mask", baos.toByteArray(), 
foreground, background);
+    }
+
+    public void test32BPPHalfMaskedIcon() throws ImageWriteException, 
IOException
+    {
+        final int foreground = 0xff000000;
+        final int background = 0xff0000ff;
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        BinaryOutputStream bos = new BinaryOutputStream(baos,
+                BinaryOutputStream.BYTE_ORDER_BIG_ENDIAN);
+        bos.write4Bytes(IcnsImageParser.ICNS_MAGIC);
+        bos.write4Bytes(4 + 4 + 4 + 4 + 4*16*16 + 4 + 4 + 16*16/8);
+        bos.write4Bytes(IcnsType.ICNS_16x16_32BIT_IMAGE.getType());
+        bos.write4Bytes(4 + 4 + 4*16*16);
+        for (int y = 0; y < 16; y++)
+        {
+            for (int x = 0; x < 16; x++)
+            {
+                // argb, a ignored
+                bos.write(0);
+                final int pixel;
+                if (image[y][x] != 0)
+                    pixel = foreground;
+                else
+                    pixel = background;
+                bos.write(0xff & (pixel >> 16));
+                bos.write(0xff & (pixel >> 8));
+                bos.write(0xff & pixel);
+            }
+        }
+        bos.write4Bytes(IcnsType.ICNS_16x16_1BIT_IMAGE_AND_MASK.getType());
+        bos.write4Bytes(4 + 4 + 16*16/8);
+        // 1 bit image
+        for (int y = 0; y < 16; y++)
+        {
+            for (int x = 0; x < 16; x += 8)
+            {
+                int eightBits = 0;
+                for (int pos = 0; pos < 8; pos++)
+                {
+                    if (image[y][x+pos] != 0)
+                        eightBits |= (1 << (7 - pos));
+                }
+                bos.write(eightBits);
+            }
+        }
+        // Missing 1 bit mask!!!
+        bos.flush();
+
+        boolean threw = false;
+        try
+        {
+            writeAndReadImageData("32bpp-half-masked-CORRUPT", 
baos.toByteArray(), foreground, background);
+        }
+        catch (ImageReadException imageReadException)
+        {
+            threw = true;
+        }
+        assertTrue("ICNS file with corrupt mask didn't fail to parse", threw);
+    }
+
+    public void test32BPPMaskMissingIcon() throws ImageReadException, 
ImageWriteException, IOException
+    {
+        final int foreground = 0xff000000;
+        final int background = 0xff0000ff;
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        BinaryOutputStream bos = new BinaryOutputStream(baos,
+                BinaryOutputStream.BYTE_ORDER_BIG_ENDIAN);
+        bos.write4Bytes(IcnsImageParser.ICNS_MAGIC);
+        bos.write4Bytes(4 + 4 + 4 + 4 + 4*16*16);
+        bos.write4Bytes(IcnsType.ICNS_16x16_32BIT_IMAGE.getType());
+        bos.write4Bytes(4 + 4 + 4*16*16);
+        for (int y = 0; y < 16; y++)
+        {
+            for (int x = 0; x < 16; x++)
+            {
+                // argb, a ignored
+                bos.write(0);
+                final int pixel;
+                if (image[y][x] != 0)
+                    pixel = foreground;
+                else
+                    pixel = background;
+                bos.write(0xff & (pixel >> 16));
+                bos.write(0xff & (pixel >> 8));
+                bos.write(0xff & pixel);
+            }
+        }
+        bos.flush();
+        writeAndReadImageData("32bpp-mask-missing", baos.toByteArray(), 
foreground, background);
+    }
 
     private void writeAndReadImageData(String description, byte[] rawData,
             int foreground, int background) throws IOException,


Reply via email to