0N/A/*
2362N/A * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0N/A *
0N/A * This code is free software; you can redistribute it and/or modify it
0N/A * under the terms of the GNU General Public License version 2 only, as
0N/A * published by the Free Software Foundation.
0N/A *
0N/A * This code is distributed in the hope that it will be useful, but WITHOUT
0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0N/A * version 2 for more details (a copy is included in the LICENSE file that
0N/A * accompanied this code).
0N/A *
0N/A * You should have received a copy of the GNU General Public License version
0N/A * 2 along with this work; if not, write to the Free Software Foundation,
0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0N/A *
2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2362N/A * or visit www.oracle.com if you need additional information or have any
2362N/A * questions.
0N/A */
0N/A
0N/A/**
0N/A * @test
0N/A * @bug 6360339
0N/A * @summary Test for fp error in paper size calculations.
0N/A * @run main/manual PaperSizeError
0N/A */
0N/A
0N/Aimport java.awt.print.*;
0N/Aimport javax.print.*;
0N/Aimport javax.print.attribute.*;
0N/Aimport javax.print.attribute.standard.*;
0N/A
0N/Apublic class PaperSizeError {
0N/A
0N/A static String[] instructions = {
0N/A "This test assumes and requires that you have a printer installed",
0N/A "Two page dialogs will appear. You must press 'OK' on both.",
0N/A "If the test fails, it will throw an Exception.",
0N/A ""
0N/A };
0N/A
0N/A public static void main(String[] args) {
0N/A
0N/A for (int i=0;i<instructions.length;i++) {
0N/A System.out.println(instructions[i]);
0N/A }
0N/A
0N/A /* First find out if we have a valid test environment:
0N/A * ie print service exists and supports A4.
0N/A */
0N/A PrinterJob job = PrinterJob.getPrinterJob();
0N/A PrintService service = job.getPrintService();
0N/A if (service == null ||
0N/A !service.isAttributeValueSupported(MediaSizeName.ISO_A4,
0N/A null, null)) {
0N/A return;
0N/A }
0N/A
0N/A // Create A4 sized PageFormat.
0N/A MediaSize a4 = MediaSize.ISO.A4;
0N/A double a4w = Math.rint((a4.getX(1) * 72.0) / Size2DSyntax.INCH);
0N/A double a4h = Math.rint((a4.getY(1) * 72.0) / Size2DSyntax.INCH);
0N/A System.out.println("Units = 1/72\" size=" + a4w + "x" + a4h);
0N/A Paper paper = new Paper();
0N/A paper.setSize(a4w, a4h);
0N/A PageFormat pf = new PageFormat();
0N/A pf.setPaper(paper);
0N/A
0N/A // Test dialog with PF argument
0N/A PageFormat newPF = job.pageDialog(pf);
0N/A if (newPF == null) {
0N/A return; // user cancelled the dialog (and hence the test).
0N/A } else {
0N/A verifyPaper(newPF, a4w, a4h);
0N/A }
0N/A
0N/A PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
0N/A aset.add(OrientationRequested.PORTRAIT);
0N/A aset.add(MediaSizeName.ISO_A4);
0N/A
0N/A // Test dialog with AttributeSet argument
0N/A newPF = job.pageDialog(aset);
0N/A if (newPF == null) {
0N/A return; // user cancelled the dialog (and hence the test).
0N/A } else {
0N/A verifyPaper(newPF, a4w, a4h);
0N/A }
0N/A }
0N/A
0N/A static void verifyPaper(PageFormat pf , double a4w, double a4h) {
0N/A
0N/A double dw1 = pf.getWidth();
0N/A double dh1 = pf.getHeight();
0N/A float fwMM = (float)((dw1 * 25.4) / 72.0);
0N/A float fhMM = (float)((dh1 * 25.4) / 72.0);
0N/A MediaSizeName msn = MediaSize.findMedia(fwMM, fhMM, Size2DSyntax.MM);
0N/A System.out.println("Units = 1/72\" new size=" + dw1 + "x" + dh1);
0N/A System.out.println("Units = MM new size=" + fwMM + "x" + fhMM);
0N/A System.out.println("Media = " + msn);
0N/A if (a4w != Math.rint(dw1) || a4h != Math.rint(dh1)) {
0N/A System.out.println("Got " + Math.rint(dw1) + "x" + Math.rint(dh1) +
0N/A ". Expected " + a4w + "x" + a4h);
0N/A throw new RuntimeException("Size is not close enough to A4 size");
0N/A }
0N/A // So far as I know, there's no other standard size that is A4.
0N/A // So we should match the right one.
0N/A if (msn != MediaSizeName.ISO_A4) {
0N/A throw new RuntimeException("MediaSizeName is not A4: " + msn);
0N/A }
0N/A }
0N/A}