66 |
|
import java.util.Collection; |
67 |
|
import java.util.Collections; |
68 |
|
import java.util.Date; |
69 |
+ |
import java.util.Deque; |
70 |
|
import java.util.Enumeration; |
71 |
+ |
import java.util.HashSet; |
72 |
|
import java.util.Iterator; |
73 |
|
import java.util.List; |
74 |
|
import java.util.NoSuchElementException; |
75 |
|
import java.util.PropertyPermission; |
76 |
+ |
import java.util.Set; |
77 |
|
import java.util.concurrent.BlockingQueue; |
78 |
|
import java.util.concurrent.Callable; |
79 |
|
import java.util.concurrent.CountDownLatch; |
1449 |
|
} |
1450 |
|
} |
1451 |
|
|
1449 |
– |
public abstract class RunnableShouldThrow implements Runnable { |
1450 |
– |
protected abstract void realRun() throws Throwable; |
1451 |
– |
|
1452 |
– |
final Class<?> exceptionClass; |
1453 |
– |
|
1454 |
– |
<T extends Throwable> RunnableShouldThrow(Class<T> exceptionClass) { |
1455 |
– |
this.exceptionClass = exceptionClass; |
1456 |
– |
} |
1457 |
– |
|
1458 |
– |
public final void run() { |
1459 |
– |
try { |
1460 |
– |
realRun(); |
1461 |
– |
threadShouldThrow(exceptionClass.getSimpleName()); |
1462 |
– |
} catch (Throwable t) { |
1463 |
– |
if (! exceptionClass.isInstance(t)) |
1464 |
– |
threadUnexpectedException(t); |
1465 |
– |
} |
1466 |
– |
} |
1467 |
– |
} |
1468 |
– |
|
1452 |
|
public abstract class ThreadShouldThrow extends Thread { |
1453 |
|
protected abstract void realRun() throws Throwable; |
1454 |
|
|
2054 |
|
assertEquals(savedCompletedTaskCount, p.getCompletedTaskCount()); |
2055 |
|
assertEquals(savedQueueSize, p.getQueue().size()); |
2056 |
|
} |
2057 |
+ |
|
2058 |
+ |
void assertCollectionsEquals(Collection<?> x, Collection<?> y) { |
2059 |
+ |
assertEquals(x, y); |
2060 |
+ |
assertEquals(y, x); |
2061 |
+ |
assertEquals(x.isEmpty(), y.isEmpty()); |
2062 |
+ |
assertEquals(x.size(), y.size()); |
2063 |
+ |
if (x instanceof List) { |
2064 |
+ |
assertEquals(x.toString(), y.toString()); |
2065 |
+ |
} |
2066 |
+ |
if (x instanceof List || x instanceof Set) { |
2067 |
+ |
assertEquals(x.hashCode(), y.hashCode()); |
2068 |
+ |
} |
2069 |
+ |
if (x instanceof List || x instanceof Deque) { |
2070 |
+ |
assertTrue(Arrays.equals(x.toArray(), y.toArray())); |
2071 |
+ |
assertTrue(Arrays.equals(x.toArray(new Object[0]), |
2072 |
+ |
y.toArray(new Object[0]))); |
2073 |
+ |
} |
2074 |
+ |
} |
2075 |
+ |
|
2076 |
+ |
/** |
2077 |
+ |
* A weaker form of assertCollectionsEquals which does not insist |
2078 |
+ |
* that the two collections satisfy Object#equals(Object), since |
2079 |
+ |
* they may use identity semantics as Deques do. |
2080 |
+ |
*/ |
2081 |
+ |
void assertCollectionsEquivalent(Collection<?> x, Collection<?> y) { |
2082 |
+ |
if (x instanceof List || x instanceof Set) |
2083 |
+ |
assertCollectionsEquals(x, y); |
2084 |
+ |
else { |
2085 |
+ |
assertEquals(x.isEmpty(), y.isEmpty()); |
2086 |
+ |
assertEquals(x.size(), y.size()); |
2087 |
+ |
assertEquals(new HashSet(x), new HashSet(y)); |
2088 |
+ |
if (x instanceof Deque) { |
2089 |
+ |
assertTrue(Arrays.equals(x.toArray(), y.toArray())); |
2090 |
+ |
assertTrue(Arrays.equals(x.toArray(new Object[0]), |
2091 |
+ |
y.toArray(new Object[0]))); |
2092 |
+ |
} |
2093 |
+ |
} |
2094 |
+ |
} |
2095 |
|
} |