Skip to content

Commit

Permalink
Extracted processor tests into the separate android module
Browse files Browse the repository at this point in the history
  • Loading branch information
pzagalsky committed Feb 14, 2020
1 parent 64ba79b commit 5a3ce22
Show file tree
Hide file tree
Showing 8 changed files with 125 additions and 67 deletions.
61 changes: 61 additions & 0 deletions lightcycle-processor-tests/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import org.gradle.internal.jvm.Jvm

apply plugin: 'com.android.library'
apply plugin: 'checkstyle'

android {
compileSdkVersion rootProject.ext.compileSdkVersion

defaultConfig {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion

versionCode 1
versionName "1.0"

// this is required for having an annotation processor in the compiling classpath
javaCompileOptions.annotationProcessorOptions.includeCompileClasspath = true
}

compileOptions {
sourceCompatibility rootProject.ext.sourceCompatibilityVersion
targetCompatibility rootProject.ext.targetCompatibilityVersion
}

testOptions {
unitTests.returnDefaultValues = true
}
}

checkstyle {
configFile rootProject.file('checkstyle.xml')
showViolations true
}

dependencies {
testImplementation project(':lightcycle-processor')
testImplementation deps.javapoet

testImplementation deps.android
testImplementation deps.appcompat_x
testImplementation deps.compiletesting

testImplementation files(getRuntimeJar())
testImplementation files(Jvm.current().getToolsJar())
}

// Taken from:
// https://github.com/JakeWharton/butterknife/blob/bac9b737fdc7e37a30cd8407289e626bd5a161bc/butterknife-runtime/build.gradle
static def getRuntimeJar() {
try {
final File javaBase = new File(System.getProperty("java.home")).getCanonicalFile();
File runtimeJar = new File(javaBase, "lib/rt.jar");
if (runtimeJar.exists()) {
return runtimeJar;
}
runtimeJar = new File(javaBase, "jre/lib/rt.jar");
return runtimeJar.exists() ? runtimeJar : null;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
1 change: 1 addition & 0 deletions lightcycle-processor-tests/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<manifest package="com.example.lightcycle_processor_tests" />
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,20 @@

import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
import com.google.common.truth.Truth;
import com.google.testing.compile.JavaFileObjects;
import com.google.testing.compile.JavaSourceSubjectFactory;
import com.google.testing.compile.JavaSourcesSubjectFactory;

import org.junit.Test;

import javax.tools.JavaFileObject;

import static com.google.common.truth.Truth.assertAbout;
import static com.google.testing.compile.JavaFileObjects.forSourceString;
import static com.google.testing.compile.JavaSourceSubjectFactory.javaSource;
import static com.google.testing.compile.JavaSourcesSubjectFactory.javaSources;

public class ActivityInjectionTest {

@Test
public void shouldGenerateInjectorForActivity() {
JavaFileObject validTestActivity = forSourceString("com/test/ValidTestActivity", Joiner.on("\n").join(
JavaFileObject validTestActivity = JavaFileObjects.forSourceString("com/test/ValidTestActivity", Joiner.on("\n").join(
"package com.test;",
"",
"import com.soundcloud.lightcycle.ActivityLightCycle;",
Expand Down Expand Up @@ -46,7 +45,7 @@ public void shouldGenerateInjectorForActivity() {
"class LightCycle2 extends DefaultActivityLightCycle<ValidTestActivity> {",
"}"));

JavaFileObject expectedSource = forSourceString("com.test.ValidTestActivity$LightCycleBinder", Joiner.on("\n").join(
JavaFileObject expectedSource = JavaFileObjects.forSourceString("com.test.ValidTestActivity$LightCycleBinder", Joiner.on("\n").join(
"package com.test;",
"",
"public final class ValidTestActivity$LightCycleBinder {",
Expand All @@ -61,7 +60,7 @@ public void shouldGenerateInjectorForActivity() {
" }",
"}"));

assertAbout(javaSource())
Truth.assertAbout(JavaSourceSubjectFactory.javaSource())
.that(validTestActivity)
.processedWith(new LightCycleProcessor())
.compilesWithoutError()
Expand All @@ -70,7 +69,7 @@ public void shouldGenerateInjectorForActivity() {

@Test
public void shouldGenerateInjectorForActivityHierarchy() {
JavaFileObject validTestHierarchyActivity = forSourceString("com/test/ValidTestHierarchyActivity", Joiner.on("\n").join(
JavaFileObject validTestHierarchyActivity = JavaFileObjects.forSourceString("com/test/ValidTestHierarchyActivity", Joiner.on("\n").join(
"package com.test;",
"",
"import com.soundcloud.lightcycle.ActivityLightCycle;",
Expand Down Expand Up @@ -104,7 +103,7 @@ public void shouldGenerateInjectorForActivityHierarchy() {
"class LightCycle2 extends DefaultActivityLightCycle<BaseActivity> {",
"}"));

JavaFileObject expectedSource = forSourceString("com.test.ValidTestHierarchyActivity$LightCycleBinder", Joiner.on("\n").join(
JavaFileObject expectedSource = JavaFileObjects.forSourceString("com.test.ValidTestHierarchyActivity$LightCycleBinder", Joiner.on("\n").join(
"package com.test;",
"",
"public final class ValidTestHierarchyActivity$LightCycleBinder {",
Expand All @@ -117,7 +116,7 @@ public void shouldGenerateInjectorForActivityHierarchy() {
" }",
"}"));

assertAbout(javaSource())
Truth.assertAbout(JavaSourceSubjectFactory.javaSource())
.that(validTestHierarchyActivity)
.processedWith(new LightCycleProcessor())
.compilesWithoutError()
Expand All @@ -126,7 +125,7 @@ public void shouldGenerateInjectorForActivityHierarchy() {

@Test
public void shouldGenerateInjectorForLightCycleAppCompatActivity() {
JavaFileObject validTestLightCycleAppCompatActivity = forSourceString("com/test/ValidTestLightCycleAppCompatActivity", Joiner.on("\n").join(
JavaFileObject validTestLightCycleAppCompatActivity = JavaFileObjects.forSourceString("com/test/ValidTestLightCycleAppCompatActivity", Joiner.on("\n").join(
"package com.test;",
"",
"import com.soundcloud.lightcycle.ActivityLightCycle;",
Expand All @@ -152,7 +151,7 @@ public void shouldGenerateInjectorForLightCycleAppCompatActivity() {

// Because neither the processor or the lib (java libraries) can depend on the api (Android library),
// we have to create a fake `LightCycleAppCompatActivity` here for testing purpose.
JavaFileObject fakeLightCycleAppCompatActivity = forSourceString("com/soundcloud/lightcycle/LightCycleAppCompatActivity", Joiner.on("\n").join(
JavaFileObject fakeLightCycleAppCompatActivity = JavaFileObjects.forSourceString("com/soundcloud/lightcycle/LightCycleAppCompatActivity", Joiner.on("\n").join(
"package com.soundcloud.lightcycle;",
"",
"import android.app.Activity;",
Expand All @@ -166,7 +165,7 @@ public void shouldGenerateInjectorForLightCycleAppCompatActivity() {
"",
"}"));

JavaFileObject expectedSource = forSourceString("com.test.ValidTestLightCycleAppCompatActivity$LightCycleBinder", Joiner.on("\n").join(
JavaFileObject expectedSource = JavaFileObjects.forSourceString("com.test.ValidTestLightCycleAppCompatActivity$LightCycleBinder", Joiner.on("\n").join(
"package com.test;",
"",
"public final class ValidTestLightCycleAppCompatActivity$LightCycleBinder {",
Expand All @@ -181,7 +180,7 @@ public void shouldGenerateInjectorForLightCycleAppCompatActivity() {
" }",
"}"));

assertAbout(javaSources())
Truth.assertAbout(JavaSourcesSubjectFactory.javaSources())
.that(ImmutableList.of(validTestLightCycleAppCompatActivity, fakeLightCycleAppCompatActivity))
.processedWith(new LightCycleProcessor())
.compilesWithoutError()
Expand All @@ -190,7 +189,7 @@ public void shouldGenerateInjectorForLightCycleAppCompatActivity() {

@Test
public void shouldGenerateInjectorForLightCycleActionBarActivity() {
JavaFileObject validTestLightCycleActionBarActivity = forSourceString("com/test/ValidTestLightCycleActionBarActivity", Joiner.on("\n").join(
JavaFileObject validTestLightCycleActionBarActivity = JavaFileObjects.forSourceString("com/test/ValidTestLightCycleActionBarActivity", Joiner.on("\n").join(
"package com.test;",
"",
"import com.soundcloud.lightcycle.ActivityLightCycle;",
Expand All @@ -216,7 +215,7 @@ public void shouldGenerateInjectorForLightCycleActionBarActivity() {

// Because neither the processor or the lib (java libraries) can depend on the api (Android library),
// we have to create a fake `LightCycleActionBarActivity` here for testing purpose.
JavaFileObject fakeLightCycleActionBarActivity = forSourceString("com/soundcloud/lightcycle/LightCycleActionBarActivity", Joiner.on("\n").join(
JavaFileObject fakeLightCycleActionBarActivity = JavaFileObjects.forSourceString("com/soundcloud/lightcycle/LightCycleActionBarActivity", Joiner.on("\n").join(
"package com.soundcloud.lightcycle;",
"",
"import android.app.Activity;",
Expand All @@ -230,7 +229,7 @@ public void shouldGenerateInjectorForLightCycleActionBarActivity() {
"",
"}"));

JavaFileObject expectedSource = forSourceString("com.test.ValidTestLightCycleActionBarActivity$LightCycleBinder", Joiner.on("\n").join(
JavaFileObject expectedSource = JavaFileObjects.forSourceString("com.test.ValidTestLightCycleActionBarActivity$LightCycleBinder", Joiner.on("\n").join(
"package com.test;",
"",
"public final class ValidTestLightCycleActionBarActivity$LightCycleBinder {",
Expand All @@ -245,7 +244,7 @@ public void shouldGenerateInjectorForLightCycleActionBarActivity() {
" }",
"}"));

assertAbout(javaSources())
Truth.assertAbout(JavaSourcesSubjectFactory.javaSources())
.that(ImmutableList.of(validTestLightCycleActionBarActivity, fakeLightCycleActionBarActivity))
.processedWith(new LightCycleProcessor())
.compilesWithoutError()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,20 @@

import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
import com.google.common.truth.Truth;
import com.google.testing.compile.JavaFileObjects;
import com.google.testing.compile.JavaSourceSubjectFactory;
import com.google.testing.compile.JavaSourcesSubjectFactory;

import org.junit.Test;

import javax.tools.JavaFileObject;

import static com.google.common.truth.Truth.assertAbout;
import static com.google.testing.compile.JavaFileObjects.forSourceString;
import static com.google.testing.compile.JavaSourceSubjectFactory.javaSource;
import static com.google.testing.compile.JavaSourcesSubjectFactory.javaSources;

public class FragmentInjectionTest {

@Test
public void shouldGenerateInjectorForFragment() {
JavaFileObject validTestFragment = forSourceString("com/test/ValidTestFragment", Joiner.on("\n").join(
JavaFileObject validTestFragment = JavaFileObjects.forSourceString("com/test/ValidTestFragment", Joiner.on("\n").join(
"package com.test;",
"",
"import com.soundcloud.lightcycle.FragmentLightCycle;",
Expand Down Expand Up @@ -45,7 +44,7 @@ public void shouldGenerateInjectorForFragment() {
"class LightCycle2 extends DefaultFragmentLightCycle<Fragment> {",
"}"));

JavaFileObject expectedSource = forSourceString("com.test.ValidTestFragment$LightCycleBinder", Joiner.on("\n").join(
JavaFileObject expectedSource = JavaFileObjects.forSourceString("com.test.ValidTestFragment$LightCycleBinder", Joiner.on("\n").join(
"package com.test;",
"",
"public final class ValidTestFragment$LightCycleBinder {",
Expand All @@ -60,7 +59,7 @@ public void shouldGenerateInjectorForFragment() {
" }",
"}"));

assertAbout(javaSource())
Truth.assertAbout(JavaSourceSubjectFactory.javaSource())
.that(validTestFragment)
.processedWith(new LightCycleProcessor())
.compilesWithoutError()
Expand All @@ -69,7 +68,7 @@ public void shouldGenerateInjectorForFragment() {

@Test
public void shouldGenerateInjectorForLightCycleFragment() {
JavaFileObject validTestLightCycleFragment = forSourceString("com/test/ValidTestLightCycleFragment", Joiner.on("\n").join(
JavaFileObject validTestLightCycleFragment = JavaFileObjects.forSourceString("com/test/ValidTestLightCycleFragment", Joiner.on("\n").join(
"package com.test;",
"",
"import com.soundcloud.lightcycle.DefaultFragmentLightCycle;",
Expand All @@ -94,7 +93,7 @@ public void shouldGenerateInjectorForLightCycleFragment() {

// Because neither the processor or the lib (java libraries) can depend on the api (Android library),
// we have to create a fake `LightCycleFragment` here for testing purpose.
JavaFileObject fakeLightCycleFragment = forSourceString("com/soundcloud/lightcycle/LightCycleFragment", Joiner.on("\n").join(
JavaFileObject fakeLightCycleFragment = JavaFileObjects.forSourceString("com/soundcloud/lightcycle/LightCycleFragment", Joiner.on("\n").join(
"package com.soundcloud.lightcycle;",
"",
"import android.app.Fragment;",
Expand All @@ -108,7 +107,7 @@ public void shouldGenerateInjectorForLightCycleFragment() {
"",
"}"));

JavaFileObject expectedSource = forSourceString("com.test.ValidTestLightCycleFragment$LightCycleBinder", Joiner.on("\n").join(
JavaFileObject expectedSource = JavaFileObjects.forSourceString("com.test.ValidTestLightCycleFragment$LightCycleBinder", Joiner.on("\n").join(
"package com.test;",
"",
"public final class ValidTestLightCycleFragment$LightCycleBinder {",
Expand All @@ -123,7 +122,7 @@ public void shouldGenerateInjectorForLightCycleFragment() {
" }",
"}"));

assertAbout(javaSources())
Truth.assertAbout(JavaSourcesSubjectFactory.javaSources())
.that(ImmutableList.of(validTestLightCycleFragment, fakeLightCycleFragment))
.processedWith(new LightCycleProcessor())
.compilesWithoutError()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
package com.soundcloud.lightcycle;

import com.google.common.base.Joiner;
import com.google.common.truth.Truth;
import com.google.testing.compile.JavaFileObjects;
import com.google.testing.compile.JavaSourceSubjectFactory;

import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;

import javax.tools.JavaFileObject;

import static com.google.common.truth.Truth.assertAbout;
import static com.google.testing.compile.JavaFileObjects.forSourceString;
import static com.google.testing.compile.JavaSourceSubjectFactory.javaSource;

public class InvalidCaseTest {

@Rule
Expand All @@ -23,7 +22,7 @@ public void shouldThrowExceptionWhenLightCycleFieldIsPrivate() {
expectedException.expectMessage("Annotated fields cannot be private: "
+ "com.test.PrivateFieldsTestFragment#lightCycle1(com.test.LightCycle1)");

JavaFileObject privateFieldsTestFragment = forSourceString("com/test/PrivateFieldsTestFragment", Joiner.on("\n").join(
JavaFileObject privateFieldsTestFragment = JavaFileObjects.forSourceString("com/test/PrivateFieldsTestFragment", Joiner.on("\n").join(
"package com.test;",
"",
"import com.soundcloud.lightcycle.DefaultSupportFragmentLightCycle;",
Expand Down Expand Up @@ -52,15 +51,15 @@ public void shouldThrowExceptionWhenLightCycleFieldIsPrivate() {
"class LightCycle2 extends DefaultSupportFragmentLightCycle {",
"}"));

assertAbout(javaSource())
Truth.assertAbout(JavaSourceSubjectFactory.javaSource())
.that(privateFieldsTestFragment)
.processedWith(new LightCycleProcessor())
.compilesWithoutError();
}

@Test
public void lightCycleFieldIsNotALightCycle() {
JavaFileObject privateFieldsTestFragment = forSourceString("com/test/FieldsNotLightCyclesTestFragment", Joiner.on("\n").join(
JavaFileObject privateFieldsTestFragment = JavaFileObjects.forSourceString("com/test/FieldsNotLightCyclesTestFragment", Joiner.on("\n").join(
"package com.test;",
"",
"import com.soundcloud.lightcycle.DefaultSupportFragmentLightCycle;",
Expand Down Expand Up @@ -89,7 +88,7 @@ public void lightCycleFieldIsNotALightCycle() {
"class LightCycle2 {",
"}"));

assertAbout(javaSource())
Truth.assertAbout(JavaSourceSubjectFactory.javaSource())
.that(privateFieldsTestFragment)
.processedWith(new LightCycleProcessor())
.failsToCompile()
Expand All @@ -98,7 +97,7 @@ public void lightCycleFieldIsNotALightCycle() {

@Test
public void missingGenericTestActivity() {
JavaFileObject missingGenericTestActivity = forSourceString("com/test/MissingGenericTestActivity", Joiner.on("\n").join(
JavaFileObject missingGenericTestActivity = JavaFileObjects.forSourceString("com/test/MissingGenericTestActivity", Joiner.on("\n").join(
"package com.test;",
"",
"import com.soundcloud.lightcycle.ActivityLightCycle;",
Expand Down Expand Up @@ -127,7 +126,7 @@ public void missingGenericTestActivity() {
"class LightCycle2 extends DefaultActivityLightCycle<MissingGenericTestActivity> {",
"}"));

assertAbout(javaSource())
Truth.assertAbout(JavaSourceSubjectFactory.javaSource())
.that(missingGenericTestActivity)
.processedWith(new LightCycleProcessor())
.failsToCompile()
Expand All @@ -137,7 +136,7 @@ public void missingGenericTestActivity() {

@Test
public void dispatcherNotFound() {
JavaFileObject dispatcherNotFoundTestActivity = forSourceString("com/test/DispatcherNotFoundTestActivity", Joiner.on("\n").join(
JavaFileObject dispatcherNotFoundTestActivity = JavaFileObjects.forSourceString("com/test/DispatcherNotFoundTestActivity", Joiner.on("\n").join(
"package com.test;",
"",
"import com.soundcloud.lightcycle.ActivityLightCycle;",
Expand All @@ -160,7 +159,7 @@ public void dispatcherNotFound() {
"class LightCycle2 extends DefaultActivityLightCycle<InvalidTestActivity> {",
"}"));

assertAbout(javaSource())
Truth.assertAbout(JavaSourceSubjectFactory.javaSource())
.that(dispatcherNotFoundTestActivity)
.processedWith(new LightCycleProcessor())
.failsToCompile()
Expand Down
Loading

0 comments on commit 5a3ce22

Please sign in to comment.