package samples;
import static org.assertj.core.api.Assertions.assertThat;
import java.io.File;
import java.net.URL;
import net.karneim.pojobuilder.processor.AnnotationProcessor;
import net.karneim.pojobuilder.processor.with.ProcessorTestSupport;
import org.junit.Test;
import samples.dsl.IntegerBuilder;
import samples.dsl.LongBuilder;
import samples.dsl.StringBuilder;
import samples.dsl.TestDataFactory;
import samples.dsl.TestDslBase;
import samples.dsl.TestDslTest;
/**
* @feature The {@link AnnotationProcessor} generates builder classes.
*/
public class AnnotationProcessor_Samples_Test extends ProcessorTestSupport {
/**
* @scenario Generating a builder for {@link Contact}.
* @throws Exception
*/
@Test
public void testShouldGenerateContactBuilder() throws Exception {
// Given:
String pojoClassname = Contact.class.getName();
String builderClassname = ContactBuilder.class.getName();
prj.addSourceFile(getSourceFilename(TESTDATA_DIRECTORY, pojoClassname));
// When:
boolean success = prj.compile();
// Then:
assertThat(success).isTrue();
String actual = getContent(prj.findGeneratedSource(builderClassname));
logDebug(actual);
String expected = loadResourceFromFilesystem(TESTDATA_DIRECTORY, getSourceFilename(builderClassname));
assertThat(actual).isEqualTo(expected);
assertThat(prj.findClass(builderClassname)).isNotNull();
}
/**
* @scenario Generating a builder for {@link Contact}.
* @throws Exception
*/
@Test
public void testShouldGenerateUserBuilder() throws Exception {
// Given:
String pojoClassname = User.class.getName();
String builderClassname = UserBuilder.class.getName();
prj.addSourceFile(getSourceFilename(TESTDATA_DIRECTORY, pojoClassname));
// When:
boolean success = prj.compile();
// Then:
assertThat(success).isTrue();
String actual = getContent(prj.findGeneratedSource(builderClassname));
logDebug(actual);
String expected = loadResourceFromFilesystem(TESTDATA_DIRECTORY, getSourceFilename(builderClassname));
assertThat(actual).isEqualTo(expected);
assertThat(prj.findClass(builderClassname)).isNotNull();
}
/**
* @scenario Generating a builder for {@link File}.
* @throws Exception
*/
@Test
public void testShouldGenerateFileBuilder() throws Exception {
// Given:
String factoryClassname = FileFactory.class.getName();
String builderClassname = "samples.FileBuilder";// FileBuilder.class.getName();
prj.addSourceFile(getSourceFilename(TESTDATA_DIRECTORY, factoryClassname));
// When:
boolean success = prj.compile();
// Then:
assertThat(success).isTrue();
String actual = getContent(prj.findGeneratedSource(builderClassname));
logDebug(actual);
String expected = loadResourceFromFilesystem(TESTDATA_DIRECTORY, getSourceFilename(builderClassname));
assertThat(actual).isEqualTo(expected);
assertThat(prj.findClass(builderClassname)).isNotNull();
}
/**
* @scenario Generating a builder for {@link URL}.
* @throws Exception
*/
@Test
public void testShouldGenerateUrlBuilder() throws Exception {
// Given:
String factoryClassname = UrlFactory.class.getName();
String builderClassname = "samples.UrlBuilder";// FileBuilder.class.getName();
prj.addSourceFile(getSourceFilename(TESTDATA_DIRECTORY, factoryClassname));
// When:
boolean success = prj.compile();
// Then:
String actual = getContent(prj.findGeneratedSource(builderClassname));
logDebug(actual);
assertThat(success).isTrue();
String expected = loadResourceFromFilesystem(TESTDATA_DIRECTORY, getSourceFilename(builderClassname));
assertThat(actual).isEqualTo(expected);
assertThat(prj.findClass(builderClassname)).isNotNull();
}
/**
* @scenario Generating a builder with generation gap enabled.
* @throws Exception
*/
@Test
public void testShouldGenerateAbstractPlayerBuilder() throws Exception {
// Given:
String pojoClassname = Player.class.getName();
String builderClassname = PlayerBuilder.class.getName();
String abstractBuilderClassname = AbstractPlayerBuilder.class.getName();
prj.addSourceFile(getSourceFilename(TESTDATA_DIRECTORY, pojoClassname));
prj.addSourceFile(getSourceFilename(TESTDATA_DIRECTORY, builderClassname));
// When:
boolean success = prj.compile();
// Then:
String actual = getContent(prj.findGeneratedSource(abstractBuilderClassname));
logDebug(actual);
assertThat(success).isTrue();
String expected = loadResourceFromFilesystem(TESTDATA_DIRECTORY, getSourceFilename(abstractBuilderClassname));
assertThat(actual).isEqualTo(expected);
assertThat(prj.findClass(builderClassname)).isNotNull();
}
/**
* @scenario Generating a builder with copy method enabled.
* @throws Exception
*/
@Test
public void testShouldGenerateTextEmailBuilder() throws Exception {
// Given:
String pojoClassname = TextEmail.class.getName();
String builderClassname = TextEmailBuilder.class.getName();
prj.addSourceFile(getSourceFilename(TESTDATA_DIRECTORY, pojoClassname));
// When:
boolean success = prj.compile();
// Then:
assertThat(success).isTrue();
String actual = getContent(prj.findGeneratedSource(builderClassname));
logDebug(actual);
String expected = loadResourceFromFilesystem(TESTDATA_DIRECTORY, getSourceFilename(builderClassname));
assertThat(actual).isEqualTo(expected);
assertThat(prj.findClass(builderClassname)).isNotNull();
}
/**
* @scenario Generating a builder with builder interface and builder properties.
* @throws Exception
*/
@Test
public void testShouldGenerateBuildersWithBuilderInterfaces() throws Exception {
// Given:
String pojo1Classname = Address.class.getName();
String pojo2Classname = Recipient.class.getName();
String pojo3Classname = Order.class.getName();
String pojo4Classname = Item.class.getName();
String builder1Classname = AddressBuilder.class.getName();
String builder2Classname = RecipientBuilder.class.getName();
String builder3Classname = OrderBuilder.class.getName();
String builder4Classname = ItemBuilder.class.getName();
prj.addSourceFile(getSourceFilename(TESTDATA_DIRECTORY, pojo1Classname));
prj.addSourceFile(getSourceFilename(TESTDATA_DIRECTORY, pojo2Classname));
prj.addSourceFile(getSourceFilename(TESTDATA_DIRECTORY, pojo3Classname));
prj.addSourceFile(getSourceFilename(TESTDATA_DIRECTORY, pojo4Classname));
// When:
boolean success = prj.compile();
// Then:
assertThat(success).isTrue();
String actual1 = getContent(prj.findGeneratedSource(builder1Classname));
logDebug(actual1);
String actual2 = getContent(prj.findGeneratedSource(builder2Classname));
logDebug(actual2);
String actual3 = getContent(prj.findGeneratedSource(builder3Classname));
logDebug(actual3);
String actual4 = getContent(prj.findGeneratedSource(builder4Classname));
logDebug(actual4);
String expected1 = loadResourceFromFilesystem(TESTDATA_DIRECTORY, getSourceFilename(builder1Classname));
assertThat(actual1).isEqualTo(expected1);
assertThat(prj.findClass(builder1Classname)).isNotNull();
String expected2 = loadResourceFromFilesystem(TESTDATA_DIRECTORY, getSourceFilename(builder2Classname));
assertThat(actual2).isEqualTo(expected2);
assertThat(prj.findClass(builder2Classname)).isNotNull();
String expected3 = loadResourceFromFilesystem(TESTDATA_DIRECTORY, getSourceFilename(builder3Classname));
assertThat(actual3).isEqualTo(expected3);
assertThat(prj.findClass(builder3Classname)).isNotNull();
String expected4 = loadResourceFromFilesystem(TESTDATA_DIRECTORY, getSourceFilename(builder4Classname));
assertThat(actual4).isEqualTo(expected4);
assertThat(prj.findClass(builder4Classname)).isNotNull();
}
/**
* @scenario Generating a builder with validator.
* @throws Exception
*/
@Test
public void testShouldGenerateCredentialsBuilder() throws Exception {
// Given:
String pojoClassname = Credentials.class.getName();
String builderClassname = CredentialsBuilder.class.getName();
prj.addSourceFile(getSourceFilename(TESTDATA_DIRECTORY, pojoClassname));
// When:
boolean success = prj.compile();
// Then:
assertThat(success).isTrue();
String actual = getContent(prj.findGeneratedSource(builderClassname));
logDebug(actual);
String expected = loadResourceFromFilesystem(TESTDATA_DIRECTORY, getSourceFilename(builderClassname));
assertThat(actual).isEqualTo(expected);
assertThat(prj.findClass(builderClassname)).isNotNull();
}
/**
* @scenario Generating a builder declared in {@link TestDslBase}.
* @throws Exception
*/
@Test
public void testShouldGenerateBuildersInDslBase() throws Exception {
// Given:
String factoryClassname = TestDslBase.class.getName();
String[] classes =
new String[] {TestDataFactory.class.getName(), TestDslTest.class.getName(), IntegerBuilder.class.getName(),
LongBuilder.class.getName()};
String builderClassname = StringBuilder.class.getName();
prj.addSourceFile(getSourceFilename(TESTDATA_DIRECTORY, factoryClassname));
for (String cls : classes) {
prj.addSourceFile(getSourceFilename(TESTDATA_DIRECTORY, cls));
}
// When:
boolean success = prj.compile();
// Then:
assertThat(success).isTrue();
String actual = getContent(prj.findGeneratedSource(builderClassname));
logDebug(actual);
String expected = loadResourceFromFilesystem(TESTDATA_DIRECTORY, getSourceFilename(builderClassname));
assertThat(actual).isEqualTo(expected);
assertThat(prj.findClass(builderClassname)).isNotNull();
}
/**
* @scenario Generating a builder having a builder factory method.
* @throws Exception
*/
@Test
public void testShouldGenerateTaskBuilder() throws Exception {
// Given:
String pojoClassname = Task.class.getName();
String builderClassname = TaskBuilder.class.getName();
prj.addSourceFile(getSourceFilename(TESTDATA_DIRECTORY, pojoClassname));
// When:
boolean success = prj.compile();
// Then:
assertThat(success).isTrue();
String actual = getContent(prj.findGeneratedSource(builderClassname));
logDebug(actual);
String expected = loadResourceFromFilesystem(TESTDATA_DIRECTORY, getSourceFilename(builderClassname));
assertThat(actual).isEqualTo(expected);
assertThat(prj.findClass(builderClassname)).isNotNull();
}
/**
* @scenario Generating a builder with some properties excluded.
* @throws Exception
*/
@Test
public void testShouldGenerateInputSourceBuilder() throws Exception {
// Given:
String factoryClassname = InputSourceFactory.class.getName();
prj.addSourceFile(getSourceFilename(TESTDATA_DIRECTORY, factoryClassname));
String builderClassname = InputSourceBuilder.class.getName();
// When:
boolean success = prj.compile();
// Then:
assertThat(success).isTrue();
String actual = getContent(prj.findGeneratedSource(builderClassname));
logDebug(actual);
String expected = loadResourceFromFilesystem(TESTDATA_DIRECTORY, getSourceFilename(builderClassname));
assertThat(actual).isEqualTo(expected);
assertThat(prj.findClass(builderClassname)).isNotNull();
}
/**
* @scenario Generating a builder with only mandatory properties included.
* @throws Exception
*/
@Test
public void testShouldGenerateGregorianCalendarBuilder() throws Exception {
// Given:
String factoryClassname = CalendarFactory.class.getName();
prj.addSourceFile(getSourceFilename(TESTDATA_DIRECTORY, factoryClassname));
String builderClassname = "samples.GregorianCalendarBuilder";// InputSourceBuilder.class.getName();
// When:
boolean success = prj.compile();
// Then:
assertThat(success).isTrue();
String actual = getContent(prj.findGeneratedSource(builderClassname));
logDebug(actual);
String expected = loadResourceFromFilesystem(TESTDATA_DIRECTORY, getSourceFilename(builderClassname));
assertThat(actual).isEqualTo(expected);
assertThat(prj.findClass(builderClassname)).isNotNull();
}
}