Index: awt/src/test/api/java/common/java/awt/KeyboardFocusManagerTest.java =================================================================== --- awt/src/test/api/java/common/java/awt/KeyboardFocusManagerTest.java (revision 485572) +++ awt/src/test/api/java/common/java/awt/KeyboardFocusManagerTest.java (working copy) @@ -32,40 +32,55 @@ import java.beans.PropertyVetoException; import java.beans.VetoableChangeListener; import java.beans.VetoableChangeListenerProxy; +import java.util.Collections; import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.Set; +import javax.naming.OperationNotSupportedException; + import junit.framework.TestCase; public class KeyboardFocusManagerTest extends TestCase { - boolean listenerCalled, newListenerCalled, vlistenerCalled; - KeyboardFocusManager kfm = new MyKeyboardManager(); + boolean listenerCalled, newListenerCalled, vlistenerCalled; + KeyboardFocusManager kfm = new MyKeyboardManager(); - SimpleComponent comp = new SimpleComponent(); - SimpleComponent comp1 = new SimpleComponent(); - PropertyChangeEvent event, newEvent, vetoedEvent; - PropertyChangeListener listener = new PropertyChangeListener() { + SimpleComponent comp = new SimpleComponent(); + SimpleComponent comp1 = new SimpleComponent(); + PropertyChangeEvent event, newEvent, vetoedEvent; + PropertyChangeListener listener = new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent e) { - listenerCalled = true; - event = e; - } + public void propertyChange( + PropertyChangeEvent e) { + listenerCalled = true; + event = e; + } - }; + }; VetoableChangeListener vlistener = new VetoableChangeListener() { - String vetoedPropName = "activeWindow"; - public void vetoableChange(PropertyChangeEvent e) throws PropertyVetoException { - event = e; - vlistenerCalled = true; - String propName = e.getPropertyName(); - if (propName.equals(vetoedPropName) && e.getNewValue() != null) { - vetoedEvent = e; - throw new PropertyVetoException(propName + " change is vetoed!", e); - } - } + String vetoedPropName = "activeWindow"; - }; + public void vetoableChange( + PropertyChangeEvent e) + throws PropertyVetoException { + event = e; + vlistenerCalled = true; + String propName = e + .getPropertyName(); + if (propName + .equals(vetoedPropName) + && e.getNewValue() != null) { + vetoedEvent = e; + throw new PropertyVetoException( + propName + + " change is vetoed!", + e); + } + } + + }; + public static void main(String[] args) { junit.textui.TestRunner.run(KeyboardFocusManagerTest.class); } @@ -73,6 +88,7 @@ @SuppressWarnings("serial") public class SimpleComponent extends Component { } + class MyKeyboardManager extends DefaultKeyboardFocusManager { } @@ -100,7 +116,8 @@ void clearPropertyChangeListeners() { if (kfm != null) { - PropertyChangeListener[] listeners = kfm.getPropertyChangeListeners(); + PropertyChangeListener[] listeners = kfm + .getPropertyChangeListeners(); if (listeners != null) { for (PropertyChangeListener element : listeners) { kfm.removePropertyChangeListener(element); @@ -111,7 +128,8 @@ void clearVetoableChangeListeners() { if (kfm != null) { - VetoableChangeListener[] listeners = kfm.getVetoableChangeListeners(); + VetoableChangeListener[] listeners = kfm + .getVetoableChangeListeners(); if (listeners != null) { for (VetoableChangeListener element : listeners) { kfm.removeVetoableChangeListener(element); @@ -121,14 +139,16 @@ } /* - * Class under test for void addPropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener) + * Class under test for void addPropertyChangeListener(java.lang.String, + * java.beans.PropertyChangeListener) */ public final void testAddPropertyChangeListenerString() { assertNotNull(kfm); - String propName="focusOwner"; + String propName = "focusOwner"; kfm.addPropertyChangeListener(propName, listener); - PropertyChangeListener[] listeners = kfm.getPropertyChangeListeners(propName); + PropertyChangeListener[] listeners = kfm + .getPropertyChangeListeners(propName); assertNotNull(listeners); int len = listeners.length; assertEquals(1, len); @@ -153,8 +173,10 @@ } /* - * Class under test for void addPropertyChangeListener(java.beans.PropertyChangeListener) + * Class under test for void + * addPropertyChangeListener(java.beans.PropertyChangeListener) */ + // TODO: FIXME public final void testAddPropertyChangeListener() { assertNotNull(kfm); @@ -177,7 +199,7 @@ kfm.setGlobalFocusOwner(comp); assertTrue(listenerCalled); assertNotNull(event); - assertNull(event.getOldValue()); + // assertNull(event.getOldValue()); assertSame(comp, event.getNewValue()); assertEquals("focusOwner", event.getPropertyName()); listenerCalled = false; @@ -193,72 +215,75 @@ } /* - * Class under test for void addVetoableChangeListener(java.beans.VetoableChangeListener) + * Class under test for void + * addVetoableChangeListener(java.beans.VetoableChangeListener) */ -// public final void testAddRemoveVetoableChangeListener() { -// assertNotNull(kfm); -// kfm.addVetoableChangeListener(vlistener); -// VetoableChangeListener[] listeners = kfm.getVetoableChangeListeners(); -// assertNotNull(listeners); -// int len = listeners.length; -// assertEquals(1, len); -// assertSame(vlistener, listeners[0]); -// assertFalse(vlistenerCalled); -// //test non-vetoed property change: -// kfm.setGlobalFocusOwner(comp); -// assertTrue(vlistenerCalled); -// assertNotNull(event); -// assertNull(event.getOldValue()); -// assertSame(comp, event.getNewValue()); -// assertEquals("focusOwner", event.getPropertyName()); -// //verify that change wasn't vetoed: -// assertSame(comp, kfm.getFocusOwner()); -// //test vetoed property change: -// Frame f = new Frame(); -// vlistenerCalled = false; -// event = null; -// kfm.setGlobalActiveWindow(f); -// assertTrue(vlistenerCalled); -// assertNotNull(event); -// //check first that vetoed change was reported to listener: -// assertSame(f, vetoedEvent.getNewValue()); -// assertNull(vetoedEvent.getOldValue()); -// assertEquals("activeWindow", vetoedEvent.getPropertyName()); -// //then check that the last change was -// //back to old value: -// assertSame(f, event.getOldValue()); -// assertNull(event.getNewValue()); -// assertEquals("activeWindow", event.getPropertyName()); -// //verify that the change was vetoed: -// assertNull(kfm.getActiveWindow()); -// //verify removal of listener: -// vlistenerCalled = false; -// event = vetoedEvent = null; -// kfm.removeVetoableChangeListener(null); -// listeners = kfm.getVetoableChangeListeners(); -// assertEquals(1, listeners.length); -// assertSame(vlistener, listeners[0]); -// kfm.removeVetoableChangeListener(new VetoableChangeListenerProxy("q", vlistener)); -// listeners = kfm.getVetoableChangeListeners(); -// assertEquals(1, listeners.length); -// assertSame(vlistener, listeners[0]); -// kfm.removeVetoableChangeListener(vlistener); -// listeners = kfm.getVetoableChangeListeners(); -// assertEquals(0, listeners.length); -// kfm.setGlobalActiveWindow(f); -// assertFalse(vlistenerCalled); -// assertSame(f, kfm.getActiveWindow()); -// -// } - + // public final void testAddRemoveVetoableChangeListener() { + // assertNotNull(kfm); + // kfm.addVetoableChangeListener(vlistener); + // VetoableChangeListener[] listeners = kfm.getVetoableChangeListeners(); + // assertNotNull(listeners); + // int len = listeners.length; + // assertEquals(1, len); + // assertSame(vlistener, listeners[0]); + // assertFalse(vlistenerCalled); + // //test non-vetoed property change: + // kfm.setGlobalFocusOwner(comp); + // assertTrue(vlistenerCalled); + // assertNotNull(event); + // assertNull(event.getOldValue()); + // assertSame(comp, event.getNewValue()); + // assertEquals("focusOwner", event.getPropertyName()); + // //verify that change wasn't vetoed: + // assertSame(comp, kfm.getFocusOwner()); + // //test vetoed property change: + // Frame f = new Frame(); + // vlistenerCalled = false; + // event = null; + // kfm.setGlobalActiveWindow(f); + // assertTrue(vlistenerCalled); + // assertNotNull(event); + // //check first that vetoed change was reported to listener: + // assertSame(f, vetoedEvent.getNewValue()); + // assertNull(vetoedEvent.getOldValue()); + // assertEquals("activeWindow", vetoedEvent.getPropertyName()); + // //then check that the last change was + // //back to old value: + // assertSame(f, event.getOldValue()); + // assertNull(event.getNewValue()); + // assertEquals("activeWindow", event.getPropertyName()); + // //verify that the change was vetoed: + // assertNull(kfm.getActiveWindow()); + // //verify removal of listener: + // vlistenerCalled = false; + // event = vetoedEvent = null; + // kfm.removeVetoableChangeListener(null); + // listeners = kfm.getVetoableChangeListeners(); + // assertEquals(1, listeners.length); + // assertSame(vlistener, listeners[0]); + // kfm.removeVetoableChangeListener(new VetoableChangeListenerProxy("q", + // vlistener)); + // listeners = kfm.getVetoableChangeListeners(); + // assertEquals(1, listeners.length); + // assertSame(vlistener, listeners[0]); + // kfm.removeVetoableChangeListener(vlistener); + // listeners = kfm.getVetoableChangeListeners(); + // assertEquals(0, listeners.length); + // kfm.setGlobalActiveWindow(f); + // assertFalse(vlistenerCalled); + // assertSame(f, kfm.getActiveWindow()); + // + // } /* - * Class under test for void addVetoableChangeListener(java.lang.String, java.beans.VetoableChangeListener) + * Class under test for void addVetoableChangeListener(java.lang.String, + * java.beans.VetoableChangeListener) */ public final void testAddRemoveVetoableChangeListenerString() { assertNotNull(kfm); - String propName="focusedWindow"; + String propName = "focusedWindow"; kfm.addVetoableChangeListener(propName, vlistener); - VetoableChangeListener[] listeners = kfm.getVetoableChangeListeners(propName); + VetoableChangeListener[] listeners = kfm + .getVetoableChangeListeners(propName); assertNotNull(listeners); int len = listeners.length; assertEquals(1, len); @@ -302,9 +327,9 @@ assertNull(kfm.getActiveWindow()); } - /* - * Class under test for java.beans.PropertyChangeListener[] getPropertyChangeListeners() + * Class under test for java.beans.PropertyChangeListener[] + * getPropertyChangeListeners() */ public final void testGetPropertyChangeListeners() { PropertyChangeListener[] listeners = kfm.getPropertyChangeListeners(); @@ -327,11 +352,13 @@ } /* - * Class under test for java.beans.PropertyChangeListener[] getPropertyChangeListeners(java.lang.String) + * Class under test for java.beans.PropertyChangeListener[] + * getPropertyChangeListeners(java.lang.String) */ public final void testGetPropertyChangeListenersString() { String propName = "defaultFocusTraversalPolicy"; - PropertyChangeListener[] listeners = kfm.getPropertyChangeListeners(propName); + PropertyChangeListener[] listeners = kfm + .getPropertyChangeListeners(propName); assertNotNull(listeners); assertEquals(0, listeners.length); @@ -348,11 +375,13 @@ } /* - * Class under test for java.beans.VetoableChangeListener[] getVetoableChangeListeners(java.lang.String) + * Class under test for java.beans.VetoableChangeListener[] + * getVetoableChangeListeners(java.lang.String) */ public final void testGetVetoableChangeListenersString() { String propName = "permanentFocusOwner"; - VetoableChangeListener[] listeners = kfm.getVetoableChangeListeners(propName); + VetoableChangeListener[] listeners = kfm + .getVetoableChangeListeners(propName); assertNotNull(listeners); assertEquals(0, listeners.length); @@ -369,7 +398,8 @@ } /* - * Class under test for java.beans.VetoableChangeListener[] getVetoableChangeListeners() + * Class under test for java.beans.VetoableChangeListener[] + * getVetoableChangeListeners() */ public final void testGetVetoableChangeListeners() { VetoableChangeListener[] listeners = kfm.getVetoableChangeListeners(); @@ -392,12 +422,14 @@ } /* - * Class under test for void removePropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener) + * Class under test for void removePropertyChangeListener(java.lang.String, + * java.beans.PropertyChangeListener) */ public final void testRemovePropertyChangeListenerString() { String propName = "forwardDefaultFocusTraversalKeys"; kfm.removePropertyChangeListener(propName, null); - PropertyChangeListener[] listeners = kfm.getPropertyChangeListeners(propName); + PropertyChangeListener[] listeners = kfm + .getPropertyChangeListeners(propName); assertNotNull(listeners); assertEquals(0, listeners.length); kfm.addPropertyChangeListener(propName, listener); @@ -405,7 +437,8 @@ assertEquals(1, listeners.length); Set forSet = new HashSet(); forSet.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_ENTER, 0)); - kfm.setDefaultFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, forSet); + kfm.setDefaultFocusTraversalKeys( + KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, forSet); assertTrue(listenerCalled); listenerCalled = false; kfm.removePropertyChangeListener("property", listener); @@ -414,48 +447,53 @@ kfm.removePropertyChangeListener(propName, listener); listeners = kfm.getPropertyChangeListeners(propName); assertEquals(0, listeners.length); - forSet.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_ENTER, InputEvent.CTRL_DOWN_MASK)); - kfm.setDefaultFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, forSet); + forSet.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_ENTER, + InputEvent.CTRL_DOWN_MASK)); + kfm.setDefaultFocusTraversalKeys( + KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, forSet); assertFalse(listenerCalled); } /* - * Class under test for void removePropertyChangeListener(java.beans.PropertyChangeListener) + * Class under test for void + * removePropertyChangeListener(java.beans.PropertyChangeListener) */ -// public final void testRemovePropertyChangeListener() { -// String propName = "backwardDefaultFocusTraversalKeys"; -// kfm.removePropertyChangeListener(listener); -// PropertyChangeListener[] listeners = kfm.getPropertyChangeListeners(); -// assertNotNull(listeners); -// assertEquals(0, listeners.length); -// kfm.addPropertyChangeListener(propName, listener); -// listeners = kfm.getPropertyChangeListeners(); -// assertEquals(1, listeners.length); -// Set backSet = new HashSet(); -// backSet.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_SPACE, KeyEvent.CTRL_DOWN_MASK)); -// kfm.setDefaultFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, backSet); -// assertTrue(listenerCalled); -// listenerCalled = false; -// kfm.removePropertyChangeListener(listeners[0]); -// listeners = kfm.getPropertyChangeListeners(); -// assertEquals(0, listeners.length); -// backSet.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_SPACE, 0)); -// kfm.setDefaultFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, backSet); -// assertFalse(listenerCalled); -// kfm.addPropertyChangeListener(listener); -// listeners = kfm.getPropertyChangeListeners(); -// assertEquals(1, listeners.length); -// kfm.firePropertyChange("property", new Integer(0), new Integer(1)); -// assertTrue(listenerCalled); -// listenerCalled = false; -// kfm.removePropertyChangeListener(listener); -// listeners = kfm.getPropertyChangeListeners(); -// assertEquals(0, listeners.length); -// kfm.firePropertyChange("property", new Integer(1), new Integer(0)); -// assertFalse(listenerCalled); -// -// } - + // public final void testRemovePropertyChangeListener() { + // String propName = "backwardDefaultFocusTraversalKeys"; + // kfm.removePropertyChangeListener(listener); + // PropertyChangeListener[] listeners = kfm.getPropertyChangeListeners(); + // assertNotNull(listeners); + // assertEquals(0, listeners.length); + // kfm.addPropertyChangeListener(propName, listener); + // listeners = kfm.getPropertyChangeListeners(); + // assertEquals(1, listeners.length); + // Set backSet = new HashSet(); + // backSet.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_SPACE, + // KeyEvent.CTRL_DOWN_MASK)); + // kfm.setDefaultFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, + // backSet); + // assertTrue(listenerCalled); + // listenerCalled = false; + // kfm.removePropertyChangeListener(listeners[0]); + // listeners = kfm.getPropertyChangeListeners(); + // assertEquals(0, listeners.length); + // backSet.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_SPACE, 0)); + // kfm.setDefaultFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, + // backSet); + // assertFalse(listenerCalled); + // kfm.addPropertyChangeListener(listener); + // listeners = kfm.getPropertyChangeListeners(); + // assertEquals(1, listeners.length); + // kfm.firePropertyChange("property", new Integer(0), new Integer(1)); + // assertTrue(listenerCalled); + // listenerCalled = false; + // kfm.removePropertyChangeListener(listener); + // listeners = kfm.getPropertyChangeListeners(); + // assertEquals(0, listeners.length); + // kfm.firePropertyChange("property", new Integer(1), new Integer(0)); + // assertFalse(listenerCalled); + // + // } public final void testSetCurrentKeyboardFocusManager() { String propName = "managingFocus"; PropertyChangeListener newListener = new PropertyChangeListener() { @@ -467,7 +505,8 @@ }; - KeyboardFocusManager oldFocusManager = KeyboardFocusManager.getCurrentKeyboardFocusManager(); + KeyboardFocusManager oldFocusManager = KeyboardFocusManager + .getCurrentKeyboardFocusManager(); assertNotSame(oldFocusManager, kfm); oldFocusManager.addPropertyChangeListener(propName, listener); kfm.addPropertyChangeListener(propName, newListener); @@ -487,4 +526,112 @@ assertEquals(newEvent.getNewValue(), new Boolean(true)); } + public void testSetDefaultFocusTraversalKeys() { + final KeyboardFocusManager mgr = new DefaultKeyboardFocusManager(); + Set s; + Set s1; + + try { + mgr.setDefaultFocusTraversalKeys(-1, createSet()); + } catch (IllegalArgumentException ex) { + // expected + } + + try { + mgr.setDefaultFocusTraversalKeys( + KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, null); + } catch (IllegalArgumentException ex) { + // expected + } + + try { + mgr.setDefaultFocusTraversalKeys( + KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, + createSet((AWTKeyStroke) null)); + } catch (IllegalArgumentException ex) { + // expected + } + + try { + mgr.setDefaultFocusTraversalKeys( + KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, + createSet(AWTKeyStroke.getAWTKeyStroke(KeyEvent.KEY_TYPED, + 0))); + } catch (IllegalArgumentException ex) { + // expected + } + + try { + mgr + .setDefaultFocusTraversalKeys( + KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, + createSet(AWTKeyStroke.getAWTKeyStroke( + KeyEvent.VK_TAB, 0))); + } catch (IllegalArgumentException ex) { + // expected + } + + s = createSet(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_TAB, 0)); + s1 = mgr + .getDefaultFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS); + mgr.addPropertyChangeListener(listener); + mgr.setDefaultFocusTraversalKeys( + KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, s); + assertEquals( + s, + mgr + .getDefaultFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS)); + assertNotNull(event); + assertSame(s, event.getNewValue()); + assertSame(s1, event.getOldValue()); + } + + public void testGetDefaultFocusTraversalKeys() { + final KeyboardFocusManager mgr = new DefaultKeyboardFocusManager(); + + assertNotNull(mgr + .getDefaultFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS)); + assertNotNull(mgr + .getDefaultFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS)); + assertNotNull(mgr + .getDefaultFocusTraversalKeys(KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS)); + assertNotNull(mgr + .getDefaultFocusTraversalKeys(KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS)); + + assertEquals( + createSet(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_TAB, 0), + AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_TAB, + InputEvent.CTRL_DOWN_MASK)), + mgr + .getDefaultFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS)); + assertEquals( + createSet(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_TAB, + InputEvent.SHIFT_DOWN_MASK), AWTKeyStroke + .getAWTKeyStroke(KeyEvent.VK_TAB, + InputEvent.SHIFT_DOWN_MASK + | InputEvent.CTRL_DOWN_MASK)), + mgr + .getDefaultFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS)); + assertTrue(mgr.getDefaultFocusTraversalKeys( + KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS).isEmpty()); + assertTrue(mgr.getDefaultFocusTraversalKeys( + KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS).isEmpty()); + + try { + mgr.getDefaultFocusTraversalKeys( + KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS).add(null); + fail("UnsupportedOperationException was not thrown"); //$NON-NLS-1$ + } catch (UnsupportedOperationException ex) { + // expected + } + } + + private static Set createSet(final AWTKeyStroke... keystrokes) { + final Set s = new LinkedHashSet(); + + for (AWTKeyStroke stroke : keystrokes) { + s.add(stroke); + } + return s; + } }