Skip to content
This repository was archived by the owner on Oct 18, 2024. It is now read-only.

Commit d0b1689

Browse files
committed
tests(tooling-api): fix latest tested AGP version test
1 parent cd96f10 commit d0b1689

File tree

5 files changed

+92
-15
lines changed

5 files changed

+92
-15
lines changed

shared/src/main/java/com/itsaky/androidide/utils/AndroidPluginVersion.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ class AndroidPluginVersion private constructor(
228228

229229
fun toStringSimple(): String = "$major.$minor.$micro" +
230230
(if (previewType != null) "-$previewType" else "") +
231-
(if (preview > 0) preview else "")
231+
(if (preview > 0) if(preview < 10) "0$preview" else preview else "")
232232

233233
companion object {
234234

subprojects/tooling-api-impl/src/main/java/com/itsaky/androidide/tooling/impl/sync/AbstractModelBuilder.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ import com.itsaky.androidide.builder.model.DefaultSyncIssue
2222
import com.itsaky.androidide.builder.model.IDESyncIssue
2323
import com.itsaky.androidide.tooling.api.messages.InitializeProjectParams
2424
import com.itsaky.androidide.tooling.impl.util.StopWatch
25+
import com.itsaky.androidide.tooling.impl.util.ToolingProps
2526
import com.itsaky.androidide.utils.AndroidPluginVersion
26-
import com.itsaky.androidide.utils.AndroidPluginVersion.Companion.LATEST_TESTED
2727
import com.itsaky.androidide.utils.AndroidPluginVersion.Companion.MINIMUM_SUPPORTED
2828
import com.itsaky.androidide.utils.ILogger
2929
import com.itsaky.androidide.utils.LogUtils
@@ -78,9 +78,9 @@ abstract class AbstractModelBuilder<P, R>(
7878
}
7979

8080
// Warn the user if the project is using a newer AGP version
81-
if (!newerAgpWarned.get() && agpVersion > LATEST_TESTED) {
81+
if (!newerAgpWarned.get() && agpVersion > ToolingProps.latestTestedAgpVersion) {
8282
val syncIssue = DefaultSyncIssue(
83-
data = "${agpVersion.toStringSimple()}:${LATEST_TESTED.toStringSimple()}",
83+
data = "${agpVersion.toStringSimple()}:${ToolingProps.latestTestedAgpVersion.toStringSimple()}",
8484
message = "You are using Android Gradle Plugin version that has not been tested with AndroidIDE.",
8585
multiLineMessage = null,
8686
severity = SyncIssue.SEVERITY_WARNING,
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* This file is part of AndroidIDE.
3+
*
4+
* AndroidIDE is free software: you can redistribute it and/or modify
5+
* it under the terms of the GNU General Public License as published by
6+
* the Free Software Foundation, either version 3 of the License, or
7+
* (at your option) any later version.
8+
*
9+
* AndroidIDE is distributed in the hope that it will be useful,
10+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+
* GNU General Public License for more details.
13+
*
14+
* You should have received a copy of the GNU General Public License
15+
* along with AndroidIDE. If not, see <https://www.gnu.org/licenses/>.
16+
*/
17+
18+
package com.itsaky.androidide.tooling.impl.util
19+
20+
import com.itsaky.androidide.utils.AndroidPluginVersion
21+
22+
/**
23+
* System properties for configuring the toolign API.
24+
*
25+
* @author Akash Yadav
26+
*/
27+
object ToolingProps {
28+
29+
val TESTING_IS_TEST_ENV = propName("testing", "isTestEnv")
30+
val TESTING_LATEST_AGP_VERSION = propName("testing", "latestAgpVersion")
31+
32+
val isTestEnv: Boolean
33+
get() = System.getProperty(TESTING_IS_TEST_ENV).toBoolean()
34+
35+
val latestTestedAgpVersion: AndroidPluginVersion
36+
get() {
37+
if (!isTestEnv) {
38+
return AndroidPluginVersion.LATEST_TESTED
39+
}
40+
return System.getProperty(TESTING_LATEST_AGP_VERSION)?.let { AndroidPluginVersion.parse(it) }
41+
?: AndroidPluginVersion.LATEST_TESTED
42+
}
43+
44+
fun propName(cat: String, name: String) = "ide.tooling.$cat.$name"
45+
}

subprojects/tooling-api-impl/src/test/java/com/itsaky/androidide/tooling/impl/MultiModuleAndroidProjectTest.kt

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,21 @@ import com.itsaky.androidide.tooling.api.models.JavaProjectMetadata
3636
import com.itsaky.androidide.tooling.api.models.params.StringParameter
3737
import com.itsaky.androidide.tooling.events.ProgressEvent
3838
import com.itsaky.androidide.tooling.events.task.TaskStartEvent
39+
import com.itsaky.androidide.tooling.impl.util.ToolingProps
3940
import com.itsaky.androidide.tooling.testing.ToolingApiTestLauncher
4041
import com.itsaky.androidide.tooling.testing.ToolingApiTestLauncher.MultiVersionTestClient
42+
import com.itsaky.androidide.utils.AndroidPluginVersion
4143
import com.itsaky.androidide.utils.FileProvider
4244
import com.itsaky.androidide.utils.ILogger
4345
import org.junit.Test
4446
import org.junit.runner.RunWith
4547
import org.junit.runners.JUnit4
4648
import java.nio.file.Paths
4749
import java.util.concurrent.CompletableFuture
50+
import kotlin.io.path.createDirectory
4851
import kotlin.io.path.createFile
4952
import kotlin.io.path.deleteIfExists
53+
import kotlin.io.path.exists
5054

5155
/** @author Akash Yadav */
5256
@RunWith(JUnit4::class)
@@ -69,7 +73,8 @@ class MultiModuleAndroidProjectTest {
6973

7074
@Test
7175
fun `test project initialization with file path`() {
72-
val path = FileProvider.projectRoot().resolve("build").resolve("should-be-directory.txt")
76+
val path = FileProvider.projectRoot().resolve("build")
77+
.also { if (!it.exists()) it.createDirectory() }.resolve("should-be-directory.txt")
7378
path.deleteIfExists()
7479
path.createFile()
7580

@@ -294,9 +299,16 @@ class MultiModuleAndroidProjectTest {
294299
fun `test CI-only latest tested AGP version warning`() {
295300
ciOnlyTest {
296301
val log = CollectingLogger()
297-
val agpVersion = "8.1.1"
298-
val client = MultiVersionTestClient(agpVersion = agpVersion, gradleVersion = "8.1", log = log)
299-
val (_, project, result) = ToolingApiTestLauncher().launchServer(client = client, log = log)
302+
val agpVersion = AndroidPluginVersion.parse(BuildInfo.AGP_VERSION_LATEST)
303+
304+
val client = MultiVersionTestClient(agpVersion = agpVersion.toStringSimple(),
305+
gradleVersion = "${agpVersion.major}.${agpVersion.minor}", log = log)
306+
val (_, project, result) = ToolingApiTestLauncher().launchServer(
307+
client = client,
308+
log = log,
309+
sysProps = mapOf(
310+
ToolingProps.TESTING_LATEST_AGP_VERSION to MultiVersionTestClient.DEFAULT_AGP_VERSION)
311+
)
300312
val output = log.toString()
301313

302314
if (result?.isSuccessful != true) {

testing/tooling/src/main/java/com/itsaky/androidide/tooling/testing/ToolingApiTestLauncher.kt

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import com.itsaky.androidide.tooling.api.messages.result.InitializeResult
3030
import com.itsaky.androidide.tooling.api.messages.toLogLine
3131
import com.itsaky.androidide.tooling.api.util.ToolingApiLauncher
3232
import com.itsaky.androidide.tooling.events.ProgressEvent
33+
import com.itsaky.androidide.tooling.impl.util.ToolingProps
3334
import com.itsaky.androidide.utils.FileProvider
3435
import com.itsaky.androidide.utils.ILogger
3536
import java.io.BufferedReader
@@ -72,14 +73,23 @@ class ToolingApiTestLauncher {
7273
projectDir.pathString,
7374
client.gradleDistParams
7475
),
75-
log: ILogger = ILogger.newInstance("BuildOutputLogger")
76+
log: ILogger = ILogger.newInstance("BuildOutputLogger"),
77+
sysProps: Map<String, String> = emptyMap(),
78+
sysEnvs: Map<String, String> = emptyMap()
7679
): Triple<IToolingApiServer, IProject, InitializeResult?> {
77-
val builder = ProcessBuilder(createProcessCmd(FileProvider.implModule()
78-
.resolve("build/libs/tooling-api-all.jar").pathString))
80+
val cmdLine = createProcessCmd(
81+
FileProvider.implModule()
82+
.resolve("build/libs/tooling-api-all.jar").pathString,
83+
sysProps
84+
)
85+
86+
val builder = ProcessBuilder(cmdLine)
7987
val androidHome = findAndroidHome()
80-
println("ANDROID_HOME=$androidHome")
88+
8189
builder.environment()["ANDROID_SDK_ROOT"] = androidHome
8290
builder.environment()["ANDROID_HOME"] = androidHome
91+
builder.environment().putAll(sysEnvs)
92+
8393
val proc = builder.start()
8494

8595
Thread(Reader(proc.errorStream, log)).start()
@@ -95,7 +105,10 @@ class ToolingApiTestLauncher {
95105
return Triple(server, project, result)
96106
}
97107

98-
private fun createProcessCmd(jar: String): List<String> {
108+
private fun createProcessCmd(
109+
jar: String,
110+
sysProps: Map<String, String> = emptyMap()
111+
): List<String> {
99112
val cmd = mutableListOf("java")
100113
System.getenv("JAVA_HOME")?.let {
101114
val java = File(it, "bin/java")
@@ -116,6 +129,12 @@ class ToolingApiTestLauncher {
116129
cmd.add("--add-exports=${export.key}/${export.value}=ALL-UNNAMED")
117130
}
118131

132+
cmd.add("-D${ToolingProps.TESTING_IS_TEST_ENV}=true")
133+
134+
sysProps.forEach { (key, value) ->
135+
cmd.add("-D$key=$value")
136+
}
137+
119138
Collections.addAll(cmd, "-jar", jar)
120139

121140
println(
@@ -129,7 +148,7 @@ class ToolingApiTestLauncher {
129148
var agpVersion: String = DEFAULT_AGP_VERSION,
130149
var gradleVersion: String = DEFAULT_GRADLE_VERSION,
131150
private val log: ILogger = ILogger.newInstance(MultiVersionTestClient::class.simpleName),
132-
private val extraArgs : List<String> = emptyList(),
151+
private val extraArgs: List<String> = emptyList(),
133152
private var excludeUnresolvedDependency: Boolean = false
134153
) : IToolingApiClient {
135154

@@ -193,7 +212,8 @@ class ToolingApiTestLauncher {
193212
override fun onProgressEvent(event: ProgressEvent) {}
194213

195214
override fun getBuildArguments(): CompletableFuture<List<String>> {
196-
return CompletableFuture.completedFuture(mutableListOf("--stacktrace", "--info").also { it.addAll(extraArgs) })
215+
return CompletableFuture.completedFuture(
216+
mutableListOf("--stacktrace", "--info").also { it.addAll(extraArgs) })
197217
}
198218

199219
override fun checkGradleWrapperAvailability(): CompletableFuture<GradleWrapperCheckResult> =

0 commit comments

Comments
 (0)