1 19 20 package org.openide.windows; 21 22 import java.util.ArrayList ; 23 import java.util.Collections ; 24 import javax.swing.ActionMap ; 25 import org.netbeans.junit.NbTestCase; 26 import org.openide.nodes.Node; 27 import org.openide.util.Lookup; 28 import org.openide.util.lookup.AbstractLookup; 29 import org.openide.util.lookup.InstanceContent; 30 31 36 public class GlobalContextImplTest extends NbTestCase 37 implements org.openide.util.LookupListener { 38 39 private javax.swing.Action sampleAction = new javax.swing.AbstractAction () { 40 public void actionPerformed (java.awt.event.ActionEvent ev) { 41 } 42 }; 43 private TopComponent tc; 44 private Lookup lookup; 45 private Lookup.Result result; 46 private int cnt; 47 48 49 public GlobalContextImplTest(java.lang.String testName) { 50 super(testName); 51 } 52 53 protected void setUp () throws Exception { 54 tc = new TopComponent (); 55 tc.getActionMap ().put (this, sampleAction); 56 tc.requestActive(); 57 58 59 Lookup global = Lookup.getDefault(); 60 61 Object p = global.lookup (org.openide.util.ContextGlobalProvider.class); 62 assertNotNull ("There is one", p); 63 assertEquals ("Action context provider is our as well", org.netbeans.modules.openide.windows.GlobalActionContextImpl.class, p.getClass ()); 64 65 66 lookup = org.openide.util.Utilities.actionsGlobalContext(); 67 result = lookup.lookup (new Lookup.Template<Node> (Node.class)); 68 result.addLookupListener (this); 69 result.allItems(); 70 } 71 72 private void assertActionMap () { 73 ActionMap map = (ActionMap )lookup.lookup (ActionMap .class); 74 assertNotNull ("Map has to be there", map); 75 76 javax.swing.Action action = map.get (this); 77 assertEquals ("It is really our action", sampleAction, action); 78 } 79 80 81 public void testCurrentNodes () throws Exception { 82 tc.setActivatedNodes(new Node[] {Node.EMPTY}); 83 84 assertEquals ("This fires change", 1, cnt); 85 86 assertEquals ("One item in result", 1, result.allItems ().size ()); 87 Lookup.Item item = (Lookup.Item)result.allItems ().iterator ().next (); 88 assertEquals ("Item should return Node.EMPTY", Node.EMPTY, item.getInstance()); 89 assertActionMap (); 90 91 tc.setActivatedNodes (null); 92 assertEquals ("One change", 2, cnt); 93 94 assertEquals ("One empty item in result", 1, result.allItems ().size ()); 95 item = (Lookup.Item)result.allItems ().iterator ().next (); 96 assertEquals ("Item should return null", null, item.getInstance()); 97 assertEquals ("Name is null", "none", item.getId ()); 98 assertActionMap (); 99 100 tc.setActivatedNodes (new Node[0]); 101 assertEquals ("No change", 3, cnt); 102 103 assertEquals ("No items in lookup", 0, result.allItems ().size ()); 104 assertActionMap (); 105 } 106 107 public void testRequestVisibleBlinksTheActionMapForAWhile () throws Exception { 108 final org.openide.nodes.Node n = new org.openide.nodes.AbstractNode (org.openide.nodes.Children.LEAF); 109 tc.setActivatedNodes(new Node[] { n }); 110 111 assertActionMap (); 112 final Lookup.Result<ActionMap > res = lookup.lookup (new Lookup.Template<ActionMap > (ActionMap .class)); 113 assertEquals ("One action map", 1, res.allItems ().size ()); 114 115 class L implements org.openide.util.LookupListener { 116 ArrayList <ActionMap > maps = new ArrayList <ActionMap > (); 117 118 public void resultChanged (org.openide.util.LookupEvent ev) { 119 assertEquals ("Still only one", 1, res.allItems ().size ()); 120 Lookup.Item<ActionMap > i = res.allItems ().iterator ().next (); 121 assertNotNull (i); 122 123 maps.add (i.getInstance ()); 124 125 assertNode (); 126 } 127 128 public void assertNode () { 129 assertEquals ("The node is available", n, lookup.lookup (Node.class)); 130 } 131 } 132 L myListener = new L (); 133 myListener.assertNode (); 134 135 res.addLookupListener (myListener); 136 137 TopComponent my = new TopComponent (); 138 my.requestVisible (); 139 140 if (myListener.maps.size () != 2) { 141 fail ("Expected two changes in the ActionMaps: " + myListener.maps); 142 } 143 144 myListener.assertNode (); 145 146 ActionMap m1 = (ActionMap )myListener.maps.get (0); 147 ActionMap m2 = (ActionMap )myListener.maps.get (1); 148 149 assertNull ("Our action is not in first map", m1.get (this)); 150 assertEquals ("Our action is in second map", sampleAction, m2.get (this)); 151 152 assertActionMap (); 153 154 res.removeLookupListener(myListener); 155 156 } 157 158 public void testComponentChangeActionMapIsPropagatedToGlobalLookup() throws Exception { 159 assertEquals("test1", 0, cnt); 160 161 162 InstanceContent ic = new InstanceContent(); 163 AbstractLookup al = new AbstractLookup(ic); 164 tc = new TopComponent (al); 165 166 assertEquals("test2", 0, cnt); 167 168 169 ActionMap myMap = new ActionMap (); 170 myMap.put (this, sampleAction); 171 assertEquals("test3", 0, cnt); 172 173 tc.requestActive(); 174 175 assertEquals("test4", 1, cnt); 176 177 result = lookup.lookup (new Lookup.Template<ActionMap > (ActionMap .class)); 178 result.addLookupListener (this); 179 result.allItems(); 180 181 assertEquals("test5", 1, cnt); 182 183 ic.set(Collections.singleton(new ActionMap ()), null); 184 185 assertEquals("One change in ActiomMap delivered", 2, cnt); 186 } 187 188 189 public void resultChanged(org.openide.util.LookupEvent ev) { 190 cnt++; 191 } 192 193 } 194 | Popular Tags |