diff options
author | Sven Gothel <[email protected]> | 2010-06-16 06:57:15 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2010-06-16 06:57:15 +0200 |
commit | 0d24458c68ac1bb92da21a1701633f8f32a267bb (patch) | |
tree | 41ce1187fec49d74079c5056df0cbb296c468d28 /src/junit | |
parent | c0ece5ebd634662f99f3217bb749e2c4795f9de6 (diff) |
JOGL.GLAutoDrawable:
- Add: 'public void addGLEventListener(int index, GLEventListener listener)'
Fixes previous GLWindow addition, ie public in interface and common impl. behavior.
- Add: 'public void invoke(boolean wait, GLRunnable glRunnable)'
- Change: 'public void display()' semantics, in regards to the GLRunnable queue
New: GLRunnable, invoke() at GLAutoDrawable
Allows injection of GL commands from other threads, executed after the
GLEventListener's display() notifyier by the GLAutoDrawable.
NEWT:
- Fix EDTUTil.invokeAndWait() and Display.enqueueAndWait() impl.,
where we only wait for the single action/event to be processed now.
JUnit: NEWT Parenting
- Added test cases for Swing (JFrame, JPanel and COntainer) with NewtCanvasAWT
- Added thread calling 'invoke(true, GLRunnable)'
- start Animator ASAP
Diffstat (limited to 'src/junit')
-rw-r--r-- | src/junit/com/jogamp/test/junit/newt/GLRunnableDummy.java | 63 | ||||
-rwxr-xr-x | src/junit/com/jogamp/test/junit/newt/TestListenerCom01AWT.java | 2 | ||||
-rwxr-xr-x | src/junit/com/jogamp/test/junit/newt/TestParenting01NEWT.java | 2 | ||||
-rwxr-xr-x | src/junit/com/jogamp/test/junit/newt/TestParenting01aAWT.java (renamed from src/junit/com/jogamp/test/junit/newt/TestParenting01AWT.java) | 6 | ||||
-rwxr-xr-x | src/junit/com/jogamp/test/junit/newt/TestParenting01bAWT.java (renamed from src/junit/com/jogamp/test/junit/newt/TestParentingAWT.java) | 6 | ||||
-rwxr-xr-x | src/junit/com/jogamp/test/junit/newt/TestParenting01cAWT.java | 195 | ||||
-rwxr-xr-x | src/junit/com/jogamp/test/junit/newt/TestParenting01cSwingAWT.java | 374 | ||||
-rwxr-xr-x | src/junit/com/jogamp/test/junit/newt/TestParenting02AWT.java | 2 | ||||
-rwxr-xr-x | src/junit/com/jogamp/test/junit/newt/TestParenting02NEWT.java | 2 |
9 files changed, 642 insertions, 10 deletions
diff --git a/src/junit/com/jogamp/test/junit/newt/GLRunnableDummy.java b/src/junit/com/jogamp/test/junit/newt/GLRunnableDummy.java new file mode 100644 index 000000000..990a0c37d --- /dev/null +++ b/src/junit/com/jogamp/test/junit/newt/GLRunnableDummy.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2010 Sven Gothel. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * - Redistribution of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistribution in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name Sven Gothel or the names of + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * This software is provided "AS IS," without a warranty of any kind. ALL + * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, + * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN + * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR + * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR + * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR + * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR + * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE + * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, + * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF + * SVEN GOTHEL HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + */ + +package com.jogamp.test.junit.newt; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.AfterClass; +import org.junit.Test; + +import javax.media.opengl.*; + +public class GLRunnableDummy implements GLRunnable { + float r=0.0f; + float g=0.0f; + float b=0.0f; + float d=0.001f; + + public void run(GLAutoDrawable drawable) { + // nop .. + GL2ES1 gl = drawable.getGL().getGL2ES1(); + gl.glClearColor(r, g, b, 1f); + r+=d; + if(r>1f) { + r=1f; + d*=-1f; + } else if(r<0f) { + r=0f; + d*=-1f; + } + } + +} diff --git a/src/junit/com/jogamp/test/junit/newt/TestListenerCom01AWT.java b/src/junit/com/jogamp/test/junit/newt/TestListenerCom01AWT.java index b661d02f3..495b8bb3e 100755 --- a/src/junit/com/jogamp/test/junit/newt/TestListenerCom01AWT.java +++ b/src/junit/com/jogamp/test/junit/newt/TestListenerCom01AWT.java @@ -142,7 +142,7 @@ public class TestListenerCom01AWT { static int atoi(String a) { int i=0; try { - durationPerTest = Integer.parseInt(a); + i = Integer.parseInt(a); } catch (Exception ex) { ex.printStackTrace(); } return i; } diff --git a/src/junit/com/jogamp/test/junit/newt/TestParenting01NEWT.java b/src/junit/com/jogamp/test/junit/newt/TestParenting01NEWT.java index f87ce1111..b1d57e793 100755 --- a/src/junit/com/jogamp/test/junit/newt/TestParenting01NEWT.java +++ b/src/junit/com/jogamp/test/junit/newt/TestParenting01NEWT.java @@ -283,7 +283,7 @@ public class TestParenting01NEWT { static int atoi(String a) { int i=0; try { - durationPerTest = Integer.parseInt(a); + i = Integer.parseInt(a); } catch (Exception ex) { ex.printStackTrace(); } return i; } diff --git a/src/junit/com/jogamp/test/junit/newt/TestParenting01AWT.java b/src/junit/com/jogamp/test/junit/newt/TestParenting01aAWT.java index 39659d763..d88e7157a 100755 --- a/src/junit/com/jogamp/test/junit/newt/TestParenting01AWT.java +++ b/src/junit/com/jogamp/test/junit/newt/TestParenting01aAWT.java @@ -65,7 +65,7 @@ import com.jogamp.test.junit.util.*; import com.jogamp.test.junit.jogl.demos.es1.RedSquare; import com.jogamp.test.junit.jogl.demos.gl2.gears.Gears; -public class TestParenting01AWT { +public class TestParenting01aAWT { static int width, height; static long durationPerTest = 800; static long waitReparent = 0; @@ -399,7 +399,7 @@ public class TestParenting01AWT { static int atoi(String a) { int i=0; try { - durationPerTest = Integer.parseInt(a); + i = Integer.parseInt(a); } catch (Exception ex) { ex.printStackTrace(); } return i; } @@ -412,7 +412,7 @@ public class TestParenting01AWT { waitReparent = atoi(args[++i]); } } - String tstname = TestParenting01AWT.class.getName(); + String tstname = TestParenting01aAWT.class.getName(); org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(new String[] { tstname, "filtertrace=true", diff --git a/src/junit/com/jogamp/test/junit/newt/TestParentingAWT.java b/src/junit/com/jogamp/test/junit/newt/TestParenting01bAWT.java index c42599810..227744296 100755 --- a/src/junit/com/jogamp/test/junit/newt/TestParentingAWT.java +++ b/src/junit/com/jogamp/test/junit/newt/TestParenting01bAWT.java @@ -65,7 +65,7 @@ import com.jogamp.test.junit.util.*; import com.jogamp.test.junit.jogl.demos.es1.RedSquare; import com.jogamp.test.junit.jogl.demos.gl2.gears.Gears; -public class TestParentingAWT { +public class TestParenting01bAWT { static int width, height; static long durationPerTest = 800; static long waitReparent = 0; @@ -158,7 +158,7 @@ public class TestParentingAWT { static int atoi(String a) { int i=0; try { - durationPerTest = Integer.parseInt(a); + i = Integer.parseInt(a); } catch (Exception ex) { ex.printStackTrace(); } return i; } @@ -171,7 +171,7 @@ public class TestParentingAWT { waitReparent = atoi(args[++i]); } } - String tstname = TestParentingAWT.class.getName(); + String tstname = TestParenting01bAWT.class.getName(); org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(new String[] { tstname, "filtertrace=true", diff --git a/src/junit/com/jogamp/test/junit/newt/TestParenting01cAWT.java b/src/junit/com/jogamp/test/junit/newt/TestParenting01cAWT.java new file mode 100755 index 000000000..7559390fa --- /dev/null +++ b/src/junit/com/jogamp/test/junit/newt/TestParenting01cAWT.java @@ -0,0 +1,195 @@ +/* + * Copyright (c) 2010 Sven Gothel. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * - Redistribution of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistribution in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name Sven Gothel or the names of + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * This software is provided "AS IS," without a warranty of any kind. ALL + * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, + * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN + * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR + * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR + * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR + * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR + * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE + * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, + * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF + * SVEN GOTHEL HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + */ + +package com.jogamp.test.junit.newt; + +import java.lang.reflect.*; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Test; + +import java.awt.Button; +import java.awt.BorderLayout; +import java.awt.Canvas; +import java.awt.Container; +import java.awt.Frame; +import java.awt.Dimension; + +import javax.media.opengl.*; +import javax.media.nativewindow.*; + +import com.jogamp.opengl.util.Animator; +import com.jogamp.newt.*; +import com.jogamp.newt.event.*; +import com.jogamp.newt.opengl.*; +import com.jogamp.newt.awt.NewtCanvasAWT; + +import java.io.IOException; + +import com.jogamp.test.junit.util.*; +import com.jogamp.test.junit.jogl.demos.es1.RedSquare; +import com.jogamp.test.junit.jogl.demos.gl2.gears.Gears; + +public class TestParenting01cAWT { + static int width, height; + static long durationPerTest = 800; + static long waitReparent = 0; + static GLCapabilities glCaps; + + @BeforeClass + public static void initClass() { + width = 640; + height = 480; + glCaps = new GLCapabilities(null); + } + + @Test + public void testWindowParenting01CreateVisibleDestroy1() throws InterruptedException { + int x = 0; + int y = 0; + + NEWTEventFiFo eventFifo = new NEWTEventFiFo(); + + GLWindow glWindow1 = GLWindow.create(glCaps); + Assert.assertNotNull(glWindow1); + Assert.assertEquals(false, glWindow1.isVisible()); + Assert.assertEquals(false, glWindow1.isNativeWindowValid()); + Assert.assertNull(glWindow1.getParentNativeWindow()); + glWindow1.setTitle("testWindowParenting01CreateVisibleDestroy"); + GLEventListener demo1 = new RedSquare(); + setDemoFields(demo1, glWindow1, false); + glWindow1.addGLEventListener(demo1); + + NewtCanvasAWT newtCanvasAWT = new NewtCanvasAWT(glWindow1); + Assert.assertNotNull(newtCanvasAWT); + Assert.assertEquals(false, glWindow1.isVisible()); + Assert.assertEquals(false, glWindow1.isNativeWindowValid()); + Assert.assertNull(glWindow1.getParentNativeWindow()); + + Frame frame1 = new Frame("AWT Parent Frame"); + frame1.setLayout(new BorderLayout()); + frame1.add(new Button("North"), BorderLayout.NORTH); + frame1.add(new Button("South"), BorderLayout.SOUTH); + frame1.add(new Button("East"), BorderLayout.EAST); + frame1.add(new Button("West"), BorderLayout.WEST); + + Container container1 = new Container(); + container1.setLayout(new BorderLayout()); + container1.add(new Button("north"), BorderLayout.NORTH); + container1.add(new Button("south"), BorderLayout.SOUTH); + container1.add(new Button("east"), BorderLayout.EAST); + container1.add(new Button("west"), BorderLayout.WEST); + container1.add(newtCanvasAWT, BorderLayout.CENTER); + + frame1.add(container1, BorderLayout.CENTER); + frame1.setSize(width, height); + + // visible test + frame1.setVisible(true); + Assert.assertEquals(newtCanvasAWT.getNativeWindow(),glWindow1.getParentNativeWindow()); + + Animator animator1 = new Animator(glWindow1); + animator1.start(); + while(animator1.isAnimating() && animator1.getDuration()<durationPerTest) { + Thread.sleep(100); + } + animator1.stop(); + Assert.assertEquals(false, animator1.isAnimating()); + + frame1.setVisible(false); + Assert.assertEquals(false, glWindow1.isDestroyed()); + + frame1.setVisible(true); + Assert.assertEquals(false, glWindow1.isDestroyed()); + + frame1.remove(newtCanvasAWT); + // Assert.assertNull(glWindow1.getParentNativeWindow()); + Assert.assertEquals(false, glWindow1.isDestroyed()); + + frame1.dispose(); + Assert.assertEquals(false, glWindow1.isDestroyed()); + + glWindow1.destroy(true); + //Assert.assertEquals(true, glWindow1.isDestroyed()); + } + + public static void setDemoFields(GLEventListener demo, GLWindow glWindow, boolean debug) { + Assert.assertNotNull(demo); + Assert.assertNotNull(glWindow); + Window window = glWindow.getInnerWindow(); + if(debug) { + MiscUtils.setFieldIfExists(demo, "glDebug", true); + MiscUtils.setFieldIfExists(demo, "glTrace", true); + } + if(!MiscUtils.setFieldIfExists(demo, "window", window)) { + MiscUtils.setFieldIfExists(demo, "glWindow", glWindow); + } + } + + static int atoi(String a) { + int i=0; + try { + i = Integer.parseInt(a); + } catch (Exception ex) { ex.printStackTrace(); } + return i; + } + + public static void main(String args[]) throws IOException { + for(int i=0; i<args.length; i++) { + if(args[i].equals("-time")) { + durationPerTest = atoi(args[++i]); + } else if(args[i].equals("-wait")) { + waitReparent = atoi(args[++i]); + } + } + String tstname = TestParenting01cAWT.class.getName(); + org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(new String[] { + tstname, + "filtertrace=true", + "haltOnError=false", + "haltOnFailure=false", + "showoutput=true", + "outputtoformatters=true", + "logfailedtests=true", + "logtestlistenerevents=true", + "formatter=org.apache.tools.ant.taskdefs.optional.junit.PlainJUnitResultFormatter", + "formatter=org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter,TEST-"+tstname+".xml" } ); + } + +} diff --git a/src/junit/com/jogamp/test/junit/newt/TestParenting01cSwingAWT.java b/src/junit/com/jogamp/test/junit/newt/TestParenting01cSwingAWT.java new file mode 100755 index 000000000..a3a06aea3 --- /dev/null +++ b/src/junit/com/jogamp/test/junit/newt/TestParenting01cSwingAWT.java @@ -0,0 +1,374 @@ +/* + * Copyright (c) 2010 Sven Gothel. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * - Redistribution of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistribution in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name Sven Gothel or the names of + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * This software is provided "AS IS," without a warranty of any kind. ALL + * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, + * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN + * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR + * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR + * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR + * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR + * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE + * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, + * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF + * SVEN GOTHEL HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + */ + +package com.jogamp.test.junit.newt; + +import java.lang.reflect.*; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Test; + +import java.awt.Button; +import java.awt.BorderLayout; +import java.awt.Canvas; +import java.awt.Container; +import java.awt.Frame; +import java.awt.Dimension; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; + +import javax.media.opengl.*; +import javax.media.nativewindow.*; + +import com.jogamp.opengl.util.Animator; +import com.jogamp.newt.*; +import com.jogamp.newt.event.*; +import com.jogamp.newt.opengl.*; +import com.jogamp.newt.awt.NewtCanvasAWT; + +import java.io.IOException; + +import com.jogamp.test.junit.util.*; +import com.jogamp.test.junit.jogl.demos.es1.RedSquare; +import com.jogamp.test.junit.jogl.demos.gl2.gears.Gears; + +public class TestParenting01cSwingAWT { + static int width, height; + static long durationPerTest = 800; + static long waitReparent = 0; + static GLCapabilities glCaps; + + @BeforeClass + public static void initClass() { + width = 640; + height = 480; + glCaps = new GLCapabilities(null); + } + + @Test + public void testWindowParenting01CreateVisibleDestroy1() throws InterruptedException, InvocationTargetException { + int x = 0; + int y = 0; + + NEWTEventFiFo eventFifo = new NEWTEventFiFo(); + + /** + * JFrame . JPanel . Container . NewtCanvasAWT . GLWindow + */ + GLWindow glWindow1 = GLWindow.create(glCaps); + Assert.assertNotNull(glWindow1); + Assert.assertEquals(false, glWindow1.isVisible()); + Assert.assertEquals(false, glWindow1.isNativeWindowValid()); + Assert.assertNull(glWindow1.getParentNativeWindow()); + glWindow1.setTitle("testWindowParenting01CreateVisibleDestroy"); + GLEventListener demo1 = new RedSquare(); + setDemoFields(demo1, glWindow1, false); + glWindow1.addGLEventListener(demo1); + Animator animator1 = new Animator(glWindow1); + animator1.start(); + final GLWindow _glWindow1 = glWindow1; + final GLRunnable _glRunnable = new GLRunnableDummy(); + Thread disturbanceThread = new Thread(new Runnable() { + public void run() { + System.out.println("$"); + while(true) + { + try { + _glWindow1.invoke(true, _glRunnable); + Thread.yield(); + } catch (Throwable t) {} + } + } + }); + disturbanceThread.start(); + + + NewtCanvasAWT newtCanvasAWT = new NewtCanvasAWT(glWindow1); + Assert.assertNotNull(newtCanvasAWT); + Assert.assertEquals(false, glWindow1.isVisible()); + Assert.assertEquals(false, glWindow1.isNativeWindowValid()); + Assert.assertNull(glWindow1.getParentNativeWindow()); + + Container container1 = new Container(); + container1.setLayout(new BorderLayout()); + container1.add(new Button("north"), BorderLayout.NORTH); + container1.add(new Button("south"), BorderLayout.SOUTH); + container1.add(new Button("east"), BorderLayout.EAST); + container1.add(new Button("west"), BorderLayout.WEST); + container1.add(newtCanvasAWT, BorderLayout.CENTER); + + JPanel jPanel1 = new JPanel(); + jPanel1.setLayout(new BorderLayout()); + jPanel1.add(new Button("north"), BorderLayout.NORTH); + jPanel1.add(new Button("south"), BorderLayout.SOUTH); + jPanel1.add(new Button("east"), BorderLayout.EAST); + jPanel1.add(new Button("west"), BorderLayout.WEST); + jPanel1.add(container1, BorderLayout.CENTER); + + JFrame jFrame1 = new JFrame("Swing Parent JFrame"); + // jFrame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + jFrame1.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); // equivalent to Frame, use windowClosing event! + jFrame1.setContentPane(jPanel1); + jFrame1.setSize(width, height); + jFrame1.setVisible(true); // from here on, we need to run modifications on EDT + + final JFrame _jFrame1 = jFrame1; + final JPanel _jPanel1 = jPanel1; + final Container _container1 = container1; + + // visible test + Assert.assertEquals(newtCanvasAWT.getNativeWindow(),glWindow1.getParentNativeWindow()); + + while(animator1.isAnimating() && animator1.getDuration()<durationPerTest) { + Thread.sleep(100); + } + animator1.stop(); + Assert.assertEquals(false, animator1.isAnimating()); + + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + _jFrame1.setVisible(false); + } }); + Assert.assertEquals(false, glWindow1.isDestroyed()); + + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + _jFrame1.setVisible(true); + } }); + Assert.assertEquals(false, glWindow1.isDestroyed()); + + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + _jPanel1.remove(_container1); + } }); + // Assert.assertNull(glWindow1.getParentNativeWindow()); + Assert.assertEquals(false, glWindow1.isDestroyed()); + + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + _jFrame1.dispose(); + } }); + Assert.assertEquals(false, glWindow1.isDestroyed()); + + glWindow1.destroy(true); + //Assert.assertEquals(true, glWindow1.isDestroyed()); + } + + @Test + public void testWindowParenting05ReparentAWTWinHopFrame2Frame() throws InterruptedException, InvocationTargetException { + int x = 0; + int y = 0; + + NEWTEventFiFo eventFifo = new NEWTEventFiFo(); + + /** + * JFrame . JPanel . Container . NewtCanvasAWT . GLWindow + */ + GLWindow glWindow1 = GLWindow.create(glCaps); + Assert.assertNotNull(glWindow1); + Assert.assertEquals(false, glWindow1.isVisible()); + Assert.assertEquals(false, glWindow1.isNativeWindowValid()); + Assert.assertNull(glWindow1.getParentNativeWindow()); + glWindow1.setTitle("testWindowParenting01CreateVisibleDestroy"); + GLEventListener demo1 = new RedSquare(); + setDemoFields(demo1, glWindow1, false); + glWindow1.addGLEventListener(demo1); + Animator animator1 = new Animator(glWindow1); + animator1.start(); + final GLWindow _glWindow1 = glWindow1; + final GLRunnable _glRunnable = new GLRunnableDummy(); + Thread disturbanceThread = new Thread(new Runnable() { + public void run() { + System.out.println("$"); + while(true) + { + try { + _glWindow1.invoke(true, _glRunnable); + Thread.yield(); + } catch (Throwable t) {} + } + } + }); + disturbanceThread.start(); + + NewtCanvasAWT newtCanvasAWT = new NewtCanvasAWT(glWindow1); + Assert.assertNotNull(newtCanvasAWT); + Assert.assertEquals(false, glWindow1.isVisible()); + Assert.assertEquals(false, glWindow1.isNativeWindowValid()); + Assert.assertNull(glWindow1.getParentNativeWindow()); + + Container container1 = new Container(); + container1.setLayout(new BorderLayout()); + container1.add(new Button("north"), BorderLayout.NORTH); + container1.add(new Button("south"), BorderLayout.SOUTH); + container1.add(new Button("east"), BorderLayout.EAST); + container1.add(new Button("west"), BorderLayout.WEST); + container1.add(newtCanvasAWT, BorderLayout.CENTER); + + JPanel jPanel1 = new JPanel(); + jPanel1.setLayout(new BorderLayout()); + jPanel1.add(new Button("north"), BorderLayout.NORTH); + jPanel1.add(new Button("south"), BorderLayout.SOUTH); + jPanel1.add(new Button("east"), BorderLayout.EAST); + jPanel1.add(new Button("west"), BorderLayout.WEST); + jPanel1.add(container1, BorderLayout.CENTER); + + JFrame jFrame1 = new JFrame("Swing Parent JFrame"); + // jFrame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + jFrame1.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); // equivalent to Frame, use windowClosing event! + jFrame1.setContentPane(jPanel1); + jFrame1.setLocation(0, 0); + jFrame1.setSize(width, height); + jFrame1.setVisible(true); // from here on, we need to run modifications on EDT + + JPanel jPanel2 = new JPanel(); + jPanel2.setLayout(new BorderLayout()); + jPanel2.add(new Button("north"), BorderLayout.NORTH); + jPanel2.add(new Button("south"), BorderLayout.SOUTH); + jPanel2.add(new Button("east"), BorderLayout.EAST); + jPanel2.add(new Button("west"), BorderLayout.WEST); + + JFrame jFrame2 = new JFrame("Swing Parent JFrame"); + // jFrame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + jFrame2.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); // equivalent to Frame, use windowClosing event! + jFrame2.setContentPane(jPanel2); + jFrame2.setLocation(640, 480); + jFrame2.setSize(width, height); + jFrame2.setVisible(true); // from here on, we need to run modifications on EDT + + final NewtCanvasAWT _newtCanvasAWT = newtCanvasAWT; + final JFrame _jFrame1 = jFrame1; + final JPanel _jPanel1 = jPanel1; + final Container _container1 = container1; + final JFrame _jFrame2 = jFrame2; + final JPanel _jPanel2 = jPanel2; + + // visible test + Assert.assertEquals(newtCanvasAWT.getNativeWindow(),glWindow1.getParentNativeWindow()); + + int state = 0; + while(animator1.isAnimating() && animator1.getDuration()<3*durationPerTest) { + Thread.sleep(durationPerTest); + switch(state) { + case 0: + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + _container1.remove(_newtCanvasAWT); + _jPanel2.add(_newtCanvasAWT, BorderLayout.CENTER); + } }); + break; + case 1: + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + _jPanel2.remove(_newtCanvasAWT); + _container1.add(_newtCanvasAWT, BorderLayout.CENTER); + } }); + break; + } + state++; + } + + animator1.stop(); + Assert.assertEquals(false, animator1.isAnimating()); + + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + _jFrame1.setVisible(false); + _jFrame2.setVisible(false); + } }); + Assert.assertEquals(false, glWindow1.isDestroyed()); + + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + _jFrame1.dispose(); + _jFrame2.dispose(); + } }); + Assert.assertEquals(false, glWindow1.isDestroyed()); + + glWindow1.destroy(true); + //Assert.assertEquals(true, glWindow1.isDestroyed()); + } + + public static void setDemoFields(GLEventListener demo, GLWindow glWindow, boolean debug) { + Assert.assertNotNull(demo); + Assert.assertNotNull(glWindow); + Window window = glWindow.getInnerWindow(); + if(debug) { + MiscUtils.setFieldIfExists(demo, "glDebug", true); + MiscUtils.setFieldIfExists(demo, "glTrace", true); + } + if(!MiscUtils.setFieldIfExists(demo, "window", window)) { + MiscUtils.setFieldIfExists(demo, "glWindow", glWindow); + } + } + + static int atoi(String a) { + int i=0; + try { + i = Integer.parseInt(a); + } catch (Exception ex) { ex.printStackTrace(); } + return i; + } + + public static void main(String args[]) throws IOException { + for(int i=0; i<args.length; i++) { + if(args[i].equals("-time")) { + durationPerTest = atoi(args[++i]); + } else if(args[i].equals("-wait")) { + waitReparent = atoi(args[++i]); + } + } + System.out.println("durationPerTest "+durationPerTest); + System.out.println("waitReparent "+waitReparent); + String tstname = TestParenting01cSwingAWT.class.getName(); + org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(new String[] { + tstname, + "filtertrace=true", + "haltOnError=false", + "haltOnFailure=false", + "showoutput=true", + "outputtoformatters=true", + "logfailedtests=true", + "logtestlistenerevents=true", + "formatter=org.apache.tools.ant.taskdefs.optional.junit.PlainJUnitResultFormatter", + "formatter=org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter,TEST-"+tstname+".xml" } ); + } + +} diff --git a/src/junit/com/jogamp/test/junit/newt/TestParenting02AWT.java b/src/junit/com/jogamp/test/junit/newt/TestParenting02AWT.java index 753da1836..8d9a0f380 100755 --- a/src/junit/com/jogamp/test/junit/newt/TestParenting02AWT.java +++ b/src/junit/com/jogamp/test/junit/newt/TestParenting02AWT.java @@ -239,7 +239,7 @@ public class TestParenting02AWT { static int atoi(String a) { int i=0; try { - durationPerTest = Integer.parseInt(a); + i = Integer.parseInt(a); } catch (Exception ex) { ex.printStackTrace(); } return i; } diff --git a/src/junit/com/jogamp/test/junit/newt/TestParenting02NEWT.java b/src/junit/com/jogamp/test/junit/newt/TestParenting02NEWT.java index 0fa0bef0f..5be04fcc2 100755 --- a/src/junit/com/jogamp/test/junit/newt/TestParenting02NEWT.java +++ b/src/junit/com/jogamp/test/junit/newt/TestParenting02NEWT.java @@ -203,7 +203,7 @@ public class TestParenting02NEWT { static int atoi(String a) { int i=0; try { - durationPerTest = Integer.parseInt(a); + i = Integer.parseInt(a); } catch (Exception ex) { ex.printStackTrace(); } return i; } |