mirror of
https://gitee.com/zhangsken/AndroidIDE.git
synced 2026-10-16 07:49:44 +08:00
tests(tooling-api): add test to ensure task events are dispatched when configuration cache is enabled (#1173)
This commit is contained in:
@@ -55,6 +55,7 @@ project.tasks.getByName("jar") {
|
||||
project.tasks.getByName("shadowJar") { finalizedBy("copyJar") }
|
||||
|
||||
dependencies {
|
||||
implementation(projects.buildInfo)
|
||||
implementation(projects.shared)
|
||||
implementation(projects.subprojects.toolingApi)
|
||||
|
||||
|
||||
+5
-1
@@ -45,7 +45,6 @@ import org.gradle.tooling.events.work.WorkItemStartEvent
|
||||
* A [ProgressListener] which forwards all of its event to [IToolingApiClient].
|
||||
* @author Akash Yadav
|
||||
*/
|
||||
@Suppress("UnstableApiUsage")
|
||||
class ForwardingProgressListener : ProgressListener {
|
||||
|
||||
override fun statusChanged(event: ProgressEvent?) {
|
||||
@@ -66,30 +65,35 @@ class ForwardingProgressListener : ProgressListener {
|
||||
is ProjectConfigurationFinishEvent -> EventTransformer.projectConfigurationFinish(event)
|
||||
else -> EventTransformer.projectConfigurationProgress(event)
|
||||
}
|
||||
|
||||
is TaskProgressEvent ->
|
||||
when (event) {
|
||||
is TaskStartEvent -> EventTransformer.taskStart(event)
|
||||
is TaskFinishEvent -> EventTransformer.taskFinish(event)
|
||||
else -> EventTransformer.taskProgress(event)
|
||||
}
|
||||
|
||||
is TestProgressEvent ->
|
||||
when (event) {
|
||||
is TestStartEvent -> EventTransformer.testStart(event)
|
||||
is TestFinishEvent -> EventTransformer.testFinish(event)
|
||||
else -> EventTransformer.testProgress(event)
|
||||
}
|
||||
|
||||
is TransformProgressEvent ->
|
||||
when (event) {
|
||||
is TransformStartEvent -> EventTransformer.transformStart(event)
|
||||
is TransformFinishEvent -> EventTransformer.transformFinish(event)
|
||||
else -> EventTransformer.transformProgress(event)
|
||||
}
|
||||
|
||||
is WorkItemProgressEvent ->
|
||||
when (event) {
|
||||
is WorkItemStartEvent -> EventTransformer.workStart(event)
|
||||
is WorkItemFinishEvent -> EventTransformer.workFinish(event)
|
||||
else -> EventTransformer.workProgress(event)
|
||||
}
|
||||
|
||||
is StatusEvent -> EventTransformer.statusEvent(event)
|
||||
else ->
|
||||
when (event) {
|
||||
|
||||
+61
-5
@@ -26,22 +26,21 @@ import com.itsaky.androidide.tooling.api.IJavaProject
|
||||
import com.itsaky.androidide.tooling.api.IProject
|
||||
import com.itsaky.androidide.tooling.api.IToolingApiServer
|
||||
import com.itsaky.androidide.tooling.api.ProjectType
|
||||
import com.itsaky.androidide.tooling.api.messages.InitializeProjectParams
|
||||
import com.itsaky.androidide.tooling.api.messages.result.InitializeResult
|
||||
import com.itsaky.androidide.tooling.api.messages.TaskExecutionMessage
|
||||
import com.itsaky.androidide.tooling.api.models.AndroidProjectMetadata
|
||||
import com.itsaky.androidide.tooling.api.models.JavaModuleExternalDependency
|
||||
import com.itsaky.androidide.tooling.api.models.JavaModuleProjectDependency
|
||||
import com.itsaky.androidide.tooling.api.models.JavaProjectMetadata
|
||||
import com.itsaky.androidide.tooling.api.models.params.StringParameter
|
||||
import com.itsaky.androidide.tooling.events.ProgressEvent
|
||||
import com.itsaky.androidide.tooling.events.task.TaskStartEvent
|
||||
import com.itsaky.androidide.tooling.testing.ToolingApiTestLauncher
|
||||
import com.itsaky.androidide.tooling.testing.ToolingApiTestLauncher.MultiVersionTestClient
|
||||
import com.itsaky.androidide.utils.FileProvider
|
||||
import com.itsaky.androidide.utils.ILogger
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.junit.runners.JUnit4
|
||||
import kotlin.io.path.deleteExisting
|
||||
import kotlin.io.path.pathString
|
||||
import java.util.concurrent.CompletableFuture
|
||||
|
||||
/** @author Akash Yadav */
|
||||
@RunWith(JUnit4::class)
|
||||
@@ -54,6 +53,63 @@ class MultiModuleAndroidProjectTest {
|
||||
doAssertions(project, server)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test task name should be shown if gradle configuration cache is enabled`() {
|
||||
|
||||
// Issue #1173
|
||||
|
||||
val taskPaths = mutableListOf<String>()
|
||||
val client = object : MultiVersionTestClient() {
|
||||
|
||||
override fun getBuildArguments(): CompletableFuture<List<String>> {
|
||||
return CompletableFuture.completedFuture(super.getBuildArguments().get().toMutableList()
|
||||
.also { it.add("--configuration-cache") })
|
||||
}
|
||||
|
||||
override fun onProgressEvent(event: ProgressEvent) {
|
||||
if (event is TaskStartEvent) {
|
||||
taskPaths.add(event.descriptor.taskPath)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val (server, project, result) = ToolingApiTestLauncher().launchServer(client = client)
|
||||
assertThat(server).isNotNull()
|
||||
assertThat(project).isNotNull()
|
||||
assertThat(result?.isSuccessful).isTrue()
|
||||
|
||||
println("Executed tasks during initialization : " + taskPaths.joinToString(
|
||||
separator = System.lineSeparator()))
|
||||
taskPaths.clear()
|
||||
|
||||
val (isSuccessful, failure) = server.executeTasks(TaskExecutionMessage(
|
||||
projectPath = ":android-library",
|
||||
tasks = listOf("assembleDebug"),
|
||||
gradleDistribution = client.gradleDistParams
|
||||
)).get()
|
||||
|
||||
if (failure != null) {
|
||||
println("Failure: $failure")
|
||||
}
|
||||
|
||||
assertThat(isSuccessful).isTrue()
|
||||
assertThat(failure).isNull()
|
||||
|
||||
assertThat(taskPaths).isNotNull()
|
||||
assertThat(taskPaths.size).isGreaterThan(10)
|
||||
assertThat(taskPaths).containsAtLeastElementsIn(
|
||||
arrayOf(
|
||||
"preBuild",
|
||||
"generateDebugResources",
|
||||
"compileDebugJavaWithJavac",
|
||||
"assembleDebug"
|
||||
).map { ":android-library:$it" }
|
||||
)
|
||||
println(
|
||||
"Executed tasks during build : " + taskPaths.joinToString(separator = System.lineSeparator())
|
||||
)
|
||||
}
|
||||
|
||||
private fun doAssertions(project: IProject, server: IToolingApiServer) {
|
||||
assertThat(project).isNotNull()
|
||||
|
||||
|
||||
+8
-4
@@ -69,7 +69,7 @@ class ToolingApiTestLauncher {
|
||||
client: MultiVersionTestClient = MultiVersionTestClient(),
|
||||
initParams: InitializeProjectParams = InitializeProjectParams(
|
||||
projectDir.pathString,
|
||||
GradleDistributionParams.forVersion(client.gradleVersion)
|
||||
client.gradleDistParams
|
||||
),
|
||||
log: ILogger = ILogger.newInstance("BuildOutputLogger")
|
||||
): Triple<IToolingApiServer, IProject, InitializeResult?> {
|
||||
@@ -123,13 +123,17 @@ class ToolingApiTestLauncher {
|
||||
return cmd
|
||||
}
|
||||
|
||||
class MultiVersionTestClient(
|
||||
open class MultiVersionTestClient(
|
||||
private val projectDir: Path = FileProvider.testProjectRoot(),
|
||||
var agpVersion: String = DEFAULT_AGP_VERSION,
|
||||
var gradleVersion: String = DEFAULT_GRADLE_VERSION,
|
||||
val log: ILogger = ILogger.newInstance(MultiVersionTestClient::class.simpleName)
|
||||
private val log: ILogger = ILogger.newInstance(MultiVersionTestClient::class.simpleName),
|
||||
private val extraArgs : List<String> = emptyList()
|
||||
) : IToolingApiClient {
|
||||
|
||||
val gradleDistParams: GradleDistributionParams
|
||||
get() = GradleDistributionParams.forVersion(this.gradleVersion)
|
||||
|
||||
companion object {
|
||||
|
||||
const val buildFile = "build.gradle"
|
||||
@@ -176,7 +180,7 @@ class ToolingApiTestLauncher {
|
||||
override fun onProgressEvent(event: ProgressEvent) {}
|
||||
|
||||
override fun getBuildArguments(): CompletableFuture<List<String>> {
|
||||
return CompletableFuture.completedFuture(listOf("--stacktrace", "--info"))
|
||||
return CompletableFuture.completedFuture(mutableListOf("--stacktrace", "--info").also { it.addAll(extraArgs) })
|
||||
}
|
||||
|
||||
override fun checkGradleWrapperAvailability(): CompletableFuture<GradleWrapperCheckResult> =
|
||||
|
||||
Reference in New Issue
Block a user