KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > de > schlichtherle > swing > EnhancedPanelTest


1 /*
2  * EnhancedPanelTest.java
3  * JUnit based test
4  *
5  * Created on 29. Juni 2006, 14:35
6  */

7 /*
8  * Copyright 2006 Schlichtherle IT Services
9  *
10  * Licensed under the Apache License, Version 2.0 (the "License");
11  * you may not use this file except in compliance with the License.
12  * You may obtain a copy of the License at
13  *
14  * http://www.apache.org/licenses/LICENSE-2.0
15  *
16  * Unless required by applicable law or agreed to in writing, software
17  * distributed under the License is distributed on an "AS IS" BASIS,
18  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19  * See the License for the specific language governing permissions and
20  * limitations under the License.
21  */

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 JavaDoc;
29 import java.awt.EventQueue JavaDoc;
30 import java.awt.Toolkit JavaDoc;
31 import java.awt.Window JavaDoc;
32 import java.lang.reflect.InvocationTargetException JavaDoc;
33 import java.util.EventListener JavaDoc;
34
35 import javax.swing.JFrame JavaDoc;
36 import javax.swing.JLabel JavaDoc;
37 import javax.swing.JOptionPane JavaDoc;
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 /**
47  * @author Christian Schlichtherle
48  * @version @version@
49  * @since TrueZIP 6.1
50  */

51 public class EnhancedPanelTest extends TestCase {
52     static {
53         JemmyProperties.setCurrentOutput(TestOut.getNullOutput()); // shut up!
54
}
55
56     private EnhancedPanel instance;
57
58     public EnhancedPanelTest(String JavaDoc testName) {
59         super(testName);
60     }
61
62     protected void setUp() throws Exception JavaDoc {
63         instance = new EnhancedPanel();
64         instance.add(new JLabel JavaDoc("Hello world!"));
65     }
66
67     protected void tearDown() throws Exception JavaDoc {
68     }
69
70     public static Test suite() {
71         TestSuite suite = new TestSuite(EnhancedPanelTest.class);
72         /*TestSuite suite = new TestSuite();
73         suite.addTest(new EnhancedPanelTest("testEvents4JOptionPane"));*/

74         
75         return suite;
76     }
77
78     /**
79      * Test of getAncestorWindow method, of class de.schlichtherle.swing.EnhancedPanel.
80      */

81     public void testGetAncestorWindow() throws Exception JavaDoc {
82         assertNull(new EnhancedPanel().getAncestorWindow());
83
84         JFrame JavaDoc frame = showInNewFrame(instance);
85         Window JavaDoc window1 = instance.getAncestorWindow();
86         assertSame(frame, window1);
87         disposeFrame(frame);
88
89         frame = showInNewFrame(instance); // change enclosing frame
90
Window JavaDoc window2 = instance.getAncestorWindow();
91         assertSame(frame, window2);
92         disposeFrame(frame);
93
94         assertNotSame(window1, window2);
95     }
96
97     private static JFrame JavaDoc showInNewFrame(final Component JavaDoc instance)
98     throws InterruptedException JavaDoc, InvocationTargetException JavaDoc {
99         final JFrame JavaDoc frame = new JFrame JavaDoc();
100         invokeAndWait(new Runnable JavaDoc() {
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 JavaDoc frame)
112     throws InterruptedException JavaDoc, InvocationTargetException JavaDoc {
113         invokeAndWait(new Runnable JavaDoc() {
114             public void run() {
115                 frame.setVisible(false);
116                 frame.dispose();
117             }
118         });
119     }
120
121     /**
122      * Test of getPanelListeners method, of class de.schlichtherle.swing.EnhancedPanel.
123      */

124     public void testPanelListeners1() {
125         PanelListener listener;
126         EventListener JavaDoc[] 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 JavaDoc 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 JavaDoc 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     /**
185      * Test of getListeners method, of class de.schlichtherle.swing.EnhancedPanel.
186      */

187     public void testPanelListeners2() {
188         PanelListener listener;
189         EventListener JavaDoc[] 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 JavaDoc 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 JavaDoc 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     /**
236      * Test of fireAncestorWindowShown method, of class de.schlichtherle.swing.EnhancedPanel.
237      */

238     public void testFireAncestorWindowShown() {
239         final CountingPanelListener l = new CountingPanelListener();
240         instance.addPanelListener(l);
241         instance.addPanelListener(l); // add again to receive same event twice!
242
assertEquals(0, l.shown);
243         
244         PanelEvent event = null;
245         instance.fireAncestorWindowShown(event);
246         assertEquals(2, l.shown);
247     }
248
249     /**
250      * Test of fireAncestorWindowHidden method, of class de.schlichtherle.swing.EnhancedPanel.
251      */

252     public void testFireAncestorWindowHidden() {
253         final CountingPanelListener l = new CountingPanelListener();
254         instance.addPanelListener(l);
255         instance.addPanelListener(l); // add again to receive same event twice!
256
assertEquals(0, l.hidden);
257         
258         PanelEvent event = null;
259         instance.fireAncestorWindowHidden(event);
260         assertEquals(2, l.hidden);
261     }
262
263     /**
264      * Adds the EnhancedPanel instance to a frame, shows and hides this frame
265      * multiple times and counts these events.
266      * Then puts the same EnhancedPanel instance into a second frame and repeats
267      * the test.
268      */

269     public void testEvents4JFrame() throws Exception JavaDoc {
270         final CountingPanelListener l = new CountingPanelListener();
271         instance.addPanelListener(l);
272
273         class FrameHolder {
274             protected final JFrame JavaDoc frame;
275             
276             protected FrameHolder(JFrame JavaDoc frame) {
277                 this.frame = frame;
278             }
279         }
280         class SetupFrame extends FrameHolder implements Runnable JavaDoc {
281             SetupFrame(JFrame JavaDoc 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 JavaDoc {
292             MakeFrameVisible(JFrame JavaDoc frame) {
293                 super(frame);
294             }
295
296             public void run() {
297                 // Use multiple ways to make the frame visible.
298
// Depending on the version of the Swing implementation, this may
299
// create multiple PanelEvents with an ID equal to
300
// PanelEvent.ANCESTOR_WINDOW_SHOWN.
301
// However, all these events are coalesced into one.
302
frame.show();
303                 frame.setVisible(true);
304             }
305         }
306         class MakeFrameInvisible extends FrameHolder implements Runnable JavaDoc {
307             MakeFrameInvisible(JFrame JavaDoc frame) {
308                 super(frame);
309             }
310
311             public void run() {
312                 // Use multiple ways to make the frame visible.
313
// Depending on the version of the Swing implementation, this may
314
// create multiple PanelEvents with an ID equal to
315
// PanelEvent.ANCESTOR_WINDOW_HIDDEN.
316
// However, all these events are coalesced into one.
317
frame.setVisible(false);
318                 frame.hide();
319                 frame.dispose();
320             }
321         }
322
323         // Test in first frame.
324
final JFrame JavaDoc frame1 = new JFrame JavaDoc();
325         invokeAndWait(new SetupFrame(frame1));
326         testEvents(new MakeFrameVisible(frame1), new MakeFrameInvisible(frame1), l);
327
328         // Test in second frame.
329
final JFrame JavaDoc frame2 = new JFrame JavaDoc();
330         invokeAndWait(new SetupFrame(frame2));
331         testEvents(new MakeFrameVisible(frame2), new MakeFrameInvisible(frame2), l);
332     }
333
334     private void testEvents(
335             final Runnable JavaDoc makeVisible,
336             final Runnable JavaDoc makeInvisible,
337             final CountingPanelListener l)
338     throws Exception JavaDoc {
339         l.shown = l.hidden = 0; // reset counters
340

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     /**
353      * Invokes the given <code>runnable</code> from the AWT Event Dispatch
354      * Thread and waits for the AWT Event Queue to drain.
355      *
356      * @throws Error If this method is called from the AWT Event Dispatch Thread.
357      */

358     private static void invokeAndWait(final Runnable JavaDoc runnable)
359     throws InterruptedException JavaDoc, InvocationTargetException JavaDoc {
360         //EventQueue.invokeLater(runnable);
361
EventQueue.invokeAndWait(runnable);
362         waitEmptyQueue();
363     }
364
365     private static void waitEmptyQueue() throws AssertionError JavaDoc {
366         //new QueueTool().waitEmpty();
367
final EventQueue JavaDoc queue = Toolkit.getDefaultToolkit().getSystemEventQueue();
368         while (queue.peekEvent() != null) {
369             try {
370                 EventQueue.invokeAndWait(new Runnable JavaDoc() {
371                     public void run() {
372                     }
373                 });
374             } catch (InvocationTargetException JavaDoc cannotHappen) {
375                 throw new AssertionError JavaDoc(cannotHappen);
376             } catch (InterruptedException JavaDoc continueAnyway) {
377                 continueAnyway.printStackTrace();
378             }
379         }
380     }
381
382     /**
383      * Shows and hides the EnhancedPanel instance several times in a
384      * JOptionPane and counts these events.
385      */

386     public void testEvents4JOptionPane() throws Exception JavaDoc {
387         final CountingPanelListener l = new CountingPanelListener();
388         instance.addPanelListener(l);
389
390         final Runnable JavaDoc makeVisible = new Runnable JavaDoc() {
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(); // wait for JOptionPane
399
waitEmptyQueue(); // wait until PanelEvent delivered
400
assertEquals(i, l.shown);
401             assertEquals(i - 1, l.hidden);
402
403             JButtonOperator buttonOp = new JButtonOperator(dialogOp);
404             buttonOp.push();
405             waitEmptyQueue(); // wait until PanelEvent delivered
406
assertEquals(i, l.shown);
407             assertEquals(i, l.hidden);
408         }
409     }
410 }
411
Popular Tags