Gradle, js: aggregate jsTest task should work the same way as all tests aggregator

E.g: individual test tasks should not fail build, aggregate reports should be created.
Also this task should not be included in check (as all tests should be already executed
from the all tests aggregated task).
This commit is contained in:
Sergey Rostov
2019-05-15 12:08:42 +03:00
parent 26c2afd8d5
commit e435b9352a
4 changed files with 33 additions and 20 deletions
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.NpmResolveTask
import org.jetbrains.kotlin.gradle.targets.js.subtargets.KotlinBrowserJs
import org.jetbrains.kotlin.gradle.targets.js.subtargets.KotlinNodeJs
import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask
import org.jetbrains.kotlin.gradle.testing.internal.getAggregatedTestTask
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
class KotlinJsTarget(project: Project, platformType: KotlinPlatformType) :
@@ -25,7 +26,12 @@ class KotlinJsTarget(project: Project, platformType: KotlinPlatformType) :
val npmResolveTaskHolder = project.locateOrRegisterTask<NpmResolveTask>("npmResolve") {}
val testTaskName get() = lowerCamelCaseName(disambiguationClassifier, testTaskNameSuffix)
val testTask get() = project.tasks.maybeCreate(testTaskName)
val testTask
get() = project.getAggregatedTestTask(
name = testTaskName,
description = "Run JS tests for all platforms",
reportName = "jsAll"
)
val runTaskName get() = lowerCamelCaseName(disambiguationClassifier, runTaskNameSuffix)
val runTask get() = project.tasks.maybeCreate(runTaskName)
@@ -33,18 +33,6 @@ open class KotlinJsTargetConfigurator(kotlinPluginVersion: String) :
override fun configureTest(target: KotlinOnlyTarget<KotlinJsCompilation>) {
// tests configured in KotlinJsSubTarget.configure
target as KotlinJsTarget
if (target.disambiguationClassifier != null) {
val tasks = target.project.tasks
val check = tasks.findByName(JavaBasePlugin.CHECK_TASK_NAME)
@Suppress("IfThenToSafeAccess")
if (check != null) {
check.dependsOn(target.testTask)
}
}
}
override fun buildCompilationProcessor(compilation: KotlinJsCompilation): KotlinSourceSetProcessor<*> {
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
import org.jetbrains.kotlin.gradle.tasks.createOrRegisterTask
import org.jetbrains.kotlin.gradle.testing.internal.configureConventions
import org.jetbrains.kotlin.gradle.testing.internal.registerTestTask
import org.jetbrains.kotlin.gradle.testing.internal.registerTestTaskInAggregate
import org.jetbrains.kotlin.utils.addIfNotNull
abstract class KotlinJsSubTarget(
@@ -73,10 +74,9 @@ abstract class KotlinJsSubTarget(
testJs.nodeModulesToLoad.add(compileTask.outputFile.nameWithoutExtension)
testJs.configureConventions()
target.testTask.dependsOn(testJs)
}
registerTestTaskInAggregate(testJs, target.testTask.doGetTask())
registerTestTask(testJs)
project.afterEvaluate {
@@ -15,13 +15,21 @@ import org.jetbrains.kotlin.gradle.tasks.AggregateTestReport
import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask
private val Project.allTestsTask: TaskHolder<AggregateTestReport>
get() = locateOrRegisterTask("allTests") { aggregate ->
tasks.maybeCreate(LifecycleBasePlugin.CHECK_TASK_NAME).dependsOn(aggregate)
get() = getAggregatedTestTask(
name = "allTests",
description = "Runs the tests for all targets and create aggregated report",
reportName = "all"
).also {
tasks.maybeCreate(LifecycleBasePlugin.CHECK_TASK_NAME)
.dependsOn(it.getTaskOrProvider())
}
aggregate.description = "Runs the tests for all targets and create aggregated report"
internal fun Project.getAggregatedTestTask(name: String, description: String, reportName: String): TaskHolder<AggregateTestReport> {
return locateOrRegisterTask(name) { aggregate ->
aggregate.description = description
aggregate.group = JavaBasePlugin.VERIFICATION_GROUP
aggregate.reports.configureConventions(project, "all")
aggregate.reports.configureConventions(project, reportName)
aggregate.onlyIf {
aggregate.testTasks.size > 1
@@ -31,6 +39,7 @@ private val Project.allTestsTask: TaskHolder<AggregateTestReport>
aggregate.extensions.extraProperties.set("idea.internal.test", true)
}
}
}
private fun cleanTaskName(taskName: String): String {
check(taskName.isNotEmpty())
@@ -45,8 +54,14 @@ private val Project.cleanAllTestTask: Task
@Suppress("UnstableApiUsage")
internal fun registerTestTask(taskHolder: TaskHolder<AbstractTestTask>) {
registerTestTaskInAggregate(taskHolder, taskHolder.project.allTestsTask.doGetTask())
}
internal fun registerTestTaskInAggregate(
taskHolder: TaskHolder<AbstractTestTask>,
allTests: AggregateTestReport
) {
val project = taskHolder.project
val allTests = project.allTestsTask.doGetTask()
project.tasks.getByName(LifecycleBasePlugin.CHECK_TASK_NAME).dependsOn(taskHolder.name)
project.cleanAllTestTask.dependsOn(cleanTaskName(taskHolder.name))
@@ -63,7 +78,11 @@ internal fun registerTestTask(taskHolder: TaskHolder<AbstractTestTask>) {
// - enable [checkFailedTests] on [allTestsTask]
task.ignoreFailures = true
@Suppress("UnstableApiUsage")
task.reports.html.isEnabled = false
@Suppress("UnstableApiUsage")
task.reports.junitXml.isEnabled = false
allTests.checkFailedTests = true