[OpenJDK 2D-Dev] JDK 9 RFR of JDK-8148914: BitDepth.java test fails

joe darcy joe.darcy at oracle.com
Tue Feb 16 07:15:42 UTC 2016


On 2/15/2016 1:58 PM, Phil Race wrote:
> Assuming it works, this approach seems better.

A slightly modified version of Brian's change does the trick.

Patch below and updated webrev at

     http://cr.openjdk.java.net/~darcy/8148914.1/

Thanks,

-Joe

diff -r 10e298cb4ef1 test/javax/imageio/plugins/shared/BitDepth.java
--- a/test/javax/imageio/plugins/shared/BitDepth.java    Mon Feb 15 
18:41:23 2016 -0800
+++ b/test/javax/imageio/plugins/shared/BitDepth.java    Mon Feb 15 
23:13:43 2016 -0800
@@ -35,7 +35,11 @@
  import java.awt.image.BufferedImage;
  import java.io.File;
  import java.io.IOException;
+import java.util.Iterator;
  import javax.imageio.ImageIO;
+import javax.imageio.ImageTypeSpecifier;
+import javax.imageio.ImageWriter;
+import javax.imageio.stream.ImageOutputStream;

  public class BitDepth {

@@ -114,15 +118,15 @@

      private int width = 80;
      private int height = 80;
-    private String[] format = { "png", "jpeg", "tif", "bmp", "gif" };
+    private String[] formats = { "png", "jpeg", "tif", "bmp", "gif" };

      public BitDepth(String[] args) throws IOException {
          if (args.length > 0) {
-            format = args;
+            formats = args;
          }

-        for (int i = 0; i < format.length; i++) {
-            testFormat(format[i]);
+        for (String format : formats) {
+            testFormat(format);
          }
      }

@@ -130,11 +134,7 @@

          boolean allOK = true;

-        for (int i = 0; i < biRGBTypes.length; i++) {
-
-            int type = biRGBTypes[i];
-
-
+        for (int type : biRGBTypes) {
              // TODO: remove the following 'if' block after the 8147448 fix
              if ( format.toLowerCase().equals("bmp") && (
                  (type == BufferedImage.TYPE_INT_ARGB       ) ||
@@ -148,10 +148,12 @@
                  continue;
              }

-
              System.out.println("Testing " + format +
                                 " writer for type " + biTypeNames[type]);
              File f = testWriteRGB(format, type);
+            if (f == null)
+                continue;
+
              boolean ok = testReadRGB(f);
              if (ok) {
                  f.delete();
@@ -159,8 +161,6 @@
              allOK = allOK && ok;
          }

-
-
          if (format.equals("png")) {
              System.out.println("Testing png writer for black stripe");
              boolean ok = testPNGByteBinary();
@@ -191,13 +191,22 @@
          g.setColor(blue);
          g.fillRect(50, 50, 20, 20);

+        ImageTypeSpecifier spec = new ImageTypeSpecifier(bi);
+        Iterator<ImageWriter> writers = ImageIO.getImageWriters(spec, 
format);
          File file = new File("BitDepth_" + biTypeNames[type] + "." + 
format);
-        try {
-            ImageIO.write(bi, format, file);
-        } catch (RuntimeException re) {
-            System.out.println("Can't write a type "
-                               + biTypeNames[type] +
-                               " BufferedImage!");
+        if (!writers.hasNext()) {
+            System.out.println("\tNo writers available for type " + 
biTypeNames[type]
+                               + " BufferedImage!");
+        } else {
+            ImageWriter writer = writers.next();
+            try (ImageOutputStream out = 
ImageIO.createImageOutputStream(file)) {
+                writer.setOutput(out);
+                writer.write(bi);
+            } catch (Exception e) {
+                System.out.println("\tCan't write a type " + 
biTypeNames[type]
+                           + " BufferedImage!");
+                return null;
+            }
          }

          return file;


>
> -phil.
>
> On 02/15/2016 11:39 AM, Brian Burkhalter wrote:
>> Hi Joe,
>>
>> Might it not be better to modify testWriteRGB() to do something like 
>> this (code neither compiled nor tested):
>>
>> ImageTypeSpecifier spec = new ImageTypeSpecifier(bi);
>> Iterator<ImageWriter> writers = ImageIO.getImageWriters(spec, 
>> format).next();
>> File file = new File("BitDepth_" + biTypeNames[type] + "." + format);
>> if (!writers.hasNext()) {
>>     System.out.println(“No writers available for type “ + 
>> biTypeNames[type]
>>                        + " BufferedImage!");
>> } else {
>>     ImageWriter writer = writers.next();
>> try (ImageOutputStream out = ImageIO.createImageOutputStream(file)) {
>> writer.setOutput(out);
>> writer.write(bi);
>> } catch (Exception e) {
>> System.out.println("Can't write a type “ + biTypeNames[type]
>>      + " BufferedImage!");
>> }
>> }
>>
>> return file;
>>
>> Thanks,
>>
>> Brian
>>
>> On Feb 15, 2016, at 9:35 AM, joe darcy <joe.darcy at oracle.com 
>> <mailto:joe.darcy at oracle.com>> wrote:
>>
>>> Any comments on this?
>>>
>>> Thanks,
>>>
>>> -Joe
>>>
>>> On 2/11/2016 6:00 PM, joe darcy wrote:
>>>> Hello,
>>>>
>>>> Please review a candidate fix for
>>>>
>>>>    JDK-8148914: BitDepth.java test fails
>>>>
>>>> In brief, OpenJDK supports two fewer buffered image formats for jpg 
>>>> than the closed JDK does. I've modified the BitDepth test to allow 
>>>> for this difference. Patch below; webrev at
>>>>
>>>> http://cr.openjdk.java.net/~darcy/8148914.0/ 
>>>> <http://cr.openjdk.java.net/%7Edarcy/8148914.0/>
>>>>
>>>> Thanks,
>>>>
>>>> -Joe
>>>>
>>>> --- a/test/javax/imageio/plugins/shared/BitDepth.java    Thu Feb 11 
>>>> 16:24:55 2016 -0800
>>>> +++ b/test/javax/imageio/plugins/shared/BitDepth.java    Thu Feb 11 
>>>> 17:26:23 2016 -0800
>>>> @@ -130,11 +130,7 @@
>>>>
>>>>         boolean allOK = true;
>>>>
>>>> -        for (int i = 0; i < biRGBTypes.length; i++) {
>>>> -
>>>> -            int type = biRGBTypes[i];
>>>> -
>>>> -
>>>> +        for (int type : biRGBTypes) {
>>>>             // TODO: remove the following 'if' block after the 
>>>> 8147448 fix
>>>>             if ( format.toLowerCase().equals("bmp") && (
>>>>                 (type == BufferedImage.TYPE_INT_ARGB       ) ||
>>>> @@ -151,12 +147,23 @@
>>>>
>>>>             System.out.println("Testing " + format +
>>>>                                " writer for type " + 
>>>> biTypeNames[type]);
>>>> -            File f = testWriteRGB(format, type);
>>>> -            boolean ok = testReadRGB(f);
>>>> -            if (ok) {
>>>> -                f.delete();
>>>> +            boolean ok = false;
>>>> +            File f = null;
>>>> +            try {
>>>> +                f = testWriteRGB(format, type);
>>>> +                ok = testReadRGB(f);
>>>> +            } catch (javax.imageio.IIOException e) {
>>>> +                // The follow two formats are not supported on OpenJDK
>>>> +                if (format.toLowerCase().equals("jpg") &&
>>>> +                    (type == BufferedImage.TYPE_4BYTE_ABGR ||
>>>> +                     type == BufferedImage.TYPE_4BYTE_ABGR_PRE))
>>>> +                    continue;
>>>> +            } finally {
>>>> +                if (ok) {
>>>> +                    f.delete();
>>>> +                }
>>>> +                allOK = allOK && (ok || f == null);
>>>>             }
>>>> -            allOK = allOK && ok;
>>>>         }
>>>>
>>>>
>>>
>>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/2d-dev/attachments/20160215/a5898b5d/attachment.html>


More information about the 2d-dev mailing list