package net.karneim.pojobuilder.processor.with.factorymethodannotation; import net.karneim.pojobuilder.processor.AnnotationProcessor; import net.karneim.pojobuilder.processor.with.ProcessorTestSupport; import org.junit.Test; import static net.karneim.pojobuilder.PbAssertions.assertThat; import static net.karneim.pojobuilder.testenv.JavaProject.Compilation; /** * @feature The {@link AnnotationProcessor} generates builder classes. */ public class AnnotationProcessor_FactoryMethodAnnotation_Test extends ProcessorTestSupport { /** * @throws Exception * @scenario the builder is created for a pojo (having no annotation) using som factory method annotated with @GeneratePojoBuilder */ @Test public void testShouldGenerateBuilderForAnnotatedFactoryMethod() { // Given: sourceForFactoryMethod(ProductFactory.class, null); // When: prj.compile(); // Then: assertThat(prj) .generatedSameSourceAs(ProductBuilder.class) .compiled(ProductBuilder.class) .reported(Compilation.Success); } /** * @throws Exception * @scenario the builder is created for an interface using some annotated factory method. */ @Test public void testShouldGenerateBuilderForAnInterfaceUsingAnnotatedFactoryMethod() { // Given: sourceForFactoryMethod(ResourceFactory.class, null); // When: prj.compile(); // Then: assertThat(prj) .generatedSameSourceAs(ResourceBuilder.class) .compiled(ResourceBuilder.class) .reported(Compilation.Success); } /** * @throws Exception * @scenario the builder is created for an parameterized interface using some annotated factory method. */ @Test public void testShouldGenerateBuilderForAParameterizedInterfaceUsingAnnotatedFactoryMethod() { // Given: sourceForFactoryMethod(ContainerFactory.class, null); // When: prj.compile(); // Then: assertThat(prj) .generatedSameSourceAs(ContainerBuilder.class) .compiled(ContainerBuilder.class) .generatedSameSourceAs(FileContainerBuilder.class) .compiled(FileContainerBuilder.class) .generatedSameSourceAs(GenericListContainerBuilder.class) .compiled(GenericListContainerBuilder.class) .reported(Compilation.Success); } @Test public void testPairFactory() { // Given: sourceForFactoryMethod(PairFactory.class, null); // When: prj.compile(); // Then: assertThat(prj) .generatedSameSourceAs(PairBuilder.class) .compiled(PairBuilder.class) .generatedSameSourceAs(StringPairBuilder.class) .compiled(StringPairBuilder.class) .generatedSameSourceAs(TPairBuilder.class) .compiled(TPairBuilder.class) .reported(Compilation.Success); } }