1
1
package org .junit .runner .notification ;
2
2
3
+ import static org .hamcrest .core .Is .is ;
4
+ import static org .junit .Assert .assertThat ;
5
+
6
+ import java .util .concurrent .atomic .AtomicInteger ;
7
+
3
8
import junit .framework .TestCase ;
9
+ import net .jcip .annotations .ThreadSafe ;
10
+ import org .junit .runner .Description ;
4
11
import org .junit .runner .Result ;
5
12
6
13
/**
9
16
* other tests (including causing failed tests to appear to be passing).
10
17
*/
11
18
public class RunNotifierTest extends TestCase {
19
+ private RunNotifier notifier ;
20
+
21
+ @ Override
22
+ protected void setUp () throws Exception {
23
+ super .setUp ();
24
+ notifier = new RunNotifier ();
25
+ }
12
26
13
27
public void testNotifiesSecondListenerIfFirstThrowsException () {
14
28
FailureListener failureListener = new FailureListener ();
15
- RunNotifier notifier = new RunNotifier ();
16
29
notifier .addListener (new CorruptListener ());
17
30
notifier .addListener (failureListener );
18
31
notifier .fireTestFailure (new Failure (null , null ));
@@ -21,7 +34,6 @@ public void testNotifiesSecondListenerIfFirstThrowsException() {
21
34
}
22
35
23
36
public void testHasNoProblemsWithFailingListeners () { // see issues 209 and 395
24
- RunNotifier notifier = new RunNotifier ();
25
37
notifier .addListener (new CorruptListener ());
26
38
notifier .addListener (new FailureListener ());
27
39
notifier .addListener (new CorruptListener ());
@@ -39,6 +51,50 @@ public void testFailure(Failure failure) throws Exception {
39
51
throw new RuntimeException ();
40
52
}
41
53
}
54
+
55
+ public void testAddAndRemoveWithNonThreadSafeListener () {
56
+ CountingListener listener = new CountingListener ();
57
+ assertThat (listener .testStarted .get (), is (0 ));
58
+ notifier .addListener (listener );
59
+ notifier .fireTestStarted (null );
60
+ assertThat (listener .testStarted .get (), is (1 ));
61
+ notifier .removeListener (listener );
62
+ notifier .fireTestStarted (null );
63
+ assertThat (listener .testStarted .get (), is (1 ));
64
+ }
65
+
66
+ public void testAddFirstAndRemoveWithNonThreadSafeListener () {
67
+ CountingListener listener = new CountingListener ();
68
+ assertThat (listener .testStarted .get (), is (0 ));
69
+ notifier .addFirstListener (listener );
70
+ notifier .fireTestStarted (null );
71
+ assertThat (listener .testStarted .get (), is (1 ));
72
+ notifier .removeListener (listener );
73
+ notifier .fireTestStarted (null );
74
+ assertThat (listener .testStarted .get (), is (1 ));
75
+ }
76
+
77
+ public void testAddAndRemoveWithThreadSafeListener () {
78
+ ThreadSafeListener listener = new ThreadSafeListener ();
79
+ assertThat (listener .testStarted .get (), is (0 ));
80
+ notifier .addListener (listener );
81
+ notifier .fireTestStarted (null );
82
+ assertThat (listener .testStarted .get (), is (1 ));
83
+ notifier .removeListener (listener );
84
+ notifier .fireTestStarted (null );
85
+ assertThat (listener .testStarted .get (), is (1 ));
86
+ }
87
+
88
+ public void testAddFirstAndRemoveWithThreadSafeListener () {
89
+ ThreadSafeListener listener = new ThreadSafeListener ();
90
+ assertThat (listener .testStarted .get (), is (0 ));
91
+ notifier .addFirstListener (listener );
92
+ notifier .fireTestStarted (null );
93
+ assertThat (listener .testStarted .get (), is (1 ));
94
+ notifier .removeListener (listener );
95
+ notifier .fireTestStarted (null );
96
+ assertThat (listener .testStarted .get (), is (1 ));
97
+ }
42
98
43
99
private static class FailureListener extends RunListener {
44
100
private Failure failure ;
@@ -48,4 +104,18 @@ public void testFailure(Failure failure) throws Exception {
48
104
this .failure = failure ;
49
105
}
50
106
}
107
+
108
+ private static class CountingListener extends RunListener {
109
+ final AtomicInteger testStarted = new AtomicInteger (0 );
110
+
111
+ @ Override
112
+ public void testStarted (Description description ) throws Exception {
113
+ testStarted .incrementAndGet ();
114
+ }
115
+ }
116
+
117
+ @ ThreadSafe
118
+ private static class ThreadSafeListener extends CountingListener {
119
+ }
120
+
51
121
}
0 commit comments