Mercurial > hg > release > icedtea6-1.11
changeset 2613:4a46bd6fb3a5
Backport of 6818312 regression test.
author | ptisnovs |
---|---|
date | Wed, 22 Jun 2011 10:52:24 +0200 |
parents | 6775ce70b2cd |
children | 561f0d6f3934 |
files | ChangeLog Makefile.am patches/openjdk/6818312-com.sun.awt.SecurityWarning.getSize.patch |
diffstat | 3 files changed, 413 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Wed Jun 22 10:36:22 2011 +0200 +++ b/ChangeLog Wed Jun 22 10:52:24 2011 +0200 @@ -1,3 +1,9 @@ +2011-06-22 Pavel Tisnovsky <ptisnovs@redhat.com> + + * Makefile.am: added new patch + * patches/openjdk/6818312-com.sun.awt.SecurityWarning.getSize.patch: + Backport of 6818312 regression test. + 2011-06-22 Pavel Tisnovsky <ptisnovs@redhat.com> * Makefile.am: Added new patch.
--- a/Makefile.am Wed Jun 22 10:36:22 2011 +0200 +++ b/Makefile.am Wed Jun 22 10:52:24 2011 +0200 @@ -360,7 +360,8 @@ patches/jtreg-FileMap.patch \ patches/jtreg-ChannelsWrite.patch \ patches/jtreg-bug7036148-test.patch \ - patches/jtreg-ReadWriteProfileTest.patch + patches/jtreg-ReadWriteProfileTest.patch \ + patches/openjdk/6818312-com.sun.awt.SecurityWarning.getSize.patch if WITH_ALT_HSBUILD ICEDTEA_PATCHES += \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/6818312-com.sun.awt.SecurityWarning.getSize.patch Wed Jun 22 10:52:24 2011 +0200 @@ -0,0 +1,405 @@ +# HG changeset patch +# User anthony +# Date 1238598347 -14400 +# Node ID 1cb2e3e0631fb815c31f0123a6a207d78b219e21 +# Parent 3a9ae1117c12b6fa13a692609de28600d707e25c +6818312: com.sun.awt.SecurityWarning.getSize() always reports (0, 0) on X11 +Summary: The fix got pushed with 6693253. However the test was omitted. Here it comes. +Reviewed-by: dcherepanov, art + +diff -r 3a9ae1117c12 -r 1cb2e3e0631f test/com/sun/awt/SecurityWarning/GetSizeShouldNotReturnZero.java +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ openjdk/jdk/test/com/sun/awt/SecurityWarning/GetSizeShouldNotReturnZero.java Wed Apr 01 19:05:47 2009 +0400 +@@ -0,0 +1,392 @@ ++/* ++ * Copyright 2009 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, ++ * CA 95054 USA or visit www.sun.com if you need additional information or ++ * have any questions. ++ */ ++ ++/* ++ @test %W% %E% ++ @bug 6818312 ++ @summary The size returned by SecurityWarning.getSize() should not be zero ++ @author anthony.petrov@sun.com: area=awt.toplevel ++ @library ../../../../java/awt/regtesthelpers ++ @build Util ++ @run main GetSizeShouldNotReturnZero ++*/ ++ ++/** ++ * GetSizeShouldNotReturnZero.java ++ * ++ * summary: The size returned by SecurityWarning.getSize() should not be zero ++ */ ++ ++import java.awt.*; ++import java.awt.event.*; ++import java.security.Permission; ++import test.java.awt.regtesthelpers.Util; ++import com.sun.awt.SecurityWarning; ++ ++public class GetSizeShouldNotReturnZero ++{ ++ private static void init() ++ { ++ String[] instructions = ++ { ++ "This is an AUTOMATIC test, simply wait until it is done.", ++ "The result (passed or failed) will be shown in the", ++ "message window below." ++ }; ++ Sysout.createDialog( ); ++ Sysout.printInstructions( instructions ); ++ ++ ++ // Install the security manager so that all subsequently created ++ // windows display the security warning. ++ System.setSecurityManager(new SecurityManager() { ++ ++ @Override ++ public void checkPermission(Permission perm) { ++ } ++ ++ @Override ++ public boolean checkTopLevelWindow(Object window) { ++ return false; ++ } ++ }); ++ ++ Frame f = new Frame(); ++ f.setSize(100, 100); ++ f.setVisible(true); ++ ++ Robot robot = Util.createRobot(); ++ Util.waitForIdle(robot); ++ ++ Dimension size = SecurityWarning.getSize(f); ++ if (size.width == 0 || size.height == 0) { ++ fail("Reported security warning size: " + size); ++ return; ++ } ++ pass(); ++ }//End init() ++ ++ ++ ++ /***************************************************** ++ * Standard Test Machinery Section ++ * DO NOT modify anything in this section -- it's a ++ * standard chunk of code which has all of the ++ * synchronisation necessary for the test harness. ++ * By keeping it the same in all tests, it is easier ++ * to read and understand someone else's test, as ++ * well as insuring that all tests behave correctly ++ * with the test harness. ++ * There is a section following this for test- ++ * classes ++ ******************************************************/ ++ private static boolean theTestPassed = false; ++ private static boolean testGeneratedInterrupt = false; ++ private static String failureMessage = ""; ++ ++ private static Thread mainThread = null; ++ ++ private static int sleepTime = 300000; ++ ++ // Not sure about what happens if multiple of this test are ++ // instantiated in the same VM. Being static (and using ++ // static vars), it aint gonna work. Not worrying about ++ // it for now. ++ public static void 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 pass nor test fail 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 ++ throw new RuntimeException( "Timed out after " + sleepTime/1000 + " seconds" ); ++ } ++ catch (InterruptedException e) ++ { ++ //The test harness may have interrupted the test. If so, rethrow the exception ++ // so that the harness gets it and deals with it. ++ if( ! testGeneratedInterrupt ) throw e; ++ ++ //reset flag in case hit this code more than once for some reason (just safety) ++ testGeneratedInterrupt = false; ++ ++ if ( theTestPassed == false ) ++ { ++ throw new RuntimeException( failureMessage ); ++ } ++ } ++ ++ }//main ++ ++ public static synchronized void setTimeoutTo( int seconds ) ++ { ++ sleepTime = seconds * 1000; ++ } ++ ++ public static synchronized void pass() ++ { ++ Sysout.println( "The test passed." ); ++ Sysout.println( "The test is over, hit Ctl-C to stop Java VM" ); ++ //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; ++ throw new TestPassedException(); ++ } ++ theTestPassed = true; ++ testGeneratedInterrupt = true; ++ mainThread.interrupt(); ++ }//pass() ++ ++ public static synchronized void fail() ++ { ++ //test writer didn't specify why test failed, so give generic ++ fail( "it just plain failed! :-)" ); ++ } ++ ++ public static synchronized void fail( String whyFailed ) ++ { ++ Sysout.println( "The test failed: " + whyFailed ); ++ Sysout.println( "The test is over, hit Ctl-C to stop Java VM" ); ++ //check if this called from main thread ++ if ( mainThread == Thread.currentThread() ) ++ { ++ //If main thread, fail now 'cause not sleeping ++ throw new RuntimeException( whyFailed ); ++ } ++ theTestPassed = false; ++ testGeneratedInterrupt = true; ++ failureMessage = whyFailed; ++ mainThread.interrupt(); ++ }//fail() ++ ++}// class GetSizeShouldNotReturnZero ++ ++//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 ********** ++ ++ ++//************ Begin classes defined for the test **************** ++ ++// if want to make listeners, here is the recommended place for them, then instantiate ++// them in init() ++ ++/* Example of a class which may be written as part of a test ++class NewClass implements anInterface ++ { ++ static int newVar = 0; ++ ++ public void eventDispatched(AWTEvent e) ++ { ++ //Counting events to see if we get enough ++ eventCount++; ++ ++ if( eventCount == 20 ) ++ { ++ //got enough events, so pass ++ ++ GetSizeShouldNotReturnZero.pass(); ++ } ++ else if( tries == 20 ) ++ { ++ //tried too many times without getting enough events so fail ++ ++ GetSizeShouldNotReturnZero.fail(); ++ } ++ ++ }// eventDispatched() ++ ++ }// NewClass class ++ ++*/ ++ ++ ++//************** End classes defined for the test ******************* ++ ++ ++ ++ ++/**************************************************** ++ Standard Test Machinery ++ DO NOT modify anything below -- it's a standard ++ chunk of code whose purpose is to make user ++ interaction uniform, and thereby make it simpler ++ to read and understand someone else's test. ++ ****************************************************/ ++ ++/** ++ This is part of the standard test machinery. ++ It creates a dialog (with the instructions), and is the interface ++ for sending text messages to the user. ++ To print the instructions, send an array of strings to Sysout.createDialog ++ WithInstructions method. Put one line of instructions per array entry. ++ To display a message for the tester to see, simply call Sysout.println ++ with the string to be displayed. ++ This mimics System.out.println but works within the test harness as well ++ as standalone. ++ */ ++ ++class Sysout ++{ ++ private static TestDialog dialog; ++ ++ public static void createDialogWithInstructions( String[] instructions ) ++ { ++ dialog = new TestDialog( new Frame(), "Instructions" ); ++ dialog.printInstructions( instructions ); ++ dialog.setVisible(true); ++ println( "Any messages for the tester will display here." ); ++ } ++ ++ public static void createDialog( ) ++ { ++ dialog = new TestDialog( new Frame(), "Instructions" ); ++ String[] defInstr = { "Instructions will appear here. ", "" } ; ++ dialog.printInstructions( defInstr ); ++ dialog.setVisible(true); ++ println( "Any messages for the tester will display here." ); ++ } ++ ++ ++ public static void printInstructions( String[] instructions ) ++ { ++ dialog.printInstructions( instructions ); ++ } ++ ++ ++ public static void println( String messageIn ) ++ { ++ dialog.displayMessage( messageIn ); ++ System.out.println(messageIn); ++ } ++ ++}// Sysout class ++ ++/** ++ This is part of the standard test machinery. It provides a place for the ++ test instructions to be displayed, and a place for interactive messages ++ to the user to be displayed. ++ To have the test instructions displayed, see Sysout. ++ To have a message to the user be displayed, see Sysout. ++ Do not call anything in this dialog directly. ++ */ ++class TestDialog extends Dialog ++{ ++ ++ TextArea instructionsText; ++ TextArea messageText; ++ int maxStringLength = 80; ++ ++ //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); ++ ++ pack(); ++ ++ setVisible(true); ++ }// TestDialog() ++ ++ //DO NOT call this directly, go through Sysout ++ public void 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 ); ++ ++ if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1; ++ ++ printStr = remainingStr.substring( 0, posOfSpace + 1 ); ++ remainingStr = remainingStr.substring( posOfSpace + 1 ); ++ } ++ //else just print ++ else ++ { ++ printStr = remainingStr; ++ remainingStr = ""; ++ } ++ ++ instructionsText.append( printStr + "\n" ); ++ ++ }// while ++ ++ }// for ++ ++ }//printInstructions() ++ ++ //DO NOT call this directly, go through Sysout ++ public void displayMessage( String messageIn ) ++ { ++ messageText.append( messageIn + "\n" ); ++ System.out.println(messageIn); ++ } ++ ++}// TestDialog class ++ ++