6731937: javax/print/CheckDupFlavor.java fails
authorjgodinez
Thu, 07 Aug 2008 11:19:06 -0700
changeset 1720 539a197aefbd
parent 1719 b1cdf8806a6d
child 1721 7a86d7e13fdf
6731937: javax/print/CheckDupFlavor.java fails Reviewed-by: campbell, tdv
jdk/src/solaris/classes/sun/print/IPPPrintService.java
jdk/test/javax/print/CheckDupFlavor.java
--- a/jdk/src/solaris/classes/sun/print/IPPPrintService.java	Tue Aug 05 09:37:03 2008 -0700
+++ b/jdk/src/solaris/classes/sun/print/IPPPrintService.java	Thu Aug 07 11:19:06 2008 -0700
@@ -57,6 +57,7 @@
 import java.nio.charset.Charset;
 
 import java.util.Iterator;
+import java.util.HashSet;
 
 
 public class IPPPrintService implements PrintService, SunPrinterJobService {
@@ -822,7 +823,7 @@
                 boolean psSupported = false;
                 String[] docFlavors = attribClass.getArrayOfStringValues();
                 DocFlavor[] flavors;
-                ArrayList docList = new ArrayList();
+                HashSet docList = new HashSet();
                 int j;
                 String hostEnc = DocFlavor.hostEncoding.
                     toLowerCase(Locale.ENGLISH);
@@ -839,18 +840,6 @@
 
                             docList.addAll(Arrays.asList(flavors));
 
-                            if (isCupsPrinter) {
-                            /*
-                              Always add Pageable and Printable for CUPS
-                              since it uses Filters to convert from Postscript
-                              to device printer language.
-                             */
-                                docList.add(
-                                        DocFlavor.SERVICE_FORMATTED.PAGEABLE);
-                                docList.add(
-                                        DocFlavor.SERVICE_FORMATTED.PRINTABLE);
-                            }
-
                             if (mimeType.equals("text/plain") &&
                                 addHostEncoding) {
                                 docList.add(Arrays.asList(textPlainHost));
@@ -880,16 +869,19 @@
                 }
 
                 // check if we need to add image DocFlavors
+                // and Pageable/Printable flavors
                 if (psSupported || isCupsPrinter) {
-                    if (!jpgImagesAdded) {
-                        docList.addAll(Arrays.asList(imageJPG));
-                    }
-                    if (!pngImagesAdded) {
-                        docList.addAll(Arrays.asList(imagePNG));
-                    }
-                    if (!gifImagesAdded) {
-                        docList.addAll(Arrays.asList(imageGIF));
-                    }
+                    /*
+                     Always add Pageable and Printable for CUPS
+                     since it uses Filters to convert from Postscript
+                     to device printer language.
+                    */
+                    docList.add(DocFlavor.SERVICE_FORMATTED.PAGEABLE);
+                    docList.add(DocFlavor.SERVICE_FORMATTED.PRINTABLE);
+
+                    docList.addAll(Arrays.asList(imageJPG));
+                    docList.addAll(Arrays.asList(imagePNG));
+                    docList.addAll(Arrays.asList(imageGIF));
                 }
                 supportedDocFlavors = new DocFlavor[docList.size()];
                 docList.toArray(supportedDocFlavors);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/print/CheckDupFlavor.java	Thu Aug 07 11:19:06 2008 -0700
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2004-2008 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * @test
+ * @bug 4996318 6731937
+ * @summary  There should be no duplicates returned by getSupportedDocFlavors.
+ * @run main CheckDupFlavor
+ */
+import javax.print.*;
+import javax.print.attribute.*;
+import javax.print.attribute.standard.*;
+import java.util.ArrayList;
+
+
+public class CheckDupFlavor {
+    public static void main(String[] args){
+        PrintService pservice =
+                     PrintServiceLookup.lookupDefaultPrintService();
+
+        if (pservice == null) {
+                System.out.println("No default PrintService found. Test ABORTED.");
+            return;
+        }
+
+        System.out.println("Default service = "+pservice);
+
+        DocFlavor[] flavors = pservice.getSupportedDocFlavors();
+        if (flavors==null) {
+            System.out.println("No flavors supported. Test PASSED.");
+            return;
+        }
+
+
+        ArrayList flavorList = new ArrayList();
+        for (int i=0; i<flavors.length; i++) {
+                if (flavors[i] == null) {
+                        throw new RuntimeException("Null flavor. Test FAILED.");
+                } else if (flavorList.contains(flavors[i])) {
+                        throw new RuntimeException("\n\tDuplicate flavor found : "+flavors[i]+" : Test FAILED.");
+                } else {
+                        flavorList.add(flavors[i]);
+                }
+        }
+        System.out.println("No duplicate found. Test PASSED.");
+    }
+}