/
githubmirror
/
jdk21u-dev
Обзор
Документация
Войти
/
githubmirror
/
jdk21u-dev
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
test/jdk/java/awt/print/PrinterJob/ValidatePage/ValidatePage.java
303 строки
13 KB
Goetz Lindenmaier
8320676: Manual printer tests have no Pass/Fail buttons, instructions close set 1
20 янв 2025, 11:52
20 янв 2025, 11:52
fe321bb
Код
Авторство
О чём код?
/* * Copyright (c) 2007, 2024, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ import java.awt.Button; import java.awt.Color; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.Label; import java.awt.Panel; import java.awt.TextArea; import java.awt.TextField; import java.awt.print.PageFormat; import java.awt.print.Paper; import java.awt.print.Printable; import java.awt.print.PrinterException; import java.awt.print.PrinterJob; import javax.swing.JOptionPane; /* * @test * @bug 4252108 6229507 * @key printer * @summary PrinterJob.validatePage() is unimplemented. * @library /java/awt/regtesthelpers * @build PassFailJFrame * @run main/manual ValidatePage */ public class ValidatePage extends Frame implements Printable { PrinterJob myPrinterJob; PageFormat myPageFormat; Label pw, ph, pglm, pgrm, pgiw, pgih, pgtm, pgbm; TextField tpw, tph, tpglm, tpgtm, tpgiw, tpgih; Label myWidthLabel; Label myHeightLabel; Label myImageableXLabel; Label myImageableYLabel; Label myImageableRightLabel; Label myImageableBottomLabel; Label myImageableWidthLabel; Label myImageableHeightLabel; Label myOrientationLabel; private static String getOrientation(int o) { return switch (o) { case PageFormat.PORTRAIT -> "PORTRAIT"; case PageFormat.LANDSCAPE -> "LANDSCAPE"; case PageFormat.REVERSE_LANDSCAPE -> "REVERSE_LANDSCAPE"; default -> "<invalid>"; }; } private void displayPageFormatAttributes() { myWidthLabel.setText("Format Width = " + drnd(myPageFormat.getWidth())); myHeightLabel.setText("Format Height = " + drnd(myPageFormat.getHeight())); myImageableXLabel.setText("Format Left Margin = " + drnd(myPageFormat.getImageableX())); myImageableRightLabel.setText("Format Right Margin = " + drnd(myPageFormat.getWidth() - (myPageFormat.getImageableX() + myPageFormat.getImageableWidth()))); myImageableWidthLabel.setText("Format ImageableWidth = " + drnd(myPageFormat.getImageableWidth())); myImageableYLabel.setText("Format Top Margin = " + drnd(myPageFormat.getImageableY())); myImageableBottomLabel.setText("Format Bottom Margin = " + drnd(myPageFormat.getHeight() - (myPageFormat.getImageableY() + myPageFormat.getImageableHeight()))); myImageableHeightLabel.setText("Format ImageableHeight = " + drnd(myPageFormat.getImageableHeight())); myOrientationLabel.setText("Format Orientation = " + getOrientation(myPageFormat.getOrientation())); Paper p = myPageFormat.getPaper(); pw.setText("Paper Width = " + drnd(p.getWidth())); ph.setText("Paper Height = " + drnd(p.getHeight())); pglm.setText("Paper Left Margin = " + drnd(p.getImageableX())); pgiw.setText("Paper Imageable Width = " + drnd(p.getImageableWidth())); pgih.setText("Paper Imageable Height = " + drnd(p.getImageableHeight())); pgrm.setText("Paper Right Margin = " + drnd(p.getWidth() - (p.getImageableX() + p.getImageableWidth()))); pgtm.setText("Paper Top Margin = " + drnd(p.getImageableY())); pgbm.setText("Paper Bottom Margin = " + drnd(p.getHeight() - (p.getImageableY() + p.getImageableHeight()))); } static String drnd(double d) { return String.format("%.2f", d); } public ValidatePage() { super("Validate Page Test"); myPrinterJob = PrinterJob.getPrinterJob(); myPageFormat = new PageFormat(); Paper p = new Paper(); p.setSize(28 * 72, 21.5 * 72); myPageFormat.setPaper(p); setLayout(new FlowLayout()); Panel pfp = new Panel(); pfp.setLayout(new GridLayout(9, 1, 0, 0)); pfp.add(myOrientationLabel = new Label()); pfp.add(myWidthLabel = new Label()); pfp.add(myImageableXLabel = new Label()); pfp.add(myImageableRightLabel = new Label()); pfp.add(myImageableWidthLabel = new Label()); pfp.add(myHeightLabel = new Label()); pfp.add(myImageableYLabel = new Label()); pfp.add(myImageableBottomLabel = new Label()); pfp.add(myImageableHeightLabel = new Label()); add(pfp); Panel pp = new Panel(); pp.setLayout(new GridLayout(8, 1, 0, 0)); pp.add(pw = new Label()); pp.add(pglm = new Label()); pp.add(pgtm = new Label()); pp.add(ph = new Label()); pp.add(pgiw = new Label()); pp.add(pgih = new Label()); pp.add(pgrm = new Label()); pp.add(pgbm = new Label()); add(pp); Panel epp = new Panel(); epp.setLayout(new GridLayout(6, 2, 0, 0)); epp.add(new Label("Page width:")); epp.add(tpw = new TextField()); epp.add(new Label("Page height:")); epp.add(tph = new TextField()); epp.add(new Label("Left Margin:")); epp.add(tpglm = new TextField()); epp.add(new Label("Top margin:")); epp.add(tpgtm = new TextField()); epp.add(new Label("Imageable Wid:")); epp.add(tpgiw = new TextField()); epp.add(new Label("Imageable Hgt:")); epp.add(tpgih = new TextField()); add(epp); displayPageFormatAttributes(); Panel panel = new Panel(); Button defButton = new Button("Default Page"); defButton.addActionListener(e -> { myPageFormat = myPrinterJob.defaultPage(); displayPageFormatAttributes(); }); Button pageButton = new Button("Page Setup..."); pageButton.addActionListener(e -> { myPageFormat = myPrinterJob.pageDialog(myPageFormat); displayPageFormatAttributes(); }); Button printButton = new Button("Print"); printButton.addActionListener(e -> { try { myPrinterJob.setPrintable(ValidatePage.this, myPageFormat); myPrinterJob.print(); } catch (PrinterException pe) { pe.printStackTrace(); PassFailJFrame.forceFail("Test failed because of PrinterException"); } }); Button chooseButton = new Button("Printer..."); chooseButton.addActionListener(e -> myPrinterJob.printDialog()); Button validateButton = new Button("Validate Page"); validateButton.addActionListener(e -> { myPageFormat = myPrinterJob.validatePage(myPageFormat); displayPageFormatAttributes(); }); Button setButton = new Button("Set Paper"); setButton.addActionListener(e -> { try { Paper p1 = new Paper(); double pwid = Double.parseDouble(tpw.getText()); double phgt = Double.parseDouble(tph.getText()); double pimx = Double.parseDouble(tpglm.getText()); double pimy = Double.parseDouble(tpgtm.getText()); double pimwid = Double.parseDouble(tpgiw.getText()); double pimhgt = Double.parseDouble(tpgih.getText()); p1.setSize(pwid, phgt); p1.setImageableArea(pimx, pimy, pimwid, pimhgt); myPageFormat.setPaper(p1); displayPageFormatAttributes(); } catch (NumberFormatException nfe) { JOptionPane.showMessageDialog(ValidatePage.this, "NumberFormatException occurred", "Error", JOptionPane.ERROR_MESSAGE); } }); panel.add(setButton); panel.add(defButton); panel.add(pageButton); panel.add(chooseButton); panel.add(validateButton); panel.add(printButton); add(panel); TextArea ta = new TextArea(10, 45); ta.setText( "When validating a page, the process is 1st to find the closest matching \n" + "paper size, next to make sure the requested imageable area fits within \n" + "the printer's imageable area for that paper size. Finally the top and \n" + "left margins will be shrunk if they are too great for the adjusted \n" + "imageable area to fit at that position. They will shrink by the minimum\n" + "needed to accommodate the imageable area.\n \n \n" + "To test 6229507, put the minimum margins (all 0s) in Page Setup dialog.\n" + "Compare Imageable width, height, and margins of portrait against landscape."); ta.setEditable(false); add(ta); setSize(700, 500); } @Override public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) { if (pageIndex > 0) { return Printable.NO_SUCH_PAGE; } System.out.println("Format Orientation = " + getOrientation(pageFormat.getOrientation())); Graphics2D g2d = (Graphics2D) graphics; System.out.println(g2d.getTransform()); System.out.println("ix=" + pageFormat.getImageableX() + " iy=" + pageFormat.getImageableY()); g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY()); g2d.drawString("ORIGIN", 20, 20); g2d.drawString("X THIS WAY", 200, 50); g2d.drawString("Y THIS WAY", 60, 200); g2d.drawRect(0, 0, (int) pageFormat.getImageableWidth(), (int) pageFormat.getImageableHeight()); g2d.setColor(Color.blue); g2d.drawRect(1, 1, (int) pageFormat.getImageableWidth() - 2, (int) pageFormat.getImageableHeight() - 2); return Printable.PAGE_EXISTS; } private static final String INSTRUCTIONS = "This test is very flexible and requires much interaction.\n" + "There are several buttons.\n\n" + "Set Paper: if all fields are valid numbers it sets the Paper object.\n" + "This is used to create arbitrary nonsensical paper sizes to help\n" + "test validatePage.\n\n" + "Default Page: sets a default page. This should always be valid.\n\n" + "Page Setup: brings up the page dialog. You must OK this dialog\n" + "for it to have any effect. You can use this to set different size,\n" + "orientation and margins - which of course affect imageable area.\n\n" + "Printer: Used to set the current printer. Useful because current\n" + "printer affects the choice of paper sizes available.\n" + "You must OK this dialog for it to have any effect.\n\n" + "Validate Page:The most important button in the test.\n" + "By setting nonsensical or valid papers with varying margins etc,\n" + "this should always find the closest match within the limits of\n" + "what is possible on the current printer.\n\n" + "Print: to the current printer. Not vital for this test request."; public static void main(String[] args) throws Exception { if (PrinterJob.lookupPrintServices().length == 0) { throw new RuntimeException("Printer not configured or available."); } PassFailJFrame.builder() .instructions(INSTRUCTIONS) .testTimeOut(10) .testUI(ValidatePage::new) .rows((int) INSTRUCTIONS.lines().count() + 1) .columns(45) .build() .awaitAndCheck(); } }