package com.airbnb.epoxy;
import com.google.testing.compile.JavaFileObjects;
import org.junit.Test;
import javax.tools.JavaFileObject;
import static com.google.common.truth.Truth.assert_;
import static com.google.testing.compile.JavaSourceSubjectFactory.javaSource;
import static com.google.testing.compile.JavaSourcesSubjectFactory.javaSources;
import static java.util.Arrays.asList;
public class ControllerProcessorTest {
@Test
public void controllerWithAutoModel() {
JavaFileObject model = JavaFileObjects
.forResource("BasicModelWithAttribute.java");
JavaFileObject controller = JavaFileObjects
.forResource("ControllerWithAutoModel.java");
JavaFileObject generatedHelper = JavaFileObjects
.forResource("ControllerWithAutoModel_EpoxyHelper.java");
assert_().about(javaSources())
.that(asList(model, controller))
.processedWith(new EpoxyProcessor())
.compilesWithoutError()
.and()
.generatesSources(generatedHelper);
}
@Test
public void controllerWithAutoModelWithoutValidation() {
JavaFileObject model = JavaFileObjects
.forResource("BasicModelWithAttribute.java");
JavaFileObject controller = JavaFileObjects
.forResource("ControllerWithAutoModelWithoutValidation.java");
JavaFileObject generatedHelper = JavaFileObjects
.forResource("ControllerWithAutoModelWithoutValidation_EpoxyHelper.java");
assert_().about(javaSources())
.that(asList(model, controller))
.processedWith(EpoxyProcessor.withNoValidation())
.compilesWithoutError()
.and()
.generatesSources(generatedHelper);
}
@Test
public void controllerWithSuperClassWithAutoModel() {
JavaFileObject model = JavaFileObjects
.forResource("BasicModelWithAttribute.java");
JavaFileObject controller = JavaFileObjects
.forResource("ControllerWithAutoModelWithSuperClass.java");
JavaFileObject generatedHelper = JavaFileObjects
.forResource("ControllerWithAutoModelWithSuperClass_EpoxyHelper.java");
JavaFileObject generatedSubHelper = JavaFileObjects
.forResource("ControllerWithAutoModelWithSuperClass$SubControllerWithAutoModelWithSuperClass_EpoxyHelper.java");
assert_().about(javaSources())
.that(asList(model, controller))
.processedWith(new EpoxyProcessor())
.compilesWithoutError()
.and()
.generatesSources(generatedHelper, generatedSubHelper);
}
@Test
public void autoModelNotInAutoAdapterFails() {
JavaFileObject badClass = JavaFileObjects
.forResource("AutoModelNotInAutoAdapter.java");
assert_().about(javaSource())
.that(badClass)
.processedWith(new EpoxyProcessor())
.failsToCompile();
}
@Test
public void autoModelAnnotationNotOnModelFails() {
JavaFileObject badClass = JavaFileObjects
.forResource("AutoModelNotOnModelField.java");
assert_().about(javaSource())
.that(badClass)
.processedWith(new EpoxyProcessor())
.failsToCompile();
}
@Test
public void setsStagingControllerWhenImplicitlyAddingModels() {
JavaFileObject model = JavaFileObjects
.forResource("BasicModelWithAttribute.java");
JavaFileObject controller = JavaFileObjects
.forResource("ControllerWithAutoModelAndImplicitAdding.java");
JavaFileObject generatedHelper = JavaFileObjects
.forResource("ControllerWithAutoModelAndImplicitAdding_EpoxyHelper.java");
assert_().about(javaSources())
.that(asList(model, controller))
.processedWith(EpoxyProcessor.withImplicitAdding())
.compilesWithoutError()
.and()
.generatesSources(generatedHelper);
}
}