jtulach@374
|
1 |
package org.apidesign.openfixed;
|
jtulach@374
|
2 |
|
jtulach@374
|
3 |
import java.util.List;
|
jtulach@374
|
4 |
import java.util.concurrent.CountDownLatch;
|
jtulach@374
|
5 |
|
jtulach@374
|
6 |
/** Test the Calculator.createPending() behavior.
|
jtulach@374
|
7 |
*
|
jtulach@374
|
8 |
* @author Jaroslav Tulach <jtulach@netbeans.org>
|
jtulach@374
|
9 |
*/
|
jtulach@374
|
10 |
public class PendingTest extends CalculatorBase {
|
jtulach@374
|
11 |
|
jtulach@374
|
12 |
public PendingTest(String testName) {
|
jtulach@374
|
13 |
super(testName);
|
jtulach@374
|
14 |
}
|
jtulach@374
|
15 |
|
jtulach@374
|
16 |
@Override
|
jtulach@374
|
17 |
protected Calculator create() {
|
jtulach@374
|
18 |
return Calculator.createPending();
|
jtulach@374
|
19 |
}
|
jtulach@374
|
20 |
|
jtulach@374
|
21 |
public void testPendingEvents() throws Exception {
|
jtulach@374
|
22 |
BlockingListener bl = new BlockingListener();
|
jtulach@374
|
23 |
|
jtulach@374
|
24 |
Calculator calc = create();
|
jtulach@374
|
25 |
calc.addModificationListener(bl);
|
jtulach@374
|
26 |
|
jtulach@374
|
27 |
calc.add(10);
|
jtulach@374
|
28 |
bl.first.await();
|
jtulach@374
|
29 |
|
jtulach@374
|
30 |
calc.add(1);
|
jtulach@374
|
31 |
calc.add(2);
|
jtulach@374
|
32 |
calc.add(3);
|
jtulach@374
|
33 |
|
jtulach@374
|
34 |
bl.cdl.countDown();
|
jtulach@374
|
35 |
|
jtulach@374
|
36 |
List<ModificationEvent> events = bl.assertEvents("Four changes together", 4);
|
jtulach@374
|
37 |
|
jtulach@374
|
38 |
assertEquals("No pending events for first event", 0, events.get(0).getPending());
|
jtulach@374
|
39 |
assertEquals("Group of three, two remaining", 2, events.get(1).getPending());
|
jtulach@374
|
40 |
assertEquals("Group of three, one remaining", 1, events.get(2).getPending());
|
jtulach@374
|
41 |
assertEquals("Group of three, last one", 0, events.get(3).getPending());
|
jtulach@374
|
42 |
}
|
jtulach@374
|
43 |
|
jtulach@374
|
44 |
static class BlockingListener extends MockListener {
|
jtulach@374
|
45 |
CountDownLatch first = new CountDownLatch(1);
|
jtulach@374
|
46 |
CountDownLatch cdl = new CountDownLatch(1);
|
jtulach@374
|
47 |
|
jtulach@374
|
48 |
@Override
|
jtulach@374
|
49 |
public synchronized void modification(ModificationEvent ev) {
|
jtulach@374
|
50 |
try {
|
jtulach@374
|
51 |
first.countDown();
|
jtulach@374
|
52 |
cdl.await();
|
jtulach@374
|
53 |
} catch (InterruptedException ex) {
|
jtulach@374
|
54 |
throw new IllegalStateException(ex);
|
jtulach@374
|
55 |
}
|
jtulach@374
|
56 |
super.modification(ev);
|
jtulach@374
|
57 |
}
|
jtulach@374
|
58 |
}
|
jtulach@374
|
59 |
|
jtulach@374
|
60 |
}
|