package net.karneim.pojobuilder.analysis.with.generics; import net.karneim.pojobuilder.analysis.Input; import net.karneim.pojobuilder.analysis.Output; import net.karneim.pojobuilder.analysis.with.AnalysisTestSupport; import net.karneim.pojobuilder.model.BuilderM; import net.karneim.pojobuilder.model.PropertyListM; import net.karneim.pojobuilder.model.PropertyListM.Key; import net.karneim.pojobuilder.model.PropertyM; import net.karneim.pojobuilder.model.TypeM; import org.junit.Test; import javax.lang.model.element.Modifier; import static org.assertj.core.api.Assertions.assertThat; public class JavaModelAnalyzer_Generics_Test extends AnalysisTestSupport { @Test public void testAnalyze() { // Given: Input input = inputFor(ContainerPojo.class); // When: Output output = underTest.analyze(input); // Then: assertThat(output).isNotNull(); BuilderM builderModel = output.getBuilderModel(); assertThat(builderModel.getPojoType().getName()).isEqualTo(ContainerPojo.class.getName()); TypeM builderType = builderModel.getType(); assertThat(builderType).isNotNull(); assertThat(builderType.getName()).isEqualTo("net.karneim.pojobuilder.analysis.with.generics.ContainerPojoBuilder"); assertThat(builderType.getGenericTypeDefinition()) .isEqualTo( "net.karneim.pojobuilder.analysis.with.generics.ContainerPojoBuilder<T extends net.karneim.pojobuilder.analysis.with.generics.ItemPojo & java.io.Serializable>"); PropertyListM properties = builderModel.getProperties(); assertThat(properties).hasSize(2); PropertyM elementProperty = properties.get(new Key("element", "T")); assertThat(elementProperty).isNotNull(); assertThat(elementProperty.getFieldAccess()).isNotNull(); assertThat(elementProperty.getFieldAccess().getModifier()).contains(Modifier.PUBLIC); PropertyM listProperty = properties.get(new Key("list", "java.util.List<? super T>")); assertThat(listProperty).isNotNull(); assertThat(listProperty.getFieldAccess()).isNotNull(); assertThat(listProperty.getFieldAccess().getModifier()).contains(Modifier.PUBLIC); } }