[Lint Partial Analysis] Parameterize more lint tests
This change parameterizes many lint tests to run with and without lint
partial analysis.
Bug: 178810169
Test: LintBaselineTest, etc.
Change-Id: I95163807a4f989a50edd092e7bd066c828f63842
diff --git a/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintBaselineTest.java b/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintBaselineTest.java
index 8a38621..c4b7034 100644
--- a/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintBaselineTest.java
+++ b/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintBaselineTest.java
@@ -20,20 +20,33 @@
import static com.google.common.truth.Truth.assertThat;
import com.android.build.gradle.integration.common.fixture.GradleBuildResult;
+import com.android.build.gradle.integration.common.fixture.GradleTaskExecutor;
import com.android.build.gradle.integration.common.fixture.GradleTestProject;
+import com.android.build.gradle.integration.common.runner.FilterableParameterized;
import com.android.build.gradle.integration.common.truth.ScannerSubject;
+import com.android.build.gradle.options.BooleanOption;
import java.io.File;
import kotlin.io.FilesKt;
import kotlin.text.Charsets;
import org.junit.Rule;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
/**
* Test for generating baselines for all variants, making sure we don't accidentally merge resources
* files in different resource qualifiers; https://issuetracker.google.com/131073349
*/
+@RunWith(FilterableParameterized.class)
public class LintBaselineTest {
+ @Parameterized.Parameters(name = "usePartialAnalysis = {0}")
+ public static Object[] getParameters() {
+ return new Object[] {true, false};
+ }
+
+ @Parameterized.Parameter public boolean usePartialAnalysis;
+
@Rule public final GradleTestProject project =
GradleTestProject.builder()
.fromTestProject("lintBaseline")
@@ -42,7 +55,7 @@
@Test
public void checkMerging() throws Exception {
- GradleBuildResult result = project.executor().expectFailure().run(":app:lint");
+ GradleBuildResult result = getExecutor().expectFailure().run(":app:lint");
ScannerSubject.assertThat(result.getStderr()).contains("Created baseline file");
File baselineFile =
@@ -75,6 +88,10 @@
+ " </issue>\n"
+ "\n");
// Check the written baseline means that a subsequent lint invocation passes.
- project.executor().run("clean", ":app:lint");
+ getExecutor().run("clean", ":app:lint");
+ }
+
+ private GradleTaskExecutor getExecutor() {
+ return project.executor().with(BooleanOption.USE_LINT_PARTIAL_ANALYSIS, usePartialAnalysis);
}
}
diff --git a/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintCustomLocalAndPublishTest.java b/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintCustomLocalAndPublishTest.java
index 030ac07..4092071 100644
--- a/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintCustomLocalAndPublishTest.java
+++ b/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintCustomLocalAndPublishTest.java
@@ -20,8 +20,12 @@
import static com.android.testutils.truth.PathSubject.assertThat;
import static com.google.common.truth.Truth.assertThat;
+import com.android.build.gradle.integration.common.fixture.GradleTaskExecutor;
import com.android.build.gradle.integration.common.fixture.GradleTestProject;
+import com.android.build.gradle.integration.common.fixture.ModelBuilder;
import com.android.build.gradle.integration.common.fixture.ModelContainer;
+import com.android.build.gradle.integration.common.runner.FilterableParameterized;
+import com.android.build.gradle.options.BooleanOption;
import com.android.builder.model.AndroidProject;
import com.android.builder.model.SyncIssue;
import com.android.utils.FileUtils;
@@ -30,13 +34,23 @@
import java.util.stream.Collectors;
import org.junit.Rule;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
/**
* Test for publishing a custom jar in a library model, used by a consuming app, as well as having a
* local lint jar.
*/
+@RunWith(FilterableParameterized.class)
public class LintCustomLocalAndPublishTest {
+ @Parameterized.Parameters(name = "usePartialAnalysis = {0}")
+ public static Object[] getParameters() {
+ return new Object[] {true, false};
+ }
+
+ @Parameterized.Parameter public boolean usePartialAnalysis;
+
@Rule public final GradleTestProject project =
GradleTestProject.builder()
.fromTestProject("lintCustomLocalAndPublishRules")
@@ -45,11 +59,11 @@
@Test
public void checkCustomLint() throws Exception {
- project.executor().withFailOnWarning(false).run("clean");
- project.executor().withFailOnWarning(false).run(":library-remote:publish");
+ getExecutor().withFailOnWarning(false).run("clean");
+ getExecutor().withFailOnWarning(false).run(":library-remote:publish");
// Run twice to catch issues with configuration caching
- project.executor().withFailOnWarning(false).expectFailure().run(":library:lintDebug");
- project.executor().withFailOnWarning(false).expectFailure().run(":library:lintDebug");
+ getExecutor().withFailOnWarning(false).expectFailure().run(":library:lintDebug");
+ getExecutor().withFailOnWarning(false).expectFailure().run(":library:lintDebug");
String libexpected =
""
@@ -90,8 +104,8 @@
"library-lint-results.txt");
assertThat(liblintfile).exists();
assertThat(liblintfile).contentWithUnixLineSeparatorsIsExactly(libexpected);
- project.executor().withFailOnWarning(false).expectFailure().run(":app:lintDebug");
- project.executor().withFailOnWarning(false).expectFailure().run(":app:lintDebug");
+ getExecutor().withFailOnWarning(false).expectFailure().run(":app:lintDebug");
+ getExecutor().withFailOnWarning(false).expectFailure().run(":app:lintDebug");
String appExpected =
""
@@ -138,10 +152,10 @@
@Test
public void checkAarHasLintJar() throws Exception {
- project.executor().withFailOnWarning(false).run("clean");
- project.executor().withFailOnWarning(false).run(":library:assembleDebug");
- project.executor().withFailOnWarning(false).run(":library-publish-only:assembleDebug");
- project.executor().withFailOnWarning(false).run(":library-local-only:assembleDebug");
+ getExecutor().withFailOnWarning(false).run("clean");
+ getExecutor().withFailOnWarning(false).run(":library:assembleDebug");
+ getExecutor().withFailOnWarning(false).run(":library-publish-only:assembleDebug");
+ getExecutor().withFailOnWarning(false).run(":library-local-only:assembleDebug");
project.getSubproject("library")
.testAar(
@@ -169,7 +183,7 @@
@Test
public void checkModel() throws Exception {
ModelContainer<AndroidProject> androidProjects =
- project.model().withFailOnWarning(false).ignoreSyncIssues().fetchAndroidProjects();
+ getModel().withFailOnWarning(false).ignoreSyncIssues().fetchAndroidProjects();
assertThat(androidProjects.getOnlyModelMap().get(":library").getLintRuleJars()).hasSize(1);
@@ -181,4 +195,12 @@
assertThat(syncIssues.iterator().next().getMessage())
.isEqualTo("Unable to resolve dependency com.example.google:library-remote:1.0");
}
+
+ private GradleTaskExecutor getExecutor() {
+ return project.executor().with(BooleanOption.USE_LINT_PARTIAL_ANALYSIS, usePartialAnalysis);
+ }
+
+ private ModelBuilder getModel() {
+ return project.model().with(BooleanOption.USE_LINT_PARTIAL_ANALYSIS, usePartialAnalysis);
+ }
}
diff --git a/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintCustomRuleTest.java b/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintCustomRuleTest.java
index c22a7d2..0390d74 100644
--- a/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintCustomRuleTest.java
+++ b/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintCustomRuleTest.java
@@ -18,18 +18,31 @@
import static com.android.testutils.truth.PathSubject.assertThat;
+import com.android.build.gradle.integration.common.fixture.GradleTaskExecutor;
import com.android.build.gradle.integration.common.fixture.GradleTestProject;
+import com.android.build.gradle.integration.common.runner.FilterableParameterized;
+import com.android.build.gradle.options.BooleanOption;
import java.io.File;
import org.junit.Rule;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
/**
* Test for a custom jar in a library model, used by a consuming app.
*
* <p>The custom lint rule comes from a 3rd java module.
*/
+@RunWith(FilterableParameterized.class)
public class LintCustomRuleTest {
+ @Parameterized.Parameters(name = "usePartialAnalysis = {0}")
+ public static Object[] getParameters() {
+ return new Object[] {true, false};
+ }
+
+ @Parameterized.Parameter public boolean usePartialAnalysis;
+
@Rule
public final GradleTestProject project =
GradleTestProject.builder().fromTestProject("lintCustomRules").create();
@@ -37,8 +50,8 @@
@Test
public void checkCustomLint() throws Exception {
// Run twice to catch issues with configuration caching
- project.executor().expectFailure().run(":app:cleanLintDebug", ":app:lintDebug");
- project.executor().expectFailure().run(":app:cleanLintDebug", ":app:lintDebug");
+ getExecutor().expectFailure().run(":app:cleanLintDebug", ":app:lintDebug");
+ getExecutor().expectFailure().run(":app:cleanLintDebug", ":app:lintDebug");
String expected =
"src"
+ File.separator
@@ -59,4 +72,8 @@
assertThat(file).exists();
assertThat(file).contentWithUnixLineSeparatorsIsExactly(expected);
}
+
+ private GradleTaskExecutor getExecutor() {
+ return project.executor().with(BooleanOption.USE_LINT_PARTIAL_ANALYSIS, usePartialAnalysis);
+ }
}
diff --git a/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintLibraryModelTest.java b/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintLibraryModelTest.java
index cec3012..5996b7e 100644
--- a/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintLibraryModelTest.java
+++ b/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintLibraryModelTest.java
@@ -20,12 +20,17 @@
import static com.android.testutils.truth.PathSubject.assertThat;
import com.android.build.gradle.integration.common.fixture.GradleBuildResult;
+import com.android.build.gradle.integration.common.fixture.GradleTaskExecutor;
import com.android.build.gradle.integration.common.fixture.GradleTestProject;
+import com.android.build.gradle.integration.common.runner.FilterableParameterized;
import com.android.build.gradle.integration.common.utils.TestFileUtils;
+import com.android.build.gradle.options.BooleanOption;
import com.android.utils.FileUtils;
import java.io.File;
import org.junit.Rule;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
/**
* Assemble tests for lintLibraryModel.
@@ -37,8 +42,16 @@
* $ ./gradlew :base:build-system:integration-test:lint:test --tests=LintLibraryModelTest
* </pre>
*/
+@RunWith(FilterableParameterized.class)
public class LintLibraryModelTest {
+ @Parameterized.Parameters(name = "usePartialAnalysis = {0}")
+ public static Object[] getParameters() {
+ return new Object[] {true, false};
+ }
+
+ @Parameterized.Parameter public boolean usePartialAnalysis;
+
@Rule
public final GradleTestProject project =
GradleTestProject.builder().fromTestProject("lintLibraryModel").create();
@@ -48,8 +61,8 @@
@Test
public void checkLintLibraryModel() throws Exception {
// Run twice to catch issues with configuration caching
- project.executor().run(":app:cleanLintDebug", ":app:lintDebug");
- GradleBuildResult result = project.executor().run(":app:cleanLintDebug", ":app:lintDebug");
+ getExecutor().run(":app:cleanLintDebug", ":app:lintDebug");
+ GradleBuildResult result = getExecutor().run(":app:cleanLintDebug", ":app:lintDebug");
String expected =
""
+ FileUtils.join("src", "main", "java", "com", "android", "test", "lint", "javalib", "JavaLib.java") + ":4: Warning: Do not hardcode \"/sdcard/\"; use Environment.getExternalStorageDirectory().getPath() instead [SdCardPath]\n"
@@ -71,7 +84,7 @@
project.getSubproject("javalib").getBuildFile(),
"apply plugin: 'com.android.lint'",
"/* Lint plugin not applied */");
- GradleBuildResult result = project.executor().run("clean", ":app:lintDebug");
+ GradleBuildResult result = getExecutor().run("clean", ":app:lintDebug");
String expected =
""
+ FileUtils.join("src", "main", "java", "com", "android", "test", "lint", "lintmodel", "mylibrary", "MyLibrary.java") + ":9: Warning: DateFormat character 'Y' in YYYY is the week-era-year; did you mean 'y' ? [WeekBasedYear]\n"
@@ -84,4 +97,7 @@
assertThat(result.getStdout()).contains(APPLY_THE_PLUGIN_TO_JAVA_LIBRARY_PROJECT);
}
+ private GradleTaskExecutor getExecutor() {
+ return project.executor().with(BooleanOption.USE_LINT_PARTIAL_ANALYSIS, usePartialAnalysis);
+ }
}
diff --git a/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintModelIntegrationTest.kt b/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintModelIntegrationTest.kt
index 59fe009..273c23e 100644
--- a/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintModelIntegrationTest.kt
+++ b/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintModelIntegrationTest.kt
@@ -16,8 +16,11 @@
package com.android.build.gradle.integration.lint
import com.android.Version
+import com.android.build.gradle.integration.common.fixture.GradleTaskExecutor
import com.android.build.gradle.integration.common.fixture.GradleTestProject
import com.android.build.gradle.integration.common.fixture.gradle_project.ProjectLocation
+import com.android.build.gradle.integration.common.runner.FilterableParameterized
+import com.android.build.gradle.options.BooleanOption
import com.android.testutils.TestUtils
import com.android.testutils.truth.PathSubject.assertThat
import com.google.common.io.Resources
@@ -25,15 +28,23 @@
import org.junit.Rule
import org.junit.Test
import org.junit.rules.TemporaryFolder
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
import java.io.File
-import java.lang.AssertionError
import java.nio.charset.StandardCharsets
import java.nio.file.Files
import java.util.Collections
import java.util.stream.Collectors
/** Integration test for the new lint models. */
-class LintModelIntegrationTest {
+@RunWith(FilterableParameterized::class)
+class LintModelIntegrationTest(private val usePartialAnalysis: Boolean) {
+
+ companion object {
+ @Parameterized.Parameters(name = "usePartialAnalysis = {0}")
+ @JvmStatic
+ fun params() = listOf(true, false)
+ }
@get:Rule
val project: GradleTestProject =
@@ -49,8 +60,8 @@
@Test
fun checkLintModels() {
// Check lint runs correctly before asserting about the model.
- project.executor().expectFailure().run(":app:cleanLintDebug", ":app:lintDebug")
- project.executor().expectFailure().run(":app:cleanLintDebug", ":app:lintDebug")
+ getExecutor().expectFailure().run(":app:cleanLintDebug", ":app:lintDebug")
+ getExecutor().expectFailure().run(":app:cleanLintDebug", ":app:lintDebug")
val lintResults = project.file("app/build/reports/lint-results.txt")
assertThat(lintResults).contains("8 errors, 6 warnings")
@@ -75,7 +86,7 @@
val replacements = createReplacements(project.location)
for (model in models) {
val actual = Files.readAllLines(model).map { applyReplacements(it, replacements) }
- val expected = getExpectedModel(model.fileName.toString())
+ val expected = getExpectedModel(model.fileName.toString(), usePartialAnalysis)
if (actual != expected){
val diff: String = TestUtils.getDiff(
expected.toTypedArray(),
@@ -86,7 +97,7 @@
"Run with env var GENERATE_MODEL_GOLDEN_FILES=true to regenerate\n" +
diff
} else {
- val fileToUpdate = TestUtils.resolveWorkspacePath("tools/base/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/${model.fileName}")
+ val fileToUpdate = TestUtils.resolveWorkspacePath("tools/base/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_$usePartialAnalysis/${model.fileName}")
Files.write(fileToUpdate, actual)
errors += "Updated ${model.fileName} with \n$diff"
}
@@ -126,9 +137,15 @@
}
- private fun getExpectedModel(name: String): List<String> {
- val resource = Resources.getResource(this::class.java, "kotlinmodel/lintDebug/$name")
+ private fun getExpectedModel(name: String, usePartialAnalysis: Boolean): List<String> {
+ val resource =
+ Resources.getResource(
+ this::class.java,
+ "kotlinmodel/lintDebug/usePartialAnalysis_$usePartialAnalysis/$name"
+ )
return Resources.readLines(resource, StandardCharsets.UTF_8)
}
+ private fun getExecutor(): GradleTaskExecutor =
+ project.executor().with(BooleanOption.USE_LINT_PARTIAL_ANALYSIS, usePartialAnalysis)
}
diff --git a/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintMultipleLintJarsTest.java b/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintMultipleLintJarsTest.java
index bee047f..2236fea 100644
--- a/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintMultipleLintJarsTest.java
+++ b/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintMultipleLintJarsTest.java
@@ -18,17 +18,30 @@
import static com.android.testutils.truth.PathSubject.assertThat;
+import com.android.build.gradle.integration.common.fixture.GradleTaskExecutor;
import com.android.build.gradle.integration.common.fixture.GradleTestProject;
+import com.android.build.gradle.integration.common.runner.FilterableParameterized;
+import com.android.build.gradle.options.BooleanOption;
import java.io.File;
import org.junit.Rule;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
/**
* Test ensuring that when we have multiple service-loaded lint jars, they're all included.
* Regression test for https://issuetracker.google.com/143455360.
*/
+@RunWith(FilterableParameterized.class)
public class LintMultipleLintJarsTest {
+ @Parameterized.Parameters(name = "usePartialAnalysis = {0}")
+ public static Object[] getParameters() {
+ return new Object[] {true, false};
+ }
+
+ @Parameterized.Parameter public boolean usePartialAnalysis;
+
@Rule
public final GradleTestProject project =
GradleTestProject.builder().fromTestProject("lintMultipleLintJars").create();
@@ -36,12 +49,16 @@
@Test
public void checkBothErrorsFound() throws Exception {
// Run twice to catch issues with configuration caching
- project.executor().run(":app:cleanLintDebug", ":app:lintDebug");
- project.executor().run(":app:cleanLintDebug", ":app:lintDebug");
+ getExecutor().run(":app:cleanLintDebug", ":app:lintDebug");
+ getExecutor().run(":app:cleanLintDebug", ":app:lintDebug");
File file = new File(project.getSubproject("app").getProjectDir(), "lint-results.xml");
assertThat(file).exists();
assertThat(file).contains("id=\"ShortUniqueIdA\"");
assertThat(file).contains("id=\"ShortUniqueIdB\"");
}
+
+ private GradleTaskExecutor getExecutor() {
+ return project.executor().with(BooleanOption.USE_LINT_PARTIAL_ANALYSIS, usePartialAnalysis);
+ }
}
diff --git a/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintNoJavaClassesTest.kt b/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintNoJavaClassesTest.kt
index c89a94c..4e79337 100644
--- a/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintNoJavaClassesTest.kt
+++ b/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintNoJavaClassesTest.kt
@@ -16,10 +16,15 @@
package com.android.build.gradle.integration.lint
+import com.android.build.gradle.integration.common.fixture.GradleTaskExecutor
import com.android.build.gradle.integration.common.fixture.GradleTestProject
+import com.android.build.gradle.integration.common.runner.FilterableParameterized
+import com.android.build.gradle.options.BooleanOption
import com.android.testutils.truth.PathSubject.assertThat
import org.junit.Rule
import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
import java.io.File
/**
@@ -29,7 +34,14 @@
* makes sure that we handle the classpath correctly such that type resolution to
* Kotlin libraries works correctly.
*/
-class LintNoJavaClassesTest {
+@RunWith(FilterableParameterized::class)
+class LintNoJavaClassesTest(private val usePartialAnalysis: Boolean) {
+
+ companion object {
+ @Parameterized.Parameters(name = "usePartialAnalysis = {0}")
+ @JvmStatic
+ fun params() = listOf(true, false)
+ }
@get:Rule
val project: GradleTestProject =
@@ -42,11 +54,14 @@
@Throws(Exception::class)
fun checkNoMissingClass() {
// Run twice to catch issues with configuration caching
- project.execute(":app:cleanLintDebug", ":app:lintDebug")
- project.execute(":app:cleanLintDebug", ":app:lintDebug")
+ getExecutor().run(":app:cleanLintDebug", ":app:lintDebug")
+ getExecutor().run(":app:cleanLintDebug", ":app:lintDebug")
val app = project.getSubproject("app")
val file = File(app.projectDir, "lint-results.txt")
assertThat(file).exists()
assertThat(file).contentWithUnixLineSeparatorsIsExactly("No issues found.")
}
+
+ private fun getExecutor(): GradleTaskExecutor =
+ project.executor().with(BooleanOption.USE_LINT_PARTIAL_ANALYSIS, usePartialAnalysis)
}
diff --git a/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintResourceResolveTest.java b/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintResourceResolveTest.java
index 7039418..3bfb76c 100644
--- a/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintResourceResolveTest.java
+++ b/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintResourceResolveTest.java
@@ -18,17 +18,30 @@
import static com.android.testutils.truth.PathSubject.assertThat;
+import com.android.build.gradle.integration.common.fixture.GradleTaskExecutor;
import com.android.build.gradle.integration.common.fixture.GradleTestProject;
+import com.android.build.gradle.integration.common.runner.FilterableParameterized;
+import com.android.build.gradle.options.BooleanOption;
import java.io.File;
import org.junit.Rule;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
/**
* Test making sure that the SupportAnnotationUsage does not report errors referencing R.type.name
* resource fields. (Regression test for bug 133326990.)
*/
+@RunWith(FilterableParameterized.class)
public class LintResourceResolveTest {
+ @Parameterized.Parameters(name = "usePartialAnalysis = {0}")
+ public static Object[] getParameters() {
+ return new Object[] {true, false};
+ }
+
+ @Parameterized.Parameter public boolean usePartialAnalysis;
+
@Rule
public final GradleTestProject project =
GradleTestProject.builder()
@@ -39,8 +52,8 @@
@Test
public void checkClean() throws Exception {
// Run twice to catch issues with configuration caching
- project.executor().run(":app:cleanLintDebug", ":app:lintDebug");
- project.executor().run(":app:cleanLintDebug", ":app:lintDebug");
+ getExecutor().run(":app:cleanLintDebug", ":app:lintDebug");
+ getExecutor().run(":app:cleanLintDebug", ":app:lintDebug");
File file = new File(project.getSubproject("app").getProjectDir(), "lint-report.txt");
assertThat(file).exists();
assertThat(file).contentWithUnixLineSeparatorsIsExactly("No issues found.");
@@ -49,4 +62,8 @@
assertThat(sarifFile).exists();
assertThat(sarifFile).contains("\"$schema\" : \"https://raw.githubusercontent.com/oasis-tcs/sarif-spec/");
}
+
+ private GradleTaskExecutor getExecutor() {
+ return project.executor().with(BooleanOption.USE_LINT_PARTIAL_ANALYSIS, usePartialAnalysis);
+ }
}
diff --git a/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintSkipDependenciesTest.java b/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintSkipDependenciesTest.java
index 94580b6..c25bab9 100644
--- a/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintSkipDependenciesTest.java
+++ b/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintSkipDependenciesTest.java
@@ -18,11 +18,16 @@
import static com.android.testutils.truth.PathSubject.assertThat;
+import com.android.build.gradle.integration.common.fixture.GradleTaskExecutor;
import com.android.build.gradle.integration.common.fixture.GradleTestProject;
+import com.android.build.gradle.integration.common.runner.FilterableParameterized;
+import com.android.build.gradle.options.BooleanOption;
import java.io.File;
import java.io.IOException;
import org.junit.Rule;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
/**
* Assemble tests for lintLibrarySkipDeps.
@@ -34,8 +39,16 @@
* $ ./gradlew :base:build-system:integration-test:lint:test --tests=LintSkipDependenciesTest
* </pre>
*/
+@RunWith(FilterableParameterized.class)
public class LintSkipDependenciesTest {
+ @Parameterized.Parameters(name = "usePartialAnalysis = {0}")
+ public static Object[] getParameters() {
+ return new Object[] {true, false};
+ }
+
+ @Parameterized.Parameter public boolean usePartialAnalysis;
+
@Rule
public final GradleTestProject project =
GradleTestProject.builder().fromTestProject("lintLibrarySkipDeps").create();
@@ -43,10 +56,14 @@
@Test
public void checkLintDependenciesSkipped() throws IOException, InterruptedException {
// Run twice to catch issues with configuration caching
- project.executor().run(":app:cleanLintDebug", ":app:lintDebug");
- project.executor().run(":app:cleanLintDebug", ":app:lintDebug");
+ getExecutor().run(":app:cleanLintDebug", ":app:lintDebug");
+ getExecutor().run(":app:cleanLintDebug", ":app:lintDebug");
File file = new File(project.getSubproject("app").getProjectDir(), "lint-results.txt");
assertThat(file).exists();
assertThat(file).contentWithUnixLineSeparatorsIsExactly("No issues found.");
}
+
+ private GradleTaskExecutor getExecutor() {
+ return project.executor().with(BooleanOption.USE_LINT_PARTIAL_ANALYSIS, usePartialAnalysis);
+ }
}
diff --git a/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintUpToDateTest.kt b/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintUpToDateTest.kt
index 55a4cf5..b620961 100644
--- a/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintUpToDateTest.kt
+++ b/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintUpToDateTest.kt
@@ -15,16 +15,28 @@
*/
package com.android.build.gradle.integration.lint
+import com.android.build.gradle.integration.common.fixture.GradleTaskExecutor
import com.android.build.gradle.integration.common.fixture.GradleTestProject
+import com.android.build.gradle.integration.common.runner.FilterableParameterized
import com.android.build.gradle.integration.common.truth.GradleTaskSubject.assertThat
+import com.android.build.gradle.options.BooleanOption
import com.android.testutils.truth.PathSubject.assertThat
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.rules.TemporaryFolder
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
/** Integration test that lint can be up-to-date */
-class LintUpToDateTest {
+@RunWith(FilterableParameterized::class)
+class LintUpToDateTest(private val usePartialAnalysis: Boolean) {
+
+ companion object {
+ @Parameterized.Parameters(name = "usePartialAnalysis = {0}")
+ @JvmStatic
+ fun params() = listOf(true, false)
+ }
@get:Rule
val project: GradleTestProject =
@@ -44,15 +56,20 @@
}
@Test
- fun checkLintModels() {
- val firstRun = project.executor().run(":app:lintDebug")
+ fun checkLintUpToDate() {
+ val firstRun = getExecutor().run(":app:lintDebug")
assertThat(firstRun.getTask(":app:lintDebug")).didWork()
val lintResults = project.file("app/build/reports/lint-results.txt")
assertThat(lintResults).contains("8 errors, 6 warnings")
- val secondRun = project.executor().run(":app:lintDebug")
+ val secondRun = getExecutor().run(":app:lintDebug")
assertThat(secondRun.getTask(":app:lintDebug")).wasUpToDate()
+ if (usePartialAnalysis) {
+ assertThat(secondRun.getTask(":app:lintAnalyzeDebug")).wasUpToDate()
+ }
}
+ private fun getExecutor(): GradleTaskExecutor =
+ project.executor().with(BooleanOption.USE_LINT_PARTIAL_ANALYSIS, usePartialAnalysis)
}
diff --git a/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintWithAnalyticsEnabledTest.kt b/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintWithAnalyticsEnabledTest.kt
index f01e5ee..69f27ea 100644
--- a/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintWithAnalyticsEnabledTest.kt
+++ b/build-system/integration-test/lint/src/test/java/com/android/build/gradle/integration/lint/LintWithAnalyticsEnabledTest.kt
@@ -15,15 +15,26 @@
*/
package com.android.build.gradle.integration.lint
+import com.android.build.gradle.integration.common.fixture.GradleTaskExecutor
import com.android.build.gradle.integration.common.fixture.GradleTestProject
+import com.android.build.gradle.integration.common.runner.FilterableParameterized
import com.android.build.gradle.integration.common.truth.ScannerSubject
import com.android.build.gradle.options.BooleanOption
import org.junit.Before
import org.junit.Rule
import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
/** Integration test that runs lint with analytics enabled. Regression test for b/178904638 */
-class LintWithAnalyticsEnabledTest {
+@RunWith(FilterableParameterized::class)
+class LintWithAnalyticsEnabledTest(private val usePartialAnalysis: Boolean) {
+
+ companion object {
+ @Parameterized.Parameters(name = "usePartialAnalysis = {0}")
+ @JvmStatic
+ fun params() = listOf(true, false)
+ }
@get:Rule
val project: GradleTestProject =
@@ -40,22 +51,23 @@
@Test
fun testLint() {
- project.executor().with(BooleanOption.ENABLE_PROFILE_JSON, true).run("lint")
+ getExecutor().run("lint")
}
@Test
fun testLintFix() {
- val result =
- project.executor()
- .expectFailure()
- .with(BooleanOption.ENABLE_PROFILE_JSON, true)
- .run("lintFix")
+ val result = getExecutor().expectFailure().run("lintFix")
ScannerSubject.assertThat(result.stderr)
.contains("Aborting build since sources were modified to apply quickfixes")
}
@Test
fun testBuild() {
- project.executor().with(BooleanOption.ENABLE_PROFILE_JSON, true).run("build")
+ getExecutor().run("build")
}
+
+ private fun getExecutor(): GradleTaskExecutor =
+ project.executor()
+ .with(BooleanOption.USE_LINT_PARTIAL_ANALYSIS, usePartialAnalysis)
+ .with(BooleanOption.ENABLE_PROFILE_JSON, true)
}
diff --git a/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/.gitattributes b/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_false/.gitattributes
similarity index 100%
rename from build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/.gitattributes
rename to build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_false/.gitattributes
diff --git a/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/debug-androidTestArtifact-dependencies.xml b/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_false/debug-androidTestArtifact-dependencies.xml
similarity index 100%
rename from build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/debug-androidTestArtifact-dependencies.xml
rename to build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_false/debug-androidTestArtifact-dependencies.xml
diff --git a/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/debug-androidTestArtifact-libraries.xml b/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_false/debug-androidTestArtifact-libraries.xml
similarity index 100%
rename from build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/debug-androidTestArtifact-libraries.xml
rename to build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_false/debug-androidTestArtifact-libraries.xml
diff --git a/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/debug-mainArtifact-dependencies.xml b/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_false/debug-mainArtifact-dependencies.xml
similarity index 100%
rename from build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/debug-mainArtifact-dependencies.xml
rename to build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_false/debug-mainArtifact-dependencies.xml
diff --git a/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/debug-mainArtifact-libraries.xml b/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_false/debug-mainArtifact-libraries.xml
similarity index 100%
rename from build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/debug-mainArtifact-libraries.xml
rename to build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_false/debug-mainArtifact-libraries.xml
diff --git a/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/debug-testArtifact-dependencies.xml b/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_false/debug-testArtifact-dependencies.xml
similarity index 100%
rename from build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/debug-testArtifact-dependencies.xml
rename to build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_false/debug-testArtifact-dependencies.xml
diff --git a/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/debug-testArtifact-libraries.xml b/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_false/debug-testArtifact-libraries.xml
similarity index 100%
rename from build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/debug-testArtifact-libraries.xml
rename to build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_false/debug-testArtifact-libraries.xml
diff --git a/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/debug.xml b/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_false/debug.xml
similarity index 100%
rename from build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/debug.xml
rename to build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_false/debug.xml
diff --git a/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/module.xml b/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_false/module.xml
similarity index 100%
rename from build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/module.xml
rename to build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_false/module.xml
diff --git a/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/.gitattributes b/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_true/.gitattributes
similarity index 100%
copy from build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/.gitattributes
copy to build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_true/.gitattributes
diff --git a/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/debug-androidTestArtifact-dependencies.xml b/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_true/debug-androidTestArtifact-dependencies.xml
similarity index 100%
copy from build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/debug-androidTestArtifact-dependencies.xml
copy to build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_true/debug-androidTestArtifact-dependencies.xml
diff --git a/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/debug-androidTestArtifact-libraries.xml b/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_true/debug-androidTestArtifact-libraries.xml
similarity index 100%
copy from build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/debug-androidTestArtifact-libraries.xml
copy to build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_true/debug-androidTestArtifact-libraries.xml
diff --git a/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/debug-mainArtifact-dependencies.xml b/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_true/debug-mainArtifact-dependencies.xml
similarity index 100%
copy from build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/debug-mainArtifact-dependencies.xml
copy to build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_true/debug-mainArtifact-dependencies.xml
diff --git a/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/debug-mainArtifact-libraries.xml b/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_true/debug-mainArtifact-libraries.xml
similarity index 100%
copy from build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/debug-mainArtifact-libraries.xml
copy to build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_true/debug-mainArtifact-libraries.xml
diff --git a/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/debug-testArtifact-dependencies.xml b/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_true/debug-testArtifact-dependencies.xml
similarity index 100%
copy from build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/debug-testArtifact-dependencies.xml
copy to build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_true/debug-testArtifact-dependencies.xml
diff --git a/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/debug-testArtifact-libraries.xml b/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_true/debug-testArtifact-libraries.xml
similarity index 100%
copy from build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/debug-testArtifact-libraries.xml
copy to build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_true/debug-testArtifact-libraries.xml
diff --git a/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_true/debug.xml b/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_true/debug.xml
new file mode 100644
index 0000000..9c7ea6c
--- /dev/null
+++ b/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_true/debug.xml
@@ -0,0 +1,41 @@
+<variant
+ name="debug"
+ package="com.example.android.lint.kotlin"
+ minSdkVersion="15"
+ targetSdkVersion="30"
+ debuggable="true"
+ mergedManifest="build/intermediates/merged_manifest/debug/AndroidManifest.xml"
+ manifestMergeReport="build/outputs/logs/manifest-merger-debug-report.txt"
+ partialResultsDir="build/intermediates/lint_partial_results/debug/out">
+ <buildFeatures
+ namespacing="REQUIRED"/>
+ <sourceProviders>
+ <sourceProvider
+ manifest="src/main/AndroidManifest.xml"
+ javaDirectories="src/main/java:src/main/kotlin"
+ resDirectories="src/main/res"
+ assetsDirectories="src/main/assets"/>
+ <sourceProvider
+ manifest="src/debug/AndroidManifest.xml"
+ javaDirectories="src/debug/java:src/debug/kotlin"
+ resDirectories="src/debug/res"
+ assetsDirectories="src/debug/assets"/>
+ </sourceProviders>
+ <testSourceProviders>
+ </testSourceProviders>
+ <mainArtifact
+ classOutputs="build/intermediates/javac/debug/classes:build/tmp/kotlin-classes/debug:build/intermediates/compile_and_runtime_not_namespaced_r_class_jar/debug/R.jar"
+ applicationId="com.example.android.lint.kotlin"
+ generatedSourceFolders="build/generated/ap_generated_sources/debug/out:build/generated/aidl_source_output_dir/debug/out:build/generated/source/buildConfig/debug:build/generated/renderscript_source_output_dir/debug/out"
+ generatedResourceFolders="build/generated/res/rs/debug:build/generated/res/resValues/debug">
+ </mainArtifact>
+ <androidTestArtifact
+ classOutputs="build/intermediates/javac/debugAndroidTest/classes:build/tmp/kotlin-classes/debugAndroidTest:build/intermediates/compile_and_runtime_not_namespaced_r_class_jar/debugAndroidTest/R.jar"
+ applicationId="com.example.android.lint.kotlin.test"
+ generatedSourceFolders="build/generated/ap_generated_sources/debugAndroidTest/out:build/generated/aidl_source_output_dir/debugAndroidTest/out:build/generated/source/buildConfig/androidTest/debug:build/generated/renderscript_source_output_dir/debugAndroidTest/out"
+ generatedResourceFolders="build/generated/res/rs/androidTest/debug:build/generated/res/resValues/androidTest/debug">
+ </androidTestArtifact>
+ <testArtifact
+ classOutputs="build/intermediates/javac/debugUnitTest/classes:build/tmp/kotlin-classes/debugUnitTest:build/intermediates/compile_and_runtime_not_namespaced_r_class_jar/debug/R.jar">
+ </testArtifact>
+</variant>
diff --git a/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/module.xml b/build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_true/module.xml
similarity index 100%
copy from build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/module.xml
copy to build-system/integration-test/lint/src/test/resources/com/android/build/gradle/integration/lint/kotlinmodel/lintDebug/usePartialAnalysis_true/module.xml