3535
3636import java .util .ArrayList ;
3737import java .util .List ;
38- import java .util .concurrent .CountDownLatch ;
39- import java .util .concurrent .TimeUnit ;
4038
41- import static junit .framework .Assert .assertTrue ;
4239import static junit .framework .Assert .fail ;
4340
4441public class BrowseIteratorTest extends PowerMockTestCase {
@@ -80,48 +77,81 @@ public void tearDown() throws Exception {
8077
8178 @ Test
8279 public void testNominal () throws Exception {
83- final CountDownLatch signal = new CountDownLatch (2 );
84-
8580 Query query = new Query ();
86- BrowseIterator iterator = new BrowseIterator ( index , query , new BrowseIterator . BrowseIteratorHandler () {
81+ AssertBrowseHandler handler = new AssertBrowseHandler () {
8782 @ 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 ) {
9585 fail (error .getMessage ());
9686 }
9787 }
98- });
88+ };
89+ BrowseIterator iterator = new BrowseIterator (index , query , handler );
9990 iterator .start ();
100- assertTrue ("No callback was called" , signal .await (Helpers .wait , TimeUnit .SECONDS ));
91+ handler .checkAssertions ();
92+ handler .checkCalledMax (2 );
10193 }
10294
10395 @ Test
10496 public void testCancel () throws Exception {
105- final CountDownLatch signal = new CountDownLatch (1 );
106-
10797 Query query = new Query ();
108- BrowseIterator iterator = new BrowseIterator ( index , query , new BrowseIterator . BrowseIteratorHandler () {
98+ AssertBrowseHandler handler = new AssertBrowseHandler () {
10999 @ Override
110- public void handleBatch ( @ NonNull BrowseIterator iterator , JSONObject result , AlgoliaException error ) {
100+ void doHandleBatch ( BrowseIterator iterator , JSONObject result , AlgoliaException error ) {
111101 if (error == null ) {
112- signal .countDown ();
113- if (signal .getCount () == 1 ) {
102+ if (getCount () == 1 ) {
114103 iterator .cancel ();
115104 }
116- else if (signal .getCount () > 1 ) {
117- fail ("Should not reach this point" );
118- }
119105 } else {
120106 fail (error .getMessage ());
121107 }
122108 }
123- });
109+ };
110+ BrowseIterator iterator = new BrowseIterator (index , query , handler );
124111 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+ }
126156 }
127157}
0 commit comments