35
35
36
36
import java .util .ArrayList ;
37
37
import java .util .List ;
38
- import java .util .concurrent .CountDownLatch ;
39
- import java .util .concurrent .TimeUnit ;
40
38
41
- import static junit .framework .Assert .assertTrue ;
42
39
import static junit .framework .Assert .fail ;
43
40
44
41
public class BrowseIteratorTest extends PowerMockTestCase {
@@ -80,48 +77,81 @@ public void tearDown() throws Exception {
80
77
81
78
@ Test
82
79
public void testNominal () throws Exception {
83
- final CountDownLatch signal = new CountDownLatch (2 );
84
-
85
80
Query query = new Query ();
86
- BrowseIterator iterator = new BrowseIterator ( index , query , new BrowseIterator . BrowseIteratorHandler () {
81
+ AssertBrowseHandler handler = new AssertBrowseHandler () {
87
82
@ Override
88
- public void handleBatch (@ NonNull BrowseIterator iterator , JSONObject result , AlgoliaException error ) {
89
- if (error == null ) {
90
- signal .countDown ();
91
- if (signal .getCount () > 2 ) {
92
- fail ("Should not reach this point" );
93
- }
94
- } else {
83
+ void doHandleBatch (BrowseIterator iterator , JSONObject result , AlgoliaException error ) {
84
+ if (error != null ) {
95
85
fail (error .getMessage ());
96
86
}
97
87
}
98
- });
88
+ };
89
+ BrowseIterator iterator = new BrowseIterator (index , query , handler );
99
90
iterator .start ();
100
- assertTrue ("No callback was called" , signal .await (Helpers .wait , TimeUnit .SECONDS ));
91
+ handler .checkAssertions ();
92
+ handler .checkCalledMax (2 );
101
93
}
102
94
103
95
@ Test
104
96
public void testCancel () throws Exception {
105
- final CountDownLatch signal = new CountDownLatch (1 );
106
-
107
97
Query query = new Query ();
108
- BrowseIterator iterator = new BrowseIterator ( index , query , new BrowseIterator . BrowseIteratorHandler () {
98
+ AssertBrowseHandler handler = new AssertBrowseHandler () {
109
99
@ Override
110
- public void handleBatch ( @ NonNull BrowseIterator iterator , JSONObject result , AlgoliaException error ) {
100
+ void doHandleBatch ( BrowseIterator iterator , JSONObject result , AlgoliaException error ) {
111
101
if (error == null ) {
112
- signal .countDown ();
113
- if (signal .getCount () == 1 ) {
102
+ if (getCount () == 1 ) {
114
103
iterator .cancel ();
115
104
}
116
- else if (signal .getCount () > 1 ) {
117
- fail ("Should not reach this point" );
118
- }
119
105
} else {
120
106
fail (error .getMessage ());
121
107
}
122
108
}
123
- });
109
+ };
110
+ BrowseIterator iterator = new BrowseIterator (index , query , handler );
124
111
iterator .start ();
125
- assertTrue ("No callback was called" , signal .await (Helpers .wait , TimeUnit .SECONDS ));
112
+ handler .checkAssertions ();
113
+ handler .checkCalledMax (1 );
114
+ }
115
+
116
+ private abstract class AssertBrowseHandler implements BrowseIterator .BrowseIteratorHandler {
117
+
118
+ private AssertionError error ;
119
+ private int count ;
120
+
121
+ abstract void doHandleBatch (BrowseIterator iterator , JSONObject result , AlgoliaException error );
122
+
123
+ /**
124
+ * Fail if the handler encountered at least one AssertionError.
125
+ */
126
+ public void checkAssertions () {
127
+ if (error != null ) {
128
+ fail (error .getMessage ());
129
+ }
130
+ }
131
+
132
+ /**
133
+ * Fail if the handler was called more than a certain amount of time.
134
+ * @param times the maximum allowed before failing.
135
+ */
136
+ public void checkCalledMax (int times ) {
137
+ if (count > times ) {
138
+ fail ("The BrowseIterator was called more than " + times + " times." );
139
+ }
140
+ }
141
+
142
+ @ Override
143
+ public void handleBatch (@ NonNull BrowseIterator iterator , JSONObject result , AlgoliaException error ) {
144
+ count ++;
145
+ try {
146
+
147
+ doHandleBatch (iterator , result , error );
148
+ } catch (AssertionError e ) {
149
+ this .error = e ;
150
+ }
151
+ }
152
+
153
+ public int getCount () {
154
+ return count ;
155
+ }
126
156
}
127
157
}
0 commit comments