1 /*
   2  * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 
  24 /**
  25  * @test
  26  * @key printer
  27  * @bug 4903366
  28  * @summary No crash should occur.
  29  * @run main SidesPageRangesTest
  30  */
  31 
  32 import java.awt.*;
  33 import javax.print.*;
  34 import javax.print.attribute.standard.*;
  35 import javax.print.attribute.*;
  36 import java.io.*;
  37 import java.util.Locale;
  38 import java.net.URL;
  39 
  40 public class SidesPageRangesTest {
  41         /**
  42          * Constructor
  43          */
  44          public SidesPageRangesTest() {
  45                 super();
  46         }
  47         /**
  48          * Starts the application.
  49          */
  50         public static void main(java.lang.String[] args) {
  51                 SidesPageRangesTest pd = new SidesPageRangesTest();
  52                 PrintService defService = null;
  53                 DocFlavor flavors[]  = null;
  54                 PrintService[] pservice;
  55                 defService = PrintServiceLookup.lookupDefaultPrintService();
  56                 if (defService == null) {
  57                     pservice = PrintServiceLookup.lookupPrintServices(null, null);
  58                     if (pservice.length == 0) {
  59                         throw new RuntimeException("Printer is required for this test.  TEST ABORTED");
  60                     }
  61                     defService = pservice[0];
  62                 }
  63                 System.out.println("Default Print Service "+defService);
  64 
  65 
  66                 if (defService.isAttributeCategorySupported(PageRanges.class)) {
  67                         System.out.println("\nPageRanges Attribute category is supported");
  68                 } else {
  69                         System.out.println("\nPageRanges Attribute category is not supported. terminating...");
  70                         return;
  71                 }
  72 
  73                 flavors = defService.getSupportedDocFlavors();
  74                 System.out.println("\nGetting Supported values for PageRanges for each supported DocFlavor");
  75                 System.out.println("===============================================================\n");
  76                 for (int y = 0; y < flavors.length; y ++) {
  77                     System.out.println("\n\n");
  78 
  79                     System.out.println("Doc Flavor: "+flavors[y]);
  80                     System.out.println("-----------------------------");
  81 
  82                     Object vals = defService.getSupportedAttributeValues(PageRanges.class, flavors[y], null);
  83                     if (vals == null) {
  84                         System.out.println("No supported values for PageRanges for this doc flavor. ");
  85                     }
  86 
  87                     PageRanges[] pr = null;
  88                     if (vals instanceof PageRanges[]) {
  89                         pr = (PageRanges[]) vals;
  90                         for (int x = 0; x < pr.length; x ++) {
  91                             System.out.println("\nSupported Value "+pr[x]);
  92                             System.out.println("is "+pr[x]+" value supported? "+defService.isAttributeValueSupported(pr[x], flavors[y], null));
  93 
  94                             if (!defService.isAttributeValueSupported(pr[x], flavors[y], null)) {
  95                                 throw new RuntimeException("PageRanges contradicts getSupportedAttributeValues");
  96                             }
  97                         }
  98                     } else if (vals instanceof PageRanges) {
  99                         System.out.println(vals);
 100                         System.out.println("is "+vals+" value supported? "+defService.isAttributeValueSupported((javax.print.attribute.Attribute)vals, flavors[y], null));
 101                         if (!defService.isAttributeValueSupported((javax.print.attribute.Attribute)vals, flavors[y], null)) {
 102                             throw new RuntimeException("PageRanges contradicts getSupportedAttributeValues");
 103                         }
 104                     }
 105 
 106                     // SIDES test
 107                     vals = defService.getSupportedAttributeValues(Sides.class, flavors[y], null);
 108                     if (vals == null) {
 109                         System.out.println("No supported values for Sides for this doc flavor. ");
 110                     }
 111 
 112                     Sides[] s = null;
 113                     if (vals instanceof Sides[]) {
 114                         s = (Sides[]) vals;
 115                         for (int x = 0; x < s.length; x ++) {
 116                             System.out.println("\nSupported Value "+s[x]);
 117                             System.out.println("is "+s[x]+" value supported? "+defService.isAttributeValueSupported(s[x], flavors[y], null));
 118                             if  (!defService.isAttributeValueSupported(s[x], flavors[y], null)) {
 119                                 throw new RuntimeException("Sides contradicts getSupportedAttributeValues");
 120                             }
 121                         }
 122                     }
 123                 }
 124         }
 125 }