diff options
Diffstat (limited to 'src/test/com/jogamp/opengl')
-rw-r--r-- | src/test/com/jogamp/opengl/test/junit/newt/event/BaseNewtEventModifiers.java | 9 | ||||
-rw-r--r-- | src/test/com/jogamp/opengl/test/junit/util/AWTRobotUtil.java | 53 |
2 files changed, 59 insertions, 3 deletions
diff --git a/src/test/com/jogamp/opengl/test/junit/newt/event/BaseNewtEventModifiers.java b/src/test/com/jogamp/opengl/test/junit/newt/event/BaseNewtEventModifiers.java index 3a2c4cc81..e6edd0da5 100644 --- a/src/test/com/jogamp/opengl/test/junit/newt/event/BaseNewtEventModifiers.java +++ b/src/test/com/jogamp/opengl/test/junit/newt/event/BaseNewtEventModifiers.java @@ -39,6 +39,7 @@ import org.junit.Test ; import com.jogamp.common.util.RunnableTask; import com.jogamp.newt.event.MouseEvent; +import com.jogamp.opengl.test.junit.util.AWTRobotUtil; import com.jogamp.opengl.test.junit.util.UITestCase ; /** @@ -519,7 +520,7 @@ public abstract class BaseNewtEventModifiers extends UITestCase { private void _doHoldOneButtonAndPressAnother( final int keyCode, final int keyModifierMask ) throws Exception { if( _debug ) { _debugPrintStream.println( "\n>>>> _doHoldOneButtonAndPressAnother" ) ; } - + _doKeyPress( keyCode ) ; for (int n = 0 ; n < _numButtonsToTest ; ++n) { @@ -561,7 +562,7 @@ public abstract class BaseNewtEventModifiers extends UITestCase { private void _doPressAllButtonsInSequence( final int keyCode, final int keyModifierMask ) throws Exception { if( _debug ) { _debugPrintStream.println( "\n>>>> _doPressAllButtonsInSequence" ) ; } - + _doKeyPress( keyCode ) ; { @@ -634,6 +635,7 @@ public abstract class BaseNewtEventModifiers extends UITestCase { //////////////////////////////////////////////////////////////////////////// private void _doKeyPress( int keyCode ) { + AWTRobotUtil.validateAWTEDTIsAlive(); if( keyCode != 0 ) { boolean modifierCheckEnabled = _testMouseListener.modifierCheckEnabled() ; _testMouseListener.setModifierCheckEnabled( false ) ; @@ -646,6 +648,7 @@ public abstract class BaseNewtEventModifiers extends UITestCase { //////////////////////////////////////////////////////////////////////////// private void _doKeyRelease( int keyCode ) { + AWTRobotUtil.validateAWTEDTIsAlive(); if( keyCode != 0 ) { boolean modifierCheckEnabled = _testMouseListener.modifierCheckEnabled() ; _testMouseListener.setModifierCheckEnabled( false ) ; @@ -697,6 +700,7 @@ public abstract class BaseNewtEventModifiers extends UITestCase { private void _releaseModifiers() { if (_robot != null) { + AWTRobotUtil.validateAWTEDTIsAlive(); _robot.setAutoDelay( MS_ROBOT_AUTO_DELAY ) ; @@ -721,6 +725,7 @@ public abstract class BaseNewtEventModifiers extends UITestCase { private void _escape() { if (_robot != null) { + AWTRobotUtil.validateAWTEDTIsAlive(); _robot.keyPress( java.awt.event.KeyEvent.VK_ESCAPE ) ; _robot.keyRelease( java.awt.event.KeyEvent.VK_ESCAPE ) ; } diff --git a/src/test/com/jogamp/opengl/test/junit/util/AWTRobotUtil.java b/src/test/com/jogamp/opengl/test/junit/util/AWTRobotUtil.java index b5f8def3c..8a73d3363 100644 --- a/src/test/com/jogamp/opengl/test/junit/util/AWTRobotUtil.java +++ b/src/test/com/jogamp/opengl/test/junit/util/AWTRobotUtil.java @@ -31,8 +31,10 @@ package com.jogamp.opengl.test.junit.util; import jogamp.newt.WindowImplAccess; import jogamp.newt.awt.event.AWTNewtEventFactory; +import java.lang.Thread.UncaughtExceptionHandler; import java.lang.reflect.InvocationTargetException; import java.awt.AWTException; +import java.awt.EventQueue; import java.awt.Robot; import javax.media.nativewindow.NativeWindow; @@ -56,6 +58,50 @@ public class AWTRobotUtil { public static final int TIME_SLICE = TIME_OUT / POLL_DIVIDER ; public static Integer AWT_CLICK_TO = null; + static Object awtEDTAliveSync = new Object(); + static volatile boolean awtEDTAliveFlag = false; + + static class OurUncaughtExceptionHandler implements UncaughtExceptionHandler { + @Override + public void uncaughtException(Thread t, Throwable e) { + System.err.println("*** AWTRobotUtil: UncaughtException (this Thread "+Thread.currentThread().getName()+") : Thread <"+t.getName()+">, "+e.getClass().getName()+": "+e.getMessage()); + e.printStackTrace(); + } + } + + static { + Thread.setDefaultUncaughtExceptionHandler( new OurUncaughtExceptionHandler() ); + // System.err.println("AWT EDT alive: "+isAWTEDTAlive()); + } + + public static boolean isAWTEDTAlive() { + if( EventQueue.isDispatchThread() ) { + return true; + } + synchronized ( awtEDTAliveSync ) { + awtEDTAliveFlag = false; + EventQueue.invokeLater(new Runnable() { + @Override + public void run() { + awtEDTAliveFlag = true; + } + }); + for (int wait=0; wait<POLL_DIVIDER && !awtEDTAliveFlag; wait++) { + try { + Thread.sleep(TIME_SLICE); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + return awtEDTAliveFlag; + } + } + public static void validateAWTEDTIsAlive() { + if( !isAWTEDTAlive() ) { + throw new Error("AWT EDT not alive"); + } + } + public static void clearAWTFocus(Robot robot) throws InterruptedException, InvocationTargetException, AWTException { if(null == robot) { robot = new Robot(); @@ -247,6 +293,7 @@ public class AWTRobotUtil { final int mouseButton = java.awt.event.InputEvent.BUTTON1_MASK; centerMouse(robot, obj, onTitleBarIfWindow); + validateAWTEDTIsAlive(); robot.waitForIdle(); robot.mousePress(mouseButton); robot.mouseRelease(mouseButton); @@ -279,6 +326,7 @@ public class AWTRobotUtil { public static void requestFocus(Robot robot, Object obj, int x, int y) throws AWTException, InterruptedException, InvocationTargetException { + validateAWTEDTIsAlive(); final boolean idling = robot.isAutoWaitForIdle(); final int mouseButton = java.awt.event.InputEvent.BUTTON1_MASK; @@ -395,12 +443,14 @@ public class AWTRobotUtil { } private static void awtRobotKeyPress(final Robot robot, final int keyCode, final int msDelay) { + validateAWTEDTIsAlive(); robot.waitForIdle(); robot.keyPress(keyCode); robot.delay(msDelay); robot.waitForIdle(); } private static void awtRobotKeyRelease(final Robot robot, final int keyCode, final int msDelay) { + validateAWTEDTIsAlive(); robot.waitForIdle(); robot.keyRelease(keyCode); robot.delay(msDelay); @@ -540,8 +590,9 @@ public class AWTRobotUtil { if(DEBUG) { System.err.println(i+":"+j+" MC1.0: "+counter+" - regain focus"); } requestFocus(null, obj); } - final int c0 = null != counter ? counter.getCount() : 0; + final int c0 = null != counter ? counter.getCount() : 0; if(DEBUG) { System.err.println(i+":"+j+" MC1.1: "+counter); } + validateAWTEDTIsAlive(); robot.waitForIdle(); robot.mousePress(mouseButton); robot.mouseRelease(mouseButton); |