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 6594374
0N/A @summary Confirm that the orientation is as specified.
0N/A @run main/manual=yesno DialogOrient
0N/A*/
0N/A
0N/Aimport java.awt.*;
0N/Aimport java.awt.event.*;
0N/Aimport java.awt.geom.*;
0N/Aimport java.awt.print.*;
0N/A
0N/A// This test is a "main" test as applets would need Runtime permission
0N/A// "queuePrintJob".
0N/A
0N/Apublic class DialogOrient implements Printable {
0N/A
0N/A private static void init() throws Exception {
0N/A //*** Create instructions for the user here ***
0N/A
0N/A String[] instructions =
0N/A {
0N/A "To be able to run this test it is required to have a default",
0N/A "printer configured in your user environment.",
0N/A "",
0N/A "Step 1. a page dialog will appear. Select LANDSCAPE orientation",
0N/A "and OK the dialog.",
0N/A "",
0N/A "Step 2. Next a print dialog will appear. *IF* you can find",
0N/A "an orientation setting on the Properties tab, confirm it",
0N/A "still says LANDSCAPE. If it says PORTRAIT the test has failed.",
0N/A "",
0N/A "Step 3. If all is still correct, press OK. The test will now",
0N/A "try to print. If it detects that it is being asked to print in",
0N/A "portrait mode it will throw an Exception and the test has failed",
0N/A "",
0N/A "Step 4. Collect the print out. Confirm that the orientation of",
0N/A "the output is LANDSCAPE. If it is not the test fails",
0N/A "",
0N/A "Step 5. Repeat steps 2,3,4 one more time.",
0N/A "Step 6. If everything has said LANDSCAPE up to this point,",
0N/A "the test has passed.",
0N/A };
0N/A
0N/A Sysout.createDialog( );
0N/A Sysout.printInstructions( instructions );
0N/A
0N/A PrinterJob job = PrinterJob.getPrinterJob();
0N/A job.setPrintable(new DialogOrient());
0N/A PageFormat landscape = job.pageDialog(job.defaultPage());
0N/A
0N/A if (job.printDialog()) {
0N/A job.print();
0N/A }
0N/A if (job.printDialog()){
0N/A job.print();
0N/A }
0N/A }
0N/A
0N/A public int print(Graphics g, PageFormat pf, int pageIndex) {
0N/A
0N/A if (pageIndex > 0) return NO_SUCH_PAGE;
0N/A if (pf.getOrientation() != PageFormat.LANDSCAPE) {
0N/A throw new RuntimeException("Wrong Orientation");
0N/A }
0N/A Graphics2D g2d = (Graphics2D)g;
0N/A g2d.translate(pf.getImageableX(), pf.getImageableY());
0N/A g.setColor(Color.black);
0N/A g.drawString("LANDSCAPE", 100, 300);
0N/A double iw = pf.getImageableWidth();
0N/A double ih = pf.getImageableHeight();
0N/A g2d.draw(new Ellipse2D.Double(0, 0, iw, ih));
0N/A g2d.drawString("(0,0)", 5,15);
0N/A g2d.drawLine(0,0,300,0);
0N/A g2d.drawString("X", 300,15);
0N/A g2d.drawLine(0,0,0,300);
0N/A g2d.drawString("Y",5,300);
0N/A
0N/A return PAGE_EXISTS;
0N/A }
0N/A
0N/A
0N/A /*****************************************************
0N/A Standard Test Machinery Section
0N/A DO NOT modify anything in this section -- it's a
0N/A standard chunk of code which has all of the
0N/A synchronisation necessary for the test harness.
0N/A By keeping it the same in all tests, it is easier
0N/A to read and understand someone else's test, as
0N/A well as insuring that all tests behave correctly
0N/A with the test harness.
0N/A There is a section following this for test-defined
0N/A classes
0N/A ******************************************************/
0N/A private static boolean theTestPassed = false;
0N/A private static boolean testGeneratedInterrupt = false;
0N/A private static String failureMessage = "";
0N/A
0N/A private static Thread mainThread = null;
0N/A
0N/A private static int sleepTime = 300000;
0N/A
0N/A public static void main( String args[] ) throws Exception
0N/A {
0N/A mainThread = Thread.currentThread();
0N/A try
0N/A {
0N/A init();
0N/A }
0N/A catch( TestPassedException e )
0N/A {
0N/A //The test passed, so just return from main and harness will
0N/A // interepret this return as a pass
0N/A return;
0N/A }
0N/A //At this point, neither test passed nor test failed has been
0N/A // called -- either would have thrown an exception and ended the
0N/A // test, so we know we have multiple threads.
0N/A
0N/A //Test involves other threads, so sleep and wait for them to
0N/A // called pass() or fail()
0N/A try
0N/A {
0N/A Thread.sleep( sleepTime );
0N/A //Timed out, so fail the test
0N/A throw new RuntimeException( "Timed out after " + sleepTime/1000 + " seconds" );
0N/A }
0N/A catch (InterruptedException e)
0N/A {
0N/A if( ! testGeneratedInterrupt ) throw e;
0N/A
0N/A //reset flag in case hit this code more than once for some reason (just safety)
0N/A testGeneratedInterrupt = false;
0N/A if ( theTestPassed == false )
0N/A {
0N/A throw new RuntimeException( failureMessage );
0N/A }
0N/A }
0N/A
0N/A }//main
0N/A
0N/A public static synchronized void setTimeoutTo( int seconds )
0N/A {
0N/A sleepTime = seconds * 1000;
0N/A }
0N/A
0N/A public static synchronized void pass()
0N/A {
0N/A Sysout.println( "The test passed." );
0N/A Sysout.println( "The test is over, hit Ctl-C to stop Java VM" );
0N/A //first check if this is executing in main thread
0N/A if ( mainThread == Thread.currentThread() )
0N/A {
0N/A //Still in the main thread, so set the flag just for kicks,
0N/A // and throw a test passed exception which will be caught
0N/A // and end the test.
0N/A theTestPassed = true;
0N/A throw new TestPassedException();
0N/A }
0N/A //pass was called from a different thread, so set the flag and interrupt
0N/A // the main thead.
0N/A theTestPassed = true;
0N/A testGeneratedInterrupt = true;
0N/A mainThread.interrupt();
0N/A }//pass()
0N/A
0N/A public static synchronized void fail()
0N/A {
0N/A //test writer didn't specify why test failed, so give generic
0N/A fail( "it just plain failed! :-)" );
0N/A }
0N/A
0N/A public static synchronized void fail( String whyFailed )
0N/A {
0N/A Sysout.println( "The test failed: " + whyFailed );
0N/A Sysout.println( "The test is over, hit Ctl-C to stop Java VM" );
0N/A //check if this called from main thread
0N/A if ( mainThread == Thread.currentThread() )
0N/A {
0N/A //If main thread, fail now 'cause not sleeping
0N/A throw new RuntimeException( whyFailed );
0N/A }
0N/A theTestPassed = false;
0N/A testGeneratedInterrupt = true;
0N/A failureMessage = whyFailed;
0N/A mainThread.interrupt();
0N/A }//fail()
0N/A
0N/A }// class Orient
0N/A
0N/A//This exception is used to exit from any level of call nesting
0N/A// when it's determined that the test has passed, and immediately
0N/A// end the test.
0N/Aclass TestPassedException extends RuntimeException
0N/A {
0N/A }
0N/A
0N/A//*********** End Standard Test Machinery Section **********
0N/A
0N/A
0N/A//************ Begin classes defined for the test ****************
0N/A
0N/A// make listeners in a class defined here, and instantiate them in init()
0N/A
0N/A/* Example of a class which may be written as part of a test
0N/Aclass NewClass implements anInterface
0N/A {
0N/A static int newVar = 0;
0N/A
0N/A public void eventDispatched(AWTEvent e)
0N/A {
0N/A //Counting events to see if we get enough
0N/A eventCount++;
0N/A
0N/A if( eventCount == 20 )
0N/A {
0N/A //got enough events, so pass
0N/A
0N/A Orient.pass();
0N/A }
0N/A else if( tries == 20 )
0N/A {
0N/A //tried too many times without getting enough events so fail
0N/A
0N/A Orient.fail();
0N/A }
0N/A
0N/A }// eventDispatched()
0N/A
0N/A }// NewClass class
0N/A
0N/A*/
0N/A
0N/A
0N/A//************** End classes defined for the test *******************
0N/A
0N/A
0N/A
0N/A
0N/A/****************************************************
0N/A Standard Test Machinery
0N/A DO NOT modify anything below -- it's a standard
0N/A chunk of code whose purpose is to make user
0N/A interaction uniform, and thereby make it simpler
0N/A to read and understand someone else's test.
0N/A ****************************************************/
0N/A
0N/A/**
0N/A This is part of the standard test machinery.
0N/A It creates a dialog (with the instructions), and is the interface
0N/A for sending text messages to the user.
0N/A To print the instructions, send an array of strings to Sysout.createDialog
0N/A WithInstructions method. Put one line of instructions per array entry.
0N/A To display a message for the tester to see, simply call Sysout.println
0N/A with the string to be displayed.
0N/A This mimics System.out.println but works within the test harness as well
0N/A as standalone.
0N/A */
0N/A
0N/Aclass Sysout
0N/A {
0N/A private static TestDialog dialog;
0N/A
0N/A public static void createDialogWithInstructions( String[] instructions )
0N/A {
0N/A dialog = new TestDialog( new Frame(), "Instructions" );
0N/A dialog.printInstructions( instructions );
0N/A dialog.show();
0N/A println( "Any messages for the tester will display here." );
0N/A }
0N/A
0N/A public static void createDialog( )
0N/A {
0N/A dialog = new TestDialog( new Frame(), "Instructions" );
0N/A String[] defInstr = { "Instructions will appear here. ", "" } ;
0N/A dialog.printInstructions( defInstr );
0N/A dialog.show();
0N/A println( "Any messages for the tester will display here." );
0N/A }
0N/A
0N/A
0N/A public static void printInstructions( String[] instructions )
0N/A {
0N/A dialog.printInstructions( instructions );
0N/A }
0N/A
0N/A
0N/A public static void println( String messageIn )
0N/A {
0N/A dialog.displayMessage( messageIn );
0N/A }
0N/A
0N/A }// Sysout class
0N/A
0N/A/**
0N/A This is part of the standard test machinery. It provides a place for the
0N/A test instructions to be displayed, and a place for interactive messages
0N/A to the user to be displayed.
0N/A To have the test instructions displayed, see Sysout.
0N/A To have a message to the user be displayed, see Sysout.
0N/A Do not call anything in this dialog directly.
0N/A */
0N/Aclass TestDialog extends Dialog implements ActionListener
0N/A {
0N/A
0N/A TextArea instructionsText;
0N/A TextArea messageText;
0N/A int maxStringLength = 80;
0N/A Panel buttonP = new Panel();
0N/A Button passB = new Button( "pass" );
0N/A Button failB = new Button( "fail" );
0N/A
0N/A //DO NOT call this directly, go through Sysout
0N/A public TestDialog( Frame frame, String name )
0N/A {
0N/A super( frame, name );
0N/A int scrollBoth = TextArea.SCROLLBARS_BOTH;
0N/A instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth );
0N/A add( "North", instructionsText );
0N/A
0N/A messageText = new TextArea( "", 5, maxStringLength, scrollBoth );
0N/A add("Center", messageText);
0N/A
0N/A passB = new Button( "pass" );
0N/A passB.setActionCommand( "pass" );
0N/A passB.addActionListener( this );
0N/A buttonP.add( "East", passB );
0N/A
0N/A failB = new Button( "fail" );
0N/A failB.setActionCommand( "fail" );
0N/A failB.addActionListener( this );
0N/A buttonP.add( "West", failB );
0N/A
0N/A add( "South", buttonP );
0N/A pack();
0N/A
0N/A show();
0N/A }// TestDialog()
0N/A
0N/A //DO NOT call this directly, go through Sysout
0N/A public void printInstructions( String[] instructions )
0N/A {
0N/A //Clear out any current instructions
0N/A instructionsText.setText( "" );
0N/A
0N/A //Go down array of instruction strings
0N/A
0N/A String printStr, remainingStr;
0N/A for( int i=0; i < instructions.length; i++ )
0N/A {
0N/A //chop up each into pieces maxSringLength long
0N/A remainingStr = instructions[ i ];
0N/A while( remainingStr.length() > 0 )
0N/A {
0N/A //if longer than max then chop off first max chars to print
0N/A if( remainingStr.length() >= maxStringLength )
0N/A {
0N/A //Try to chop on a word boundary
0N/A int posOfSpace = remainingStr.
0N/A lastIndexOf( ' ', maxStringLength - 1 );
0N/A
0N/A if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
0N/A
0N/A printStr = remainingStr.substring( 0, posOfSpace + 1 );
0N/A remainingStr = remainingStr.substring( posOfSpace + 1 );
0N/A }
0N/A //else just print
0N/A else
0N/A {
0N/A printStr = remainingStr;
0N/A remainingStr = "";
0N/A }
0N/A
0N/A instructionsText.append( printStr + "\n" );
0N/A
0N/A }// while
0N/A
0N/A }// for
0N/A
0N/A }//printInstructions()
0N/A
0N/A //DO NOT call this directly, go through Sysout
0N/A public void displayMessage( String messageIn )
0N/A {
0N/A messageText.append( messageIn + "\n" );
0N/A }
0N/A
0N/A //catch presses of the passed and failed buttons.
0N/A //simply call the standard pass() or fail() static methods of
0N/A //DialogOrient
0N/A public void actionPerformed( ActionEvent e )
0N/A {
0N/A if( e.getActionCommand() == "pass" )
0N/A {
0N/A DialogOrient.pass();
0N/A }
0N/A else
0N/A {
0N/A DialogOrient.fail();
0N/A }
0N/A }
0N/A
0N/A }// TestDialog class