package net.karneim.pojobuilder.analysis.with.customannotation;
import net.karneim.pojobuilder.GeneratePojoBuilder;
import net.karneim.pojobuilder.analysis.Input;
import net.karneim.pojobuilder.analysis.Output;
import net.karneim.pojobuilder.analysis.with.AnalysisTestSupport;
import net.karneim.pojobuilder.testenv.AddToSourceTree;
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Annotation Hierarchy
* <p/>
* For activating the PojoBuilder processor the user can use any custom annotation which is annotated with
* {@link GeneratePojoBuilder} itself. This can be done even in multiple hierarchies. The annotation attributes are read
* in the order of appearance in the source code and override their values.
*/
@AddToSourceTree({"src/testdata/java"})
public class JavaModelAnalyzer_CustomAnnotation_Test extends AnalysisTestSupport {
@Test
public void testAnalyzePojoWithSingleCustomAnnotation() {
// Given:
Input input = inputFor(PojoA.class);
// When:
Output output = underTest.analyze(input);
// Then:
assertThat(output).isNotNull();
assertThat(output.getBuilderModel().getPojoType().getName()).isEqualTo(PojoA.class.getName());
assertThat(output.getBuilderModel().getType().getName()).isEqualTo("builder.FluentPojoABuilderA");
}
@Test
public void testAnaylzePojoWithMultipleCustomAnnotations() {
// Given:
Input input = inputFor(PojoAB.class);
// When:
Output output = underTest.analyze(input);
// Then:
assertThat(output).isNotNull();
assertThat(output.getBuilderModel().getPojoType().getName()).isEqualTo(PojoAB.class.getName());
assertThat(output.getBuilderModel().getType().getName()).isEqualTo("builder.FluentPojoABBuilderB");
assertThat(output.getBuilderModel().getCopyMethod()).isNotNull();
}
@Test
public void testAnalyzePojoWithMultipleCustomAnnotationsInAnnotationHierarchy() {
// Given:
Input input = inputFor(PojoC.class);
// When:
Output output = underTest.analyze(input);
// Then:
assertThat(output).isNotNull();
assertThat(output.getBuilderModel().getPojoType().getName()).isEqualTo(PojoC.class.getName());
assertThat(output.getBuilderModel().getType().getName()).isEqualTo("builder.FluentPojoCBuilderB");
}
@Test
public void testAnalyzePojoFactoryWithCustomAnnotation() {
// Given:
Input input = inputFor(PojoFFactory.class, "createPojoF");
// When:
Output output = underTest.analyze(input);
// Then:
assertThat(output).isNotNull();
assertThat(output.getBuilderModel().getPojoType().getName()).isEqualTo(PojoF.class.getName());
assertThat(output.getBuilderModel().getType().getName()).isEqualTo(
"net.karneim.pojobuilder.analysis.with.customannotation.FluentPojoFBuilderF");
}
}