2929import okhttp3 .OkHttpClient ;
3030import okhttp3 .Request ;
3131import okhttp3 .Response ;
32+ import org .gradle .util .internal .VersionNumber ;
3233import org .junit .jupiter .api .Test ;
3334import org .junit .jupiter .api .extension .RegisterExtension ;
3435import org .junit .jupiter .params .ParameterizedTest ;
@@ -51,8 +52,8 @@ public class InstrumentationApiCompatTest {
5152 private static final String GRADLE_RELEASES_URL =
5253 "https://api.github.com/repos/gradle/gradle/releases/latest" ;
5354 // Latest verified versions. Update these as new versions are released and verified.
54- private static final String VERIFIED_AGP_VERSION = "9.1 .0-alpha03 " ;
55- private static final String VERIFIED_GRADLE_VERSION = "9.2.1 " ;
55+ private static final String VERIFIED_AGP_VERSION = "9.2 .0-alpha05 " ;
56+ private static final String VERIFIED_GRADLE_VERSION = "9.5.0-milestone-5 " ;
5657 private final OkHttpClient client = new OkHttpClient ();
5758
5859 @ RegisterExtension public GradleBuildProject gradleBuildProject = new GradleBuildProject ();
@@ -84,23 +85,22 @@ public void gradleBuildRunsInstrumentationForAllVariants_latestGradleAndAgp() th
8485 String latestGradleVersion = latestGradleVersion ();
8586 String latestAgpVersion = latestAgpVersion ();
8687
88+ String gradleVersionToTest = versionToTest (VERIFIED_GRADLE_VERSION , latestGradleVersion );
89+ String agpVersionToTest = versionToTest (VERIFIED_AGP_VERSION , latestAgpVersion );
90+
8791 LOGGER .log (Level .INFO , "Latest Gradle Version: {0}" , latestGradleVersion );
92+ LOGGER .log (Level .INFO , "Gradle Version to Test: {0}" , gradleVersionToTest );
93+
8894 LOGGER .log (Level .INFO , "Latest AGP Version: {0}" , latestAgpVersion );
89- LOGGER .log (Level .WARNING , "If this test fails, please file an issue or a bug" );
95+ LOGGER .log (Level .INFO , "AGP Version to test: {0}" , agpVersionToTest );
9096
91- if (latestAgpVersion .equals (VERIFIED_AGP_VERSION )
92- && latestGradleVersion .equals (VERIFIED_GRADLE_VERSION )) {
93- LOGGER .log (
94- Level .INFO ,
95- "Latest gradle and AGP versions are identical to verified versions. Skipping test." );
96- return ;
97- }
97+ LOGGER .log (Level .WARNING , "If this test fails, please file an issue or a bug" );
9898
9999 GradleBuildResult result =
100100 gradleBuildProject
101101 .getJavaRunnerBuilder ()
102- .withGradleVersion (latestGradleVersion )
103- .withAndroidGradlePluginVersion (latestAgpVersion )
102+ .withGradleVersion (gradleVersionToTest )
103+ .withAndroidGradlePluginVersion (agpVersionToTest )
104104 .build (GradleBuildVariant .ALL );
105105
106106 result .verifyInstrumentationExecutedFor (GradleBuildVariant .DEBUG );
@@ -110,6 +110,10 @@ public void gradleBuildRunsInstrumentationForAllVariants_latestGradleAndAgp() th
110110 /**
111111 * Fetches the latest Gradle version using OkHttp.
112112 * @return The latest Gradle version as a String.
113+ *
114+ * @implNote : {@GRADLE_RELEASES_URL} doesn't return pre-release versions,
115+ * which can be overridden by updating the {@VERIFIED_GRADLE_VERSION}
116+ *
113117 * @throws RuntimeException if the fetching or parsing fails.
114118 */
115119 private String latestGradleVersion () {
@@ -158,4 +162,22 @@ private String latestAgpVersion() {
158162 "Failed to fetch or parse latest AGP version: " + e .getMessage (), e );
159163 }
160164 }
165+
166+ /**
167+ * Compares the hardcoded verified version (which can be pre-release)
168+ * with the latest version fetched via API call,
169+ * and returns the latest version.
170+ *
171+ * @return The latest version based on SemVer comparison.
172+ */
173+ private String versionToTest (String verifiedVersion , String latestVersion ) {
174+ VersionNumber comparableVerifiedVersion = VersionNumber .parse (verifiedVersion );
175+ VersionNumber comparableLatestVersion = VersionNumber .parse (latestVersion );
176+
177+ if (comparableLatestVersion .compareTo (comparableVerifiedVersion ) > 0 ) {
178+ return latestVersion ;
179+ }
180+
181+ return verifiedVersion ;
182+ }
161183}
0 commit comments