1 7 22 23 package de.schlichtherle.swing; 24 25 import de.schlichtherle.swing.event.PanelEvent; 26 import de.schlichtherle.swing.event.PanelListener; 27 28 import java.awt.Component ; 29 import java.awt.EventQueue ; 30 import java.awt.Toolkit ; 31 import java.awt.Window ; 32 import java.lang.reflect.InvocationTargetException ; 33 import java.util.EventListener ; 34 35 import javax.swing.JFrame ; 36 import javax.swing.JLabel ; 37 import javax.swing.JOptionPane ; 38 39 import junit.framework.*; 40 import org.netbeans.jemmy.JemmyProperties; 41 import org.netbeans.jemmy.TestOut; 42 43 import org.netbeans.jemmy.operators.JButtonOperator; 44 import org.netbeans.jemmy.operators.JDialogOperator; 45 46 51 public class EnhancedPanelTest extends TestCase { 52 static { 53 JemmyProperties.setCurrentOutput(TestOut.getNullOutput()); } 55 56 private EnhancedPanel instance; 57 58 public EnhancedPanelTest(String testName) { 59 super(testName); 60 } 61 62 protected void setUp() throws Exception { 63 instance = new EnhancedPanel(); 64 instance.add(new JLabel ("Hello world!")); 65 } 66 67 protected void tearDown() throws Exception { 68 } 69 70 public static Test suite() { 71 TestSuite suite = new TestSuite(EnhancedPanelTest.class); 72 74 75 return suite; 76 } 77 78 81 public void testGetAncestorWindow() throws Exception { 82 assertNull(new EnhancedPanel().getAncestorWindow()); 83 84 JFrame frame = showInNewFrame(instance); 85 Window window1 = instance.getAncestorWindow(); 86 assertSame(frame, window1); 87 disposeFrame(frame); 88 89 frame = showInNewFrame(instance); Window window2 = instance.getAncestorWindow(); 91 assertSame(frame, window2); 92 disposeFrame(frame); 93 94 assertNotSame(window1, window2); 95 } 96 97 private static JFrame showInNewFrame(final Component instance) 98 throws InterruptedException , InvocationTargetException { 99 final JFrame frame = new JFrame (); 100 invokeAndWait(new Runnable () { 101 public void run() { 102 frame.getContentPane().add(instance); 103 frame.pack(); 104 frame.setLocationRelativeTo(null); 105 frame.setVisible(true); 106 } 107 }); 108 return frame; 109 } 110 111 private static void disposeFrame(final JFrame frame) 112 throws InterruptedException , InvocationTargetException { 113 invokeAndWait(new Runnable () { 114 public void run() { 115 frame.setVisible(false); 116 frame.dispose(); 117 } 118 }); 119 } 120 121 124 public void testPanelListeners1() { 125 PanelListener listener; 126 EventListener [] listeners; 127 128 listeners = instance.getPanelListeners(); 129 assertEquals(0, listeners.length); 130 131 listener = null; 132 133 try { 134 instance.addPanelListener(listener); 135 fail("Previous method call should throw an NPE!"); 136 } catch (NullPointerException expected) { 137 } 138 listeners = instance.getPanelListeners(); 139 assertEquals(0, listeners.length); 140 141 try { 142 instance.removePanelListener(listener); 143 fail("Previous method call should throw an NPE!"); 144 } catch (NullPointerException expected) { 145 } 146 listeners = instance.getPanelListeners(); 147 assertEquals(0, listeners.length); 148 149 listener = new CountingPanelListener(); 150 151 instance.addPanelListener(listener); 152 listeners = instance.getPanelListeners(); 153 assertEquals(1, listeners.length); 154 assertSame(listener, listeners[0]); 155 156 instance.addPanelListener(listener); 157 listeners = instance.getPanelListeners(); 158 assertEquals(2, listeners.length); 159 assertSame(listener, listeners[0]); 160 assertSame(listener, listeners[1]); 161 162 instance.removePanelListener(listener); 163 listeners = instance.getPanelListeners(); 164 assertEquals(1, listeners.length); 165 assertSame(listener, listeners[0]); 166 167 instance.removePanelListener(listener); 168 listeners = instance.getPanelListeners(); 169 assertEquals(0, listeners.length); 170 } 171 172 private static class CountingPanelListener implements PanelListener { 173 public int shown, hidden; 174 175 public void ancestorWindowShown(PanelEvent evt) { 176 shown++; 177 } 178 179 public void ancestorWindowHidden(PanelEvent evt) { 180 hidden++; 181 } 182 } 183 184 187 public void testPanelListeners2() { 188 PanelListener listener; 189 EventListener [] listeners; 190 191 listeners = instance.getListeners(PanelListener.class); 192 assertEquals(0, listeners.length); 193 194 listener = null; 195 196 try { 197 instance.addPanelListener(listener); 198 fail("Previous method call should throw an NPE!"); 199 } catch (NullPointerException expected) { 200 } 201 listeners = instance.getListeners(PanelListener.class); 202 assertEquals(0, listeners.length); 203 204 try { 205 instance.removePanelListener(listener); 206 fail("Previous method call should throw an NPE!"); 207 } catch (NullPointerException expected) { 208 } 209 listeners = instance.getListeners(PanelListener.class); 210 assertEquals(0, listeners.length); 211 212 listener = new CountingPanelListener(); 213 214 instance.addPanelListener(listener); 215 listeners = instance.getListeners(PanelListener.class); 216 assertEquals(1, listeners.length); 217 assertSame(listener, listeners[0]); 218 219 instance.addPanelListener(listener); 220 listeners = instance.getListeners(PanelListener.class); 221 assertEquals(2, listeners.length); 222 assertSame(listener, listeners[0]); 223 assertSame(listener, listeners[1]); 224 225 instance.removePanelListener(listener); 226 listeners = instance.getListeners(PanelListener.class); 227 assertEquals(1, listeners.length); 228 assertSame(listener, listeners[0]); 229 230 instance.removePanelListener(listener); 231 listeners = instance.getListeners(PanelListener.class); 232 assertEquals(0, listeners.length); 233 } 234 235 238 public void testFireAncestorWindowShown() { 239 final CountingPanelListener l = new CountingPanelListener(); 240 instance.addPanelListener(l); 241 instance.addPanelListener(l); assertEquals(0, l.shown); 243 244 PanelEvent event = null; 245 instance.fireAncestorWindowShown(event); 246 assertEquals(2, l.shown); 247 } 248 249 252 public void testFireAncestorWindowHidden() { 253 final CountingPanelListener l = new CountingPanelListener(); 254 instance.addPanelListener(l); 255 instance.addPanelListener(l); assertEquals(0, l.hidden); 257 258 PanelEvent event = null; 259 instance.fireAncestorWindowHidden(event); 260 assertEquals(2, l.hidden); 261 } 262 263 269 public void testEvents4JFrame() throws Exception { 270 final CountingPanelListener l = new CountingPanelListener(); 271 instance.addPanelListener(l); 272 273 class FrameHolder { 274 protected final JFrame frame; 275 276 protected FrameHolder(JFrame frame) { 277 this.frame = frame; 278 } 279 } 280 class SetupFrame extends FrameHolder implements Runnable { 281 SetupFrame(JFrame frame) { 282 super(frame); 283 } 284 285 public void run() { 286 frame.getContentPane().add(instance); 287 frame.pack(); 288 frame.setLocationRelativeTo(null); 289 } 290 } 291 class MakeFrameVisible extends FrameHolder implements Runnable { 292 MakeFrameVisible(JFrame frame) { 293 super(frame); 294 } 295 296 public void run() { 297 frame.show(); 303 frame.setVisible(true); 304 } 305 } 306 class MakeFrameInvisible extends FrameHolder implements Runnable { 307 MakeFrameInvisible(JFrame frame) { 308 super(frame); 309 } 310 311 public void run() { 312 frame.setVisible(false); 318 frame.hide(); 319 frame.dispose(); 320 } 321 } 322 323 final JFrame frame1 = new JFrame (); 325 invokeAndWait(new SetupFrame(frame1)); 326 testEvents(new MakeFrameVisible(frame1), new MakeFrameInvisible(frame1), l); 327 328 final JFrame frame2 = new JFrame (); 330 invokeAndWait(new SetupFrame(frame2)); 331 testEvents(new MakeFrameVisible(frame2), new MakeFrameInvisible(frame2), l); 332 } 333 334 private void testEvents( 335 final Runnable makeVisible, 336 final Runnable makeInvisible, 337 final CountingPanelListener l) 338 throws Exception { 339 l.shown = l.hidden = 0; 341 for (int i = 1; i <= 3; i++) { 342 invokeAndWait(makeVisible); 343 assertEquals(i, l.shown); 344 assertEquals(i - 1, l.hidden); 345 346 invokeAndWait(makeInvisible); 347 assertEquals(i, l.shown); 348 assertEquals(i, l.hidden); 349 } 350 } 351 352 358 private static void invokeAndWait(final Runnable runnable) 359 throws InterruptedException , InvocationTargetException { 360 EventQueue.invokeAndWait(runnable); 362 waitEmptyQueue(); 363 } 364 365 private static void waitEmptyQueue() throws AssertionError { 366 final EventQueue queue = Toolkit.getDefaultToolkit().getSystemEventQueue(); 368 while (queue.peekEvent() != null) { 369 try { 370 EventQueue.invokeAndWait(new Runnable () { 371 public void run() { 372 } 373 }); 374 } catch (InvocationTargetException cannotHappen) { 375 throw new AssertionError (cannotHappen); 376 } catch (InterruptedException continueAnyway) { 377 continueAnyway.printStackTrace(); 378 } 379 } 380 } 381 382 386 public void testEvents4JOptionPane() throws Exception { 387 final CountingPanelListener l = new CountingPanelListener(); 388 instance.addPanelListener(l); 389 390 final Runnable makeVisible = new Runnable () { 391 public void run() { 392 JOptionPane.showMessageDialog(null, instance); 393 } 394 }; 395 396 for (int i = 1; i <= 3; i++) { 397 EventQueue.invokeLater(makeVisible); 398 JDialogOperator dialogOp = new JDialogOperator(); waitEmptyQueue(); assertEquals(i, l.shown); 401 assertEquals(i - 1, l.hidden); 402 403 JButtonOperator buttonOp = new JButtonOperator(dialogOp); 404 buttonOp.push(); 405 waitEmptyQueue(); assertEquals(i, l.shown); 407 assertEquals(i, l.hidden); 408 } 409 } 410 } 411 | Popular Tags |