Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Android smoke test for incremental Java compilation #11359

Merged
merged 3 commits into from Nov 15, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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: 'abi change on library'
writeActivity(library, libPackage, libraryActivity, true)
result = runner('build', '-x', 'lint').build()

then: 'dependent sources are recompiled'
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