static Iterable<? extends Processor> memberInjectorProcessors(String toothpickRegistryPackageName, List<String> toothpickRegistryChildrenPackageNameList) { return memberInjectorProcessors(toothpickRegistryPackageName, toothpickRegistryChildrenPackageNameList, "java.*,android.*"); }
private Iterable<Processor> defaultMemberInjectorProcessor() { return ProcessorTestUtilities.memberInjectorProcessors("toothpick", Collections.EMPTY_LIST); } }
@Test public void testFieldInjection_shouldFail_whenFieldIsPrivate() { JavaFileObject source = JavaFileObjects.forSourceString("test.TestFieldInjection", Joiner.on('\n').join(// "package test;", // "import javax.inject.Inject;", // "public class TestFieldInjection {", // " @Inject private Foo foo;", // " public TestFieldInjection() {}", // "}", // "class Foo {}" // )); assert_().about(javaSource()) .that(source) .processedWith(memberInjectorProcessors()) .failsToCompile() .withErrorContaining("@Inject annotated fields must be non private : test.TestFieldInjection#foo"); }
@Test public void testFieldInjection_shouldFail_WhenFieldIsInvalidLazy() { JavaFileObject source = JavaFileObjects.forSourceString("test.TestFieldInjection", Joiner.on('\n').join(// "package test;", // "import javax.inject.Inject;", // "import toothpick.Lazy;", // "public class TestFieldInjection {", // " @Inject Lazy foo;", // " public TestFieldInjection() {}", // "}" // )); assert_().about(javaSource()) .that(source) .processedWith(memberInjectorProcessors()) .failsToCompile() .withErrorContaining("Field test.TestFieldInjection#foo is not a valid toothpick.Lazy."); }
@Test public void testSimpleMethodInjectionWithLazyOfGenericType_shouldFail_WithLazyOfGenericType() { JavaFileObject source = JavaFileObjects.forSourceString("test.TestMethodInjection", Joiner.on('\n').join(// "package test;", // "import javax.inject.Inject;", // "import toothpick.Lazy;", // "public class TestMethodInjection {", // " @Inject", // " public void m(Lazy<Foo<String>> foo) {}", // "}", // "class Foo<T> {}" // )); assert_().about(javaSource()) .that(source) .processedWith(memberInjectorProcessors()) .failsToCompile() .withErrorContaining("Lazy/Provider foo is not a valid in m. Lazy/Provider cannot be used on generic types."); }
@Test public void testMethodInjection_shouldFail_whenInjectedMethodParameterIsInvalidProvider() { JavaFileObject source = JavaFileObjects.forSourceString("test.TestMethodInjection", Joiner.on('\n').join(// "package test;", // "import javax.inject.Inject;", // "import javax.inject.Provider;", // "public class TestMethodInjection {", // " @Inject", // " public void m(Provider foo) {}", // "}", // "class Foo {}" // )); assert_().about(javaSource()) .that(source) .processedWith(memberInjectorProcessors()) .failsToCompile() .withErrorContaining("Parameter foo in method/constructor test.TestMethodInjection#m is not a valid javax.inject.Provider."); }
@Test public void testFieldInjection_shouldFail_WhenFieldIsPrimitive() { JavaFileObject source = JavaFileObjects.forSourceString("test.TestFieldInjection", Joiner.on('\n').join(// "package test;", // "import javax.inject.Inject;", // "public class TestFieldInjection {", // " @Inject int foo;", // " public TestFieldInjection() {}", // "}" // )); assert_().about(javaSource()) .that(source) .processedWith(memberInjectorProcessors()) .failsToCompile() .withErrorContaining("Field test.TestFieldInjection#foo is of type int which is not supported by Toothpick."); } }
@Test public void testMethodInjection_shouldFail_whenInjectedMethodIsPrivate() { JavaFileObject source = JavaFileObjects.forSourceString("test.TestMethodInjection", Joiner.on('\n').join(// "package test;", // "import javax.inject.Inject;", // "public class TestMethodInjection {", // " @Inject", // " private void m(Foo foo) {}", // "}", // "class Foo {}" // )); assert_().about(javaSource()) .that(source) .processedWith(memberInjectorProcessors()) .failsToCompile() .withErrorContaining("@Inject annotated methods must not be private : test.TestMethodInjection#m"); }
@Test public void testFieldInjection_shouldFail_WhenFieldIsInvalidProvider() { JavaFileObject source = JavaFileObjects.forSourceString("test.TestFieldInjection", Joiner.on('\n').join(// "package test;", // "import javax.inject.Inject;", // "import javax.inject.Provider;", // "public class TestFieldInjection {", // " @Inject Provider foo;", // " public TestFieldInjection() {}", // "}" // )); assert_().about(javaSource()) .that(source) .processedWith(memberInjectorProcessors()) .failsToCompile() .withErrorContaining("Field test.TestFieldInjection#foo is not a valid javax.inject.Provider."); }
@Test public void testFieldInjection_shouldFail_WhenFieldIsInvalidLazyGenerics() { JavaFileObject source = JavaFileObjects.forSourceString("test.TestFieldInjection", Joiner.on('\n').join(// "package test;", // "import javax.inject.Inject;", // "import toothpick.Lazy;", // "public class TestFieldInjection {", // " @Inject Lazy<Foo<String>> foo;", // " public TestFieldInjection() {}", // "}", // "class Foo<T> {}" // )); assert_().about(javaSource()) .that(source) .processedWith(memberInjectorProcessors()) .failsToCompile() .withErrorContaining("Lazy/Provider foo is not a valid in TestFieldInjection. Lazy/Provider cannot be used on generic types."); }
@Test public void testFieldInjection_shouldFail_WhenFieldIsInvalidProviderGenerics() { JavaFileObject source = JavaFileObjects.forSourceString("test.TestFieldInjection", Joiner.on('\n').join(// "package test;", // "import javax.inject.Inject;", // "import javax.inject.Provider;", // "public class TestFieldInjection {", // " @Inject Provider<Foo<String>> foo;", // " public TestFieldInjection() {}", // "}", // "class Foo<T> {}" // )); assert_().about(javaSource()) .that(source) .processedWith(memberInjectorProcessors()) .failsToCompile() .withErrorContaining("Lazy/Provider foo is not a valid in TestFieldInjection. Lazy/Provider cannot be used on generic types."); }
@Test public void testMethodInjection_shouldFail_whenInjectedMethodParameterIsInvalidLazy() { JavaFileObject source = JavaFileObjects.forSourceString("test.TestMethodInjection", Joiner.on('\n').join(// "package test;", // "import javax.inject.Inject;", // "import toothpick.Lazy;", // "public class TestMethodInjection {", // " @Inject", // " public void m(Lazy foo) {}", // "}", // "class Foo {}" // )); assert_().about(javaSource()) .that(source) .processedWith(memberInjectorProcessors()) .failsToCompile() .withErrorContaining("Parameter foo in method/constructor test.TestMethodInjection#m is not a valid toothpick.Lazy."); }
@Test public void testFieldInjection_shouldFail_WhenContainingClassIsPrivate() { JavaFileObject source = JavaFileObjects.forSourceString("test.TestFieldInjection", Joiner.on('\n').join(// "package test;", // "import javax.inject.Inject;", // "public class TestFieldInjection {", // " private static class InnerClass {", // " @Inject Foo foo;", // " public InnerClass() {}", // " }", // "}", // "class Foo {}" // )); assert_().about(javaSource()) .that(source) .processedWith(memberInjectorProcessors()) .failsToCompile() .withErrorContaining("@Injected fields in class InnerClass. The class must be non private."); }
@Test public void testMethodInjection_shouldFail_whenContainingClassIsPrivate() { JavaFileObject source = JavaFileObjects.forSourceString("test.TestMethodInjection", Joiner.on('\n').join(// "package test;", // "import javax.inject.Inject;", // "public class TestMethodInjection {", // " private static class InnerClass {", // " @Inject", // " public void m(Foo foo) {}", // " }", // "}", // "class Foo {}" // )); assert_().about(javaSource()) .that(source) .processedWith(memberInjectorProcessors()) .failsToCompile() .withErrorContaining("@Injected fields in class InnerClass. The class must be non private."); }
.processedWith(memberInjectorProcessors()) .compilesWithoutError() .and()
.processedWith(memberInjectorProcessors()) .compilesWithoutError() .and()
.processedWith(memberInjectorProcessors()) .compilesWithoutError() .and()
.processedWith(memberInjectorProcessors()) .compilesWithoutError() .and()
.processedWith(memberInjectorProcessors()) .compilesWithoutError() .and()
@Test public void testNamedFieldInjection_shouldFail_whenUsingMoreThan1QualifierAnnotations() { JavaFileObject source = JavaFileObjects.forSourceString("test.TestFieldInjection", Joiner.on('\n').join(// "package test;", // "import javax.inject.Inject;", // "import javax.inject.Named;", // "import javax.inject.Qualifier;", // "public class TestFieldInjection {", // " @Inject @Bar @Qurtz Foo foo;", // " public TestFieldInjection() {}", // "}", // "class Foo {}", // "@Qualifier", // "@interface Bar {}", // "@Qualifier", // "@interface Qurtz {}" // )); assert_().about(javaSource()) .that(source) .processedWith(memberInjectorProcessors()) .failsToCompile() .withErrorContaining("Only one javax.inject.Qualifier annotation is allowed to name injections."); }