Gradle, tests: show test results in IDE
#KT-29946
This commit is contained in:
+15
-3
@@ -32,7 +32,11 @@ internal class TCServiceMessagesClient(
|
||||
val settings: TCServiceMessagesClientSettings,
|
||||
val log: Logger
|
||||
) : ServiceMessageParserCallback {
|
||||
lateinit var rootOperationId: Any
|
||||
|
||||
inline fun root(operation: OperationIdentifier, actions: () -> Unit) {
|
||||
rootOperationId = operation.id
|
||||
|
||||
RootNode(operation.id).open {
|
||||
actions()
|
||||
}
|
||||
@@ -129,7 +133,9 @@ internal class TCServiceMessagesClient(
|
||||
extractExceptionClassName(parsedStackTrace?.message ?: message.failureMessage),
|
||||
message.failureMessage,
|
||||
stacktrace,
|
||||
patchStackTrace(this, parsedStackTrace?.stackTrace)
|
||||
patchStackTrace(this, parsedStackTrace?.stackTrace),
|
||||
message.expected,
|
||||
message.actual
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -333,6 +339,7 @@ internal class TCServiceMessagesClient(
|
||||
inner class RootNode(val ownerBuildOperationId: Any) : GroupNode(null, settings.rootNodeName) {
|
||||
override val descriptor: TestDescriptorInternal = object : DefaultTestSuiteDescriptor(settings.rootNodeName, localId) {
|
||||
override fun getOwnerBuildOperationId(): Any? = this@RootNode.ownerBuildOperationId
|
||||
override fun getParent(): TestDescriptorInternal? = null
|
||||
}
|
||||
|
||||
override fun requireReportingNode(): TestDescriptorInternal = descriptor
|
||||
@@ -376,7 +383,9 @@ internal class TCServiceMessagesClient(
|
||||
this.reportingParent = reportingParent
|
||||
|
||||
descriptor = object : DefaultTestSuiteDescriptor(id, fullName) {
|
||||
override fun getParent(): TestDescriptorInternal? = reportingParent.descriptor
|
||||
override fun getDisplayName(): String = fullNameWithoutRoot
|
||||
override fun getOwnerBuildOperationId(): Any? = rootOperationId
|
||||
override fun getParent(): TestDescriptorInternal = reportingParent.descriptor
|
||||
}
|
||||
|
||||
shouldReportComplete = true
|
||||
@@ -413,9 +422,12 @@ internal class TCServiceMessagesClient(
|
||||
) : Node(parent, localId) {
|
||||
val output by lazy { StringBuilder() }
|
||||
|
||||
private val parentDescriptor = (this@TestNode.parent as GroupNode).requireReportingNode()
|
||||
|
||||
override val descriptor: TestDescriptorInternal =
|
||||
object : DefaultTestDescriptor(id, className, methodName, classDisplayName, displayName) {
|
||||
override fun getParent(): TestDescriptorInternal? = (this@TestNode.parent as GroupNode).requireReportingNode()
|
||||
override fun getOwnerBuildOperationId(): Any? = rootOperationId
|
||||
override fun getParent(): TestDescriptorInternal = parentDescriptor
|
||||
}
|
||||
|
||||
override fun markStarted(ts: Long) {
|
||||
|
||||
+1
-2
@@ -20,13 +20,12 @@ import org.gradle.api.plugins.BasePlugin
|
||||
import org.gradle.api.plugins.JavaBasePlugin
|
||||
import org.gradle.api.tasks.Delete
|
||||
import org.gradle.api.tasks.bundling.Jar
|
||||
import org.gradle.api.tasks.testing.Test
|
||||
import org.gradle.language.base.plugins.LifecycleBasePlugin
|
||||
import org.gradle.language.jvm.tasks.ProcessResources
|
||||
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||
import org.jetbrains.kotlin.gradle.targets.jvm.tasks.KotlinJvmTestTask
|
||||
import org.jetbrains.kotlin.gradle.testing.registerTestTask
|
||||
import org.jetbrains.kotlin.gradle.testing.internal.registerTestTask
|
||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||
import java.util.concurrent.Callable
|
||||
|
||||
|
||||
+2
-2
@@ -9,8 +9,8 @@ import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsSetupTask
|
||||
import org.jetbrains.kotlin.gradle.targets.js.tasks.*
|
||||
import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile
|
||||
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
||||
import org.jetbrains.kotlin.gradle.testing.configureConventions
|
||||
import org.jetbrains.kotlin.gradle.testing.registerTestTask
|
||||
import org.jetbrains.kotlin.gradle.testing.internal.configureConventions
|
||||
import org.jetbrains.kotlin.gradle.testing.internal.registerTestTask
|
||||
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||
|
||||
internal class KotlinJsCompilationTestsConfigurator(
|
||||
|
||||
+2
-2
@@ -24,8 +24,8 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.TEST_COMPI
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||
import org.jetbrains.kotlin.gradle.targets.native.tasks.KotlinNativeTestTask
|
||||
import org.jetbrains.kotlin.gradle.tasks.*
|
||||
import org.jetbrains.kotlin.gradle.testing.configureConventions
|
||||
import org.jetbrains.kotlin.gradle.testing.registerTestTask
|
||||
import org.jetbrains.kotlin.gradle.testing.internal.configureConventions
|
||||
import org.jetbrains.kotlin.gradle.testing.internal.registerTestTask
|
||||
import java.io.File
|
||||
import java.util.*
|
||||
|
||||
|
||||
-17
@@ -89,23 +89,6 @@ open class AggregateTestReport : DefaultTask() {
|
||||
}
|
||||
}
|
||||
|
||||
private val intellijReporterListener = object : TestListener {
|
||||
override fun beforeTest(testDescriptor: TestDescriptor) {
|
||||
}
|
||||
|
||||
override fun afterSuite(suite: TestDescriptor, result: TestResult) {
|
||||
}
|
||||
|
||||
override fun beforeSuite(suite: TestDescriptor) {
|
||||
}
|
||||
|
||||
override fun afterTest(testDescriptor: TestDescriptor, result: TestResult) {
|
||||
if (result.failedTestCount > 0) {
|
||||
hasFailedTests = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal var checkFailedTests: Boolean = false
|
||||
|
||||
fun registerTestTask(task: AbstractTestTask) {
|
||||
|
||||
+4
-2
@@ -19,8 +19,10 @@ import org.gradle.internal.serialize.PlaceholderException
|
||||
class KotlinTestFailure(
|
||||
className: String,
|
||||
message: String?,
|
||||
private val stackTraceString: String?,
|
||||
private val stackTrace: List<StackTraceElement>? = null
|
||||
val stackTraceString: String?,
|
||||
private val stackTrace: List<StackTraceElement>? = null,
|
||||
val expected: String? = null,
|
||||
val actual: String? = null
|
||||
) : PlaceholderException(
|
||||
className,
|
||||
message,
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.testing
|
||||
package org.jetbrains.kotlin.gradle.testing.internal
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.internal.plugins.DslObject
|
||||
+10
-4
@@ -3,12 +3,14 @@
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.testing
|
||||
package org.jetbrains.kotlin.gradle.testing.internal
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.plugins.JavaBasePlugin
|
||||
import org.gradle.api.tasks.testing.AbstractTestTask
|
||||
import org.gradle.language.base.plugins.LifecycleBasePlugin
|
||||
import org.jetbrains.kotlin.gradle.plugin.TaskHolder
|
||||
import org.jetbrains.kotlin.gradle.targets.jvm.tasks.KotlinJvmTestTask
|
||||
import org.jetbrains.kotlin.gradle.tasks.AggregateTestReport
|
||||
import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask
|
||||
|
||||
@@ -16,6 +18,9 @@ internal val Project.allTestsTask: TaskHolder<AggregateTestReport>
|
||||
get() = locateOrRegisterTask("allTests") { aggregate ->
|
||||
tasks.maybeCreate(LifecycleBasePlugin.CHECK_TASK_NAME).dependsOn(aggregate)
|
||||
|
||||
description = "Runs the tests for all targets and create aggregated report"
|
||||
group = JavaBasePlugin.VERIFICATION_GROUP
|
||||
|
||||
aggregate.reports.configureConventions(project, "all")
|
||||
|
||||
aggregate.onlyIf {
|
||||
@@ -34,9 +39,8 @@ internal fun registerTestTask(task: AbstractTestTask) {
|
||||
|
||||
project.gradle.taskGraph.whenReady {
|
||||
if (it.hasTask(allTests)) {
|
||||
// when [allTestsTask] task enabled
|
||||
// let all tests be executed even on failed tests
|
||||
// let all failed test be reported by [allTestsTask]:
|
||||
// when [allTestsTask] task enabled, test failure should be reported only on [allTestsTask],
|
||||
// not at individual target's test tasks. To do that, we need:
|
||||
// - disable all reporting in test tasks
|
||||
// - enable [checkFailedTests] on [allTestsTask]
|
||||
|
||||
@@ -48,4 +52,6 @@ internal fun registerTestTask(task: AbstractTestTask) {
|
||||
allTests.ignoreFailures = false
|
||||
}
|
||||
}
|
||||
|
||||
ijListenTestTask(task)
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
/*
|
||||
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.testing.internal
|
||||
|
||||
import org.gradle.api.tasks.testing.AbstractTestTask
|
||||
|
||||
/**
|
||||
* Experimental test reporting for Intellij Ultimate only
|
||||
*/
|
||||
internal fun ijListenTestTask(task: AbstractTestTask) {
|
||||
Class.forName("org.jetbrains.kotlin.gradle.testing.internal.IjTestListener")
|
||||
?.getMethod("attachTo")
|
||||
?.invoke(null, task)
|
||||
}
|
||||
Reference in New Issue
Block a user