package ch.akuhn.foreach;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import java.util.Iterator;
import org.junit.Test;
public class SelectTest {
private Select<String> query;
private String[] array;
@Test
@SuppressWarnings("unused")
public void testEmptyArray() {
query = Select.from();
for (EachB<String> each: query) throw null;
array = query.getResultArray();
assertNotNull(array);
assertEquals(0, array.length);
}
@Test
public void testSelectOneOfOneElement() {
query = Select.from("foo");
for (EachB<String> each: query) each.yield = true;
array = query.getResultArray();
assertNotNull(array);
assertEquals(1, array.length);
assertEquals("foo", array[0]);
}
@Test
public void testSelectNoneOfOneElement() {
query = Select.from("foo");
for (EachB<String> each: query) each.yield = false;
array = query.getResultArray();
assertNotNull(array);
assertEquals(0, array.length);
}
@Test
public void testArrayWithThreeElement() {
query = Select.from("foo", "", "qux");
for (EachB<String> each: query) each.yield = !each.value.isEmpty();
array = query.getResultArray();
assertNotNull(array);
assertEquals(2, array.length);
assertEquals("foo", array[0]);
assertEquals("qux", array[1]);
}
@Test
public void testArrayIterator() {
query = Select.from("foo", "bar", "qux");
Iterator<EachB<String>> iter = query.iterator();
iter.hasNext();
iter.next().yield = true;
iter.hasNext();
iter.next().yield = false;
iter.hasNext();
iter.next().yield = true;
assertFalse(iter.hasNext());
array = query.getResultArray();
assertNotNull(array);
assertEquals(2, array.length);
assertEquals("foo", array[0]);
assertEquals("qux", array[1]);
}
@Test
public void testArrayIterator2() {
query = Select.from("foo", "bar", "qux");
Iterator<EachB<String>> iter = query.iterator();
iter.next().yield = true;
iter.next().yield = false;
iter.next().yield = true;
array = query.getResultArray();
assertNotNull(array);
assertEquals(2, array.length);
assertEquals("foo", array[0]);
assertEquals("qux", array[1]);
}
@Test
public void testFailure() {
query = Select.from("foo", "bar", "qux");
Error error = new Error();
try {
for(EachB<String> each: query) {
if (each.index == 1) throw error;
each.yield = true;
}
}
catch (Error caught) {
assertEquals(error, caught);
}
array = query.getResultArray();
assertNotNull(array);
assertEquals(1, array.length);
assertEquals("foo", array[0]);
}
}