summaryrefslogtreecommitdiffstats
path: root/src/test/com/jogamp/opengl
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/com/jogamp/opengl')
-rw-r--r--src/test/com/jogamp/opengl/test/junit/newt/event/BaseNewtEventModifiers.java9
-rw-r--r--src/test/com/jogamp/opengl/test/junit/util/AWTRobotUtil.java53
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);