KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tctest > GenericList15TestApp


1 /*
2  * All content copyright (c) 2003-2006 Terracotta, Inc., except as may otherwise be noted in a separate copyright notice. All rights reserved.
3  */

4 package com.tctest;
5
6 import com.tc.object.config.ConfigVisitor;
7 import com.tc.object.config.DSOClientConfigHelper;
8 import com.tc.object.tx.ReadOnlyException;
9 import com.tc.simulator.app.ApplicationConfig;
10 import com.tc.simulator.listener.ListenerProvider;
11 import com.tc.util.Assert;
12
13 import java.lang.reflect.Method JavaDoc;
14 import java.util.AbstractList JavaDoc;
15 import java.util.ArrayList JavaDoc;
16 import java.util.Arrays JavaDoc;
17 import java.util.Iterator JavaDoc;
18 import java.util.LinkedList JavaDoc;
19 import java.util.List JavaDoc;
20 import java.util.ListIterator JavaDoc;
21 import java.util.Stack JavaDoc;
22 import java.util.Vector JavaDoc;
23
24 /**
25  * This contains the same test cases of GenericListTestApp, plus the jdk1.5 specific test cases.
26  */

27 public class GenericList15TestApp extends GenericTestApp {
28
29   public GenericList15TestApp(String JavaDoc appId, ApplicationConfig cfg, ListenerProvider listenerProvider) {
30     super(appId, cfg, listenerProvider, List JavaDoc.class);
31   }
32
33   protected Object JavaDoc getTestObject(String JavaDoc testName) {
34     List JavaDoc lists = (List JavaDoc) sharedMap.get("lists");
35     return lists.iterator();
36   }
37
38   protected void setupTestObject(String JavaDoc testName) {
39     List JavaDoc lists = new ArrayList JavaDoc();
40     lists.add(new LinkedList JavaDoc());
41     lists.add(new ArrayList JavaDoc());
42     lists.add(new Vector JavaDoc());
43     lists.add(new Stack JavaDoc());
44
45     sharedMap.put("lists", lists);
46     sharedMap.put("arrayforLinkedList", new Object JavaDoc[2]);
47     sharedMap.put("arrayforArrayList", new Object JavaDoc[2]);
48     sharedMap.put("arrayforVector", new Object JavaDoc[2]);
49     sharedMap.put("arrayforStack", new Object JavaDoc[2]);
50   }
51
52   void testBasicAdd(List JavaDoc list, boolean validate) {
53     if (validate) {
54       assertSingleElement(list, "rollin in my 6-4");
55     } else {
56       synchronized (list) {
57         boolean added = list.add("rollin in my 6-4");
58         Assert.assertTrue(added);
59       }
60     }
61   }
62
63   void testVectorSetSizeGrow(List JavaDoc list, boolean validate) {
64     if (!(list instanceof Vector JavaDoc)) { return; }
65
66     int size = 5;
67     Vector JavaDoc v = (Vector JavaDoc) list;
68
69     if (validate) {
70       Assert.assertEquals("start", v.get(0));
71       for (int i = 1; i < size; i++) {
72         Object JavaDoc val = v.get(i);
73         Assert.assertNull("element " + i + " is " + val, val);
74       }
75       Assert.assertEquals("end", v.get(size));
76     } else {
77       synchronized (v) {
78         v.add("start");
79         v.setSize(size);
80         v.add("end");
81       }
82     }
83   }
84
85   void testVectorSetSizeShrink(List JavaDoc list, boolean validate) {
86     if (!(list instanceof Vector JavaDoc)) { return; }
87
88     Vector JavaDoc v = (Vector JavaDoc) list;
89
90     if (validate) {
91       Assert.assertEquals("start", v.get(0));
92       Assert.assertEquals("end", v.get(1));
93     } else {
94       synchronized (v) {
95         v.add("start");
96         v.add("ho hum");
97         v.add("ho hum2");
98         v.add("ho hum3");
99
100         v.setSize(1);
101         v.add("end");
102       }
103     }
104   }
105
106   void testVectorAddElement(List JavaDoc list, boolean validate) {
107     if (!(list instanceof Vector JavaDoc)) { return; }
108
109     Vector JavaDoc vector = (Vector JavaDoc) list;
110
111     if (validate) {
112       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "first element", "second element" }), vector);
113     } else {
114       synchronized (vector) {
115         vector.addElement("first element");
116         vector.addElement("second element");
117       }
118     }
119   }
120
121   void testVectorRetainAll(List JavaDoc list, boolean validate) {
122     if (!(list instanceof Vector JavaDoc)) { return; }
123
124     Vector JavaDoc vector = (Vector JavaDoc) list;
125
126     if (validate) {
127       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "second element" }), vector);
128     } else {
129       synchronized (vector) {
130         vector.addElement("first element");
131         vector.addElement("second element");
132         vector.addElement("third element");
133
134         List JavaDoc retainList = new ArrayList JavaDoc(1);
135         retainList.add("second element");
136
137         vector.retainAll(retainList);
138       }
139     }
140   }
141
142   void testVectorRemoveAll(List JavaDoc list, boolean validate) {
143     if (!(list instanceof Vector JavaDoc)) { return; }
144
145     Vector JavaDoc vector = (Vector JavaDoc) list;
146
147     if (validate) {
148       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "first element", "third element" }), vector);
149     } else {
150       synchronized (vector) {
151         vector.addElement("first element");
152         vector.addElement("second element");
153         vector.addElement("third element");
154
155         List JavaDoc removeList = new ArrayList JavaDoc(1);
156         removeList.add("second element");
157         vector.removeAll(removeList);
158       }
159     }
160   }
161
162   void testVectorRemoveAllElements(List JavaDoc list, boolean validate) {
163     if (!(list instanceof Vector JavaDoc)) { return; }
164
165     Vector JavaDoc vector = (Vector JavaDoc) list;
166
167     if (validate) {
168       assertEmptyList(vector);
169     } else {
170       synchronized (vector) {
171         vector.addElement("first element");
172         vector.addElement("second element");
173         vector.addElement("third element");
174
175         vector.removeAllElements();
176       }
177     }
178   }
179
180   void testVectorSetElementAt(List JavaDoc list, boolean validate) {
181     if (!(list instanceof Vector JavaDoc)) { return; }
182
183     Vector JavaDoc vector = (Vector JavaDoc) list;
184
185     if (validate) {
186       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "first element", "second element", "third element" }), vector);
187     } else {
188       synchronized (vector) {
189         vector.addElement("first element");
190         vector.addElement(null);
191         vector.addElement("third element");
192
193         vector.setElementAt("second element", 1);
194       }
195     }
196   }
197
198   void testVectorInsertElementAt(List JavaDoc list, boolean validate) {
199     if (!(list instanceof Vector JavaDoc)) { return; }
200
201     Vector JavaDoc vector = (Vector JavaDoc) list;
202
203     if (validate) {
204       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "first element", "second element", "third element" }), vector);
205     } else {
206       synchronized (vector) {
207         vector.addElement("first element");
208         vector.addElement("third element");
209
210         vector.insertElementAt("second element", 1);
211       }
212     }
213   }
214
215   void testLinkedListRemoveFirst(List JavaDoc list, boolean validate) {
216     if (!(list instanceof LinkedList JavaDoc)) { return; }
217
218     LinkedList JavaDoc linkedList = (LinkedList JavaDoc) list;
219
220     if (validate) {
221       assertSingleElement(linkedList, "teck");
222     } else {
223       synchronized (linkedList) {
224         linkedList.add("timmy");
225         linkedList.add("teck");
226       }
227
228       synchronized (linkedList) {
229         linkedList.removeFirst();
230       }
231     }
232   }
233
234   void testLinkedListRemoveLast(List JavaDoc list, boolean validate) {
235     if (!(list instanceof LinkedList JavaDoc)) { return; }
236
237     LinkedList JavaDoc linkedList = (LinkedList JavaDoc) list;
238
239     if (validate) {
240       assertSingleElement(linkedList, "timmy");
241     } else {
242       synchronized (linkedList) {
243         linkedList.add("timmy");
244         linkedList.add("teck");
245       }
246
247       synchronized (linkedList) {
248         linkedList.removeLast();
249       }
250     }
251   }
252
253   void testLinkedListAddFirst(List JavaDoc list, boolean validate) {
254     if (!(list instanceof LinkedList JavaDoc)) { return; }
255
256     LinkedList JavaDoc linkedList = (LinkedList JavaDoc) list;
257
258     if (validate) {
259       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "first element", "second element" }), list);
260     } else {
261       synchronized (linkedList) {
262         linkedList.add("second element");
263       }
264
265       synchronized (linkedList) {
266         linkedList.addFirst("first element");
267       }
268     }
269   }
270
271   void testLinkedListAddLast(List JavaDoc list, boolean validate) {
272     if (!(list instanceof LinkedList JavaDoc)) { return; }
273
274     LinkedList JavaDoc linkedList = (LinkedList JavaDoc) list;
275
276     if (validate) {
277       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "first element", "second element" }), list);
278     } else {
279       synchronized (linkedList) {
280         linkedList.add("first element");
281       }
282
283       synchronized (linkedList) {
284         linkedList.addLast("second element");
285       }
286     }
287   }
288
289   void testLinkedListPoll(List JavaDoc list, boolean validate) {
290     if (!(list instanceof LinkedList JavaDoc)) { return; }
291
292     LinkedList JavaDoc linkedList = (LinkedList JavaDoc) list;
293
294     if (validate) {
295       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "second element" }), list);
296     } else {
297       synchronized (linkedList) {
298         linkedList.add("first element");
299         linkedList.add("second element");
300       }
301
302       synchronized (linkedList) {
303         Object JavaDoc o = linkedList.poll();
304         Assert.assertEquals("first element", o);
305       }
306     }
307   }
308
309   void testLinkedListOffer(List JavaDoc list, boolean validate) {
310     if (!(list instanceof LinkedList JavaDoc)) { return; }
311
312     LinkedList JavaDoc linkedList = (LinkedList JavaDoc) list;
313
314     if (validate) {
315       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "first element", "second element" }), list);
316     } else {
317       synchronized (linkedList) {
318         linkedList.add("first element");
319       }
320
321       synchronized (linkedList) {
322         linkedList.offer("second element");
323       }
324     }
325   }
326
327   void testBasicAddNull(List JavaDoc list, boolean validate) {
328     if (validate) {
329       assertListsEqual(Arrays.asList(new Object JavaDoc[] { null, null, "my cat hates you", null }), list);
330     } else {
331       synchronized (list) {
332         boolean added;
333         added = list.add(null);
334         Assert.assertTrue(added);
335         added = list.add(null);
336         Assert.assertTrue(added);
337         added = list.add("my cat hates you");
338         Assert.assertTrue(added);
339         added = list.add(null);
340         Assert.assertTrue(added);
341       }
342     }
343   }
344
345   void testBasicAddAt(List JavaDoc list, boolean validate) {
346     if (validate) {
347       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "1", "2", "3", "4" }), list);
348     } else {
349       synchronized (list) {
350         list.add(0, "2");
351       }
352       synchronized (list) {
353         list.add(0, "1");
354       }
355       synchronized (list) {
356         list.add(2, "4");
357       }
358       synchronized (list) {
359         list.add(2, "3");
360       }
361     }
362   }
363
364   void testAdd(List JavaDoc list, boolean validate) {
365     if (validate) {
366       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "element" }), list);
367     } else {
368       synchronized (list) {
369         list.add("element");
370       }
371     }
372   }
373
374   void testAddAll(List JavaDoc list, boolean validate) {
375     if (validate) {
376       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "patty", "calahan", "was", "here" }), list);
377     } else {
378       List JavaDoc toAdd = new ArrayList JavaDoc();
379       toAdd.add("patty");
380       toAdd.add("calahan");
381       toAdd.add("was");
382       toAdd.add("here");
383
384       synchronized (list) {
385         list.addAll(toAdd);
386       }
387     }
388   }
389
390   void testAddAllAt(List JavaDoc list, boolean validate) {
391     if (validate) {
392       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "uno", "dos", "tres", "catorce?" }), list);
393     } else {
394       synchronized (list) {
395         list.add("uno");
396       }
397
398       List JavaDoc toAdd = new ArrayList JavaDoc();
399       toAdd.add("dos");
400       toAdd.add("tres");
401       toAdd.add("catorce?");
402
403       synchronized (list) {
404         list.addAll(1, toAdd);
405       }
406     }
407   }
408
409   void testClear(List JavaDoc list, boolean validate) {
410     if (validate) {
411       assertEmptyList(list);
412     } else {
413       synchronized (list) {
414         list.add("clear me baby");
415         list.clear();
416       }
417
418       synchronized (list) {
419         list.add("clear me baby one more time");
420       }
421
422       synchronized (list) {
423         list.clear();
424       }
425     }
426   }
427
428   void testSetElementAt(List JavaDoc list, boolean validate) {
429     if (validate) {
430       assertSingleElement(list, "new");
431     } else {
432       synchronized (list) {
433         list.add("orig");
434       }
435
436       synchronized (list) {
437         list.set(0, "new");
438       }
439     }
440   }
441
442   void testRemoveAt(List JavaDoc list, boolean validate) {
443     if (validate) {
444       String JavaDoc item0 = (String JavaDoc) list.get(0);
445       String JavaDoc item1 = (String JavaDoc) list.get(1);
446       Assert.assertEquals("value", item0);
447       Assert.assertEquals("different value", item1);
448     } else {
449       synchronized (list) {
450         list.add("value");
451         list.add("different value");
452         list.add("value");
453       }
454
455       synchronized (list) {
456         Object JavaDoc prev = list.remove(2);
457         Assert.assertEquals("value", prev);
458       }
459     }
460   }
461
462   void testRemoveNull1(List JavaDoc list, boolean validate) {
463     if (validate) {
464       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "first element", null, "third element" }), list);
465     } else {
466       synchronized (list) {
467         list.add("first element");
468         list.add(null);
469         list.add(null);
470         list.add("third element");
471       }
472       synchronized (list) {
473         list.remove(null);
474       }
475     }
476   }
477
478   void testRemoveNull2(List JavaDoc list, boolean validate) {
479     if (validate) {
480       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "first element", "second element" }), list);
481     } else {
482       synchronized (list) {
483         list.add("first element");
484         list.add(null);
485         list.add("second element");
486         list.add(null);
487       }
488       synchronized (list) {
489         list.remove(null);
490         list.remove(null);
491       }
492     }
493   }
494
495   void testSubList(List JavaDoc list, boolean validate) {
496     if (validate) {
497       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "first element", "second element", "third element",
498           "fourth element" }), list);
499     } else {
500       synchronized (list) {
501         list.add("first element");
502         list.add("third element");
503         list.add("fourth element");
504       }
505       List JavaDoc subList = list.subList(1, 2);
506       ListIterator JavaDoc listIterator = subList.listIterator();
507       synchronized (list) {
508         listIterator.add("second element");
509       }
510     }
511   }
512
513   void testRemoveAll(List JavaDoc list, boolean validate) {
514     if (validate) {
515       assertEmptyList(list);
516     } else {
517       synchronized (list) {
518         list.add("first element");
519         list.add("second element");
520       }
521       List JavaDoc removeList = new ArrayList JavaDoc(2);
522       removeList.add("first element");
523       removeList.add("second element");
524       synchronized (list) {
525         list.removeAll(removeList);
526       }
527     }
528   }
529
530   void testRemoveRange(List JavaDoc list, boolean validate) {
531     if (validate) {
532       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "first element", "fourth element" }), list);
533     } else {
534       synchronized (list) {
535         list.add("first element");
536         list.add("second element");
537         list.add("third element");
538         list.add("fourth element");
539       }
540       Class JavaDoc listClass = AbstractList JavaDoc.class;
541       Class JavaDoc[] parameterType = new Class JavaDoc[2];
542       parameterType[0] = Integer.TYPE;
543       parameterType[1] = Integer.TYPE;
544
545       try {
546         synchronized (list) {
547           Method JavaDoc m = listClass.getDeclaredMethod("removeRange", parameterType);
548           m.setAccessible(true); // suppressing java access checking since removeRange is
549
// a protected method.
550
m.invoke(list, new Object JavaDoc[] { new Integer JavaDoc(1), new Integer JavaDoc(3) });
551         }
552       } catch (Exception JavaDoc e) {
553         // ignore Exception in test.
554
}
555     }
556   }
557
558   void testToArray(List JavaDoc list, boolean validate) {
559     Object JavaDoc[] array = getArray(list);
560
561     if (validate) {
562       assertListsEqual(Arrays.asList(array), list);
563     } else {
564       synchronized (list) {
565         list.add("first element");
566         list.add("second element");
567       }
568       synchronized (array) {
569         Object JavaDoc[] returnArray = list.toArray(array);
570         Assert.assertTrue(returnArray == array);
571       }
572     }
573   }
574
575   // List Iterator testing methods.
576
void testListIteratorSet1(List JavaDoc list, boolean validate) {
577     if (validate) {
578       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "modified first element", "second element", "third element" }),
579                        list);
580     } else {
581       synchronized (list) {
582         list.add("first element");
583         list.add("second element");
584         list.add("third element");
585       }
586       synchronized (list) {
587         ListIterator JavaDoc lIterator = list.listIterator();
588         lIterator.next();
589         lIterator.set("modified first element");
590       }
591     }
592   }
593
594   void testListIteratorSet2(List JavaDoc list, boolean validate) {
595     if (validate) {
596       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "first element", "modified second element", "third element" }),
597                        list);
598     } else {
599       synchronized (list) {
600         list.add("first element");
601         list.add("second element");
602         list.add("third element");
603       }
604       synchronized (list) {
605         ListIterator JavaDoc lIterator = list.listIterator();
606         lIterator.next();
607         lIterator.next();
608         lIterator.set("modified second element");
609       }
610     }
611   }
612
613   void testListIteratorSetRemove1(List JavaDoc list, boolean validate) {
614     if (validate) {
615       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "modified first element", "third element" }), list);
616     } else {
617       synchronized (list) {
618         list.add("first element");
619         list.add("second element");
620         list.add("third element");
621       }
622       synchronized (list) {
623         ListIterator JavaDoc lIterator = list.listIterator();
624         lIterator.next();
625         lIterator.next();
626         lIterator.remove();
627         lIterator.previous();
628         lIterator.set("modified first element");
629       }
630     }
631   }
632
633   void testListIteratorSetRemove2(List JavaDoc list, boolean validate) {
634     if (validate) {
635       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "first element", "modified second element" }), list);
636     } else {
637       synchronized (list) {
638         list.add("first element");
639         list.add("second element");
640         list.add("third element");
641       }
642       synchronized (list) {
643         ListIterator JavaDoc lIterator = list.listIterator();
644         lIterator.next();
645         lIterator.next();
646         lIterator.set("modified second element");
647         lIterator.next();
648         lIterator.remove();
649       }
650     }
651   }
652
653   void testListIteratorDuplicateElementRemove(List JavaDoc list, boolean validate) {
654     if (validate) {
655       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "first element", "second element" }), list);
656     } else {
657       synchronized (list) {
658         list.add("first element");
659         list.add("second element");
660         list.add("first element");
661       }
662       synchronized (list) {
663         ListIterator JavaDoc lIterator = list.listIterator();
664         lIterator.next();
665         lIterator.next();
666         lIterator.next();
667         lIterator.remove();
668       }
669     }
670   }
671
672   void testListIteratorAdd1(List JavaDoc list, boolean validate) {
673     if (validate) {
674       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "first element", "second element", "third element" }), list);
675       // assertListsEqual(Arrays.asList(new Object[] { "second element", "third element" }), list);
676
} else {
677       synchronized (list) {
678         list.add("second element");
679         list.add("third element");
680       }
681       synchronized (list) {
682         ListIterator JavaDoc lIterator = list.listIterator();
683         lIterator.add("first element");
684       }
685     }
686   }
687
688   void testListIteratorAdd2(List JavaDoc list, boolean validate) {
689     if (validate) {
690       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "first element", "second element", "third element" }), list);
691     } else {
692       synchronized (list) {
693         list.add("first element");
694         list.add("third element");
695       }
696       synchronized (list) {
697         ListIterator JavaDoc lIterator = list.listIterator();
698         lIterator.next();
699         lIterator.add("second element");
700       }
701     }
702   }
703
704   void testListIteratorAddSet1(List JavaDoc list, boolean validate) {
705     if (validate) {
706       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "modified first element", "second element", "third element" }),
707                        list);
708     } else {
709       synchronized (list) {
710         list.add("second element");
711         list.add("third element");
712       }
713       synchronized (list) {
714         ListIterator JavaDoc lIterator = list.listIterator();
715         lIterator.add("first element");
716         lIterator.previous();
717         lIterator.set("modified first element");
718       }
719     }
720   }
721
722   void testListIteratorAddSet2(List JavaDoc list, boolean validate) {
723     if (validate) {
724       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "first element", "second element", "modified third element" }),
725                        list);
726     } else {
727       synchronized (list) {
728         list.add("first element");
729         list.add("third element");
730       }
731       synchronized (list) {
732         ListIterator JavaDoc lIterator = list.listIterator();
733         lIterator.next();
734         lIterator.add("second element");
735         lIterator.next();
736         lIterator.set("modified third element");
737       }
738     }
739   }
740
741   void testListIteratorAddSet3(List JavaDoc list, boolean validate) {
742     if (validate) {
743       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "first element", "second element", "modified third element",
744           "fourth element" }), list);
745     } else {
746       synchronized (list) {
747         list.add("first element");
748         list.add("second element");
749         list.add("fourth element");
750       }
751       synchronized (list) {
752         ListIterator JavaDoc lIterator = list.listIterator(1);
753         lIterator.next();
754         lIterator.add("third element");
755         lIterator.previous();
756         lIterator.set("modified third element");
757       }
758     }
759   }
760
761   void testListIteratorAddNull(List JavaDoc list, boolean validate) {
762     if (validate) {
763       assertListsEqual(Arrays.asList(new Object JavaDoc[] { null, null, "third element" }), list);
764     } else {
765       synchronized (list) {
766         ListIterator JavaDoc lIterator = list.listIterator();
767         lIterator.add(null);
768         lIterator.add(null);
769         lIterator.add("third element");
770       }
771     }
772   }
773
774   void testListIteratorAddRemove(List JavaDoc list, boolean validate) {
775     if (validate) {
776       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "second element", "third element" }), list);
777     } else {
778       synchronized (list) {
779         list.add("second element");
780         list.add("third element");
781       }
782       synchronized (list) {
783         ListIterator JavaDoc lIterator = list.listIterator();
784         lIterator.add("first element");
785         lIterator.previous();
786         lIterator.remove();
787       }
788     }
789   }
790
791   void testListIteratorRemoveNull(List JavaDoc list, boolean validate) {
792     if (validate) {
793       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "first element", null, "third element" }), list);
794     } else {
795       synchronized (list) {
796         list.add("first element");
797         list.add(null);
798         list.add(null);
799         list.add("third element");
800       }
801       synchronized (list) {
802         ListIterator JavaDoc lIterator = list.listIterator();
803         lIterator.next();
804         lIterator.next();
805         lIterator.remove();
806       }
807     }
808   }
809
810   // Read only testing methods.
811
void testReadOnlyAdd(List JavaDoc list, boolean validate) {
812     if (list instanceof Vector JavaDoc) { return; }
813
814     if (validate) {
815       assertEmptyList(list);
816     } else {
817       synchronized (list) {
818         try {
819           list.add("first element");
820           throw new AssertionError JavaDoc("Should have thrown a ReadOnlyException");
821         } catch (ReadOnlyException t) {
822           // Expected
823
}
824       }
825     }
826   }
827
828   void testReadOnlySet(List JavaDoc list, boolean validate) {
829     if (list instanceof Vector JavaDoc) { return; }
830
831     if (validate) {
832       assertEmptyList(list);
833     } else {
834       synchronized (list) {
835         try {
836           list.set(0, "first element");
837           throw new AssertionError JavaDoc("Should have thrown a ReadOnlyException");
838         } catch (ReadOnlyException t) {
839           // Expected
840
}
841       }
842     }
843   }
844
845   // Setting up for the ReadOnly test for remove.
846
void testSetUpRemove(List JavaDoc list, boolean validate) {
847     if (list instanceof Vector JavaDoc) { return; }
848
849     if (validate) {
850       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "first element", "second element" }), list);
851     } else {
852       synchronized (list) {
853         list.add("first element");
854         list.add("second element");
855       }
856       tryReadOnlyRemove(list);
857     }
858   }
859
860   // tryReadOnlyRemove() goes hand in hand with testSetUpRemove().
861
private void tryReadOnlyRemove(List JavaDoc list) {
862     synchronized (list) {
863       try {
864         list.remove("second element");
865         throw new AssertionError JavaDoc("Should have thrown a ReadOnlyException");
866       } catch (ReadOnlyException t) {
867         // Expected
868
}
869     }
870   }
871
872   void testSetUpToArray(List JavaDoc list, boolean validate) {
873     if (list instanceof Vector JavaDoc) { return; }
874
875     Object JavaDoc[] array = getArray(list);
876     if (validate) {
877       assertEmptyObjectArray(array);
878     } else {
879       synchronized (list) {
880         list.add("first element");
881         list.add("second element");
882       }
883       tryReadOnlyToArray(list);
884     }
885   }
886
887   void tryReadOnlyToArray(List JavaDoc list) {
888     Object JavaDoc[] array = getArray(list);
889     synchronized (array) {
890       try {
891         Object JavaDoc[] returnArray = list.toArray(array);
892         Assert.assertTrue(returnArray == array);
893         throw new AssertionError JavaDoc("Should have thrown a ReadOnlyException");
894       } catch (ReadOnlyException t) {
895         // Expected
896
}
897     }
898   }
899
900   // Setting up for the ReadOnly test for Iterator remove.
901
void testSetUpIteratorRemove(List JavaDoc list, boolean validate) {
902     if (list instanceof Vector JavaDoc) { return; }
903
904     if (validate) {
905       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "first element", "second element" }), list);
906     } else {
907       synchronized (list) {
908         list.add("first element");
909         list.add("second element");
910       }
911       tryReadOnlyIteratorRemove(list);
912     }
913   }
914
915   // tryReadOnlyIteratorRemove() goes hand in hand with testSetUpIteratorRemove().
916
private void tryReadOnlyIteratorRemove(List JavaDoc list) {
917     synchronized (list) {
918       try {
919         Iterator JavaDoc iterator = list.iterator();
920         iterator.next();
921         iterator.remove();
922         throw new AssertionError JavaDoc("Should have thrown a ReadOnlyException");
923       } catch (ReadOnlyException t) {
924         // Expected
925
}
926     }
927   }
928
929   // Setting up for the ReadOnly test for clear.
930
void testSetUpClear(List JavaDoc list, boolean validate) {
931     if (list instanceof Vector JavaDoc) { return; }
932
933     if (validate) {
934       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "first element", "second element" }), list);
935     } else {
936       synchronized (list) {
937         list.add("first element");
938         list.add("second element");
939       }
940       tryReadOnlyClear(list);
941     }
942   }
943
944   // tryReadOnlyClear() goes hand in hand with testSetUpClear().
945
private void tryReadOnlyClear(List JavaDoc list) {
946     synchronized (list) {
947       try {
948         list.clear();
949         throw new AssertionError JavaDoc("Should have thrown a ReadOnlyException");
950       } catch (ReadOnlyException t) {
951         // Expected
952
}
953     }
954   }
955
956   // Setting up for the ReadOnly test for retainAll.
957
void testSetUpRetainAll(List JavaDoc list, boolean validate) {
958     if (list instanceof Vector JavaDoc) { return; }
959
960     if (validate) {
961       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "first element", "second element" }), list);
962     } else {
963       synchronized (list) {
964         list.add("first element");
965         list.add("second element");
966       }
967       tryReadOnlyRetainAll(list);
968     }
969   }
970
971   // tryReadOnlyRetainAll() goes hand in hand with testSetUpRetainAll().
972
private void tryReadOnlyRetainAll(List JavaDoc list) {
973     synchronized (list) {
974       List JavaDoc toRetain = new ArrayList JavaDoc();
975       toRetain.add("first element");
976       try {
977         list.retainAll(toRetain);
978         throw new AssertionError JavaDoc("Should have thrown a ReadOnlyException");
979       } catch (ReadOnlyException t) {
980         // Expected
981
}
982     }
983   }
984
985   // Setting up for the ReadOnly test for removeAll.
986
void testSetUpRemoveAll(List JavaDoc list, boolean validate) {
987     if (list instanceof Vector JavaDoc) { return; }
988
989     if (validate) {
990       assertListsEqual(Arrays.asList(new Object JavaDoc[] { "first element", "second element" }), list);
991     } else {
992       synchronized (list) {
993         list.add("first element");
994         list.add("second element");
995       }
996       tryReadOnlyRemoveAll(list);
997     }
998   }
999
1000  // tryReadOnlyRemoveAll() goes hand in hand with testSetUpRemoveAll().
1001
private void tryReadOnlyRemoveAll(List JavaDoc list) {
1002    synchronized (list) {
1003      List JavaDoc toRemove = new ArrayList JavaDoc();
1004      toRemove.add("first element");
1005      try {
1006        list.removeAll(toRemove);
1007        throw new AssertionError JavaDoc("Should have thrown a ReadOnlyException");
1008      } catch (ReadOnlyException e) {
1009        // Expected
1010
}
1011    }
1012  }
1013
1014  void testListIteratorReadOnlyAdd(List JavaDoc list, boolean validate) {
1015    if (list instanceof Vector JavaDoc) { return; }
1016
1017    if (validate) {
1018      assertEmptyList(list);
1019    } else {
1020      synchronized (list) {
1021        ListIterator JavaDoc lIterator = list.listIterator();
1022        try {
1023          lIterator.add("first element");
1024          throw new AssertionError JavaDoc("Should have thrown a ReadOnlyException");
1025        } catch (ReadOnlyException e) {
1026          // Expected
1027
}
1028      }
1029    }
1030  }
1031
1032  void testCollectionsAddAll(List JavaDoc list, boolean validate) {
1033    if (validate) {
1034      assertListsEqual(Arrays.asList(new Object JavaDoc[] { "first element", "second element", "third element" }), list);
1035    } else {
1036      synchronized (list) {
1037        list.addAll(Arrays.asList(new Object JavaDoc[] { "first element", "second element", "third element" }));
1038      }
1039    }
1040  }
1041
1042  // Iterator testing methods.
1043
void testIteratorRemove(List JavaDoc list, boolean validate) {
1044    if (validate) {
1045      assertListsEqual(Arrays.asList(new Object JavaDoc[] { "second element" }), list);
1046    } else {
1047      synchronized (list) {
1048        list.add("first element");
1049        list.add("second element");
1050      }
1051      synchronized (list) {
1052        Iterator JavaDoc iterator = list.iterator();
1053        Assert.assertEquals(true, iterator.hasNext());
1054        iterator.next();
1055        iterator.remove();
1056      }
1057    }
1058  }
1059
1060  void testIteratorDuplicateElementRemove(List JavaDoc list, boolean validate) {
1061    if (validate) {
1062      assertListsEqual(Arrays.asList(new Object JavaDoc[] { "first element", "second element" }), list);
1063    } else {
1064      synchronized (list) {
1065        list.add("first element");
1066        list.add("second element");
1067        list.add("first element");
1068      }
1069      synchronized (list) {
1070        Iterator JavaDoc iterator = list.iterator();
1071        Assert.assertEquals(true, iterator.hasNext());
1072        iterator.next();
1073        iterator.next();
1074        iterator.next();
1075        iterator.remove();
1076      }
1077    }
1078  }
1079
1080  void testIteratorRemoveNull(List JavaDoc list, boolean validate) {
1081    if (validate) {
1082      assertListsEqual(Arrays.asList(new Object JavaDoc[] { "first element", null, "second element" }), list);
1083    } else {
1084      synchronized (list) {
1085        list.add("first element");
1086        list.add(null);
1087        list.add(null);
1088        list.add("second element");
1089      }
1090      synchronized (list) {
1091        Iterator JavaDoc iterator = list.iterator();
1092        Assert.assertEquals(true, iterator.hasNext());
1093        iterator.next();
1094        iterator.next();
1095        iterator.remove();
1096      }
1097    }
1098  }
1099
1100  // Stack specific testing method.
1101
void testStackPush(List JavaDoc list, boolean validate) {
1102    if (!(list instanceof Stack JavaDoc)) { return; }
1103
1104    if (validate) {
1105      assertListsEqual(Arrays.asList(new Object JavaDoc[] { "first element", "second element" }), list);
1106    } else {
1107      synchronized (list) {
1108        Stack JavaDoc s = (Stack JavaDoc) list;
1109        s.push("first element");
1110        s.push("second element");
1111      }
1112    }
1113  }
1114
1115  void testStackPop(List JavaDoc list, boolean validate) {
1116    if (!(list instanceof Stack JavaDoc)) { return; }
1117
1118    if (validate) {
1119      assertListsEqual(Arrays.asList(new Object JavaDoc[] { "first element" }), list);
1120    } else {
1121      Stack JavaDoc s = (Stack JavaDoc) list;
1122      synchronized (list) {
1123        s.push("first element");
1124        s.push("second element");
1125      }
1126      synchronized (list) {
1127        Object JavaDoc o = s.pop();
1128        Assert.assertEquals("second element", o);
1129      }
1130    }
1131  }
1132
1133  private Object JavaDoc[] getArray(List JavaDoc list) {
1134    if (list instanceof LinkedList JavaDoc) { return (Object JavaDoc[]) sharedMap.get("arrayforLinkedList"); }
1135    if (list instanceof ArrayList JavaDoc) { return (Object JavaDoc[]) sharedMap.get("arrayforArrayList"); }
1136    if (list instanceof Stack JavaDoc) { // need to check instanceof Stack first before checking instance of Vector
1137
// as Stack is a subclass of Vector.
1138
return (Object JavaDoc[]) sharedMap.get("arrayforStack");
1139    }
1140    if (list instanceof Vector JavaDoc) { return (Object JavaDoc[]) sharedMap.get("arrayforVector"); }
1141    return null;
1142  }
1143
1144  private static void assertEmptyObjectArray(Object JavaDoc[] array) {
1145    for (int i = 0; i < array.length; i++) {
1146      Assert.assertNull(array[i]);
1147    }
1148  }
1149
1150  private static void assertEmptyList(List JavaDoc list) {
1151    Assert.assertEquals(0, list.size());
1152    Assert.assertTrue(list.isEmpty());
1153
1154    int count = 0;
1155    for (Iterator JavaDoc i = list.iterator(); i.hasNext();) {
1156      count++;
1157    }
1158    Assert.assertEquals(0, count);
1159  }
1160
1161  private static void assertListsEqual(List JavaDoc expect, List JavaDoc actual) {
1162    Assert.assertEquals(expect.size(), actual.size());
1163
1164    Assert.assertTrue(expect.containsAll(actual));
1165    Assert.assertTrue(actual.containsAll(expect));
1166
1167    for (int i = 0, n = expect.size(); i < n; i++) {
1168      Assert.assertEquals(expect.get(i), actual.get(i));
1169    }
1170
1171    if (expect.isEmpty()) {
1172      Assert.assertTrue(actual.isEmpty());
1173    } else {
1174      Assert.assertFalse(actual.isEmpty());
1175    }
1176
1177    for (Iterator JavaDoc iExpect = expect.iterator(), iActual = actual.iterator(); iExpect.hasNext();) {
1178      Assert.assertEquals(iExpect.next(), iActual.next());
1179    }
1180
1181  }
1182
1183  public static void visitL1DSOConfig(ConfigVisitor visitor, DSOClientConfigHelper config) {
1184    String JavaDoc testClass = GenericList15TestApp.class.getName();
1185    config.getOrCreateSpec(testClass);
1186    String JavaDoc writeAllowedMethodExpression = "* " + testClass + "*.*(..)";
1187    config.addWriteAutolock(writeAllowedMethodExpression);
1188    String JavaDoc readOnlyMethodExpression = "* " + testClass + "*.*ReadOnly*(..)";
1189    config.addReadAutolock(readOnlyMethodExpression);
1190  }
1191
1192  private static void assertSingleElement(List JavaDoc list, Object JavaDoc obj) {
1193    Assert.assertEquals(1, list.size());
1194    Assert.assertEquals(obj, list.get(0));
1195    Assert.assertFalse(list.isEmpty());
1196    Assert.assertTrue(list.contains(obj));
1197
1198    int count = 0;
1199    for (Iterator JavaDoc i = list.iterator(); i.hasNext();) {
1200      count++;
1201      Assert.assertEquals(obj, i.next());
1202    }
1203    Assert.assertEquals(1, count);
1204
1205  }
1206
1207}
1208
Popular Tags