package net.bytebuddy.matcher;
import org.junit.Test;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
public abstract class AbstractFilterableListTest<T, S extends FilterableList<T, S>, U> {
protected abstract U getFirst() throws Exception;
protected abstract U getSecond() throws Exception;
protected abstract S asList(List<U> elements);
@SuppressWarnings("unchecked") // In absence of @SafeVarargs for Java 6
protected S asList(U... element) {
return asList(Arrays.asList(element));
}
protected S asList(U element) {
return asList(Collections.singletonList(element));
};
protected S emptyList() {
return asList(Collections.<U>emptyList());
};
protected abstract T asElement(U element);
@Test(expected = IllegalStateException.class)
@SuppressWarnings("unchecked")
public void testGetOnlyTwoElementList() throws Exception {
asList(Arrays.asList(getFirst(), getSecond())).getOnly();
}
@Test(expected = IllegalStateException.class)
@SuppressWarnings("unchecked")
public void testGetOnlyEmptyList() throws Exception {
asList(Collections.<U>emptyList()).getOnly();
}
@Test
@SuppressWarnings("unchecked")
public void testGetOnlySingleList() throws Exception {
assertThat(asList(Collections.singletonList(getFirst())).getOnly(), is(asElement(getFirst())));
}
@Test
@SuppressWarnings("unchecked")
public void testFilter() throws Exception {
assertThat(asList(Arrays.asList(getFirst(), getSecond())).filter(ElementMatchers.is(asElement(getFirst()))).getOnly(), is(asElement(getFirst())));
}
@Test
@SuppressWarnings("unchecked")
public void testSubList() throws Exception {
assertThat(asList(Arrays.asList(getFirst(), getSecond())).subList(0, 1).getOnly(), is(asElement(getFirst())));
}
}