KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > gui > debuggercore > Watches


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  * The Original Software is NetBeans.
15  * The Initial Developer of the Original Software is Sun Microsystems, Inc.
16  * Portions created by Sun Microsystems, Inc. are Copyright (C) 2003
17  * All Rights Reserved.
18  *
19  * Contributor(s): Sun Microsystems, Inc.
20  */

21
22 package gui.debuggercore;
23
24 import java.io.File JavaDoc;
25 import junit.textui.TestRunner;
26 import org.netbeans.jellytools.*;
27 import org.netbeans.jellytools.actions.Action;
28 import org.netbeans.jellytools.actions.ActionNoBlock;
29 import org.netbeans.jellytools.actions.OpenAction;
30 import org.netbeans.jellytools.modules.debugger.actions.RunToCursorAction;
31 import org.netbeans.jellytools.nodes.JavaNode;
32 import org.netbeans.jellytools.nodes.SourcePackagesNode;
33 import org.netbeans.jemmy.EventTool;
34 import org.netbeans.jemmy.JemmyProperties;
35 import org.netbeans.jemmy.operators.JTreeOperator;
36 import org.netbeans.jemmy.operators.JTextFieldOperator;
37 import org.netbeans.jemmy.util.PNGEncoder;
38 import org.netbeans.junit.NbTestSuite;
39 import org.openide.nodes.Node;
40
41 /**
42  *
43  * @author ehucka
44  */

45 public class Watches extends JellyTestCase {
46     
47     /**
48      *
49      * @param name
50      */

51     public Watches(String JavaDoc name) {
52         super(name);
53     }
54     
55     /**
56      *
57      * @param args
58      */

59     public static void main(String JavaDoc[] args) {
60         TestRunner.run(suite());
61     }
62     
63     /**
64      *
65      * @return
66      */

67     public static NbTestSuite suite() {
68         NbTestSuite suite = new NbTestSuite();
69         suite.addTest(new Watches("testWatchesPublicVariables"));
70         suite.addTest(new Watches("testWatchesProtectedVariables"));
71         suite.addTest(new Watches("testWatchesPrivateVariables"));
72         suite.addTest(new Watches("testWatchesPackagePrivateVariables"));
73         suite.addTest(new Watches("testWatchesFiltersBasic"));
74         suite.addTest(new Watches("testWatchesFiltersLinkedList"));
75         suite.addTest(new Watches("testWatchesFiltersArrayList"));
76         suite.addTest(new Watches("testWatchesFiltersVector"));
77         suite.addTest(new Watches("testWatchesFiltersHashMap"));
78         suite.addTest(new Watches("testWatchesFiltersHashtable"));
79         suite.addTest(new Watches("testWatchesFiltersTreeMap"));
80         suite.addTest(new Watches("testWatchesFiltersTreeSet"));
81         suite.addTest(new Watches("testWatchesFilters1DArray"));
82         suite.addTest(new Watches("testWatchesFilters2DArray"));
83         suite.addTest(new Watches("testWatchesValues"));
84         return suite;
85     }
86     
87     /**
88      *
89      */

90     public void setUp() {
91         System.out.println("######## " + getName() + " #######");
92         if ("testWatchesPublicVariables".equals(getName())) {
93             //open source
94
org.netbeans.jellytools.nodes.Node beanNode = new org.netbeans.jellytools.nodes.Node(new SourcePackagesNode(Utilities.testProjectName), "examples.advanced|MemoryView.java"); //NOI18N
95
new OpenAction().performAPI(beanNode); // NOI18N
96
EditorOperator op = new EditorOperator("MemoryView.java");
97             Utilities.setCaret(op, 76);
98             new RunToCursorAction().perform();
99             Utilities.getDebugToolbar().waitComponentVisible(true);
100             Utilities.waitDebuggerConsole("Thread main stopped at MemoryView.java:76", 0);
101         }
102     }
103     
104     /**
105      *
106      */

107     public void tearDown() {
108         JemmyProperties.getCurrentOutput().printTrace("\nteardown\n");
109         if ("testWatchesValues".equals(getName())) {
110             Utilities.endAllSessions();
111         }
112         Utilities.deleteAllWatches();
113     }
114     
115     /**
116      *
117      */

118     public void testWatchesPublicVariables() throws Throwable JavaDoc {
119         try {
120             createWatch("Vpublic");
121             createWatch("Spublic");
122             createWatch("inheritedVpublic");
123             createWatch("inheritedSpublic");
124             Utilities.showDebuggerView(Utilities.watchesViewTitle);
125             TreeTableOperator jTableOperator = new TreeTableOperator(new TopComponentOperator(Utilities.watchesViewTitle));
126             checkTTVLine(jTableOperator, 0, "Vpublic", "String", "\"Public Variable\"");
127             checkTTVLine(jTableOperator, 1, "Spublic", "String", "\"Public Variable\"");
128             checkTTVLine(jTableOperator, 2, "inheritedVpublic", "String", "\"Inherited Public Variable\"");
129             checkTTVLine(jTableOperator, 3, "inheritedSpublic", "String", "\"Inherited Public Variable\"");
130         } catch (Throwable JavaDoc th) {
131             try {
132                 // capture screen before cleanup in finally clause is completed
133
PNGEncoder.captureScreen(getWorkDir().getAbsolutePath()+File.separator+"screenBeforeCleanup.png");
134             } catch (Exception JavaDoc e1) {
135                 // ignore it
136
}
137             throw th;
138         }
139     }
140     
141     /**
142      *
143      */

144     public void testWatchesProtectedVariables() throws Throwable JavaDoc {
145         try {
146             createWatch("Vprotected");
147             createWatch("Sprotected");
148             createWatch("inheritedVprotected");
149             createWatch("inheritedSprotected");
150             Utilities.showDebuggerView(Utilities.watchesViewTitle);
151             TreeTableOperator jTableOperator = new TreeTableOperator(new TopComponentOperator(Utilities.watchesViewTitle));
152             checkTTVLine(jTableOperator, 0, "Vprotected", "String", "\"Protected Variable\"");
153             checkTTVLine(jTableOperator, 1, "Sprotected", "String", "\"Protected Variable\"");
154             checkTTVLine(jTableOperator, 2, "inheritedVprotected", "String", "\"Inherited Protected Variable\"");
155             checkTTVLine(jTableOperator, 3, "inheritedSprotected", "String", "\"Inherited Protected Variable\"");
156         } catch (Throwable JavaDoc th) {
157             try {
158                 // capture screen before cleanup in finally clause is completed
159
PNGEncoder.captureScreen(getWorkDir().getAbsolutePath()+File.separator+"screenBeforeCleanup.png");
160             } catch (Exception JavaDoc e1) {
161                 // ignore it
162
}
163             throw th;
164         }
165     }
166     
167     /**
168      *
169      */

170     public void testWatchesPrivateVariables() throws Throwable JavaDoc {
171         try {
172             createWatch("Vprivate");
173             createWatch("Sprivate");
174             createWatch("inheritedVprivate");
175             createWatch("inheritedSprivate");
176             Utilities.showDebuggerView(Utilities.watchesViewTitle);
177             TreeTableOperator jTableOperator = new TreeTableOperator(new TopComponentOperator(Utilities.watchesViewTitle));
178             checkTTVLine(jTableOperator, 0, "Vprivate", "String", "\"Private Variable\"");
179             checkTTVLine(jTableOperator, 1, "Sprivate", "String", "\"Private Variable\"");
180             checkTTVLine(jTableOperator, 2, "inheritedVprivate", "String", "\"Inherited Private Variable\"");
181             checkTTVLine(jTableOperator, 3, "inheritedSprivate", "String", "\"Inherited Private Variable\"");
182         } catch (Throwable JavaDoc th) {
183             try {
184                 // capture screen before cleanup in finally clause is completed
185
PNGEncoder.captureScreen(getWorkDir().getAbsolutePath()+File.separator+"screenBeforeCleanup.png");
186             } catch (Exception JavaDoc e1) {
187                 // ignore it
188
}
189             throw th;
190         }
191     }
192     
193     /**
194      *
195      */

196     public void testWatchesPackagePrivateVariables() throws Throwable JavaDoc {
197         try {
198             createWatch("VpackagePrivate");
199             createWatch("SpackagePrivate");
200             createWatch("inheritedVpackagePrivate");
201             createWatch("inheritedSpackagePrivate");
202             Utilities.showDebuggerView(Utilities.watchesViewTitle);
203             TreeTableOperator jTableOperator = new TreeTableOperator(new TopComponentOperator(Utilities.watchesViewTitle));
204             checkTTVLine(jTableOperator, 0, "VpackagePrivate", "String", "\"Package-private Variable\"");
205             checkTTVLine(jTableOperator, 1, "SpackagePrivate", "String", "\"Package-private Variable\"");
206             checkTTVLine(jTableOperator, 2, "inheritedVpackagePrivate", "String", "\"Inherited Package-private Variable\"");
207             checkTTVLine(jTableOperator, 3, "inheritedSpackagePrivate", "String", "\"Inherited Package-private Variable\"");
208         } catch (Throwable JavaDoc th) {
209             try {
210                 // capture screen before cleanup in finally clause is completed
211
PNGEncoder.captureScreen(getWorkDir().getAbsolutePath()+File.separator+"screenBeforeCleanup.png");
212             } catch (Exception JavaDoc e1) {
213                 // ignore it
214
}
215             throw th;
216         }
217     }
218     
219     /**
220      *
221      */

222     public void testWatchesFiltersBasic() throws Throwable JavaDoc {
223         try {
224             createWatch("1==1");
225             createWatch("1==0");
226             createWatch("Integer.toString(10)");
227             createWatch("clazz");
228             createWatch("n");
229             Utilities.showDebuggerView(Utilities.watchesViewTitle);
230             TreeTableOperator jTableOperator = new TreeTableOperator(new TopComponentOperator(Utilities.watchesViewTitle));
231             checkTTVLine(jTableOperator, 0, "1==1", "boolean", "true");
232             checkTTVLine(jTableOperator, 1, "1==0", "boolean", "false");
233             checkTTVLine(jTableOperator, 2, "Integer.toString(10)", "String", "\"10\"");
234             checkTTVLine(jTableOperator, 3, "clazz", "Class", "class java.lang.Runtime");
235             assertTrue("Node \'clazz\' has no child nodes", hasChildNodes("clazz", jTableOperator));
236             checkTTVLine(jTableOperator, 4, "n", "int", "50");
237         } catch (Throwable JavaDoc th) {
238             try {
239                 // capture screen before cleanup in finally clause is completed
240
PNGEncoder.captureScreen(getWorkDir().getAbsolutePath()+File.separator+"screenBeforeCleanup.png");
241             } catch (Exception JavaDoc e1) {
242                 // ignore it
243
}
244             throw th;
245         }
246     }
247     
248     /**
249      *
250      */

251     public void testWatchesFiltersLinkedList() throws Throwable JavaDoc {
252         try {
253             createWatch("llist");
254             createWatch("llist.toString()");
255             createWatch("llist.getFirst()");
256             createWatch("llist.getLast()");
257             createWatch("llist.get(1)");
258             Utilities.showDebuggerView(Utilities.watchesViewTitle);
259             TreeTableOperator jTableOperator = new TreeTableOperator(new TopComponentOperator(Utilities.watchesViewTitle));
260             checkTTVLine(jTableOperator, 0, "llist", "LinkedList", null);
261             assertTrue("Node \'llist\' has no child nodes", hasChildNodes("llist", jTableOperator));
262             checkTTVLine(jTableOperator, 1, "llist.toString()", "String", "\"[0. item, 1. item, 2. item, 3. item, 4. item, 5. item, 6. item, 7. item, 8. item, 9. item, 10. item, 11. item, 12. item, 13. item, 14. item, 15. item, 16. item, 17. item, 18. item, 19. item, 20. item, 21. item, 22. item, 23. item, 24. item, 25. item, 26. item, 27. item, 28. item, 29. item, 30. item, 31. item, 32. item, 33. item, 34. item, 35. item, 36. item, 37. item, 38. item, 39. item, 40. item, 41. item, 42. item, 43. item, 44. item, 45. item, 46. item, 47. item, 48. item, 49. item]\"");
263             checkTTVLine(jTableOperator, 2, "llist.getFirst()", "String", "\"0. item\"");
264             checkTTVLine(jTableOperator, 3, "llist.getLast()", "String", "\"49. item\"");
265             checkTTVLine(jTableOperator, 4, "llist.get(1)", "String", "\"1. item\"");
266         } catch (Throwable JavaDoc th) {
267             try {
268                 // capture screen before cleanup in finally clause is completed
269
PNGEncoder.captureScreen(getWorkDir().getAbsolutePath()+File.separator+"screenBeforeCleanup.png");
270             } catch (Exception JavaDoc e1) {
271                 // ignore it
272
}
273             throw th;
274         }
275     }
276     
277     /**
278      *
279      */

280     public void testWatchesFiltersArrayList() throws Throwable JavaDoc {
281         try {
282             createWatch("alist");
283             createWatch("alist.toString()");
284             createWatch("alist.get(2)");
285             Utilities.showDebuggerView(Utilities.watchesViewTitle);
286             TreeTableOperator jTableOperator = new TreeTableOperator(new TopComponentOperator(Utilities.watchesViewTitle));
287             checkTTVLine(jTableOperator, 0, "alist", "ArrayList", null);
288             assertTrue("Node \'alist\' has no child nodes", hasChildNodes("alist", jTableOperator));
289             checkTTVLine(jTableOperator, 1, "alist.toString()", "String", "\"[0. item, 1. item, 2. item, 3. item, 4. item, 5. item, 6. item, 7. item, 8. item, 9. item, 10. item, 11. item, 12. item, 13. item, 14. item, 15. item, 16. item, 17. item, 18. item, 19. item, 20. item, 21. item, 22. item, 23. item, 24. item, 25. item, 26. item, 27. item, 28. item, 29. item, 30. item, 31. item, 32. item, 33. item, 34. item, 35. item, 36. item, 37. item, 38. item, 39. item, 40. item, 41. item, 42. item, 43. item, 44. item, 45. item, 46. item, 47. item, 48. item, 49. item]\"");
290             checkTTVLine(jTableOperator, 2, "alist.get(2)", "String", "\"2. item\"");
291         } catch (Throwable JavaDoc th) {
292             try {
293                 // capture screen before cleanup in finally clause is completed
294
PNGEncoder.captureScreen(getWorkDir().getAbsolutePath()+File.separator+"screenBeforeCleanup.png");
295             } catch (Exception JavaDoc e1) {
296                 // ignore it
297
}
298             throw th;
299         }
300     }
301     
302     /**
303      *
304      */

305     public void testWatchesFiltersVector() throws Throwable JavaDoc {
306         try {
307             createWatch("vec");
308             createWatch("vec.toString()");
309             createWatch("vec.get(3)");
310             Utilities.showDebuggerView(Utilities.watchesViewTitle);
311             TreeTableOperator jTableOperator = new TreeTableOperator(new TopComponentOperator(Utilities.watchesViewTitle));
312             checkTTVLine(jTableOperator, 0, "vec", "Vector", null);
313             assertTrue("Node \'vec\' has no child nodes", hasChildNodes("vec", jTableOperator));
314             checkTTVLine(jTableOperator, 1, "vec.toString()", "String", "\"[0. item, 1. item, 2. item, 3. item, 4. item, 5. item, 6. item, 7. item, 8. item, 9. item, 10. item, 11. item, 12. item, 13. item, 14. item, 15. item, 16. item, 17. item, 18. item, 19. item, 20. item, 21. item, 22. item, 23. item, 24. item, 25. item, 26. item, 27. item, 28. item, 29. item, 30. item, 31. item, 32. item, 33. item, 34. item, 35. item, 36. item, 37. item, 38. item, 39. item, 40. item, 41. item, 42. item, 43. item, 44. item, 45. item, 46. item, 47. item, 48. item, 49. item]\"");
315             checkTTVLine(jTableOperator, 2, "vec.get(3)", "String", "\"3. item\"");
316         } catch (Throwable JavaDoc th) {
317             try {
318                 // capture screen before cleanup in finally clause is completed
319
PNGEncoder.captureScreen(getWorkDir().getAbsolutePath()+File.separator+"screenBeforeCleanup.png");
320             } catch (Exception JavaDoc e1) {
321                 // ignore it
322
}
323             throw th;
324         }
325     }
326     
327     /**
328      *
329      */

330     public void testWatchesFiltersHashMap() throws Throwable JavaDoc {
331         try {
332             createWatch("hmap");
333             createWatch("hmap.containsKey(\"4\")");
334             createWatch("hmap.get(\"5\")");
335             createWatch("hmap.put(\"6\",\"test\")");
336             Utilities.showDebuggerView(Utilities.watchesViewTitle);
337             TreeTableOperator jTableOperator = new TreeTableOperator(new TopComponentOperator(Utilities.watchesViewTitle));
338             checkTTVLine(jTableOperator, 0, "hmap", "HashMap", null);
339             assertTrue("Node \'hmap\' has no child nodes", hasChildNodes("hmap", jTableOperator));
340             checkTTVLine(jTableOperator, 1, "hmap.containsKey(\"4\")", "boolean", "true");
341             checkTTVLine(jTableOperator, 2, "hmap.get(\"5\")", "String", "\"5. item\"");
342             checkTTVLine(jTableOperator, 3, "hmap.put(\"6\",\"test\")", "String", "\"6. item\"");
343         } catch (Throwable JavaDoc th) {
344             try {
345                 // capture screen before cleanup in finally clause is completed
346
PNGEncoder.captureScreen(getWorkDir().getAbsolutePath()+File.separator+"screenBeforeCleanup.png");
347             } catch (Exception JavaDoc e1) {
348                 // ignore it
349
}
350             throw th;
351         }
352     }
353     
354     /**
355      *
356      */

357     public void testWatchesFiltersHashtable() throws Throwable JavaDoc {
358         try {
359             createWatch("htab");
360             createWatch("htab.containsKey(\"7\")");
361             createWatch("htab.get(\"9\")");
362             createWatch("htab.put(\"10\", \"test\")");
363             Utilities.showDebuggerView(Utilities.watchesViewTitle);
364             TreeTableOperator jTableOperator = new TreeTableOperator(new TopComponentOperator(Utilities.watchesViewTitle));
365             checkTTVLine(jTableOperator, 0, "htab", "Hashtable", null);
366             assertTrue("Node \'htab\' has no child nodes", hasChildNodes("htab", jTableOperator));
367             checkTTVLine(jTableOperator, 1, "htab.containsKey(\"7\")", "boolean", "true");
368             checkTTVLine(jTableOperator, 2, "htab.get(\"9\")", "String", "\"9. item\"");
369             checkTTVLine(jTableOperator, 3, "htab.put(\"10\", \"test\")", "String", "\"10. item\"");
370         } catch (Throwable JavaDoc th) {
371             try {
372                 // capture screen before cleanup in finally clause is completed
373
PNGEncoder.captureScreen(getWorkDir().getAbsolutePath()+File.separator+"screenBeforeCleanup.png");
374             } catch (Exception JavaDoc e1) {
375                 // ignore it
376
}
377             throw th;
378         }
379     }
380     
381     /**
382      *
383      */

384     public void testWatchesFiltersTreeMap() throws Throwable JavaDoc {
385         try {
386             createWatch("tmap");
387             createWatch("tmap.containsKey(\"11\")");
388             createWatch("tmap.get(\"12\")");
389             createWatch("tmap.put(\"13\",\"test\")");
390             Utilities.showDebuggerView(Utilities.watchesViewTitle);
391             TreeTableOperator jTableOperator = new TreeTableOperator(new TopComponentOperator(Utilities.watchesViewTitle));
392             checkTTVLine(jTableOperator, 0, "tmap", "TreeMap", null);
393             assertTrue("Node \'tmap\' has no child nodes", hasChildNodes("tmap", jTableOperator));
394             checkTTVLine(jTableOperator, 1, "tmap.containsKey(\"11\")", "boolean", "true");
395             checkTTVLine(jTableOperator, 2, "tmap.get(\"12\")", "String", "\"12. item\"");
396             checkTTVLine(jTableOperator, 3, "tmap.put(\"13\",\"test\")", "String", "\"13. item\"");
397         } catch (Throwable JavaDoc th) {
398             try {
399                 // capture screen before cleanup in finally clause is completed
400
PNGEncoder.captureScreen(getWorkDir().getAbsolutePath()+File.separator+"screenBeforeCleanup.png");
401             } catch (Exception JavaDoc e1) {
402                 // ignore it
403
}
404             throw th;
405         }
406     }
407     
408     /**
409      *
410      */

411     public void testWatchesFiltersTreeSet() throws Throwable JavaDoc {
412         try {
413             createWatch("tset");
414             createWatch("tset.contains(\"14. item\")");
415             createWatch("tset.iterator()");
416             Utilities.showDebuggerView(Utilities.watchesViewTitle);
417             TreeTableOperator jTableOperator = new TreeTableOperator(new TopComponentOperator(Utilities.watchesViewTitle));
418             checkTTVLine(jTableOperator, 0, "tset", "TreeSet", null);
419             assertTrue("Node \'tset\' has no child nodes", hasChildNodes("tset", jTableOperator));
420             checkTTVLine(jTableOperator, 1, "tset.contains(\"14. item\")", "boolean", "true");
421             checkTTVLine(jTableOperator, 2, "tset.iterator()", "TreeMap$KeyIterator", null);
422         } catch (Throwable JavaDoc th) {
423             try {
424                 // capture screen before cleanup in finally clause is completed
425
PNGEncoder.captureScreen(getWorkDir().getAbsolutePath()+File.separator+"screenBeforeCleanup.png");
426             } catch (Exception JavaDoc e1) {
427                 // ignore it
428
}
429             throw th;
430         }
431     }
432     
433     /**
434      *
435      */

436     public void testWatchesFilters1DArray() throws Throwable JavaDoc {
437         try {
438             createWatch("policko");
439             createWatch("policko.length");
440             createWatch("policko[1]");
441             createWatch("policko[10]");
442             createWatch("pole");
443             createWatch("pole.length");
444             createWatch("pole[1]");
445             Utilities.showDebuggerView(Utilities.watchesViewTitle);
446             TreeTableOperator jTableOperator = new TreeTableOperator(new TopComponentOperator(Utilities.watchesViewTitle));
447             checkTTVLine(jTableOperator, 0, "policko", "int[]", null);
448             assertTrue("Node \'policko\' has no child nodes", hasChildNodes("policko", jTableOperator));
449             checkTTVLine(jTableOperator, 1, "policko.length", "int", "5");
450             checkTTVLine(jTableOperator, 2, "policko[1]", "int", "2");
451             checkTTVLine(jTableOperator, 3, "policko[10]", null, ">Array index \"10\" is out of range <0,4><");
452             checkTTVLine(jTableOperator, 4, "pole", "int[]", null);
453             assertTrue("Node \'pole\' has no child nodes", hasChildNodes("pole", jTableOperator));
454             checkTTVLine(jTableOperator, 5, "pole.length", "int", "50");
455             checkTTVLine(jTableOperator, 6, "pole[1]", "int", "0");
456         } catch (Throwable JavaDoc th) {
457             try {
458                 // capture screen before cleanup in finally clause is completed
459
PNGEncoder.captureScreen(getWorkDir().getAbsolutePath()+File.separator+"screenBeforeCleanup.png");
460             } catch (Exception JavaDoc e1) {
461                 // ignore it
462
}
463             throw th;
464         }
465     }
466     
467     /**
468      *
469      */

470     public void testWatchesFilters2DArray() throws Throwable JavaDoc {
471         try {
472             createWatch("d2");
473             createWatch("d2.length");
474             createWatch("d2[1]");
475             createWatch("d2[1].length");
476             createWatch("d2[1][1]");
477             createWatch("d2[15].length");
478             Utilities.showDebuggerView(Utilities.watchesViewTitle);
479             TreeTableOperator jTableOperator = new TreeTableOperator(new TopComponentOperator(Utilities.watchesViewTitle));
480             checkTTVLine(jTableOperator, 0, "d2", "int[][]", null);
481             assertTrue("Node \'d2\' has no child nodes", hasChildNodes("d2", jTableOperator));
482             checkTTVLine(jTableOperator, 1, "d2.length", "int", "10");
483             checkTTVLine(jTableOperator, 2, "d2[1]", "int[]", null);
484             assertTrue("Node \'d2[1]\' has no child nodes", hasChildNodes("d2[1]", jTableOperator));
485             checkTTVLine(jTableOperator, 3, "d2[1].length", "int", "20");
486             checkTTVLine(jTableOperator, 4, "d2[1][1]", "int", "0");
487             checkTTVLine(jTableOperator, 5, "d2[15].length", null, ">Array index \"15\" is out of range <0,9><");
488         } catch (Throwable JavaDoc th) {
489             try {
490                 // capture screen before cleanup in finally clause is completed
491
PNGEncoder.captureScreen(getWorkDir().getAbsolutePath()+File.separator+"screenBeforeCleanup.png");
492             } catch (Exception JavaDoc e1) {
493                 // ignore it
494
}
495             throw th;
496         }
497     }
498     
499     /**
500      *
501      */

502     public void testWatchesValues() throws Throwable JavaDoc {
503         try {
504             EditorOperator op = new EditorOperator("MemoryView.java");
505             Utilities.setCaret(op, 104);
506             new RunToCursorAction().perform();
507             MainWindowOperator.getDefault().waitStatusText("Thread main stopped at MemoryView.java:104.");
508             
509             createWatch("free");
510             createWatch("taken");
511             createWatch("total");
512             createWatch("this");
513             
514             Utilities.showDebuggerView(Utilities.watchesViewTitle);
515             TreeTableOperator jTableOperator = new TreeTableOperator(new TopComponentOperator(Utilities.watchesViewTitle));
516             Node.Property property;
517             int count = 0;
518             
519             try {
520                 if (!("free".equals(jTableOperator.getValueAt(count,0).toString())))
521                     assertTrue("Watch for expression \'free\' was not created", false);
522                 property = (Node.Property)jTableOperator.getValueAt(count,1);
523                 if (!("long".equals(property.getValue())))
524                     assertTrue("Watch type for expression \'free\' is " + property.getValue() + ", should be long", false);
525                 property = (Node.Property)jTableOperator.getValueAt(count++,2);
526                 long free = Long.parseLong(property.getValue().toString());
527                 
528                 if (!("taken".equals(jTableOperator.getValueAt(count,0).toString())))
529                     assertTrue("Watch for expression \'taken\' was not created", false);
530                 property = (Node.Property)jTableOperator.getValueAt(count,1);
531                 if (!("int".equals(property.getValue())))
532                     assertTrue("Watch type for expression \'taken\' is " + property.getValue() + ", should be long", false);
533                 property = (Node.Property)jTableOperator.getValueAt(count++,2);
534                 long taken = Long.parseLong(property.getValue().toString());
535                 
536                 if (!("total".equals(jTableOperator.getValueAt(count,0).toString())))
537                     assertTrue("Watch for expression \'total\' was not created", false);
538                 property = (Node.Property)jTableOperator.getValueAt(count,1);
539                 if (!("long".equals(property.getValue())))
540                     assertTrue("Watch type for expression \'total\' is " + property.getValue() + ", should be long", false);
541                 property = (Node.Property)jTableOperator.getValueAt(count++,2);
542                 long total = Long.parseLong(property.getValue().toString());
543                 
544                 assertTrue("Watches values does not seem to be correct (total != free + taken)", total == free + taken);
545                 
546                 if (!("this".equals(jTableOperator.getValueAt(count,0).toString())))
547                     assertTrue("Watch for expression \'this\' was not created", false);
548                 property = (Node.Property)jTableOperator.getValueAt(count,1);
549                 if (!("MemoryView".equals(property.getValue())))
550                     assertTrue("Watch type for expression \'this\' is " + property.getValue() + ", should be MemoryView", false);
551                 assertTrue("Watch this has no child nodes", hasChildNodes("this", jTableOperator));
552             } catch (java.lang.IllegalAccessException JavaDoc e1) {
553                 assertTrue(e1.getMessage(), false);
554             } catch (java.lang.reflect.InvocationTargetException JavaDoc e2) {
555                 assertTrue(e2.getMessage(), false);
556             }
557         } catch (Throwable JavaDoc th) {
558             try {
559                 // capture screen before cleanup in finally clause is completed
560
PNGEncoder.captureScreen(getWorkDir().getAbsolutePath()+File.separator+"screenBeforeCleanup.png");
561             } catch (Exception JavaDoc e1) {
562                 // ignore it
563
}
564             throw th;
565         }
566     }
567     
568     /**
569      *
570      * @param exp
571      */

572     protected void createWatch(String JavaDoc exp) {
573         new ActionNoBlock(Utilities.runMenu + "|" + Utilities.newWatchItem, null).perform();
574         //new ActionNoBlock(null, null, Utilities.newWatchShortcut).performShortcut();
575
NbDialogOperator dialog = new NbDialogOperator(Utilities.newWatchTitle);
576         new JTextFieldOperator(dialog, 0).typeText(exp);
577         dialog.ok();
578         new EventTool().waitNoEvent(500);
579     }
580     
581     /**
582      *
583      * @param table
584      * @param lineNumber
585      * @param name
586      * @param type
587      * @param value
588      */

589     protected void checkTTVLine(TreeTableOperator table, int lineNumber, String JavaDoc name, String JavaDoc type, String JavaDoc value) {
590         try {
591             table.scrollToCell(lineNumber, 0);
592             org.openide.nodes.Node.Property property;
593             String JavaDoc string = null;
594             assertTrue("Node " + name + " not displayed in Watches view", name.equals(table.getValueAt(lineNumber, 0).toString()));
595             property = (org.openide.nodes.Node.Property)table.getValueAt(lineNumber, 1);
596             string = property.getValue().toString();
597             int maxWait = 100;
598             while (string.equals(Utilities.evaluatingPropertyText) && maxWait > 0) {
599                 new EventTool().waitNoEvent(300);
600                 maxWait--;
601             }
602             assertTrue("Node " + name + " has wrong type in Watches view (displayed: " + string + ", expected: " + type + ")",
603                     (type == null) || type.length() == 0 || type.equals(string));
604             property = (org.openide.nodes.Node.Property)table.getValueAt(lineNumber, 2);
605             string = property.getValue().toString();
606             maxWait = 100;
607             while (string.equals(Utilities.evaluatingPropertyText) && maxWait > 0) {
608                 new EventTool().waitNoEvent(300);
609                 maxWait--;
610             }
611             assertTrue("Node " + name + " has wrong value in Watches view (displayed: " + string + ", expected: " + value + ")",
612                     (type == null) || !type.equals(string));
613         } catch (java.lang.IllegalAccessException JavaDoc e1) {
614             assertTrue(e1.getMessage(), false);
615         } catch (java.lang.reflect.InvocationTargetException JavaDoc e2) {
616             assertTrue(e2.getMessage(), false);
617         }
618     }
619     
620     protected boolean hasChildNodes(String JavaDoc nodePath, TreeTableOperator jTableOperator) {
621         org.netbeans.jellytools.nodes.Node node = new org.netbeans.jellytools.nodes.Node(jTableOperator.tree(), nodePath);
622         node.select();
623         return !node.isLeaf();
624     }
625 }
626
Popular Tags