blob: 5d466998eced717f3dad7fdbc500109904850a9c [file] [log] [blame]
package org.junit.tests.experimental.theories.runner;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.experimental.results.PrintableResult.testResult;
import static org.junit.experimental.results.ResultMatchers.failureCountIs;
import static org.junit.experimental.results.ResultMatchers.hasFailureContaining;
import static org.junit.experimental.results.ResultMatchers.hasSingleFailureContaining;
import static org.junit.experimental.results.ResultMatchers.isSuccessful;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import org.junit.experimental.results.PrintableResult;
import org.junit.experimental.theories.DataPoint;
import org.junit.experimental.theories.DataPoints;
import org.junit.experimental.theories.Theories;
import org.junit.experimental.theories.Theory;
import org.junit.runner.RunWith;
public class WithUnresolvedGenericTypeVariablesOnTheoryParms {
@Test
public void whereTypeVariableIsOnTheTheory() {
PrintableResult result = testResult(TypeVariableOnTheoryOnly.class);
assertThat(result, isSuccessful());
}
@RunWith(Theories.class)
public static class TypeVariableOnTheoryOnly {
@DataPoint
public static List<String> strings = Arrays.asList("foo", "bar");
@Theory
public <T> void forItems(Collection<?> items) {
}
}
@Test
public void whereTypeVariableIsOnTheoryParm() {
PrintableResult result = testResult(TypeVariableOnTheoryParm.class);
assertThat(result, hasSingleFailureContaining("unresolved type variable T"));
}
@RunWith(Theories.class)
public static class TypeVariableOnTheoryParm {
@DataPoint
public static String string = "foo";
@Theory
public <T> void forItem(T item) {
}
}
@Test
public void whereTypeVariableIsOnParameterizedTheoryParm() {
PrintableResult result = testResult(TypeVariableOnParameterizedTheoryParm.class);
assertThat(result, hasSingleFailureContaining("unresolved type variable T"));
}
@RunWith(Theories.class)
public static class TypeVariableOnParameterizedTheoryParm {
@DataPoint
public static List<String> strings = Arrays.asList("foo", "bar");
@Theory
public <T> void forItems(Collection<T> items) {
}
}
@Test
public void whereTypeVariableIsOnWildcardUpperBoundOnTheoryParm() {
PrintableResult result = testResult(TypeVariableOnWildcardUpperBoundOnTheoryParm.class);
assertThat(result, hasSingleFailureContaining("unresolved type variable U"));
}
@RunWith(Theories.class)
public static class TypeVariableOnWildcardUpperBoundOnTheoryParm {
@DataPoint
public static List<String> strings = Arrays.asList("foo", "bar");
@Theory
public <U> void forItems(Collection<? extends U> items) {
}
}
@Test
public void whereTypeVariableIsOnWildcardLowerBoundOnTheoryParm() {
PrintableResult result = testResult(TypeVariableOnWildcardLowerBoundOnTheoryParm.class);
assertThat(result, hasSingleFailureContaining("unresolved type variable V"));
}
@RunWith(Theories.class)
public static class TypeVariableOnWildcardLowerBoundOnTheoryParm {
@DataPoint
public static List<String> strings = Arrays.asList("foo", "bar");
@Theory
public <V> void forItems(Collection<? super V> items) {
}
}
@Test
public void whereTypeVariableIsOnArrayTypeOnTheoryParm() {
PrintableResult result = testResult(TypeVariableOnArrayTypeOnTheoryParm.class);
assertThat(result, hasSingleFailureContaining("unresolved type variable T"));
}
@RunWith(Theories.class)
public static class TypeVariableOnArrayTypeOnTheoryParm {
@DataPoints
public static String[][] items() {
return new String[][]{new String[]{"foo"}, new String[]{"bar"}};
}
@Theory
public <T> void forItems(T[] items) {
}
}
@Test
public void whereTypeVariableIsOnComponentOfArrayTypeOnTheoryParm() {
PrintableResult result = testResult(TypeVariableOnComponentOfArrayTypeOnTheoryParm.class);
assertThat(result, hasSingleFailureContaining("unresolved type variable U"));
}
@RunWith(Theories.class)
public static class TypeVariableOnComponentOfArrayTypeOnTheoryParm {
@DataPoints
public static List<?>[][] items() {
return new List<?>[][]{
new List<?>[]{Arrays.asList("foo")},
new List<?>[]{Arrays.asList("bar")}
};
}
@Theory
public <U> void forItems(Collection<U>[] items) {
}
}
@Test
public void whereTypeVariableIsOnTheoryClass() {
PrintableResult result = testResult(TypeVariableOnTheoryClass.class);
assertThat(result, hasSingleFailureContaining("unresolved type variable T"));
}
@RunWith(Theories.class)
public static class TypeVariableOnTheoryClass<T> {
@DataPoint
public static String item = "bar";
@Theory
public void forItem(T item) {
}
}
@Test
public void whereTypeVariablesAbound() {
PrintableResult result = testResult(TypeVariablesAbound.class);
assertThat(result, failureCountIs(1));
assertThat(result, hasFailureContaining("unresolved type variable A"));
assertThat(result, hasFailureContaining("unresolved type variable B"));
assertThat(result, hasFailureContaining("unresolved type variable C"));
assertThat(result, hasFailureContaining("unresolved type variable D"));
assertThat(result, hasFailureContaining("unresolved type variable E"));
assertThat(result, hasFailureContaining("unresolved type variable F"));
assertThat(result, hasFailureContaining("unresolved type variable G"));
}
@RunWith(Theories.class)
public static class TypeVariablesAbound<A, B extends A, C extends Collection<B>> {
@Theory
public <D, E extends D, F, G> void forItem(A first, Collection<B> second,
Map<C, ? extends D> third, List<? super E> fourth, F[] fifth,
Collection<G>[] sixth) {
}
}
}