Author: allain.lalonde Date: Sun Jul 19 07:32:25 2009 New Revision: 518 Modified: piccolo2d.java/trunk/core/src/main/java/edu/umd/cs/piccolo/PCanvas.java piccolo2d.java/trunk/core/src/main/java/edu/umd/cs/piccolo/PNode.java piccolo2d.java/trunk/core/src/test/java/edu/umd/cs/piccolo/PCanvasTest.java
Log: Added getInputEventListeners to PCanvas and PNode making them return an array of PInputEventListener objects. This makes it fall inline with the other listeners inherited from JComponent and it also makes listener methods testable. Modified: piccolo2d.java/trunk/core/src/main/java/edu/umd/cs/piccolo/PCanvas.java ============================================================================== --- piccolo2d.java/trunk/core/src/main/java/edu/umd/cs/piccolo/PCanvas.java (original) +++ piccolo2d.java/trunk/core/src/main/java/edu/umd/cs/piccolo/PCanvas.java Sun Jul 19 07:32:25 2009 @@ -688,4 +688,8 @@ public int getInteractingRenderQuality() { return interactingRenderQuality; } + + public PInputEventListener[] getInputEventListeners() { + return camera.getInputEventListeners(); + } } Modified: piccolo2d.java/trunk/core/src/main/java/edu/umd/cs/piccolo/PNode.java ============================================================================== --- piccolo2d.java/trunk/core/src/main/java/edu/umd/cs/piccolo/PNode.java (original) +++ piccolo2d.java/trunk/core/src/main/java/edu/umd/cs/piccolo/PNode.java Sun Jul 19 07:32:25 2009 @@ -59,6 +59,7 @@ import java.util.Collection; import java.util.Collections; import java.util.Enumeration; +import java.util.EventListener; import java.util.Iterator; import java.util.List; import java.util.ListIterator; @@ -3194,5 +3195,18 @@ } return result.toString(); + } + + public PInputEventListener[] getInputEventListeners() { + if (listenerList == null || listenerList.getListenerCount() == 0) + return new PInputEventListener[] {}; + + EventListener[] listeners = listenerList.getListeners(PInputEventListener.class); + + PInputEventListener[] result = new PInputEventListener[listeners.length]; + for (int i=0; i<listeners.length; i++) { + result[i] = (PInputEventListener) listeners[i]; + } + return result; } } Modified: piccolo2d.java/trunk/core/src/test/java/edu/umd/cs/piccolo/PCanvasTest.java ============================================================================== --- piccolo2d.java/trunk/core/src/test/java/edu/umd/cs/piccolo/PCanvasTest.java (original) +++ piccolo2d.java/trunk/core/src/test/java/edu/umd/cs/piccolo/PCanvasTest.java Sun Jul 19 07:32:25 2009 @@ -5,109 +5,137 @@ import javax.swing.JPanel; import junit.framework.TestCase; +import edu.umd.cs.piccolo.event.PInputEventListener; import edu.umd.cs.piccolo.util.PBounds; import edu.umd.cs.piccolo.util.PPaintContext; public class PCanvasTest extends TestCase { - private PCanvas canvas; - private int pCanvasFinalizerCount; - + private PCanvas canvas; + private int pCanvasFinalizerCount; + private MockPInputEventListener mockListener; + public void setUp() { pCanvasFinalizerCount = 0; - canvas = new PCanvas(); - } - - public void testDefaultPanHandlerIsNotNull() { - assertNotNull(canvas.getPanEventHandler()); - } - - public void testGetInteractingReturnsFalseByDefault() { - assertFalse(canvas.getInteracting()); - } - - public void testGetAnimatingReturnsFalseByDefault() { - assertFalse(canvas.getAnimating()); - } - - public void testSetInteractingPersists() { - canvas.setInteracting(true); - assertTrue(canvas.getInteracting()); - } - - public void testSetInteractingFiresChangeEvent() { - MockPropertyChangeListener mockListener = new MockPropertyChangeListener(); - canvas.addPropertyChangeListener(PCanvas.INTERATING_CHANGED_NOTIFICATION, mockListener); - canvas.setInteracting(true); - assertEquals(1, mockListener.getPropertyChangeCount()); - } - - public void testDefaultRenderQualityIsHigh() { - assertEquals(PPaintContext.HIGH_QUALITY_RENDERING, canvas.getDefaultRenderQuality()); - } - - public void testDefaultAnimatingRenderQualityIsLow() { - assertEquals(PPaintContext.LOW_QUALITY_RENDERING, canvas.getAnimatingRenderQuality()); - } - - public void testDefaultInteractingRenderQualityIsLow() { - assertEquals(PPaintContext.LOW_QUALITY_RENDERING, canvas.getInteractingRenderQuality()); - } - - public void testDefaultZoomHandlerIsNotNull() { - assertNotNull(canvas.getZoomEventHandler()); - } - - public void testCanvasLayerIsNotNullByDefault() { - assertNotNull(canvas.getLayer()); - } - - public void testCursorStackWorksAsExpected() { - Cursor moveCursor= Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR); - Cursor handCursor = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR); - Cursor crosshairCursor = Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR); - - canvas.pushCursor(moveCursor); - canvas.pushCursor(handCursor); - canvas.pushCursor(crosshairCursor); - - assertEquals(crosshairCursor, canvas.getCursor()); - canvas.popCursor(); - assertEquals(handCursor, canvas.getCursor()); - canvas.popCursor(); - assertEquals(moveCursor, canvas.getCursor()); - } - - public void testPoppingEmptyCursorStackShouldDoNothing() { - try { - canvas.popCursor(); - } catch (IndexOutOfBoundsException e) { - fail("Pop cursor shouldn't fail on an empty stack"); - } - assertEquals(Cursor.getDefaultCursor(), canvas.getCursor()); - } - - public void testSettingCanvasBoundsAffectsCameraBounds() { - canvas.setBounds(0, 0, 100, 100); - assertEquals(new PBounds(0, 0, 100, 100), canvas.getCamera().getBounds()); - } - - public void testMemoryLeak() throws InterruptedException { - JPanel panel = new JPanel(); - for (int i=0; i < 10; i++) { + canvas = new PCanvas(); + mockListener = new MockPInputEventListener(); + } + + public void testDefaultPanHandlerIsNotNull() { + assertNotNull(canvas.getPanEventHandler()); + } + + public void testGetInteractingReturnsFalseByDefault() { + assertFalse(canvas.getInteracting()); + } + + public void testDefaultNumberOfEventListenersIs2() { + PInputEventListener[] listeners = canvas.getInputEventListeners(); + assertNotNull(listeners); + assertEquals(2, listeners.length); + } + + public void testGetAnimatingReturnsFalseByDefault() { + assertFalse(canvas.getAnimating()); + } + + public void testSetInteractingPersists() { + canvas.setInteracting(true); + assertTrue(canvas.getInteracting()); + } + + public void testSetInteractingFiresChangeEvent() { + MockPropertyChangeListener mockListener = new MockPropertyChangeListener(); + canvas.addPropertyChangeListener(PCanvas.INTERATING_CHANGED_NOTIFICATION, mockListener); + canvas.setInteracting(true); + assertEquals(1, mockListener.getPropertyChangeCount()); + } + + public void testDefaultRenderQualityIsHigh() { + assertEquals(PPaintContext.HIGH_QUALITY_RENDERING, canvas.getDefaultRenderQuality()); + } + + public void testDefaultAnimatingRenderQualityIsLow() { + assertEquals(PPaintContext.LOW_QUALITY_RENDERING, canvas.getAnimatingRenderQuality()); + } + + public void testDefaultInteractingRenderQualityIsLow() { + assertEquals(PPaintContext.LOW_QUALITY_RENDERING, canvas.getInteractingRenderQuality()); + } + + public void testDefaultZoomHandlerIsNotNull() { + assertNotNull(canvas.getZoomEventHandler()); + } + + public void testCanvasLayerIsNotNullByDefault() { + assertNotNull(canvas.getLayer()); + } + + public void testCursorStackWorksAsExpected() { + Cursor moveCursor = Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR); + Cursor handCursor = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR); + Cursor crosshairCursor = Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR); + + canvas.pushCursor(moveCursor); + canvas.pushCursor(handCursor); + canvas.pushCursor(crosshairCursor); + + assertEquals(crosshairCursor, canvas.getCursor()); + canvas.popCursor(); + assertEquals(handCursor, canvas.getCursor()); + canvas.popCursor(); + assertEquals(moveCursor, canvas.getCursor()); + } + + public void testPoppingEmptyCursorStackShouldDoNothing() { + try { + canvas.popCursor(); + } + catch (IndexOutOfBoundsException e) { + fail("Pop cursor shouldn't fail on an empty stack"); + } + assertEquals(Cursor.getDefaultCursor(), canvas.getCursor()); + } + + public void testSettingCanvasBoundsAffectsCameraBounds() { + canvas.setBounds(0, 0, 100, 100); + assertEquals(new PBounds(0, 0, 100, 100), canvas.getCamera().getBounds()); + } + + public void testAddInputEventListenersIsHonoured() { + canvas.addInputEventListener(mockListener); + PInputEventListener[] listeners = canvas.getInputEventListeners(); + assertNotNull(listeners); + assertEquals(3, listeners.length); // 3 since pan and zoom are attached by default + } + + public void testRemoveInputEventListenersIsHonoured() { + canvas.addInputEventListener(mockListener); + canvas.removeInputEventListener(mockListener); + PInputEventListener[] listeners = canvas.getInputEventListeners(); + assertNotNull(listeners); + assertEquals(2, listeners.length); // 3 since pan and zoom are attached by default + } + + + public void testMemoryLeak() throws InterruptedException { + JPanel panel = new JPanel(); + for (int i = 0; i < 10; i++) { PCanvas canvas = new PCanvas() { public void finalize() { - pCanvasFinalizerCount ++; + pCanvasFinalizerCount++; } }; panel.add(canvas); - panel.remove(canvas); + panel.remove(canvas); canvas = null; } System.gc(); System.runFinalization(); - - // Not sure why I need -1 here, but I do. If I create 10000 it'll always be 1 less - //assertEquals(10-1, pCanvasFinalizerCount); + PCanvas.CURRENT_ZCANVAS = null; + + // Not sure why I need -1 here, but I do. If I create 10000 it'll always + // be 1 less + //assertEquals(10-1, pCanvasFinalizerCount); } - + } --~--~---------~--~----~------------~-------~--~----~ Piccolo2D Developers Group: http://groups.google.com/group/piccolo2d-dev?hl=en -~----------~----~----~----~------~----~------~--~---