package com.infomancers.tests.trackerissues; import com.infomancers.collections.yield.Yielder; import org.junit.Assert; import org.junit.Test; import java.util.Arrays; import java.util.Iterator; /** * Copyright (c) 2009, Aviad Ben Dov *

* All rights reserved. *

* Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: *

* 1. Redistributions of source code must retain the above copyright notice, this list * of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, this * list of conditions and the following disclaimer in the documentation and/or other * materials provided with the distribution. * 3. Neither the name of Infomancers, Ltd. nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. *

* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ public class Issue11 { public static class SomeYielder extends Yielder { private final Integer[] values; public SomeYielder(Integer... values) { this.values = values; } @Override protected void yieldNextCore() { for (Integer i : values) { yieldReturn(i); } } } public static class MyYielder extends Yielder { private final Iterable i1; private final Iterable i2; public MyYielder(Iterable i1, Iterable i2) { this.i1 = i1; this.i2 = i2; } @Override protected void yieldNextCore() { for (Integer i : i1) { yieldReturn(i); } for (Integer i : i2) { yieldReturn(i); } } } @Test public void test() { Iterator expected = Arrays.asList(1, 2, 3, 4, 5, 6).iterator(); Iterator actual = new MyYielder(new SomeYielder(1, 2, 3), new SomeYielder(4, 5, 6)).iterator(); while (expected.hasNext() && actual.hasNext()) { Assert.assertEquals(expected.next(), actual.next()); } Assert.assertFalse("too few in actual", expected.hasNext()); Assert.assertFalse("too many in actual", actual.hasNext()); } }