1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package net.grinder.util.thread;
23
24 import java.util.Timer;
25 import java.util.TimerTask;
26
27 import junit.framework.TestCase;
28
29
30
31
32
33
34
35 public class TestBooleanCondition extends TestCase {
36
37 public void testWithSingleThread() throws Exception {
38 final BooleanCondition booleanCondition = new BooleanCondition();
39
40
41 assertFalse(booleanCondition.await(false));
42 assertFalse(booleanCondition.await(false));
43 assertFalse(booleanCondition.get());
44
45 booleanCondition.set(true);
46 assertTrue(booleanCondition.get());
47 assertTrue(booleanCondition.await(true));
48
49 booleanCondition.set(false);
50 assertFalse(booleanCondition.get());
51 assertFalse(booleanCondition.await(false));
52 }
53
54 public void testWithMultipleThreads() throws Exception {
55 final Timer timer = new Timer();
56
57 final BooleanCondition booleanCondition = new BooleanCondition();
58
59 final TimerTask setTrueTask = new TimerTask() {
60 public void run() { booleanCondition.set(true); }
61 };
62
63 timer.schedule(setTrueTask, 0, 1);
64
65 assertTrue(booleanCondition.await(true));
66 assertTrue(booleanCondition.await(true));
67 assertTrue(booleanCondition.get());
68
69 setTrueTask.cancel();
70
71 final TimerTask wakeUpAllWaitersTask = new TimerTask() {
72 public void run() { booleanCondition.wakeUpAllWaiters(); }
73 };
74
75 timer.schedule(wakeUpAllWaitersTask, 0, 1);
76
77
78 assertTrue(booleanCondition.await(false));
79
80
81 assertTrue(booleanCondition.await(true));
82
83 wakeUpAllWaitersTask.cancel();
84
85 timer.cancel();
86 }
87 }