diff options
author | Sven Gothel <[email protected]> | 2010-06-11 00:12:15 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2010-06-11 00:12:15 +0200 |
commit | 302f183c4a659be9cedb5b6993ff78e7379d9cad (patch) | |
tree | 466042070d875b15ee99b69e148c4a7025a870f8 /src/junit | |
parent | 1d333a771ce0bc7c8594e21d031703f698f06a46 (diff) |
NEWT Add: add<type>Listener(int index, <type>Listener l) ; get<type>Listener(int index) ; NEWTEvent attachments
NEWT Add:
add<type>Listener(int index, <type>Listener l) ;
get<type>Listener(int index) ;
NEWTEvent attachments for listener to listener communication
via object passing. This methodology is similar to the 'Atom'
attachment of native systems.
It is preferred to a 'consume()/isConsumed()' pattern,
since it is less flexible and would 'endanger' system events.
TODO: <type>Listener[] get<type>Listeners() doesn't work and was always buggy.
Diffstat (limited to 'src/junit')
5 files changed, 319 insertions, 14 deletions
diff --git a/src/junit/com/jogamp/test/junit/newt/TestListenerCom01AWT.java b/src/junit/com/jogamp/test/junit/newt/TestListenerCom01AWT.java new file mode 100755 index 000000000..b661d02f3 --- /dev/null +++ b/src/junit/com/jogamp/test/junit/newt/TestListenerCom01AWT.java @@ -0,0 +1,173 @@ +/* + * 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.Frame; + +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 TestListenerCom01AWT { + static int width, height; + static long durationPerTest = 500; + static long waitReparent = 300; + static boolean verbose = false; + + @BeforeClass + public static void initClass() { + width = 640; + height = 480; + } + + @Test + public void testListenerStringPassingAndOrder() throws InterruptedException { + // setup NEWT GLWindow .. + GLWindow glWindow = GLWindow.create(new GLCapabilities(null)); + Assert.assertNotNull(glWindow); + glWindow.setTitle("NEWT - CHILD"); + + System.out.println("durationPerTest "+durationPerTest); + + GLEventListener demo = new Gears(); + setDemoFields(demo, glWindow, false); + glWindow.addGLEventListener(demo); + + WindowEventCom1 wl1 = new WindowEventCom1(); + WindowEventCom2 wl2 = new WindowEventCom2(); + WindowEventCom3 wl3 = new WindowEventCom3(); + + // TraceWindowAdapter wlT = new TraceWindowAdapter(); + // glWindow.addWindowListener(0, wlT); + // Assert.assertEquals(wlT, glWindow.getWindowListener(0)); + + glWindow.addWindowListener(0, wl3); + glWindow.addWindowListener(0, wl2); + glWindow.addWindowListener(0, wl1); + + Assert.assertEquals(wl1, glWindow.getWindowListener(0)); + Assert.assertEquals(wl2, glWindow.getWindowListener(1)); + Assert.assertEquals(wl3, glWindow.getWindowListener(2)); + + // attach NEWT GLWindow to AWT Canvas + NewtCanvasAWT newtCanvasAWT = new NewtCanvasAWT(glWindow); + Frame frame = new Frame("AWT Parent Frame"); + frame.add(newtCanvasAWT); + frame.setSize(width, height); + frame.setVisible(true); + + Animator animator1 = new Animator(glWindow); + animator1.start(); + while(animator1.isAnimating() && animator1.getDuration()<durationPerTest) { + Thread.sleep(100); + width+=10; height+=10; + frame.setSize(width, height); + } + animator1.stop(); + Assert.assertEquals(false, animator1.isAnimating()); + + frame.dispose(); + glWindow.destroy(true); + } + + 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 { + durationPerTest = Integer.parseInt(a); + } catch (Exception ex) { ex.printStackTrace(); } + return i; + } + + public static void main(String args[]) throws IOException { + verbose = true; + 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 = TestListenerCom01AWT.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/TestParenting01AWT.java b/src/junit/com/jogamp/test/junit/newt/TestParenting01AWT.java index 2c695f788..39659d763 100755 --- a/src/junit/com/jogamp/test/junit/newt/TestParenting01AWT.java +++ b/src/junit/com/jogamp/test/junit/newt/TestParenting01AWT.java @@ -94,7 +94,6 @@ public class TestParenting01AWT { GLEventListener demo1 = new RedSquare(); setDemoFields(demo1, glWindow1, false); glWindow1.addGLEventListener(demo1); - // glWindow1.setSize(600, 300); NewtCanvasAWT newtCanvasAWT = new NewtCanvasAWT(glWindow1); Assert.assertNotNull(newtCanvasAWT); @@ -106,7 +105,6 @@ public class TestParenting01AWT { Assert.assertNotNull(frame); frame.add(newtCanvasAWT); frame.setSize(width, height); - // frame.pack(); // visible test frame.setVisible(true); @@ -152,7 +150,6 @@ public class TestParenting01AWT { GLEventListener demo1 = new RedSquare(); setDemoFields(demo1, glWindow1, false); glWindow1.addGLEventListener(demo1); - // glWindow1.setSize(600, 300); NewtCanvasAWT newtCanvasAWT = new NewtCanvasAWT(glWindow1); Assert.assertNotNull(newtCanvasAWT); @@ -169,7 +166,6 @@ public class TestParenting01AWT { frame.add(newtCanvasAWT); Assert.assertEquals(newtCanvasAWT.getNativeWindow(),glWindow1.getParentNativeWindow()); - // frame.pack(); Animator animator1 = new Animator(glWindow1); animator1.start(); @@ -194,7 +190,6 @@ public class TestParenting01AWT { GLEventListener demo1 = new RedSquare(); setDemoFields(demo1, glWindow1, false); glWindow1.addGLEventListener(demo1); - // glWindow1.setSize(600, 300); NewtCanvasAWT newtCanvasAWT = new NewtCanvasAWT(glWindow1); @@ -206,7 +201,6 @@ public class TestParenting01AWT { frame.setVisible(true); frame.add(newtCanvasAWT); - // frame.pack(); Animator animator1 = new Animator(glWindow1); animator1.start(); @@ -231,7 +225,6 @@ public class TestParenting01AWT { GLEventListener demo1 = new RedSquare(); setDemoFields(demo1, glWindow1, false); glWindow1.addGLEventListener(demo1); - // glWindow1.setSize(600, 300); NewtCanvasAWT newtCanvasAWT = new NewtCanvasAWT(glWindow1); @@ -242,7 +235,6 @@ public class TestParenting01AWT { frame.add(newtCanvasAWT); Assert.assertEquals(newtCanvasAWT.getNativeWindow(),glWindow1.getParentNativeWindow()); - // frame.pack(); Animator animator1 = new Animator(glWindow1); animator1.start(); @@ -283,7 +275,6 @@ public class TestParenting01AWT { GLEventListener demo1 = new RedSquare(); setDemoFields(demo1, glWindow1, false); glWindow1.addGLEventListener(demo1); - // glWindow1.setSize(600, 300); NewtCanvasAWT newtCanvasAWT = new NewtCanvasAWT(glWindow1); @@ -299,7 +290,6 @@ public class TestParenting01AWT { frame.add(newtCanvasAWT, BorderLayout.CENTER); Assert.assertEquals(newtCanvasAWT.getNativeWindow(),glWindow1.getParentNativeWindow()); - // frame.pack(); Animator animator1 = new Animator(glWindow1); animator1.start(); @@ -340,7 +330,6 @@ public class TestParenting01AWT { GLEventListener demo1 = new RedSquare(); setDemoFields(demo1, glWindow1, false); glWindow1.addGLEventListener(demo1); - // glWindow1.setSize(600, 300); NewtCanvasAWT newtCanvasAWT = new NewtCanvasAWT(glWindow1); @@ -366,7 +355,6 @@ public class TestParenting01AWT { frame1.add(newtCanvasAWT, BorderLayout.CENTER); Assert.assertEquals(newtCanvasAWT.getNativeWindow(),glWindow1.getParentNativeWindow()); - // frame1.pack(); Animator animator1 = new Animator(glWindow1); animator1.start(); @@ -378,12 +366,10 @@ public class TestParenting01AWT { case 0: frame1.remove(newtCanvasAWT); frame2.add(newtCanvasAWT, BorderLayout.CENTER); - //frame2.pack(); break; case 1: frame2.remove(newtCanvasAWT); frame1.add(newtCanvasAWT, BorderLayout.CENTER); - //frame1.pack(); break; } state++; diff --git a/src/junit/com/jogamp/test/junit/newt/WindowEventCom1.java b/src/junit/com/jogamp/test/junit/newt/WindowEventCom1.java new file mode 100644 index 000000000..fa6ad0e92 --- /dev/null +++ b/src/junit/com/jogamp/test/junit/newt/WindowEventCom1.java @@ -0,0 +1,46 @@ +/* + * 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 com.jogamp.newt.event.*; + +class WindowEventCom1 extends WindowAdapter { + + public void windowResized(WindowEvent e) { + e.setAttachment(new String("WindowEventCom1.windowResized: "+e)); + } + public void windowMoved(WindowEvent e) { + e.setAttachment(new String("WindowEventCom1.windowMoved: "+e)); + } +} + diff --git a/src/junit/com/jogamp/test/junit/newt/WindowEventCom2.java b/src/junit/com/jogamp/test/junit/newt/WindowEventCom2.java new file mode 100644 index 000000000..9c6820831 --- /dev/null +++ b/src/junit/com/jogamp/test/junit/newt/WindowEventCom2.java @@ -0,0 +1,52 @@ +/* + * 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 com.jogamp.newt.event.*; + +class WindowEventCom2 extends WindowAdapter { + + public void windowResized(WindowEvent e) { + String str = (String) e.getAttachment(); + if(null==str) { + e.setAttachment(new String("WindowEventCom2.windowResized: "+e)); + } + } + public void windowMoved(WindowEvent e) { + String str = (String) e.getAttachment(); + if(null==str) { + e.setAttachment(new String("WindowEventCom2.windowMoved: "+e)); + } + } +} + diff --git a/src/junit/com/jogamp/test/junit/newt/WindowEventCom3.java b/src/junit/com/jogamp/test/junit/newt/WindowEventCom3.java new file mode 100644 index 000000000..247393e92 --- /dev/null +++ b/src/junit/com/jogamp/test/junit/newt/WindowEventCom3.java @@ -0,0 +1,48 @@ +/* + * 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 com.jogamp.newt.event.*; + +class WindowEventCom3 extends WindowAdapter { + + public void windowResized(WindowEvent e) { + String str = (String) e.getAttachment(); + System.out.println("WindowEventCom3.windowResized: "+str); + } + public void windowMoved(WindowEvent e) { + String str = (String) e.getAttachment(); + System.out.println("WindowEventCom3.windowMoved: "+str); + } +} + |