package net.karneim.pojobuilder.model; import static org.assertj.core.api.Assertions.assertThat; import org.junit.Test; import net.karneim.pojobuilder.testenv.TestDslBase; /** * @author Adrodoc55 */ public class TypeWildcardMTest extends TestDslBase { @Test public void test_getGenericTypeDefinition__without_type_parameter() { // given: TypeWildcardM underTest = new TypeWildcardM(); // when: String act = underTest.getGenericTypeDefinition(); // then: assertThat(act).isEqualTo("?"); } @Test public void test_getGenericTypeDefinition__with_upper_bound() { // given: String name = some($String()); TypeM underTest = new TypeWildcardM().whichExtends(new TypeVariableM(name)); // when: String act = underTest.getGenericTypeDefinition(); // then: assertThat(act).isEqualTo("? extends " + name); } @Test public void test_getGenericTypeDefinition__with_multiple_upper_bound() { // given: String name = some($String()); String name2 = some($String()); TypeM underTest = new TypeWildcardM().whichExtends(new TypeVariableM(name), new TypeVariableM(name2)); // when: String act = underTest.getGenericTypeDefinition(); // then: assertThat(act).isEqualTo("? extends " + name + " & " + name2); } @Test public void test_getGenericTypeDefinition__with_lower_bound() { // given: String name = some($String()); TypeM underTest = new TypeWildcardM().whichIsASupertypeOf(new TypeVariableM(name)); // when: String act = underTest.getGenericTypeDefinition(); // then: assertThat(act).isEqualTo("? super " + name); } @Test public void test_getGenericTypeDefinition__with_multiple_lower_bound_last_bound_overrides() { // given: String name = some($String()); String name2 = some($String()); TypeM underTest = new TypeWildcardM()// .whichIsASupertypeOf(new TypeVariableM(name))// .whichIsASupertypeOf(new TypeVariableM(name2)); // when: String act = underTest.getGenericTypeDefinition(); // then: assertThat(act).isEqualTo("? super " + name2); } @Test public void test_getGenericTypeDefinition__with_multiple_upper_and_lower_bound_last_bound_overrides() { // given: String name = some($String()); String name2 = some($String()); String name3 = some($String()); TypeM underTest = new TypeWildcardM()// .whichExtends(new TypeVariableM(name))// .whichExtends(new TypeVariableM(name2))// .whichIsASupertypeOf(new TypeVariableM(name3)); // when: String act = underTest.getGenericTypeDefinition(); // then: assertThat(act).isEqualTo("? super " + name3); } @Test public void test_getGenericTypeDefinition__with_multiple_lower_and_upper_bound_last_bound_overrides() { // given: String name = some($String()); String name2 = some($String()); String name3 = some($String()); TypeM underTest = new TypeWildcardM()// .whichIsASupertypeOf(new TypeVariableM(name))// .whichExtends(new TypeVariableM(name2))// .whichExtends(new TypeVariableM(name3)); // when: String act = underTest.getGenericTypeDefinition(); // then: assertThat(act).isEqualTo("? extends " + name2 + " & " + name3); } }