package net.varkhan.base.functor.expander;
import junit.framework.TestCase;
import java.util.Iterator;
/**
* <b></b>.
* <p/>
*
* @author varkhan
* @date 11/9/13
* @time 6:27 PM
*/
public class ChainExpanderTest extends TestCase {
public void testChain() {
ChainExpander<String, String[][], Object> e = new ChainExpander<String,String[][],Object>(
new ArrayExpander<String,Object>(), new ArrayExpander<String[],Object>()
);
Iterator<String> it00 = e.invoke(new String[][]{},null).iterator();
assertFalse("!chain([]).hasNext()",it00.hasNext());
Iterator<String> it10 = e.invoke(new String[][]{new String[]{}},null).iterator();
assertFalse("!chain([[]]).hasNext()",it10.hasNext());
Iterator<String> it11 = e.invoke(new String[][]{new String[]{"foo"}},null).iterator();
assertTrue("chain([[\"foo\"]]).hasNext() 0",it11.hasNext());
assertEquals("chain([[\"foo\"]]).next() 0","foo",it11.next());
assertFalse("!chain([[\"foo\"]]).hasNext() 1",it11.hasNext());
Iterator<String> it210 = e.invoke(new String[][]{new String[]{"foo"},new String[]{}},null).iterator();
assertTrue("chain([[\"foo\"][]]).hasNext() 0",it210.hasNext());
assertEquals("chain([[\"foo\"][]]).next() 0","foo",it210.next());
assertFalse("!chain([[\"foo\"][]]).hasNext() 1",it210.hasNext());
Iterator<String> it201 = e.invoke(new String[][]{new String[]{},new String[]{"foo"}},null).iterator();
assertTrue("chain([[][\"foo\"]]).hasNext() 0",it201.hasNext());
assertEquals("chain([[][\"foo\"]]).next() 0","foo",it201.next());
assertFalse("!chain([[][\"foo\"]]).hasNext() 1",it201.hasNext());
Iterator<String> it221 = e.invoke(new String[][]{new String[]{"bar","baz"},new String[]{"foo"}},null).iterator();
assertTrue("chain([[\"bar\",\"baz\"][\"foo\"][]]).hasNext() 0",it221.hasNext());
assertEquals("chain([[\"bar\",\"baz\"][\"foo\"]]).next() 0","bar",it221.next());
assertEquals("chain([[\"bar\",\"baz\"][\"foo\"]]).next() 1","baz",it221.next());
assertEquals("chain([[\"bar\",\"baz\"][\"foo\"]]).next() 2","foo",it221.next());
assertFalse("!chain([[\"bar\",\"baz\"][\"foo\"]]).hasNext() 3",it221.hasNext());
}
}