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

SCANGRADLE-162 Restore ITs using the Android Gradle Plugin #256

Merged
merged 7 commits into from
Nov 11, 2024
5 changes: 2 additions & 3 deletions .cirrus.yml
Original file line number Diff line number Diff line change
Expand Up @@ -114,9 +114,8 @@ gradle_qa_task:
memory: 4G
env:
matrix:
# TODO The combination of AGP 8.3.0 and Gradle 8.3.0 should be restored as part of SCANGRADLE-162
#- GRADLE_VERSION: 8.4
# ANDROID_GRADLE_VERSION: 8.3.0
- GRADLE_VERSION: 8.4
ANDROID_GRADLE_VERSION: 8.3.0
- GRADLE_VERSION: 8.10
- GRADLE_VERSION: 8.4
- GRADLE_VERSION: 8.3
Expand Down
3 changes: 1 addition & 2 deletions integrationTests/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@
<parent>
<groupId>org.sonarsource.parent</groupId>
<artifactId>parent</artifactId>
<version>71.0.0.1292</version>
<relativePath/>
<version>80.0.0.2205</version>
</parent>
<groupId>org.sonarsource.scanner.gradle</groupId>
<artifactId>it-gradle</artifactId>
Expand Down
193 changes: 142 additions & 51 deletions integrationTests/src/test/java/org/sonarqube/gradle/AndroidTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
*/
package org.sonarqube.gradle;

import com.vdurmont.semver4j.Semver;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
Expand All @@ -37,9 +38,11 @@
import static org.junit.Assume.assumeTrue;

public class AndroidTest extends AbstractGradleIT {
private static final Semver VERSION_8_3_0 = new Semver("8.3.0", Semver.SemverType.STRICT);

@BeforeClass
public static void beforeAll() {
assumeNotNull(System.getenv("JAVA_HOME"));
assumeNotNull(getAndroidGradleVersion());
assumeTrue(getAndroidGradleVersion().isGreaterThan("7.0.0"));
}
Expand All @@ -58,11 +61,21 @@ public void testUsingDefaultVariant() throws Exception {
baseDir.resolve("src/main/AndroidManifest.xml"));
assertThat(Paths.get(props.getProperty("sonar.tests"))).isEqualTo(baseDir.resolve("src/test/java"));

assertThat(Paths.get(props.getProperty("sonar.java.binaries")))
.isEqualTo(baseDir.resolve("build/intermediates/javac/demoMinApi23Debug/classes"));
if (getAndroidGradleVersion().isGreaterThanOrEqualTo(VERSION_8_3_0)) {
assertThat(Paths.get(props.getProperty("sonar.java.binaries")))
.isEqualTo(baseDir.resolve("build/intermediates/javac/demoMinApi23Debug/compileDemoMinApi23DebugJavaWithJavac/classes"));
erwan-serandour marked this conversation as resolved.
Show resolved Hide resolved
} else {
assertThat(Paths.get(props.getProperty("sonar.java.binaries")))
.isEqualTo(baseDir.resolve("build/intermediates/javac/demoMinApi23Debug/classes"));
}

// For Android Gradle Plugin version 8 and greater, the debugAndroidTest artifacts are no longer present in the same folder
if (getAndroidGradleVersion().isGreaterThanOrEqualTo("8.0.0")) {
if (getAndroidGradleVersion().isGreaterThanOrEqualTo(VERSION_8_3_0)) {
assertThat(stream(props.getProperty("sonar.java.test.binaries").split(",")).map(Paths::get))
.containsOnly(
baseDir.resolve("build/intermediates/javac/demoMinApi23DebugUnitTest/compileDemoMinApi23DebugUnitTestJavaWithJavac/classes")
);
} else if (getAndroidGradleVersion().isGreaterThanOrEqualTo("8.0.0")) {
assertThat(stream(props.getProperty("sonar.java.test.binaries").split(",")).map(Paths::get))
.containsOnly(
baseDir.resolve("build/intermediates/javac/demoMinApi23DebugUnitTest/classes")
Expand Down Expand Up @@ -104,13 +117,23 @@ public void testAndroidDynamicFeature() throws Exception {
.containsOnly(
baseDir.resolve("app/src/test/java"),
baseDir.resolve("app/src/androidTest/java"));
assertThat(Paths.get(props.getProperty(":app.sonar.java.binaries")))
.isEqualTo(baseDir.resolve("app/build/intermediates/javac/debug/classes"));
assertThat(stream(props.getProperty(":app.sonar.java.test.binaries").split(",")).map(Paths::get))
.containsOnly(
baseDir.resolve("app/build/intermediates/javac/debugUnitTest/classes"),
baseDir.resolve("app/build/intermediates/javac/debugAndroidTest/classes")
);
if (getAndroidGradleVersion().isGreaterThanOrEqualTo(VERSION_8_3_0)) {
assertThat(Paths.get(props.getProperty(":app.sonar.java.binaries")))
.isEqualTo(baseDir.resolve("app/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes"));
assertThat(stream(props.getProperty(":app.sonar.java.test.binaries").split(",")).map(Paths::get))
.containsOnly(
baseDir.resolve("app/build/intermediates/javac/debugUnitTest/compileDebugUnitTestJavaWithJavac/classes"),
baseDir.resolve("app/build/intermediates/javac/debugAndroidTest/compileDebugAndroidTestJavaWithJavac/classes")
);
} else {
assertThat(Paths.get(props.getProperty(":app.sonar.java.binaries")))
.isEqualTo(baseDir.resolve("app/build/intermediates/javac/debug/classes"));
assertThat(stream(props.getProperty(":app.sonar.java.test.binaries").split(",")).map(Paths::get))
.containsOnly(
baseDir.resolve("app/build/intermediates/javac/debugUnitTest/classes"),
baseDir.resolve("app/build/intermediates/javac/debugAndroidTest/classes")
);
}

assertThat(props.getProperty(":app.sonar.java.libraries")).contains("android.jar");
assertThat(props.getProperty(":app.sonar.java.libraries")).doesNotContain("junit-4.12.jar");
Expand All @@ -124,13 +147,23 @@ public void testAndroidDynamicFeature() throws Exception {
.containsOnly(
baseDir.resolve("mydynamicfeature/src/test/java"),
baseDir.resolve("mydynamicfeature/src/androidTest/java"));
assertThat(Paths.get(props.getProperty(":mydynamicfeature.sonar.java.binaries")))
.isEqualTo(baseDir.resolve("mydynamicfeature/build/intermediates/javac/debug/classes"));
assertThat(stream(props.getProperty(":mydynamicfeature.sonar.java.test.binaries").split(",")).map(Paths::get))
.containsOnly(
baseDir.resolve("mydynamicfeature/build/intermediates/javac/debugUnitTest/classes"),
baseDir.resolve("mydynamicfeature/build/intermediates/javac/debugAndroidTest/classes")
);
if (getAndroidGradleVersion().isGreaterThanOrEqualTo(VERSION_8_3_0)) {
assertThat(Paths.get(props.getProperty(":mydynamicfeature.sonar.java.binaries")))
.isEqualTo(baseDir.resolve("mydynamicfeature/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes"));
assertThat(stream(props.getProperty(":mydynamicfeature.sonar.java.test.binaries").split(",")).map(Paths::get))
.containsOnly(
baseDir.resolve("mydynamicfeature/build/intermediates/javac/debugUnitTest/compileDebugUnitTestJavaWithJavac/classes"),
baseDir.resolve("mydynamicfeature/build/intermediates/javac/debugAndroidTest/compileDebugAndroidTestJavaWithJavac/classes")
);
} else {
assertThat(Paths.get(props.getProperty(":mydynamicfeature.sonar.java.binaries")))
.isEqualTo(baseDir.resolve("mydynamicfeature/build/intermediates/javac/debug/classes"));
assertThat(stream(props.getProperty(":mydynamicfeature.sonar.java.test.binaries").split(",")).map(Paths::get))
.containsOnly(
baseDir.resolve("mydynamicfeature/build/intermediates/javac/debugUnitTest/classes"),
baseDir.resolve("mydynamicfeature/build/intermediates/javac/debugAndroidTest/classes")
);
}

assertThat(props.getProperty(":mydynamicfeature.sonar.java.libraries")).contains("android.jar");
assertThat(props.getProperty(":mydynamicfeature.sonar.java.libraries")).doesNotContain("junit-4.12.jar");
Expand All @@ -151,10 +184,17 @@ public void testSpecifyVariant() throws Exception {
baseDir.resolve("src/main/res"),
baseDir.resolve("src/main/AndroidManifest.xml"));
assertThat(Paths.get(props.getProperty("sonar.tests"))).isEqualTo(baseDir.resolve("src/test/java"));
assertThat(Paths.get(props.getProperty("sonar.java.binaries")))
.isEqualTo(baseDir.resolve("build/intermediates/javac/fullMinApi23Release/classes"));
assertThat(Paths.get(props.getProperty("sonar.java.test.binaries")))
.isEqualTo(baseDir.resolve("build/intermediates/javac/fullMinApi23ReleaseUnitTest/classes"));
if (getAndroidGradleVersion().isGreaterThanOrEqualTo(VERSION_8_3_0)) {
assertThat(Paths.get(props.getProperty("sonar.java.binaries")))
.isEqualTo(baseDir.resolve("build/intermediates/javac/fullMinApi23Release/compileFullMinApi23ReleaseJavaWithJavac/classes"));
assertThat(Paths.get(props.getProperty("sonar.java.test.binaries")))
.isEqualTo(baseDir.resolve("build/intermediates/javac/fullMinApi23ReleaseUnitTest/compileFullMinApi23ReleaseUnitTestJavaWithJavac/classes"));
erwan-serandour marked this conversation as resolved.
Show resolved Hide resolved
} else {
assertThat(Paths.get(props.getProperty("sonar.java.binaries")))
.isEqualTo(baseDir.resolve("build/intermediates/javac/fullMinApi23Release/classes"));
assertThat(Paths.get(props.getProperty("sonar.java.test.binaries")))
.isEqualTo(baseDir.resolve("build/intermediates/javac/fullMinApi23ReleaseUnitTest/classes"));
}

assertThat(props.getProperty("sonar.java.libraries")).contains("android.jar", "joda-time-2.7.jar");
assertThat(props.getProperty("sonar.java.libraries")).doesNotContain("junit-4.12.jar");
Expand All @@ -181,13 +221,24 @@ public void testMultiModule() throws Exception {
baseDir.resolve("app/src/test/java"),
baseDir.resolve("app/src/androidTest/java"));

assertThat(Paths.get(props.getProperty(":app.sonar.java.binaries")))
.isEqualTo(baseDir.resolve("app/build/intermediates/javac/debug/classes"));
assertThat(stream(props.getProperty(":app.sonar.java.test.binaries").split(",")).map(Paths::get))
.containsOnly(
baseDir.resolve("app/build/intermediates/javac/debugUnitTest/classes"),
baseDir.resolve("app/build/intermediates/javac/debugAndroidTest/classes")
);
if (getAndroidGradleVersion().isGreaterThanOrEqualTo(VERSION_8_3_0)) {
assertThat(Paths.get(props.getProperty(":app.sonar.java.binaries")))
.isEqualTo(baseDir.resolve("app/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes"));
assertThat(stream(props.getProperty(":app.sonar.java.test.binaries").split(",")).map(Paths::get))
.containsOnly(
baseDir.resolve("app/build/intermediates/javac/debugUnitTest/compileDebugUnitTestJavaWithJavac/classes"),
baseDir.resolve("app/build/intermediates/javac/debugAndroidTest/compileDebugAndroidTestJavaWithJavac/classes")
);
} else {
assertThat(Paths.get(props.getProperty(":app.sonar.java.binaries")))
.isEqualTo(baseDir.resolve("app/build/intermediates/javac/debug/classes"));

assertThat(stream(props.getProperty(":app.sonar.java.test.binaries").split(",")).map(Paths::get))
.containsOnly(
baseDir.resolve("app/build/intermediates/javac/debugUnitTest/classes"),
baseDir.resolve("app/build/intermediates/javac/debugAndroidTest/classes")
);
}

assertThat(props.getProperty(":app.sonar.java.libraries")).contains("android.jar");
assertThat(props.getProperty(":app.sonar.java.libraries")).doesNotContain("hamcrest-core-1.3.jar");
Expand Down Expand Up @@ -230,12 +281,25 @@ public void testingBlueprintWithDynamicFeatureModule_default_flavor() throws Exc
baseDir.resolve("app/src/androidTest/java"),
baseDir.resolve("app/src/androidTest/AndroidManifest.xml"),
baseDir.resolve("app/src/testFlavor1/java"));
assertThat(Paths.get(props.getProperty(":app.sonar.java.binaries")))
.isEqualTo(baseDir.resolve("app/build/intermediates/javac/flavor1Debug/classes"));
assertThat(stream(props.getProperty(":app.sonar.java.test.binaries").split(",")).map(Paths::get))
.containsOnly(
baseDir.resolve("app/build/intermediates/javac/flavor1DebugUnitTest/classes"),
baseDir.resolve("app/build/intermediates/javac/flavor1DebugAndroidTest/classes"));
if (getAndroidGradleVersion().isGreaterThanOrEqualTo(VERSION_8_3_0)) {
assertThat(Paths.get(props.getProperty(":app.sonar.java.binaries")))
.isEqualTo(baseDir.resolve("app/build/intermediates/javac/flavor1Debug/compileFlavor1DebugJavaWithJavac/classes"));
assertThat(stream(props.getProperty(":app.sonar.java.test.binaries").split(",")).map(Paths::get))
.containsOnly(
baseDir.resolve("app/build/intermediates/javac/flavor1DebugUnitTest/compileFlavor1DebugUnitTestJavaWithJavac/classes"),
baseDir.resolve("app/build/intermediates/javac/flavor1DebugAndroidTest/compileFlavor1DebugAndroidTestJavaWithJavac/classes"));
assertThat(Paths.get(props.getProperty(":module-android-library.sonar.java.binaries")))
.isEqualTo(baseDir.resolve("module-android-library/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes"));
} else {
assertThat(Paths.get(props.getProperty(":app.sonar.java.binaries")))
.isEqualTo(baseDir.resolve("app/build/intermediates/javac/flavor1Debug/classes"));
assertThat(stream(props.getProperty(":app.sonar.java.test.binaries").split(",")).map(Paths::get))
.containsOnly(
baseDir.resolve("app/build/intermediates/javac/flavor1DebugUnitTest/classes"),
baseDir.resolve("app/build/intermediates/javac/flavor1DebugAndroidTest/classes"));
assertThat(Paths.get(props.getProperty(":module-android-library.sonar.java.binaries")))
.isEqualTo(baseDir.resolve("module-android-library/build/intermediates/javac/debug/classes"));
}
assertThat(props.getProperty(":app.sonar.java.source")).isEqualTo("1.8");
assertThat(props.getProperty(":app.sonar.java.target")).isEqualTo("1.8");

Expand All @@ -248,11 +312,17 @@ public void testingBlueprintWithDynamicFeatureModule_default_flavor() throws Exc
assertThat(stream(props.getProperty(":module-android-library.sonar.tests").split(",")).map(Paths::get))
.containsOnly(
baseDir.resolve("module-android-library/src/androidTest/java"));
assertThat(Paths.get(props.getProperty(":module-android-library.sonar.java.binaries")))
.isEqualTo(baseDir.resolve("module-android-library/build/intermediates/javac/debug/classes"));
assertThat(stream(props.getProperty(":module-android-library.sonar.java.test.binaries").split(",")).map(Paths::get))
.containsOnly(
baseDir.resolve("module-android-library/build/intermediates/javac/debugAndroidTest/classes"));
if (getAndroidGradleVersion().isGreaterThanOrEqualTo(VERSION_8_3_0)) {
assertThat(stream(props.getProperty(":module-android-library.sonar.java.test.binaries").split(",")).map(Paths::get))
.containsOnly(
baseDir.resolve("module-android-library/build/intermediates/javac/debugAndroidTest/compileDebugAndroidTestJavaWithJavac/classes")
);
} else {
assertThat(stream(props.getProperty(":module-android-library.sonar.java.test.binaries").split(",")).map(Paths::get))
.containsOnly(
baseDir.resolve("module-android-library/build/intermediates/javac/debugAndroidTest/classes")
);
}
assertThat(props.getProperty(":module-android-library.sonar.java.source")).isEqualTo("1.8");
assertThat(props.getProperty(":module-android-library.sonar.java.target")).isEqualTo("1.8");

Expand All @@ -265,11 +335,19 @@ public void testingBlueprintWithDynamicFeatureModule_default_flavor() throws Exc
assertThat(stream(props.getProperty(":module_android_feature.sonar.tests").split(",")).map(Paths::get))
.containsOnly(
baseDir.resolve("module_android_feature/src/androidTest/java"));
assertThat(Paths.get(props.getProperty(":module_android_feature.sonar.java.binaries")))
.isEqualTo(baseDir.resolve("module_android_feature/build/intermediates/javac/flavor1Debug/classes"));
assertThat(stream(props.getProperty(":module_android_feature.sonar.java.test.binaries").split(",")).map(Paths::get))
.containsOnly(
baseDir.resolve("module_android_feature/build/intermediates/javac/flavor1DebugAndroidTest/classes"));
if (getAndroidGradleVersion().isGreaterThanOrEqualTo(VERSION_8_3_0)) {
assertThat(Paths.get(props.getProperty(":module_android_feature.sonar.java.binaries")))
.isEqualTo(baseDir.resolve("module_android_feature/build/intermediates/javac/flavor1Debug/compileFlavor1DebugJavaWithJavac/classes"));
assertThat(stream(props.getProperty(":module_android_feature.sonar.java.test.binaries").split(",")).map(Paths::get))
.containsOnly(
baseDir.resolve("module_android_feature/build/intermediates/javac/flavor1DebugAndroidTest/compileFlavor1DebugAndroidTestJavaWithJavac/classes"));
} else {
assertThat(Paths.get(props.getProperty(":module_android_feature.sonar.java.binaries")))
.isEqualTo(baseDir.resolve("module_android_feature/build/intermediates/javac/flavor1Debug/classes"));
assertThat(stream(props.getProperty(":module_android_feature.sonar.java.test.binaries").split(",")).map(Paths::get))
.containsOnly(
baseDir.resolve("module_android_feature/build/intermediates/javac/flavor1DebugAndroidTest/classes"));
}
assertThat(props.getProperty(":module_android_feature.sonar.java.source")).isEqualTo("1.8");
assertThat(props.getProperty(":module_android_feature.sonar.java.target")).isEqualTo("1.8");

Expand All @@ -280,9 +358,15 @@ public void testingBlueprintWithDynamicFeatureModule_default_flavor() throws Exc
baseDir.resolve("module-flavor1-androidTest-only/src/main/java"),
baseDir.resolve("module-flavor1-androidTest-only/src/main/AndroidManifest.xml"));
assertThat(props).doesNotContainKey(":module-flavor1-androidTest-only.sonar.java.binaries");
assertThat(stream(props.getProperty(":module-flavor1-androidTest-only.sonar.java.test.binaries").split(",")).map(Paths::get))
.containsOnly(
baseDir.resolve("module-flavor1-androidTest-only/build/intermediates/javac/debug/classes"));
if (getAndroidGradleVersion().isGreaterThanOrEqualTo(VERSION_8_3_0)) {
assertThat(stream(props.getProperty(":module-flavor1-androidTest-only.sonar.java.test.binaries").split(",")).map(Paths::get))
.containsOnly(
baseDir.resolve("module-flavor1-androidTest-only/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes"));
} else {
assertThat(stream(props.getProperty(":module-flavor1-androidTest-only.sonar.java.test.binaries").split(",")).map(Paths::get))
.containsOnly(
baseDir.resolve("module-flavor1-androidTest-only/build/intermediates/javac/debug/classes"));
}
assertThat(props.getProperty(":module-flavor1-androidTest-only.sonar.java.source")).isEqualTo("1.8");
assertThat(props.getProperty(":module-flavor1-androidTest-only.sonar.java.target")).isEqualTo("1.8");

Expand Down Expand Up @@ -335,10 +419,17 @@ public void noDebugVariant() throws Exception {
baseDir.resolve("src/main/AndroidManifest.xml"));
assertThat(Paths.get(props.getProperty("sonar.tests"))).isEqualTo(baseDir.resolve("src/test/java"));

assertThat(Paths.get(props.getProperty("sonar.java.binaries")))
.isEqualTo(baseDir.resolve("build/intermediates/javac/release/classes"));
assertThat(Paths.get(props.getProperty("sonar.java.test.binaries")))
.isEqualTo(baseDir.resolve("build/intermediates/javac/releaseUnitTest/classes"));
if (getAndroidGradleVersion().isGreaterThanOrEqualTo(VERSION_8_3_0)) {
assertThat(Paths.get(props.getProperty("sonar.java.binaries")))
.isEqualTo(baseDir.resolve("build/intermediates/javac/release/compileReleaseJavaWithJavac/classes"));
assertThat(Paths.get(props.getProperty("sonar.java.test.binaries")))
.isEqualTo(baseDir.resolve("build/intermediates/javac/releaseUnitTest/compileReleaseUnitTestJavaWithJavac/classes"));
} else {
assertThat(Paths.get(props.getProperty("sonar.java.binaries")))
.isEqualTo(baseDir.resolve("build/intermediates/javac/release/classes"));
assertThat(Paths.get(props.getProperty("sonar.java.test.binaries")))
.isEqualTo(baseDir.resolve("build/intermediates/javac/releaseUnitTest/classes"));
}

assertThat(props.getProperty("sonar.java.libraries")).contains("android.jar", "joda-time-2.7.jar");
assertThat(props.getProperty("sonar.java.libraries")).doesNotContain("junit-4.12.jar");
Expand Down