@Test public void failsToCompileNonEmptyTestSpecInterface() throws IOException { final JavaFileObject javaFileObject = JavaFileObjects.forResource( Resources.getResource(getClass(), RES_PREFIX + "IncorrectNonEmptyTestSpec.java")); final JavaFileObject layoutSpecObject = JavaFileObjects.forResource( Resources.getResource(getClass(), RES_PREFIX + "BasicLayoutSpec.java")); Truth.assertAbout(JavaSourcesSubjectFactory.javaSources()) .that(ImmutableList.of(javaFileObject, layoutSpecObject)) .processedWith(new ComponentsTestingProcessor(), new ComponentsProcessor()) .failsToCompile() .withErrorCount(1) .withErrorContaining( "TestSpec interfaces must not contain any members. Please remove these function declarations: ()void test, ()java.util.List<java.lang.Integer> list") .in(javaFileObject) .onLine(24); } }
public void testMissingSuperclassGenericParameter() throws Exception { JavaFileObject javaFileObject = JavaFileObjects.forSourceLines( "foo.bar.Baz", "package foo.bar;", "", "import retrofacebook.RetroFacebook;", "", "@RetroFacebook", "public abstract class Baz<T extends MissingType<?>> {", " public abstract int foo();", "}"); assertAbout(javaSource()) .that(javaFileObject) .processedWith(new RetroFacebookProcessor()) .failsToCompile() .withErrorContaining("MissingType") .in(javaFileObject).onLine(6); }
public void testMissingPropertyType() throws Exception { JavaFileObject javaFileObject = JavaFileObjects.forSourceLines( "foo.bar.Baz", "package foo.bar;", "", "import retrofacebook.RetroFacebook;", "", "@RetroFacebook", "public abstract class Baz {", " public abstract MissingType missingType();", "}"); assertAbout(javaSource()) .that(javaFileObject) .processedWith(new RetroFacebookProcessor()) .failsToCompile() .withErrorContaining("MissingType") .in(javaFileObject).onLine(7); }
public void testRetroFacebookBuilderOnTopLevelClass() throws Exception { JavaFileObject javaFileObject = JavaFileObjects.forSourceLines( "foo.bar.Builder", "package foo.bar;", "", "import retrofacebook.RetroFacebook;", "", "@RetroFacebook.Builder", "public interface Builder {", " Builder foo(int x);", " Object build();", "}"); assertAbout(javaSource()) .that(javaFileObject) .processedWith(new RetroFacebookProcessor(), new RetroFacebookBuilderProcessor()) .failsToCompile() .withErrorContaining("can only be applied to a class or interface inside") .in(javaFileObject).onLine(6); }
public void testAnnotationOnEnum() throws Exception { JavaFileObject javaFileObject = JavaFileObjects.forSourceLines( "foo.bar.Baz", "package foo.bar;", "", "import retroweibo.RetroWeibo;", "", "@RetroWeibo", "public enum Baz {}"); assertAbout(javaSource()) .that(javaFileObject) .processedWith(new RetroWeiboProcessor()) .failsToCompile() .withErrorContaining("RetroWeibo only applies to classes") .in(javaFileObject).onLine(6); }
public void testAnnotationOnInterface() throws Exception { JavaFileObject javaFileObject = JavaFileObjects.forSourceLines( "foo.bar.Baz", "package foo.bar;", "", "import retroweibo.RetroWeibo;", "", "@RetroWeibo", "public interface Baz {}"); assertAbout(javaSource()) .that(javaFileObject) .processedWith(new RetroWeiboProcessor()) .failsToCompile() .withErrorContaining("RetroWeibo only applies to classes") .in(javaFileObject).onLine(6); }
public void testAnnotationOnEnum() throws Exception { JavaFileObject javaFileObject = JavaFileObjects.forSourceLines( "foo.bar.Baz", "package foo.bar;", "", "import auto.json.AutoJson;", "", "@AutoJson", "public enum Baz {}"); assertAbout(javaSource()) .that(javaFileObject) .processedWith(new AutoJsonProcessor()) .failsToCompile() .withErrorContaining("AutoJson only applies to classes") .in(javaFileObject).onLine(6); }
public void testAnnotationOnInterface() throws Exception { JavaFileObject javaFileObject = JavaFileObjects.forSourceLines( "foo.bar.Baz", "package foo.bar;", "", "import auto.json.AutoJson;", "", "@AutoJson", "public interface Baz {}"); assertAbout(javaSource()) .that(javaFileObject) .processedWith(new AutoJsonProcessor()) .failsToCompile() .withErrorContaining("AutoJson only applies to classes") .in(javaFileObject).onLine(6); }
public void testMissingPropertyType() throws Exception { JavaFileObject javaFileObject = JavaFileObjects.forSourceLines( "foo.bar.Baz", "package foo.bar;", "", "import retrofacebook.RetroFacebook;", "", "@RetroFacebook", "public abstract class Baz {", " public abstract MissingType missingType();", "}"); assertAbout(javaSource()) .that(javaFileObject) .processedWith(new RetroFacebookProcessor()) .failsToCompile() .withErrorContaining("MissingType") .in(javaFileObject).onLine(7); }
@Test public void failsInNonParameterConstructor() { JavaFileObject source = JavaFileObjects.forSourceString("test.Test", "" + "package test;\n" + "import fit.SharedPreferenceAble;\n" + "@SharedPreferenceAble public class Test {\n" + " public String aT;\n" + " public Test(String aT) {\n" + " this.aT = aT;\n" + "}" + "}"); assertAbout(javaSource()).that(source) .processedWith(new FitProcessor()) .failsToCompile() .withErrorContaining("Fit can't use no non-parameter constructor") .in(source) .onLine(3); }
public void testAnnotationOnInterface() throws Exception { JavaFileObject javaFileObject = JavaFileObjects.forSourceLines( "foo.bar.Baz", "package foo.bar;", "", "import retrofacebook.RetroFacebook;", "", "@RetroFacebook", "public interface Baz {}"); assertAbout(javaSource()) .that(javaFileObject) .processedWith(new RetroFacebookProcessor()) .failsToCompile() .withErrorContaining("RetroFacebook only applies to classes") .in(javaFileObject).onLine(6); }
public void testAnnotationOnInterface() throws Exception { JavaFileObject javaFileObject = JavaFileObjects.forSourceLines( "foo.bar.Baz", "package foo.bar;", "", "import retrofacebook.RetroFacebook;", "", "@RetroFacebook", "public interface Baz {}"); assertAbout(javaSource()) .that(javaFileObject) .processedWith(new RetroFacebookProcessor()) .failsToCompile() .withErrorContaining("RetroFacebook only applies to classes") .in(javaFileObject).onLine(6); }
public void testAnnotationOnEnum() throws Exception { JavaFileObject javaFileObject = JavaFileObjects.forSourceLines( "foo.bar.Baz", "package foo.bar;", "", "import retrofacebook.RetroFacebook;", "", "@RetroFacebook", "public enum Baz {}"); assertAbout(javaSource()) .that(javaFileObject) .processedWith(new RetroFacebookProcessor()) .failsToCompile() .withErrorContaining("RetroFacebook only applies to classes") .in(javaFileObject).onLine(6); }
public void testAnnotationOnEnum() throws Exception { JavaFileObject javaFileObject = JavaFileObjects.forSourceLines( "foo.bar.Baz", "package foo.bar;", "", "import retrofacebook.RetroFacebook;", "", "@RetroFacebook", "public enum Baz {}"); assertAbout(javaSource()) .that(javaFileObject) .processedWith(new RetroFacebookProcessor()) .failsToCompile() .withErrorContaining("RetroFacebook only applies to classes") .in(javaFileObject).onLine(6); }
@Test public void failWhenCreatorAlreadyDefinedTest() throws Exception { JavaFileObject source = JavaFileObjects.forSourceString("test.Test", "" + "package test;\n" + "import android.os.Parcel;\n" + "import android.os.Parcelable;\n" + "import com.google.auto.value.AutoValue;\n" + "@AutoValue public abstract class Test implements Parcelable {\n" + " public abstract String name();\n" + " public static final Parcelable.Creator<Test> CREATOR = new Parcelable.Creator<Test>() {\n" + " @Override public Test createFromParcel(Parcel in) {\n" + " return null;\n" + " }\n" + " @Override public Test[] newArray(int size) {\n" + " return new Test[size];\n" + " }\n" + " };\n" + "}" ); assertAbout(javaSources()) .that(Arrays.asList(parcel, parcelable, source)) .processedWith(new AutoValueProcessor()) .failsToCompile() .withErrorContaining("Manual implementation of a static Parcelable.Creator<T> CREATOR field " + "found when processing test.Test. Remove this so auto-value-parcel can " + "automatically generate the implementation for you.") .in(source) .onLine(7); }
@Test public void failWhenWriteToParcelAlreadyDefinedTest() throws Exception { JavaFileObject source = JavaFileObjects.forSourceString("test.Test", "" + "package test;\n" + "import android.os.Parcel;\n" + "import android.os.Parcelable;\n" + "import com.google.auto.value.AutoValue;\n" + "@AutoValue public abstract class Test implements Parcelable {\n" + " public abstract String name();\n" + " @Override\n" + " public void writeToParcel(Parcel dest, int flags) {\n" + " }\n" + "}" ); assertAbout(javaSources()) .that(Arrays.asList(parcel, parcelable, source)) .processedWith(new AutoValueProcessor()) .failsToCompile() .withErrorContaining("Manual implementation of Parcelable#writeToParcel(Parcel,int) found when " + "processing test.Test. Remove this so auto-value-parcel can automatically " + "generate the implementation for you.") .in(source) .onLine(8); }
@Test public void parameterizedTypeOfNonParcelableTypeFails() { JavaFileObject source = JavaFileObjects.forSourceString("test.Test", "" + "package test;\n" + "import android.os.Parcelable;\n" + "import com.google.auto.value.AutoValue;\n" + "@AutoValue public abstract class Test<T extends Runnable> implements Parcelable {\n" + "public abstract T tea();\n" + "}" ); assertAbout(javaSources()) .that(Arrays.asList(parcel, parcelable, source)) .processedWith(new AutoValueProcessor()) .failsToCompile() .withErrorContaining("AutoValue property tea is not a supported Parcelable type.") .in(source).onLine(5); }
@Test public void failsOnDuplicateKey() { JavaFileObject file = JavaFileObjects .forResource("inputs/RemixerAnnotationProcessorTest/DuplicateKey.java"); Truth.assert_().about(JavaSourceSubjectFactory.javaSource()) .that(file) .processedWith(allProcessors) .failsToCompile() .withErrorContaining("Repeated Variable key") .in(file); }
@Test public void failsEmptyList() { JavaFileObject file = JavaFileObjects .forResource("inputs/ColorListVariableMethodAnnotationTest/EmptyList.java"); Truth.assert_().about(JavaSourceSubjectFactory.javaSource()) .that(file) .processedWith(allProcessors) .failsToCompile() .withErrorContaining("List of limited to values cannot be empty") .in(file); }