Skip to content

Commit

Permalink
Add Android smoke test for incremental Java compilation
Browse files Browse the repository at this point in the history
  • Loading branch information
wolfs committed Nov 13, 2019
1 parent b92ed40 commit ba82882
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 4 deletions.
3 changes: 3 additions & 0 deletions subprojects/smoke-test/smoke-test.gradle.kts
Expand Up @@ -55,6 +55,9 @@ dependencies {
smokeTestImplementation(project(":persistentCache"))
smokeTestImplementation(library("commons_io"))
smokeTestImplementation(library("jgit"))
smokeTestImplementation(library("gradleProfiler")) {
because("Using build mutators to change a Java file")
}
smokeTestImplementation(testLibrary("spock"))

val allTestRuntimeDependencies: DependencySet by rootProject.extra
Expand Down
Expand Up @@ -123,6 +123,12 @@ class AndroidPluginsSmokeTest extends AbstractSmokeTest {
</manifest>""".stripIndent()

writeActivity(app, appPackage, appActivity)
file("${app}/src/main/java/UsesLibraryActivity.java") << """
public class UsesLibraryActivity {
public void consume(${libPackage}.${libraryActivity} activity) {
}
}
"""
file("${app}/src/main/AndroidManifest.xml") << """<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="${appPackage}">
Expand Down Expand Up @@ -192,6 +198,14 @@ class AndroidPluginsSmokeTest extends AbstractSmokeTest {
expectNoDeprecationWarnings(result)
}

when:
writeActivity(library, libPackage, libraryActivity, true)
result = runner('build', '-x', 'lint').build()

then:
result.task(':library:compileReleaseJavaWithJavac').outcome == TaskOutcome.SUCCESS
result.task(':app:compileReleaseJavaWithJavac').outcome == TaskOutcome.SUCCESS

where:
pluginVersion << TestedVersions.androidGradle
}
Expand Down Expand Up @@ -219,10 +233,10 @@ class AndroidPluginsSmokeTest extends AbstractSmokeTest {
""".stripIndent()
}

private writeActivity(String basedir, String packageName, String className) {
private writeActivity(String basedir, String packageName, String className, changed = false) {
String resourceName = className.toLowerCase()

file("${basedir}/src/main/java/${packageName.replaceAll('\\.', '/')}/HelloActivity.java") << """
file("${basedir}/src/main/java/${packageName.replaceAll('\\.', '/')}/${className}.java").text = """
package ${packageName};
import org.joda.time.LocalTime;
Expand All @@ -231,7 +245,7 @@ class AndroidPluginsSmokeTest extends AbstractSmokeTest {
import android.os.Bundle;
import android.widget.TextView;
public class HelloActivity extends Activity {
public class ${className} extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
Expand All @@ -247,9 +261,10 @@ class AndroidPluginsSmokeTest extends AbstractSmokeTest {
textView.setText("The current local time is: " + currentTime);
}
${changed ? "public void doStuff() {}" : ""}
}""".stripIndent()

file("${basedir}/src/main/res/layout/${resourceName}_layout.xml") << '''<?xml version="1.0" encoding="utf-8"?>
file("${basedir}/src/main/res/layout/${resourceName}_layout.xml").text = '''<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
Expand Down
Expand Up @@ -18,6 +18,7 @@ package org.gradle.smoketests

import org.gradle.integtests.fixtures.daemon.DaemonLogsAnalyzer
import org.gradle.internal.scan.config.fixtures.GradleEnterprisePluginSettingsFixture
import org.gradle.profiler.mutations.ApplyNonAbiChangeToJavaSourceFileMutator
import org.gradle.test.fixtures.file.TestFile
import org.gradle.test.fixtures.file.TestNameTestDirectoryProvider
import org.gradle.testkit.runner.BuildResult
Expand Down Expand Up @@ -83,6 +84,30 @@ class AndroidSantaTrackerSmokeTest extends AbstractSmokeTest {
verify(relocatedResult, EXPECTED_RESULTS)
}

def "incremental Java compilation works for Santa Tracker"() {
def checkoutDir = temporaryFolder.createDir ("checkout")
setupCopyOfSantaTracker(checkoutDir)

def pathToClass = "com/google/android/apps/santatracker/tracker/ui/BottomSheetBehavior"
def fileToChange = checkoutDir.file("tracker/src/main/java/${pathToClass}.java")
def compiledClassFile = checkoutDir.file("tracker/build/intermediates/javac/debug/classes/${pathToClass}.class")
def nonAbiChangeMutator = new ApplyNonAbiChangeToJavaSourceFileMutator(fileToChange)

when:
def result = buildLocation(checkoutDir)
def md5Before = compiledClassFile.md5Hash
then:
result.task(":tracker:compileDebugJavaWithJavac").outcome == SUCCESS

when:
nonAbiChangeMutator.beforeBuild()
buildLocation(checkoutDir)
def md5After = compiledClassFile.md5Hash
then:
result.task(":tracker:compileDebugJavaWithJavac").outcome == SUCCESS
md5After != md5Before
}

private void setupCopyOfSantaTracker(TestFile targetDir) {
copyRemoteProject("santaTracker", targetDir)
GradleEnterprisePluginSettingsFixture.applyEnterprisePlugin(targetDir.file("settings.gradle"))
Expand Down

0 comments on commit ba82882

Please sign in to comment.