[Gradle, JS] Configure test executable only once

#KT-37954 fixed
This commit is contained in:
Ilya Goncharov
2020-04-02 12:45:17 +03:00
parent c26c8fdb89
commit a5026d60db
2 changed files with 20 additions and 10 deletions
@@ -74,10 +74,10 @@ abstract class KotlinJsIrSubTarget(
} }
protected open fun configureTestRunDefaults(testRun: KotlinJsPlatformTestRun) { protected open fun configureTestRunDefaults(testRun: KotlinJsPlatformTestRun) {
target.compilations.matching { it.name == KotlinCompilation.TEST_COMPILATION_NAME }.all { compilation -> target.compilations.matching { it.name == KotlinCompilation.TEST_COMPILATION_NAME }
compilation.binaries.executableIrInternal(compilation) .all { compilation ->
configureTestsRun(testRun, compilation) configureTestsRun(testRun, compilation)
} }
} }
private fun configureTestsRun(testRun: KotlinJsPlatformTestRun, compilation: KotlinJsIrCompilation) { private fun configureTestsRun(testRun: KotlinJsPlatformTestRun, compilation: KotlinJsIrCompilation) {
@@ -8,13 +8,10 @@ package org.jetbrains.kotlin.gradle.targets.js.ir
import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.NamedDomainObjectContainer
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.Task import org.gradle.api.Task
import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinTargetConfigurator.Companion.runTaskNameSuffix import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinTargetConfigurator.Companion.runTaskNameSuffix
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.MAIN_COMPILATION_NAME import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.MAIN_COMPILATION_NAME
import org.jetbrains.kotlin.gradle.plugin.KotlinJsCompilerType
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetWithTests
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinTargetWithBinaries import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinTargetWithBinaries
import org.jetbrains.kotlin.gradle.plugin.removeJsCompilerSuffix
import org.jetbrains.kotlin.gradle.targets.js.JsAggregatingExecutionSource import org.jetbrains.kotlin.gradle.targets.js.JsAggregatingExecutionSource
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsReportAggregatingTestRun import org.jetbrains.kotlin.gradle.targets.js.KotlinJsReportAggregatingTestRun
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBrowserDsl import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBrowserDsl
@@ -62,9 +59,11 @@ constructor(
it.description = "Run js on all configured platforms" it.description = "Run js on all configured platforms"
} }
private var testsConfigured: Boolean = false
private val browserLazyDelegate = lazy { private val browserLazyDelegate = lazy {
project.objects.newInstance(KotlinBrowserJsIr::class.java, this).also { project.objects.newInstance(KotlinBrowserJsIr::class.java, this).also {
it.configure() it.configureSubTarget()
browserConfiguredHandlers.forEach { handler -> browserConfiguredHandlers.forEach { handler ->
handler(it) handler(it)
} }
@@ -85,7 +84,7 @@ constructor(
private val nodejsLazyDelegate = lazy { private val nodejsLazyDelegate = lazy {
project.objects.newInstance(KotlinNodeJsIr::class.java, this).also { project.objects.newInstance(KotlinNodeJsIr::class.java, this).also {
it.configure() it.configureSubTarget()
nodejsConfiguredHandlers.forEach { handler -> nodejsConfiguredHandlers.forEach { handler ->
handler(it) handler(it)
} }
@@ -105,6 +104,17 @@ constructor(
body(nodejs) body(nodejs)
} }
private fun KotlinJsIrSubTarget.configureSubTarget() {
compilations.matching { it.name == KotlinCompilation.TEST_COMPILATION_NAME }
.all { compilation ->
if (!testsConfigured) {
testsConfigured = true
compilation.binaries.executableIrInternal(compilation)
}
}
configure()
}
override fun whenBrowserConfigured(body: KotlinJsBrowserDsl.() -> Unit) { override fun whenBrowserConfigured(body: KotlinJsBrowserDsl.() -> Unit) {
if (browserLazyDelegate.isInitialized()) { if (browserLazyDelegate.isInitialized()) {
browser(body) browser(body)