package net.karneim.pojobuilder.processor.with.excludeproperties;
import static net.karneim.pojobuilder.PbAssertions.assertThat;
import net.karneim.pojobuilder.processor.with.ProcessorTestSupport;
import net.karneim.pojobuilder.processor.with.includeproperties.Pojo2;
import net.karneim.pojobuilder.processor.with.includeproperties.Pojo2Builder;
import net.karneim.pojobuilder.processor.with.includeproperties.Pojo3;
import net.karneim.pojobuilder.processor.with.includeproperties.Pojo3Builder;
import net.karneim.pojobuilder.processor.with.includeproperties.Pojo3Factory;
import net.karneim.pojobuilder.testenv.JavaProject.Compilation;
import org.junit.Test;
/**
* @feature Properties can be excluded from the generated builder.
*/
public class AnnotationProcessor_ExcludeProperties_Test extends ProcessorTestSupport {
/**
* @scenario Some properties are excluded
*/
@Test
public void testShouldGenerateBuilderWithoutExcludedProperties() {
// Given:
sourceFor(Pojo1.class);
// When:
prj.compile();
// Then:
assertThat(prj).generatedSameSourceAs(Pojo1Builder.class).compiled(Pojo1Builder.class)
.reported(Compilation.Success);
}
/**
* @scenario Mandatory properties (used as constructor parameter) must not be explicitly excluded.
*/
@Test
public void testShouldNotExcludeMandatoryConstructorParameters() {
// Given:
sourceFor(Pojo2.class);
// When:
prj.compile();
// Then:
assertThat(prj).generatedSameSourceAs(Pojo2Builder.class).compiled(Pojo2Builder.class)
.reported(Compilation.Success);
}
/**
* @scenario Mandatory properties (used as factory method parameter) must not be explicitly excluded.
*/
@Test
public void testShouldNotExcludeMandatoryFactoryMethodParameters() {
// Given:
sourceFor(Pojo3.class, Pojo3Factory.class);
// When:
prj.compile();
// Then:
assertThat(prj).generatedSameSourceAs(Pojo3Builder.class).compiled(Pojo3Builder.class)
.reported(Compilation.Success);
}
}