Author: allain.lalonde
Date: Fri Jul 17 14:51:54 2009
New Revision: 493

Modified:
     
piccolo2d.java/trunk/core/src/main/java/edu/umd/cs/piccolo/event/PInputEventFilter.java
     
piccolo2d.java/trunk/core/src/test/java/edu/umd/cs/piccolo/event/PInputEventFilterTest.java

Log:
Fixed Issue 100; Plastered PInputEventFilter with Unit Tests and then made  
it consider the masks conditionally.

andMask if it's non-zero
notMask if it's non-zero
orMask if it's not ALL_MODIFIERS (I can't think of a case where you might  
want to say, "Only allow events as long as they have a modifier, I don't  
care which one")


Modified:  
piccolo2d.java/trunk/core/src/main/java/edu/umd/cs/piccolo/event/PInputEventFilter.java
==============================================================================
---  
piccolo2d.java/trunk/core/src/main/java/edu/umd/cs/piccolo/event/PInputEventFilter.java
  
(original)
+++  
piccolo2d.java/trunk/core/src/main/java/edu/umd/cs/piccolo/event/PInputEventFilter.java
  
Fri Jul 17 14:51:54 2009
@@ -101,85 +101,72 @@
              modifiers = aEvent.getModifiers();
          }

-        // TODO:  this really messes up the Eclipse formatter
-        if ((!aEvent.isHandled() || acceptsAlreadyHandledEvents) &&  
(modifiers == 0 || // if
-                                                                               
         
//  
no
-                                                                               
         
//  
modifiers
-                                                                               
         
//  
then
-                                                                               
         
//  
ignore
-                                                                               
         
//  
modifier
-                                                                               
         
//  
constraints
-                                                                               
         
// ,
-                                                                               
         
//  
ELSE
-                (modifiers & andMask) == andMask && // must have all  
modifiers
-                                                    // from the AND mask  
and
-                        (modifiers & orMask) != 0 && // must have at least  
one
-                                                     // modifier from the  
OR
-                                                     // mask and
-                        (modifiers & notMask) == 0)) { // can't have any
-                                                       // modifiers from  
the NOT
-                                                       // mask
-
-            if (aEvent.isMouseEvent() && clickCount != -1 && clickCount !=  
aEvent.getClickCount()) {
-                aResult = false;
-            }
-            else {
-                switch (type) {
-                    case KeyEvent.KEY_PRESSED:
-                        aResult = getAcceptsKeyPressed();
-                        break;
-
-                    case KeyEvent.KEY_RELEASED:
-                        aResult = getAcceptsKeyReleased();
-                        break;
-
-                    case KeyEvent.KEY_TYPED:
-                        aResult = getAcceptsKeyTyped();
-                        break;
-
-                    case MouseEvent.MOUSE_CLICKED:
-                        aResult = getAcceptsMouseClicked();
-                        break;
-
-                    case MouseEvent.MOUSE_DRAGGED:
-                        aResult = getAcceptsMouseDragged();
-                        break;
-
-                    case MouseEvent.MOUSE_ENTERED:
-                        aResult = getAcceptsMouseEntered();
-                        break;
-
-                    case MouseEvent.MOUSE_EXITED:
-                        aResult = getAcceptsMouseExited();
-                        break;
-
-                    case MouseEvent.MOUSE_MOVED:
-                        aResult = getAcceptsMouseMoved();
-                        break;
-
-                    case MouseEvent.MOUSE_PRESSED:
-                        aResult = getAcceptsMousePressed();
-                        break;
-
-                    case MouseEvent.MOUSE_RELEASED:
-                        aResult = getAcceptsMouseReleased();
-                        break;
-
-                    case MouseWheelEvent.WHEEL_UNIT_SCROLL:
-                    case MouseWheelEvent.WHEEL_BLOCK_SCROLL:
-                        aResult = getAcceptsMouseWheelRotated();
-                        break;
-
-                    case FocusEvent.FOCUS_GAINED:
-                    case FocusEvent.FOCUS_LOST:
-                        aResult = getAcceptsFocusEvents();
-                        break;
-
-                    default:
-                        throw new RuntimeException("PInputEvent with bad  
ID");
-                }
-            }
-        }
+        if (aEvent.isHandled() && !acceptsAlreadyHandledEvents)
+            return false;
+
+        if ((modifiers & andMask) != andMask || (modifiers & notMask) != 0)
+            return false;
+
+        if (orMask != ALL_MODIFIERS_MASK && (modifiers & orMask) == 0)
+            return false;
+
+        if (aEvent.isMouseEvent() && clickCount != -1 && clickCount !=  
aEvent.getClickCount())
+            return false;
+
+        switch (type) {
+            case KeyEvent.KEY_PRESSED:
+                aResult = getAcceptsKeyPressed();
+                break;
+
+            case KeyEvent.KEY_RELEASED:
+                aResult = getAcceptsKeyReleased();
+                break;
+
+            case KeyEvent.KEY_TYPED:
+                aResult = getAcceptsKeyTyped();
+                break;
+
+            case MouseEvent.MOUSE_CLICKED:
+                aResult = getAcceptsMouseClicked();
+                break;
+
+            case MouseEvent.MOUSE_DRAGGED:
+                aResult = getAcceptsMouseDragged();
+                break;
+
+            case MouseEvent.MOUSE_ENTERED:
+                aResult = getAcceptsMouseEntered();
+                break;
+
+            case MouseEvent.MOUSE_EXITED:
+                aResult = getAcceptsMouseExited();
+                break;
+
+            case MouseEvent.MOUSE_MOVED:
+                aResult = getAcceptsMouseMoved();
+                break;
+
+            case MouseEvent.MOUSE_PRESSED:
+                aResult = getAcceptsMousePressed();
+                break;
+
+            case MouseEvent.MOUSE_RELEASED:
+                aResult = getAcceptsMouseReleased();
+                break;
+
+            case MouseWheelEvent.WHEEL_UNIT_SCROLL:
+            case MouseWheelEvent.WHEEL_BLOCK_SCROLL:
+                aResult = getAcceptsMouseWheelRotated();
+                break;
+
+            case FocusEvent.FOCUS_GAINED:
+            case FocusEvent.FOCUS_LOST:
+                aResult = getAcceptsFocusEvents();
+                break;
+
+            default:
+                throw new RuntimeException("PInputEvent with bad ID");
+        }

          if (aResult && getMarksAcceptedEventsAsHandled()) {
              aEvent.setHandled(true);

Modified:  
piccolo2d.java/trunk/core/src/test/java/edu/umd/cs/piccolo/event/PInputEventFilterTest.java
==============================================================================
---  
piccolo2d.java/trunk/core/src/test/java/edu/umd/cs/piccolo/event/PInputEventFilterTest.java
      
(original)
+++  
piccolo2d.java/trunk/core/src/test/java/edu/umd/cs/piccolo/event/PInputEventFilterTest.java
      
Fri Jul 17 14:51:54 2009
@@ -1,6 +1,15 @@
  package edu.umd.cs.piccolo.event;

+import java.awt.Component;
+import java.awt.event.InputEvent;
+import java.awt.event.MouseEvent;
+
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+
  import junit.framework.TestCase;
+import edu.umd.cs.piccolo.PCamera;
+import edu.umd.cs.piccolo.PInputManager;

  public class PInputEventFilterTest extends TestCase {
      private PInputEventFilter filter;
@@ -8,19 +17,19 @@
      public void setUp() {
          filter = new PInputEventFilter();
      }
-
+
      public void testAcceptsAlreadyHandledEventsFalseByDefault() {
          assertFalse(filter.getAcceptsAlreadyHandledEvents());
      }
-
+
      public void testDoesNotMarkEventsHandledByDefault() {
          assertFalse(filter.getMarksAcceptedEventsAsHandled());
      }
-
-    public void testAcceptsEverythingByDefault() {
-        assertAcceptsAll();
+
+    public void testAcceptsEverythingByDefault() {
+        assertAcceptsAll();
      }
-
+
      public void testMaskDoesNotAffectReportedAccepts() {
          filter = new PInputEventFilter(0);
          assertAcceptsAll();
@@ -29,7 +38,7 @@
      private void assertAcceptsAll() {
          assertTrue(filter.getAcceptsFocusEvents());
          assertTrue(filter.getAcceptsKeyPressed());
-        assertTrue(filter.getAcceptsKeyReleased());
+        assertTrue(filter.getAcceptsKeyReleased());
          assertTrue(filter.getAcceptsKeyTyped());
          assertTrue(filter.getAcceptsMouseClicked());
          assertTrue(filter.getAcceptsMouseDragged());
@@ -40,13 +49,11 @@
          assertTrue(filter.getAcceptsMouseReleased());
          assertTrue(filter.getAcceptsMouseWheelRotated());
      }
-
-    public void testRejectsEverythingAfterCallingRejectAllEventTypes() {
+
+    public void testRejectsEverythingAfterCallingRejectAllEventTypes() {
          filter.rejectAllEventTypes();
-        assertRejectsAll();
+        assertRejectsAll();
      }
-
-

      private void assertRejectsAll() {
          assertFalse(filter.getAcceptsFocusEvents());
@@ -62,61 +69,157 @@
          assertFalse(filter.getAcceptsMouseReleased());
          assertFalse(filter.getAcceptsMouseWheelRotated());
      }
-

-
      public void testSetAcceptsFocusEventsPersists() {
          filter.setAcceptsFocusEvents(false);
          assertFalse(filter.getAcceptsFocusEvents());
      }
-
+
      public void testSetAcceptsKeyPressedPersists() {
          filter.setAcceptsKeyPressed(false);
          assertFalse(filter.getAcceptsKeyPressed());
      }
-
+
      public void testSetAcceptsKeyReleasedPersists() {
          filter.setAcceptsKeyReleased(false);
          assertFalse(filter.getAcceptsKeyReleased());
      }
-
+
      public void testSetAcceptsKeyTypedPersists() {
          filter.setAcceptsKeyTyped(false);
          assertFalse(filter.getAcceptsKeyTyped());
      }
-
+
      public void testSetAcceptsMouseClickedPersists() {
          filter.setAcceptsMouseClicked(false);
          assertFalse(filter.getAcceptsMouseClicked());
      }
-
+
      public void testSetAcceptsMouseEnteredPersists() {
          filter.setAcceptsMouseEntered(false);
          assertFalse(filter.getAcceptsMouseEntered());
      }
-
+
      public void testSetAcceptsMouseExitedPersists() {
          filter.setAcceptsMouseExited(false);
          assertFalse(filter.getAcceptsMouseExited());
      }
-
+
      public void testSetAcceptsMouseMovedPersists() {
          filter.setAcceptsMouseMoved(false);
          assertFalse(filter.getAcceptsMouseMoved());
      }

+    public void testSetAcceptsMouseDraggedPersists() {
+        filter.setAcceptsMouseDragged(false);
+        assertFalse(filter.getAcceptsMouseDragged());
+    }
+
      public void testSetAcceptsMouseMovedPressed() {
          filter.setAcceptsMousePressed(false);
          assertFalse(filter.getAcceptsMousePressed());
      }
-
+
      public void testSetAcceptsMouseMovedReleased() {
          filter.setAcceptsMouseReleased(false);
          assertFalse(filter.getAcceptsMouseReleased());
      }
-
+
      public void testSetAcceptsMouseWheelRotated() {
          filter.setAcceptsMouseWheelRotated(false);
          assertFalse(filter.getAcceptsMouseWheelRotated());
+    }
+
+    public void testAcceptsSimpleEvent() {
+        PInputEvent event = buildTestEvent();
+        assertAcceptsEvent(event);
+    }
+
+    public void testRejectsAcceptedEventIfAcceptsHandledEventsIsFalse() {
+        PInputEvent event = buildTestEvent();
+        event.setHandled(true);
+        filter.setAcceptsAlreadyHandledEvents(false);
+        assertRejectsEvent(event);
+    }
+
+    public void testRejectsEventsUnlessModifiersContainAllOfMask() {
+        PInputEvent event = buildTestEvent();
+        filter.setAndMask(InputEvent.CTRL_MASK | InputEvent.ALT_MASK);
+        assertRejectsEvent(event);
+        event = buildTestEvent(InputEvent.CTRL_MASK | InputEvent.ALT_MASK);
+        assertAcceptsEvent(event);
+
+        event = buildTestEvent(InputEvent.CTRL_MASK | InputEvent.ALT_MASK  
| InputEvent.META_MASK);
+        assertAcceptsEvent(event);
+    }
+
+    public void testRejectsEventsUnlessModifiersContainOneOfOrMask() {
+        PInputEvent event = buildTestEvent();
+        filter.setOrMask(InputEvent.CTRL_MASK | InputEvent.ALT_MASK);
+        assertRejectsEvent(event);
+        assertRejectsEvent(buildTestEvent(InputEvent.META_MASK));
+        assertAcceptsEvent(buildTestEvent(InputEvent.CTRL_MASK));
+        assertAcceptsEvent(buildTestEvent(InputEvent.ALT_MASK));
+        assertAcceptsEvent(buildTestEvent(InputEvent.CTRL_MASK |  
InputEvent.ALT_MASK));
+    }
+
+    public void testRejectsEventsUnlessTheyMatchOneOfNotMask() {
+        PInputEvent event = buildTestEvent();
+        filter.setNotMask(InputEvent.CTRL_MASK | InputEvent.ALT_MASK);
+        assertAcceptsEvent(event);
+
+        assertAcceptsEvent(buildTestEvent(InputEvent.META_MASK));
+        assertRejectsEvent(buildTestEvent(InputEvent.CTRL_MASK));
+        assertRejectsEvent(buildTestEvent(InputEvent.ALT_MASK));
+        assertRejectsEvent(buildTestEvent(InputEvent.CTRL_MASK |  
InputEvent.ALT_MASK));
+    }
+
+    public void testRejectsMouseEventsIfMouseClickFilterSet() {
+        filter.setAcceptClickCount((short)1);
+        assertRejectsEvent(buildTestEvent(0, 0));
+        assertAcceptsEvent(buildTestEvent(0, 1));
+        assertRejectsEvent(buildTestEvent(0, 2));
+        assertRejectsEvent(buildTestEvent(0, 3));
+    }
+
+    public void testMarksEventsAsHandledIsHonnored() {
+        filter.setMarksAcceptedEventsAsHandled(true);
+        PInputEvent event = buildTestEvent();
+        assertAcceptsEvent(event);
+        assertTrue(event.isHandled());
+    }
+
+    public void testRejectAllClickCountsIsHonoured() {
+        filter.rejectAllClickCounts();
+        assertRejectsEvent(buildTestEvent(0, 0));
+        assertRejectsEvent(buildTestEvent(0, 1));
+        assertRejectsEvent(buildTestEvent(0, 2));
+        assertRejectsEvent(buildTestEvent(0, 3));
+
+    }
+
+    private void assertRejectsEvent(PInputEvent event) {
+        assertFalse(filter.acceptsEvent(event, MouseEvent.MOUSE_CLICKED));
+    }
+
+    private void assertAcceptsEvent(PInputEvent event) {
+        assertTrue(filter.acceptsEvent(event, MouseEvent.MOUSE_CLICKED));
+    }
+
+    private PInputEvent buildTestEvent() {
+        return buildTestEvent(0);
+    }
+
+    private PInputEvent buildTestEvent(int modifiers) {
+        return buildTestEvent(modifiers, 0);
+    }
+
+    private PInputEvent buildTestEvent(int modifiers, int clickCount) {
+        JComponent component = new JPanel();
+        PInputManager inputManager = new PInputManager();
+        PCamera camera = new PCamera();
+
+        MouseEvent event = new MouseEvent(component, 1,  
System.currentTimeMillis(), modifiers, 1, 1, clickCount, false);
+        return new PInputEvent(inputManager, event, camera);
      }
  }

--~--~---------~--~----~------------~-------~--~----~
Piccolo2D Developers Group: http://groups.google.com/group/piccolo2d-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to