1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.collect;
18
19 import junit.framework.TestCase;
20
21 import java.util.Collection;
22 import java.util.Iterator;
23 import java.util.Queue;
24
25
26
27
28
29
30 public class SynchronizedQueueTest extends TestCase {
31
32 protected Queue<String> create() {
33 TestQueue<String> inner = new TestQueue<String>();
34 Queue<String> outer = Synchronized.queue(inner, inner.mutex);
35 outer.add("foo");
36 return outer;
37 }
38
39 private static final class TestQueue<E> implements Queue<E> {
40 private final Queue<E> delegate = Lists.newLinkedList();
41 public final Object mutex = new Integer(1);
42
43 @Override
44 public boolean offer(E o) {
45 assertTrue(Thread.holdsLock(mutex));
46 return delegate.offer(o);
47 }
48
49 @Override
50 public E poll() {
51 assertTrue(Thread.holdsLock(mutex));
52 return delegate.poll();
53 }
54
55 @Override
56 public E remove() {
57 assertTrue(Thread.holdsLock(mutex));
58 return delegate.remove();
59 }
60
61 @Override
62 public E peek() {
63 assertTrue(Thread.holdsLock(mutex));
64 return delegate.peek();
65 }
66
67 @Override
68 public E element() {
69 assertTrue(Thread.holdsLock(mutex));
70 return delegate.element();
71 }
72
73 @Override
74 public Iterator<E> iterator() {
75
76 assertFalse(Thread.holdsLock(mutex));
77 return delegate.iterator();
78 }
79
80 @Override
81 public int size() {
82 assertTrue(Thread.holdsLock(mutex));
83 return delegate.size();
84 }
85
86 @Override
87 public boolean removeAll(Collection<?> collection) {
88 assertTrue(Thread.holdsLock(mutex));
89 return delegate.removeAll(collection);
90 }
91
92 @Override
93 public boolean isEmpty() {
94 assertTrue(Thread.holdsLock(mutex));
95 return delegate.isEmpty();
96 }
97
98 @Override
99 public boolean contains(Object object) {
100 assertTrue(Thread.holdsLock(mutex));
101 return delegate.contains(object);
102 }
103
104 @Override
105 public boolean add(E element) {
106 assertTrue(Thread.holdsLock(mutex));
107 return delegate.add(element);
108 }
109
110 @Override
111 public boolean remove(Object object) {
112 assertTrue(Thread.holdsLock(mutex));
113 return delegate.remove(object);
114 }
115
116 @Override
117 public boolean containsAll(Collection<?> collection) {
118 assertTrue(Thread.holdsLock(mutex));
119 return delegate.containsAll(collection);
120 }
121
122 @Override
123 public boolean addAll(Collection<? extends E> collection) {
124 assertTrue(Thread.holdsLock(mutex));
125 return delegate.addAll(collection);
126 }
127
128 @Override
129 public boolean retainAll(Collection<?> collection) {
130 assertTrue(Thread.holdsLock(mutex));
131 return delegate.retainAll(collection);
132 }
133
134 @Override
135 public void clear() {
136 assertTrue(Thread.holdsLock(mutex));
137 delegate.clear();
138 }
139
140 @Override
141 public Object[] toArray() {
142 assertTrue(Thread.holdsLock(mutex));
143 return delegate.toArray();
144 }
145
146 @Override
147 public <T> T[] toArray(T[] array) {
148 assertTrue(Thread.holdsLock(mutex));
149 return delegate.toArray(array);
150 }
151
152 private static final long serialVersionUID = 0;
153 }
154
155 public void testHoldsLockOnAllOperations() {
156 create().element();
157 create().offer("foo");
158 create().peek();
159 create().poll();
160 create().remove();
161 create().add("foo");
162 create().addAll(ImmutableList.of("foo"));
163 create().clear();
164 create().contains("foo");
165 create().containsAll(ImmutableList.of("foo"));
166 create().equals(ImmutableList.of("foo"));
167 create().hashCode();
168 create().isEmpty();
169 create().iterator();
170 create().remove("foo");
171 create().removeAll(ImmutableList.of("foo"));
172 create().retainAll(ImmutableList.of("foo"));
173 create().size();
174 create().toArray();
175 create().toArray(new String[] { "foo" });
176 }
177 }