package net.karneim.pojobuilder.analysis.with.superclass; import net.karneim.pojobuilder.analysis.Input; import net.karneim.pojobuilder.analysis.Output; import net.karneim.pojobuilder.analysis.with.AnalysisTestSupport; 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_PojoWithSuperclass_Test extends AnalysisTestSupport { @Test public void testAnalyzeWithPojoExtendsClassWithPublicField() { // Given: Input input = inputFor(SubclassPojo1.class); // When: Output output = underTest.analyze(input); // Then: assertThat(output).isNotNull(); assertThat(output.getBuilderModel().getPojoType().getName()).isEqualTo(SubclassPojo1.class.getName()); TypeM builderType = output.getBuilderModel().getType(); assertThat(builderType).isNotNull(); assertThat(builderType.getName()) .isEqualTo("net.karneim.pojobuilder.analysis.with.superclass.SubclassPojo1Builder"); assertThat(output.getBuilderModel().getProperties()).hasSize(3); PropertyM nameProperty = output.getBuilderModel().getProperties().get(new Key("name", "java.lang.String")); assertThat(nameProperty).isNotNull(); assertThat(nameProperty.getFieldAccess()).isNotNull(); assertThat(nameProperty.getFieldAccess().getModifier()).contains(Modifier.PUBLIC); PropertyM ageProperty = output.getBuilderModel().getProperties().get(new Key("age", "int")); assertThat(ageProperty).isNotNull(); assertThat(ageProperty.getFieldAccess()).isNotNull(); assertThat(ageProperty.getFieldAccess().getModifier()).contains(Modifier.PUBLIC); PropertyM hairColorProperty = output.getBuilderModel().getProperties().get(new Key("hairColor", "java.awt.Color")); assertThat(hairColorProperty).isNotNull(); assertThat(hairColorProperty.getFieldAccess()).isNotNull(); assertThat(hairColorProperty.getFieldAccess().getModifier()).contains(Modifier.PUBLIC); } @Test public void testAnalyzeWithPojoWhichExtendsClassInSamePackage() { // Given: Input input = inputFor(SubclassPojo2.class); // When: Output output = underTest.analyze(input); // Then: assertThat(output).isNotNull(); assertThat(output.getBuilderModel().getPojoType().getName()).isEqualTo(SubclassPojo2.class.getName()); TypeM builderType = output.getBuilderModel().getType(); assertThat(builderType).isNotNull(); assertThat(builderType.getName()) .isEqualTo("net.karneim.pojobuilder.analysis.with.superclass.SubclassPojo2Builder"); assertThat(output.getBuilderModel().getProperties()).hasSize(3); PropertyM visibleMemberProperty = output.getBuilderModel().getProperties().get(new Key("visibleMember", "int")); assertThat(visibleMemberProperty).isNotNull(); assertThat(visibleMemberProperty.getFieldAccess()).isNotNull(); assertThat(visibleMemberProperty.getFieldAccess().getModifier()).contains(Modifier.PUBLIC); PropertyM protectedMemberProperty = output.getBuilderModel().getProperties().get(new Key("protectedMember", "float")); assertThat(protectedMemberProperty).isNotNull(); assertThat(protectedMemberProperty.getFieldAccess()).isNotNull(); assertThat(protectedMemberProperty.getFieldAccess().getModifier()).contains(Modifier.PROTECTED); PropertyM nameMemberProperty = output.getBuilderModel().getProperties().get(new Key("name", "java.lang.String")); assertThat(nameMemberProperty).isNotNull(); assertThat(nameMemberProperty.getFieldAccess()).isNull(); assertThat(nameMemberProperty.getGetterMethod().getModifiers()).contains(Modifier.PROTECTED); assertThat(nameMemberProperty.getSetterMethod().getModifiers()).contains(Modifier.PROTECTED); assertThat(output.getBuilderModel().getProperties().get(new Key("hiddenMember", "float"))).isNull(); } @Test public void testAnalyzeWithPojoWhichExtendsClassInOtherPackage() { // Given: Input input = inputFor(SubclassPojo3.class); // When: Output output = underTest.analyze(input); // Then: assertThat(output).isNotNull(); assertThat(output.getBuilderModel().getPojoType().getName()).isEqualTo(SubclassPojo3.class.getName()); TypeM builderType = output.getBuilderModel().getType(); assertThat(builderType).isNotNull(); assertThat(builderType.getName()) .isEqualTo("net.karneim.pojobuilder.analysis.with.superclass.SubclassPojo3Builder"); assertThat(output.getBuilderModel().getProperties()).hasSize(1); PropertyM visibleMemberProperty = output.getBuilderModel().getProperties().get(new Key("visibleMember", "int")); assertThat(visibleMemberProperty).isNotNull(); assertThat(visibleMemberProperty.getFieldAccess()).isNotNull(); assertThat(visibleMemberProperty.getFieldAccess().getModifier()).contains(Modifier.PUBLIC); assertThat(output.getBuilderModel().getProperties().get(new Key("hiddenMember", "float"))).isNull(); } }