package in.partake.model.dao;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.NoSuchElementException;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import com.google.common.base.Predicates;
public class DataFilterTest {
DataIterator<Integer> filtered;
@Rule
public ExpectedException exception = ExpectedException.none();
@SuppressWarnings("unchecked")
@Before
public void createFiltered() throws DAOException {
filtered = mock(DataIterator.class);
when(filtered.hasNext()).thenReturn(true, true, false);
when(filtered.next()).thenReturn(Integer.valueOf(1), Integer.valueOf(2)).thenThrow(new NoSuchElementException());
}
@Test
public void testNormalCase() throws DAOException {
DataFilter<Integer> filter = new DataFilter<Integer>(filtered, Predicates.alwaysTrue());
int sum = 0;
while (filter.hasNext()) {
sum += filter.next();
}
assertThat(sum, is(1 + 2));
}
@Test
public void testFilterAll() throws DAOException {
DataFilter<Integer> filter = new DataFilter<Integer>(filtered, Predicates.alwaysFalse());
assertThat(filter.hasNext(), is(false));
}
@Test
public void testNoNeedToCallHasNext() throws DAOException {
DataFilter<Integer> filter = new DataFilter<Integer>(filtered, Predicates.alwaysTrue());
assertThat(filter.next(), is(Integer.valueOf(1)));
assertThat(filter.next(), is(Integer.valueOf(2)));
exception.expect(NoSuchElementException.class);
filter.next();
}
}