PrintToDir.java revision 14851:980da45565c8
175584Sru/*
275584Sru * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
375584Sru * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
475584Sru *
575584Sru * This code is free software; you can redistribute it and/or modify it
675584Sru * under the terms of the GNU General Public License version 2 only, as
775584Sru * published by the Free Software Foundation.
875584Sru *
975584Sru * This code is distributed in the hope that it will be useful, but WITHOUT
1075584Sru * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1175584Sru * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
1275584Sru * version 2 for more details (a copy is included in the LICENSE file that
1375584Sru * accompanied this code).
1475584Sru *
1575584Sru * You should have received a copy of the GNU General Public License version
1675584Sru * 2 along with this work; if not, write to the Free Software Foundation,
1775584Sru * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
1875584Sru *
1975584Sru * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2075584Sru * or visit www.oracle.com if you need additional information or have any
2175584Sru * questions.
2275584Sru */
2375584Sru
2475584Sru/*
2575584Sru * @test
2675584Sru * @key headful
2775584Sru * @bug 4973278 8015586
2875584Sru * @run main PrintToDir
2975584Sru * @summary Must throw exception when printing to an invalid filename - a dir.
3075584Sru */
3175584Sru
3275584Sruimport java.io.*;
33import java.net.*;
34import java.awt.*;
35import java.awt.geom.*;
36import java.awt.print.*;
37import javax.print.PrintService;
38import javax.print.attribute.*;
39import javax.print.attribute.standard.*;
40import java.util.PropertyPermission;
41
42public 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}
148