1 /* 2 * Copyright (c) 2013, 2016, 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 headful 27 * @bug 4973278 8015586 28 * @run main PrintToDir 29 * @summary Must throw exception when printing to an invalid filename - a dir. 30 */ 31 32 import java.io.*; 33 import java.net.*; 34 import java.awt.*; 35 import java.awt.geom.*; 36 import java.awt.print.*; 37 import javax.print.PrintService; 38 import javax.print.attribute.*; 39 import javax.print.attribute.standard.*; 40 import java.util.PropertyPermission; 41 42 public class PrintToDir extends Frame implements Printable { 43 44 boolean firstTime = true; 45 double sx, sy; 46 Shape clip, firstClip; 47 48 TextField tf = new TextField(); 49 Label tfLabel = new Label ("File Name"); 50 Panel p = new Panel (new GridLayout(2,2)); 51 Button b = new Button("Print"); 52 53 PrintToDir() { 54 add("South", p); 55 p.add(tfLabel); 56 p.add(tf); 57 p.add(b); 58 setSize(300, 300); 59 setVisible(true); 60 } 61 62 public int print(Graphics g, PageFormat pf, int pageIndex) { 63 Graphics2D g2 = (Graphics2D)g; 64 if (pageIndex>=1) { 65 return Printable.NO_SUCH_PAGE; 66 } 67 g2.drawString("hello world", 100, 100); 68 return Printable.PAGE_EXISTS; 69 } 70 71 void doPrintJob(String fileStr) { 72 PageAttributes pa = new PageAttributes(); 73 JobAttributes ja = new JobAttributes(); 74 ja.setDialog(JobAttributes.DialogType.NONE); 75 ja.setDestination(JobAttributes.DestinationType.FILE); 76 ja.setFileName(fileStr); 77 try { 78 PrintJob pjob = Toolkit.getDefaultToolkit().getPrintJob(this, 79 "PrintDialog Testing", ja, pa); 80 if (pjob != null) { 81 System.out.println("Printjob successfully created: " + pjob); 82 Graphics g = pjob.getGraphics(); 83 this.printAll(g); 84 g.dispose(); 85 pjob.end(); 86 } 87 System.out.println("Printing completed"); 88 } catch (IllegalArgumentException e) { 89 System.out.println("PrintJob passed."); 90 return; 91 } 92 throw new RuntimeException("PrintJob::IllegalArgumentException expected but not thrown. \nTEST FAILED"); 93 } 94 95 public static void doPrinterJob(String fileStr, OrientationRequested o) { 96 PrinterJob pj = PrinterJob.getPrinterJob(); 97 PrintService ps = pj.getPrintService(); 98 if (ps == null) { 99 System.out.println("No print service found."); 100 return; 101 } 102 pj.setPrintable(new PrintToDir()); 103 PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); 104 aset.add(o); 105 File f = new File(fileStr); 106 // f.deleteOnExit(); 107 URI dest = f.toURI(); 108 Destination d = new Destination(dest); 109 if (ps.isAttributeValueSupported(d, null, null)) { 110 aset.add(d); 111 try { 112 pj.print(aset); 113 } catch (PrinterException e) { 114 System.out.println("PrinterJob passed."); 115 return; 116 } 117 throw new RuntimeException("PrinterJob:PrinterException expected but not thrown. \nTEST FAILED"); 118 } else { 119 System.out.println("Destination attribute is not a supported value. PrinterJob passed."); 120 } 121 } 122 123 124 public static void main(String arg[]) { 125 SecurityManager security = System.getSecurityManager(); 126 if (security != null) { 127 System.out.println("Security manager detected"); 128 try { 129 security.checkPermission(new FilePermission("<<ALL FILES>>", "read,write")); 130 security.checkPermission(new PropertyPermission("user.dir", "read")); 131 } catch (SecurityException se) { 132 System.out.println("Security requirement not obtained. TEST PASSED"); 133 return; 134 } 135 } 136 String[] testStr = {".", ""}; 137 for (int i=0; i<testStr.length; i++) { 138 System.out.println("Testing file name = \""+testStr[i]+"\""); 139 doPrinterJob(testStr[i], OrientationRequested.PORTRAIT); 140 PrintToDir ptd = new PrintToDir(); 141 ptd.doPrintJob(testStr[i]); 142 ptd.dispose(); 143 } 144 System.out.println("TEST PASSED"); 145 } 146 147 }