diff options
Diffstat (limited to 'src')
5 files changed, 70 insertions, 39 deletions
diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/newt/TestSwingAWTRobotUsageBeforeJOGLInitBug411.java b/src/test/com/jogamp/opengl/test/junit/jogl/newt/TestSwingAWTRobotUsageBeforeJOGLInitBug411.java index 213d3ad05..bacf54506 100644 --- a/src/test/com/jogamp/opengl/test/junit/jogl/newt/TestSwingAWTRobotUsageBeforeJOGLInitBug411.java +++ b/src/test/com/jogamp/opengl/test/junit/jogl/newt/TestSwingAWTRobotUsageBeforeJOGLInitBug411.java @@ -157,7 +157,9 @@ public class TestSwingAWTRobotUsageBeforeJOGLInitBug411 extends UITestCase { robot = new Robot(); robot.setAutoWaitForIdle(true); - AWTRobotUtil.toFront(robot, frame); + Assert.assertEquals(true, AWTRobotUtil.waitForVisible(frame, true)); + AWTRobotUtil.clearAWTFocus(robot); + AWTRobotUtil.toFrontAndRequestFocus(robot, frame); AWTRobotUtil.requestFocus(robot, button); System.err.println("TestSwingAWTRobotUsageBeforeJOGLInitBug411.setup(): Before JOGL init"); @@ -195,7 +197,7 @@ public class TestSwingAWTRobotUsageBeforeJOGLInitBug411 extends UITestCase { } }); - AWTRobotUtil.toFront(robot, frame); + AWTRobotUtil.toFrontAndRequestFocus(robot, frame); drawable.addGLEventListener(new GearsES2()); @@ -214,6 +216,7 @@ public class TestSwingAWTRobotUsageBeforeJOGLInitBug411 extends UITestCase { drawable.addGLEventListener(new SwingGLAction()); Point p0 = canvas.getLocationOnScreen(); + p0.translate(10,10); robot.mouseMove( (int) ( p0.getX() + .5 ) , (int) ( p0.getY() + .5 ) ); robot.mousePress(InputEvent.BUTTON1_MASK); diff --git a/src/test/com/jogamp/opengl/test/junit/newt/TestFocus01SwingAWTRobot.java b/src/test/com/jogamp/opengl/test/junit/newt/TestFocus01SwingAWTRobot.java index fe7fef09f..bb67e77ea 100644 --- a/src/test/com/jogamp/opengl/test/junit/newt/TestFocus01SwingAWTRobot.java +++ b/src/test/com/jogamp/opengl/test/junit/newt/TestFocus01SwingAWTRobot.java @@ -35,7 +35,6 @@ import org.junit.Assume; import java.awt.AWTException; import java.awt.BorderLayout; import java.awt.Button; -import java.awt.Color; import java.awt.Robot; import java.lang.reflect.InvocationTargetException; @@ -132,7 +131,10 @@ public class TestFocus01SwingAWTRobot extends UITestCase { public void run() { frame1.setVisible(true); } } ); - Assert.assertTrue(AWTRobotUtil.toFront(robot, frame1)); + Assert.assertEquals(true, AWTRobotUtil.waitForVisible(frame1, true)); + Assert.assertEquals(true, AWTRobotUtil.waitForRealized(glWindow1, true)); + AWTRobotUtil.clearAWTFocus(robot); + Assert.assertTrue(AWTRobotUtil.toFrontAndRequestFocus(robot, frame1)); Thread.sleep(durationPerTest); // manual testing @@ -145,7 +147,6 @@ public class TestFocus01SwingAWTRobot extends UITestCase { // Continuous animation .. Animator animator = new Animator(glWindow1); animator.start(); - AWTRobotUtil.assertRequestFocusAndWait(robot, frame1, frame1, frame1FA, null); // Button Focus Thread.sleep(100); // allow event sync @@ -153,9 +154,6 @@ public class TestFocus01SwingAWTRobot extends UITestCase { System.err.println("FOCUS AWT Button request"); EventCountAdapterUtil.reset(eventCountAdapters); AWTRobotUtil.assertRequestFocusAndWait(robot, button, button, buttonFA, frame1FA); - Assert.assertEquals(true, buttonFA.focusGained()); - Assert.assertEquals(false, frame1FA.focusGained()); - Assert.assertEquals(true, frame1FA.focusLost()); Assert.assertEquals(false, glWindow1FA.focusGained()); Assert.assertEquals(false, newtCanvasAWTFA.focusGained()); System.err.println("FOCUS AWT Button sync"); @@ -166,9 +164,6 @@ public class TestFocus01SwingAWTRobot extends UITestCase { System.err.println("FOCUS NEWT Canvas/GLWindow request"); EventCountAdapterUtil.reset(eventCountAdapters); AWTRobotUtil.assertRequestFocusAndWait(robot, newtCanvasAWT, newtCanvasAWT.getNEWTChild(), glWindow1FA, buttonFA); - Assert.assertEquals(true, glWindow1FA.focusGained()); - Assert.assertEquals(false, buttonFA.focusGained()); - Assert.assertEquals(true, buttonFA.focusLost()); Assert.assertEquals(false, newtCanvasAWTFA.focusGained()); System.err.println("FOCUS NEWT Canvas/GLWindow sync"); AWTRobotUtil.assertKeyType(robot, java.awt.event.KeyEvent.VK_A, 2, glWindow1, glWindow1KA); diff --git a/src/test/com/jogamp/opengl/test/junit/newt/TestFocus02SwingAWTRobot.java b/src/test/com/jogamp/opengl/test/junit/newt/TestFocus02SwingAWTRobot.java index b9eb748b7..a0efa53ad 100644 --- a/src/test/com/jogamp/opengl/test/junit/newt/TestFocus02SwingAWTRobot.java +++ b/src/test/com/jogamp/opengl/test/junit/newt/TestFocus02SwingAWTRobot.java @@ -156,7 +156,10 @@ public class TestFocus02SwingAWTRobot extends UITestCase { public void run() { jFrame1.setVisible(true); } } ); - Assert.assertTrue(AWTRobotUtil.toFront(robot, jFrame1)); + Assert.assertEquals(true, AWTRobotUtil.waitForVisible(jFrame1, true)); + Assert.assertEquals(true, AWTRobotUtil.waitForRealized(glWindow1, true)); + AWTRobotUtil.clearAWTFocus(robot); + Assert.assertTrue(AWTRobotUtil.toFrontAndRequestFocus(robot, jFrame1)); int wait=0; while(wait<awtWaitTimeout/10 && glWindow1.getTotalFPSFrames()<1) { Thread.sleep(awtWaitTimeout/100); wait++; } @@ -167,7 +170,6 @@ public class TestFocus02SwingAWTRobot extends UITestCase { // Continuous animation .. Animator animator1 = new Animator(glWindow1); animator1.start(); - AWTRobotUtil.assertRequestFocusAndWait(robot, jFrame1, jFrame1, jFrame1FA, null); Thread.sleep(durationPerTest); // manual testing @@ -176,13 +178,9 @@ public class TestFocus02SwingAWTRobot extends UITestCase { System.err.println("FOCUS AWT Button Outer request"); EventCountAdapterUtil.reset(eventCountAdapters); AWTRobotUtil.assertRequestFocusAndWait(robot, buttonNorthOuter, buttonNorthOuter, buttonNorthOuterFA, jFrame1FA); - Assert.assertEquals(true, buttonNorthOuterFA.focusGained()); - Assert.assertEquals(false, jFrame1FA.focusGained()); - Assert.assertEquals(true, jFrame1FA.focusLost()); Assert.assertEquals(false, glWindow1FA.focusGained()); Assert.assertEquals(false, newtCanvasAWTFA.focusGained()); Assert.assertEquals(false, buttonNorthInnerFA.focusGained()); - Assert.assertEquals(false, jFrame1FA.focusGained()); System.err.println("FOCUS AWT Button Outer sync"); AWTRobotUtil.assertKeyType(robot, java.awt.event.KeyEvent.VK_A, 2, buttonNorthOuter, buttonNorthOuterKA); AWTRobotUtil.assertMouseClick(robot, java.awt.event.InputEvent.BUTTON1_MASK, 1, @@ -195,12 +193,8 @@ public class TestFocus02SwingAWTRobot extends UITestCase { System.err.println("FOCUS NEWT Canvas/GLWindow request"); EventCountAdapterUtil.reset(eventCountAdapters); AWTRobotUtil.assertRequestFocusAndWait(robot, newtCanvasAWT, newtCanvasAWT.getNEWTChild(), glWindow1FA, buttonNorthOuterFA); - Assert.assertEquals(true, glWindow1FA.focusGained()); - Assert.assertEquals(false, buttonNorthOuterFA.focusGained()); - Assert.assertEquals(true, buttonNorthOuterFA.focusLost()); Assert.assertEquals(false, newtCanvasAWTFA.focusGained()); Assert.assertEquals(false, buttonNorthInnerFA.focusGained()); - Assert.assertEquals(false, buttonNorthOuterFA.focusGained()); Assert.assertEquals(false, jFrame1FA.focusGained()); System.err.println("FOCUS NEWT Canvas/GLWindow sync"); AWTRobotUtil.assertKeyType(robot, java.awt.event.KeyEvent.VK_A, 2, glWindow1, glWindow1KA); @@ -216,9 +210,6 @@ public class TestFocus02SwingAWTRobot extends UITestCase { System.err.println("FOCUS AWT Button request"); EventCountAdapterUtil.reset(eventCountAdapters); AWTRobotUtil.assertRequestFocusAndWait(robot, buttonNorthInner, buttonNorthInner, buttonNorthInnerFA, glWindow1FA); - Assert.assertEquals(true, buttonNorthInnerFA.focusGained()); - Assert.assertEquals(false, glWindow1FA.focusGained()); - Assert.assertEquals(true, glWindow1FA.focusLost()); Assert.assertEquals(false, newtCanvasAWTFA.focusGained()); Assert.assertEquals(false, buttonNorthOuterFA.focusGained()); Assert.assertEquals(false, jFrame1FA.focusGained()); @@ -235,9 +226,6 @@ public class TestFocus02SwingAWTRobot extends UITestCase { EventCountAdapterUtil.reset(eventCountAdapters); AWTRobotUtil.assertRequestFocusAndWait(robot, newtCanvasAWT, newtCanvasAWT.getNEWTChild(), glWindow1FA, buttonNorthInnerFA); Assert.assertTrue(AWTRobotUtil.waitForFocusCount(false, newtCanvasAWTFA)); - Assert.assertEquals(true, glWindow1FA.focusGained()); - Assert.assertEquals(false, buttonNorthInnerFA.focusGained()); - Assert.assertEquals(true, buttonNorthInnerFA.focusLost()); Assert.assertEquals(false, newtCanvasAWTFA.focusGained()); Assert.assertEquals(false, buttonNorthOuterFA.focusGained()); Assert.assertEquals(false, jFrame1FA.focusGained()); diff --git a/src/test/com/jogamp/opengl/test/junit/newt/parenting/TestParentingFocusTraversal01AWT.java b/src/test/com/jogamp/opengl/test/junit/newt/parenting/TestParentingFocusTraversal01AWT.java index b23c17022..7444b438e 100644 --- a/src/test/com/jogamp/opengl/test/junit/newt/parenting/TestParentingFocusTraversal01AWT.java +++ b/src/test/com/jogamp/opengl/test/junit/newt/parenting/TestParentingFocusTraversal01AWT.java @@ -191,7 +191,9 @@ public class TestParentingFocusTraversal01AWT extends UITestCase { }}); Assert.assertEquals(true, AWTRobotUtil.waitForVisible(glWindow1, true)); Assert.assertEquals(newtCanvasAWT1.getNativeWindow(),glWindow1.getParent()); - + AWTRobotUtil.clearAWTFocus(robot); + Assert.assertTrue(AWTRobotUtil.toFrontAndRequestFocus(robot, frame1)); + Assert.assertEquals(true, animator1.isAnimating()); Assert.assertEquals(false, animator1.isPaused()); Assert.assertNotNull(animator1.getThread()); @@ -203,7 +205,6 @@ public class TestParentingFocusTraversal01AWT extends UITestCase { // initial focus on bWest // AWTRobotUtil.assertRequestFocusAndWait(robot, cWest, cWest, bWestFA, null); - Assert.assertEquals(true, bWestFA.focusGained()); Thread.sleep(durationPerTest/numFocus); // 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 a27bdd7a2..b626ed282 100644 --- a/src/test/com/jogamp/opengl/test/junit/util/AWTRobotUtil.java +++ b/src/test/com/jogamp/opengl/test/junit/util/AWTRobotUtil.java @@ -37,6 +37,7 @@ import java.awt.KeyboardFocusManager; import java.awt.Robot; import java.awt.Toolkit; +import javax.media.nativewindow.NativeWindow; import javax.media.opengl.awt.GLCanvas; import org.junit.Assert; @@ -52,6 +53,20 @@ public class AWTRobotUtil { public static final int TIME_SLICE = TIME_OUT / POLL_DIVIDER ; public static Integer AWT_CLICK_TO = null; + public static void clearAWTFocus(Robot robot) throws InterruptedException, InvocationTargetException, AWTException { + if(null == robot) { + robot = new Robot(); + robot.setAutoWaitForIdle(true); + } + javax.swing.SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + System.err.println("******** clearAWTFocus.0"); + KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwner(); + }}); + robot.delay(ROBOT_DELAY); + System.err.println("******** clearAWTFocus.X"); + } + public static java.awt.Point getCenterLocation(Object obj, boolean onTitleBarIfWindow) throws InterruptedException, InvocationTargetException { Component comp = null; @@ -99,9 +114,10 @@ public class AWTRobotUtil { * * @return True if the Window became the global focused Window within TIME_OUT */ - public static boolean toFront(Robot robot, final java.awt.Window window) + public static boolean toFrontAndRequestFocus(Robot robot, final java.awt.Window window) throws AWTException, InterruptedException, InvocationTargetException { + // just for event tracing .. AWTWindowFocusAdapter winFA = new AWTWindowFocusAdapter("window"); window.addWindowFocusListener(winFA); @@ -110,7 +126,7 @@ public class AWTRobotUtil { robot.setAutoWaitForIdle(true); } java.awt.Point p0 = getCenterLocation(window, false); - System.err.println("robot pos: "+p0); + System.err.println("toFront: robot pos: "+p0); robot.mouseMove( (int) p0.getX(), (int) p0.getY() ); robot.delay(ROBOT_DELAY); @@ -123,11 +139,18 @@ public class AWTRobotUtil { robot.delay(ROBOT_DELAY); int wait; - for (wait=0; wait<POLL_DIVIDER && !winFA.focusGained(); wait++) { + for (wait=0; wait<POLL_DIVIDER && !window.hasFocus(); wait++) { Thread.sleep(TIME_SLICE); } + final boolean success = wait<POLL_DIVIDER; window.removeWindowFocusListener(winFA); - return wait<POLL_DIVIDER; + if(!success) { + System.err.println("*** AWTRobotUtil.toFrontAndRequestFocus() UI failure"); + System.err.println("*** window: "+window); + System.err.println("*** window.hasFocus(): "+window.hasFocus()); + Thread.dumpStack(); + } + return success; } /** @@ -143,7 +166,7 @@ public class AWTRobotUtil { } java.awt.Point p0 = getCenterLocation(obj, onTitleBarIfWindow); - System.err.println("robot pos: "+p0); + System.err.println("centerMouse: robot pos: "+p0+", onTitleBarIfWindow: "+onTitleBarIfWindow); robot.mouseMove( (int) p0.getX(), (int) p0.getY() ); robot.delay(ROBOT_DELAY); @@ -190,9 +213,11 @@ public class AWTRobotUtil { javax.swing.SwingUtilities.invokeAndWait(new Runnable() { public void run() { comp.requestFocus(); + System.err.println("requestFocus: AWT Component"); }}); } else { win.requestFocus(); + System.err.println("requestFocus: NEWT Component"); } } else { final int mouseButton = java.awt.event.InputEvent.BUTTON1_MASK; @@ -201,7 +226,9 @@ public class AWTRobotUtil { robot.waitForIdle(); robot.mousePress(mouseButton); robot.mouseRelease(mouseButton); - robot.delay( getClickTimeout(obj) + 1 ); + final int d = getClickTimeout(obj) + 1; + robot.delay( d ); + System.err.println("requestFocus: click, d: "+d+" ms"); } } @@ -275,10 +302,27 @@ public class AWTRobotUtil { hasFocus = waitForFocus(waitForFocus, gain, lost); } if(!hasFocus) { - System.err.println("requestFocus: "+requestFocus); - System.err.println("waitForFocus: "+waitForFocus); - System.err.println("gain: "+gain); - System.err.println("lost: "+lost); + System.err.print("*** AWTRobotUtil.assertRequestFocusAndWait() "); + if(gain.focusGained() && !lost.focusLost()) { + // be error tolerant here, some impl. may lack focus-lost events (OS X) + System.err.println("minor UI failure"); + hasFocus = true; + } else { + System.err.println("major UI failure"); + } + if(requestFocus instanceof Component) { + System.err.println("*** requestFocus.hasFocus() - AWT: "+((Component)requestFocus).hasFocus()); + } else if(requestFocus instanceof NativeWindow) { + System.err.println("*** requestFocus.hasFocus() - NW: "+((NativeWindow)requestFocus).hasFocus()); + } + if(waitForFocus instanceof Component) { + System.err.println("*** waitForFocus.hasFocus() - AWT: "+((Component)waitForFocus).hasFocus()); + } else if(waitForFocus instanceof NativeWindow) { + System.err.println("*** waitForFocus.hasFocus() - NW: "+((NativeWindow)waitForFocus).hasFocus()); + } + System.err.println("*** gain: "+gain); + System.err.println("*** lost: "+lost); + Thread.dumpStack(); } Assert.assertTrue("Did not gain focus", hasFocus); } |