From e435b9352ad7f33f6dc87e662bc889d279ca329a Mon Sep 17 00:00:00 2001 From: Sergey Rostov Date: Wed, 15 May 2019 12:08:42 +0300 Subject: [PATCH] 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). --- .../gradle/targets/js/KotlinJsTarget.kt | 8 ++++- .../targets/js/KotlinJsTargetConfigurator.kt | 12 -------- .../js/subtargets/KotlinJsSubTarget.kt | 4 +-- .../gradle/testing/internal/testsRegistry.kt | 29 +++++++++++++++---- 4 files changed, 33 insertions(+), 20 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt index c35622d6124..fbfd935779f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt @@ -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("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) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetConfigurator.kt index 19b4bd24fb0..a22a587f906 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetConfigurator.kt @@ -33,18 +33,6 @@ open class KotlinJsTargetConfigurator(kotlinPluginVersion: String) : override fun configureTest(target: KotlinOnlyTarget) { // 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<*> { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinJsSubTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinJsSubTarget.kt index 7ed57b59f90..e2a06596351 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinJsSubTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinJsSubTarget.kt @@ -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 { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/testing/internal/testsRegistry.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/testing/internal/testsRegistry.kt index 41162a151d9..99f5321ee96 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/testing/internal/testsRegistry.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/testing/internal/testsRegistry.kt @@ -15,13 +15,21 @@ import org.jetbrains.kotlin.gradle.tasks.AggregateTestReport import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask private val Project.allTestsTask: TaskHolder - 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 { + 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 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) { + registerTestTaskInAggregate(taskHolder, taskHolder.project.allTestsTask.doGetTask()) +} + +internal fun registerTestTaskInAggregate( + taskHolder: TaskHolder, + 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) { // - enable [checkFailedTests] on [allTestsTask] task.ignoreFailures = true + + @Suppress("UnstableApiUsage") task.reports.html.isEnabled = false + + @Suppress("UnstableApiUsage") task.reports.junitXml.isEnabled = false allTests.checkFailedTests = true