publicclass HighResTest { static Frame f = new Frame();
privatestaticvoid init() {
String[] instructions = { "To be able to run this test it is required to have a default", "printer configured in your user environment.", "If no default printer exists, then test passes.", " ", "There will be 2 print dialogs. The first dialog should show", "portrait as the selected orientation. The 2nd dialog should show", "landscape as the selected orientation.", " ", "Visual inspection of the printed pages is needed. A passing", "test will print 2 pages in portrait and 2 pages in landscape.", "The pages have on the center of the page the text \"Center\"", "2 rectangles will appear above and below it, the one below is", "filled."
};
Sysout.createDialog();
Sysout.printInstructions(instructions);
PrintJob job = null;
Dimension dim = null;
JobAttributes jobAttributes = new JobAttributes();
PageAttributes pageAttributes = new PageAttributes();
String center = "Center";
Font font = new Font("SansSerif", Font.PLAIN, 200);
FontMetrics metrics = null; int width = 0;
Graphics g = null;
job = f.getToolkit().getPrintJob(f, "Portrait Test", jobAttributes,
pageAttributes); if (job != null) {
dim = job.getPageDimension(); for (int i = 0; i < 2; i++) {
g = job.getGraphics();
publicstaticvoid main(String args[]) throws InterruptedException {
mainThread = Thread.currentThread(); try {
init();
} catch (TestPassedException e) { //The test passed, so just return from main and harness will // interepret this return as a pass return;
} //At this point, neither test passed nor test failed has been // called -- either would have thrown an exception and ended the // test, so we know we have multiple threads.
//Test involves other threads, so sleep and wait for them to // called pass() or fail() try { Thread.sleep(sleepTime); //Timed out, so fail the test thrownew RuntimeException("Timed out after " + sleepTime / 1000 + " seconds");
} catch (InterruptedException e) { if (!testGeneratedInterrupt) { throw e;
}
//reset flag in case hit this code more than once for some reason (just safety)
testGeneratedInterrupt = false; if (theTestPassed == false) { thrownew RuntimeException(failureMessage);
}
}
publicstaticsynchronizedvoid pass() {
Sysout.println("The test passed."); //first check if this is executing in main thread if (mainThread == Thread.currentThread()) { //Still in the main thread, so set the flag just for kicks, // and throw a test passed exception which will be caught // and end the test.
theTestPassed = true; thrownew TestPassedException();
} //pass was called from a different thread, so set the flag and interrupt // the main thead.
theTestPassed = true;
testGeneratedInterrupt = true;
mainThread.interrupt();
Sysout.dispose();
}//pass()
publicstaticsynchronizedvoid fail() { //test writer didn't specify why test failed, so give generic
fail("it just plain failed! :-)");
}
publicstaticsynchronizedvoid fail(String whyFailed) {
Sysout.println("The test failed: " + whyFailed); //check if this called from main thread if (mainThread == Thread.currentThread()) { //If main thread, fail now 'cause not sleeping thrownew RuntimeException(whyFailed);
}
theTestPassed = false;
testGeneratedInterrupt = true;
failureMessage = whyFailed;
mainThread.interrupt();
Sysout.dispose();
}//fail()
}// class HighResTest
//This exception is used to exit from any level of call nesting // when it's determined that the test has passed, and immediately // end the test. class TestPassedException extends RuntimeException
{
}
//*********** End Standard Test Machinery Section **********
//************** End classes defined for the test *******************
publicstaticvoid createDialogWithInstructions(String[] instructions) {
dialog = new TestDialog(new Frame(), "Instructions");
dialog.printInstructions(instructions);
println("Any messages for the tester will display here.");
}
publicstaticvoid createDialog() {
dialog = new TestDialog(new Frame(), "Instructions");
String[] defInstr = {"Instructions will appear here. ", ""};
dialog.printInstructions(defInstr);
println("Any messages for the tester will display here.");
}
TextArea instructionsText;
TextArea messageText; int maxStringLength = 80;
Panel buttonP = new Panel();
Button passB = new Button("pass");
Button failB = new Button("fail");
//DO NOT call this directly, go through Sysout public TestDialog(Frame frame, String name) { super(frame, name); int scrollBoth = TextArea.SCROLLBARS_BOTH;
instructionsText = new TextArea("", 15, maxStringLength, scrollBoth);
add("North", instructionsText);
messageText = new TextArea("", 5, maxStringLength, scrollBoth);
add("Center", messageText);
passB = new Button("pass");
passB.setActionCommand("pass");
passB.addActionListener(this);
buttonP.add("East", passB);
failB = new Button("fail");
failB.setActionCommand("fail");
failB.addActionListener(this);
buttonP.add("West", failB);
add("South", buttonP);
pack();
show();
}// TestDialog()
//DO NOT call this directly, go through Sysout publicvoid printInstructions(String[] instructions) { //Clear out any current instructions
instructionsText.setText("");
//Go down array of instruction strings
String printStr, remainingStr; for (int i = 0; i < instructions.length; i++) { //chop up each into pieces maxSringLength long
remainingStr = instructions[i]; while (remainingStr.length() > 0) { //if longer than max then chop off first max chars to print if (remainingStr.length() >= maxStringLength) { //Try to chop on a word boundary int posOfSpace = remainingStr.
lastIndexOf(' ', maxStringLength - 1);
//DO NOT call this directly, go through Sysout publicvoid displayMessage(String messageIn) {
messageText.append(messageIn + "\n");
}
//catch presses of the passed and failed buttons. //simply call the standard pass() or fail() static methods of //HighResTest publicvoid actionPerformed(ActionEvent e) { if (e.getActionCommand() == "pass") {
HighResTest.pass();
} else {
HighResTest.fail();
}
}
}// TestDialog class
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.