blob: 3ee529ba6a9b345340480c2b6593920cd40b2dc4 [file] [log] [blame]
/*
* Copyright (c) 2016, 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. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* 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 javafx.application.Platform;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.print.*;
import javafx.application.Application;
import javafx.geometry.Rectangle2D;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.scene.text.Text;
import javafx.scene.transform.Transform;
import javafx.stage.Screen;
import javafx.stage.Stage;
public class PrintTest extends Application {
private static final long TEN_SECONDS = 10 * 1000;
private final int WIDTH = 400;
private final int HEIGHT = 400;
private final int startPage = 1;
private final int endPage = 2;
private ComboBox<Printer> printerBox;
private volatile boolean passed = false;
private Scene scene;
private VBox root;
public static void main(String[] args) {
launch(args);
}
public void start(Stage stage) {
stage.setWidth(WIDTH);
stage.setHeight(HEIGHT);
stage.setTitle("Printing test for 8150076");
Rectangle2D bds = Screen.getPrimary().getVisualBounds();
stage.setX((bds.getWidth() - WIDTH) / 2);
stage.setY((bds.getHeight() - HEIGHT) / 2);
stage.setScene(createScene());
stage.show();
}
static final String instructions =
"This is regression test for 8150076 (see https://bugs.openjdk.java.net/browse/JDK-8150076 ).\n" +
"Press print button, after this 2 pages must be printed. When all pages are printed you will " +
"see \"PASSED!\" message below, otherwise test is failed.";
static final String noprinter =
"There are no printers installed. This test cannot run";
private TextArea createInfo(String msg) {
TextArea t = new TextArea(msg);
t.setWrapText(true);
t.setEditable(false);
return t;
}
private Scene createScene() {
root = new VBox();
scene = new Scene(root);
String msg = instructions;
if (Printer.getDefaultPrinter() == null) {
msg = noprinter;
}
TextArea info = createInfo(msg);
root.getChildren().add(info);
printerBox = new ComboBox<>(FXCollections.observableArrayList(Printer.getAllPrinters()));
printerBox.setValue(Printer.getDefaultPrinter());
root.getChildren().add(printerBox);
Button print = new Button("Print");
print.setLayoutX(80);
print.setLayoutY(200);
print.setOnAction(e -> runTest());
root.getChildren().add(print);
return scene;
}
public void runTest() {
new Thread(() -> {
System.out.println("START OF PRINT JOB");
PrinterJob job = PrinterJob.createPrinterJob(printerBox.getValue());
job.getJobSettings().setPageRanges(new PageRange(startPage, endPage));
PageLayout layout = job.getJobSettings().getPageLayout();
double printableWidth = layout.getPrintableWidth();
double printableHeight = layout.getPrintableHeight();
Text printNode = new Text("TEST");
double scaleX = printableWidth / printNode.prefWidth(1.);
double scaleY = printableHeight / printNode.prefHeight(1.);
printNode.getTransforms().add(Transform.scale(scaleX, scaleY));
printNode.setLayoutY(printableHeight / 2);
for (int i = startPage; i <= endPage; i++) {
System.out.println("PRINTING PAGE #" + i);
job.printPage(printNode);
}
job.endJob();
passed = true;
System.out.println("END OF PRINT JOB");
}).start();
new Thread(() -> {
while (!passed) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
}
}
Platform.runLater(() -> finish());
}).start();
}
private void finish() {
Text t = new Text();
t.setText("PASSED!");
root.getChildren().add(t);
}
}