2 * Copyright 2000-2009 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package com.intellij.util.containers;
19 import junit.framework.Assert;
21 import java.util.Iterator;
23 public class WeakListTest extends WeaksTestCase {
24 private final WeakReferenceArray<Object> myWeakArray = new WeakReferenceArray<Object>();
25 private final WeakList<Object> myWeakList = new WeakList<Object>(myWeakArray);
27 protected void setUp() throws Exception {
29 Assert.assertTrue(WeakReferenceArray.PEFORM_CHECK_THREAD);
30 WeakReferenceArray.PEFORM_CHECK_THREAD = false;
33 protected void tearDown() throws Exception {
34 WeakReferenceArray.PEFORM_CHECK_THREAD = true;
38 public void testCompresses() {
39 for (int i = 0; i < 20; i++) {
40 addElement(new Object(), myWeakArray);
42 Assert.assertEquals(20, myWeakList.size());
43 checkSameElements(myWeakArray);
47 checkSameElements(myWeakArray);
50 assertEquals(21, myWeakList.size());
51 assertTrue(20 >= myWeakArray.getCorpseCount());
52 myWeakList.add(new Object());
53 assertTrue(String.valueOf(myWeakList.size()), myWeakList.size() <= 22);
56 checkSameNotNulls(myWeakArray);
59 public void testIterator() {
60 myWeakArray.add(new Object());
61 addElement(new Object(), myWeakArray);
62 myWeakArray.add(new Object());
63 addElement(new Object(), myWeakArray);
65 assertTrue(2 <= myWeakArray.getAliveCount());
67 for (Object element : myWeakList) {
68 assertNotNull(element);
71 assertEquals(2, elementCount);
74 public void testRemoveViaIterator() {
75 addElement(new Object(), myWeakArray);
76 myWeakArray.add(new Object());
77 addElement(new Object(), myWeakArray);
78 myWeakArray.add(new Object());
79 addElement(new Object(), myWeakArray);
80 Iterator<Object> iterator = myWeakList.iterator();
81 assertSame(myHolder.get(0), iterator.next());
82 while (myHolder.get(1) != iterator.next());
84 assertTrue(4 <= myWeakArray.getAliveCount());
87 assertTrue(3 <= myWeakArray.getAliveCount());
90 assertTrue(2 <= myWeakArray.getAliveCount());
91 assertSame(myHolder.get(2), iterator.next());
92 assertFalse(iterator.hasNext());
94 checkSameNotNulls(myWeakArray);
95 myWeakArray.compress(-1);
96 checkSameElements(myWeakArray);
99 public void testRemoveLastViaIterator() {
100 addElement(new Object(), myWeakArray);
101 addElement(new Object(), myWeakArray);
102 Iterator<Object> iterator = myWeakList.iterator();
104 assertTrue(iterator.hasNext());
106 assertFalse(iterator.hasNext());
108 assertFalse(iterator.hasNext());
110 checkSameNotNulls(myWeakArray);
113 public void testIteratorKeepsFirstElement() {
114 addElement(new Object(), myWeakArray);
115 addElement(new Object(), myWeakArray);
116 Iterator<Object> iterator = myWeakList.iterator();
117 assertTrue(iterator.hasNext());
120 assertNotNull(iterator.next());
121 assertFalse(iterator.hasNext());
124 public void testIteratorKeepsNextElement() {
125 addElement(new Object(), myWeakArray);
126 addElement(new Object(), myWeakArray);
127 addElement(new Object(), myWeakArray);
128 Iterator<Object> iterator = myWeakList.iterator();
130 assertTrue(iterator.hasNext());
133 assertNotNull(iterator.next());
134 assertFalse(iterator.hasNext());