[Gradle, JS] Commonize targets with interfaces

This commit is contained in:
Ilya Goncharov
2020-01-27 19:01:22 +03:00
parent d33521052f
commit 5904591676
12 changed files with 118 additions and 153 deletions
@@ -2,11 +2,10 @@ package org.jetbrains.kotlin.gradle.dsl
import groovy.lang.Closure import groovy.lang.Closure
import org.gradle.util.ConfigureUtil import org.gradle.util.ConfigureUtil
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetPreset
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetsContainerWithPresets import org.jetbrains.kotlin.gradle.plugin.KotlinTargetsContainerWithPresets
import org.jetbrains.kotlin.gradle.plugin.mpp.* import org.jetbrains.kotlin.gradle.plugin.mpp.*
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsTargetDsl
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTargetPreset
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
// DO NOT EDIT MANUALLY! Generated by org.jetbrains.kotlin.generators.gradle.dsl.MppPresetFunctionsCodegenKt // DO NOT EDIT MANUALLY! Generated by org.jetbrains.kotlin.generators.gradle.dsl.MppPresetFunctionsCodegenKt
@@ -30,11 +29,11 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP
fun js( fun js(
name: String = "js", name: String = "js",
configure: KotlinJsTarget.() -> Unit = { } configure: KotlinJsTargetDsl.() -> Unit = { }
): KotlinJsTarget = ): KotlinJsTargetDsl =
configureOrCreate( configureOrCreate(
name, name,
presets.getByName("js") as KotlinJsTargetPreset, presets.getByName("js") as KotlinTargetPreset<KotlinJsTargetDsl>,
configure configure
) )
@@ -43,20 +42,20 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP
fun js(name: String, configure: Closure<*>) = js(name) { ConfigureUtil.configure(configure, this) } fun js(name: String, configure: Closure<*>) = js(name) { ConfigureUtil.configure(configure, this) }
fun js(configure: Closure<*>) = js { ConfigureUtil.configure(configure, this) } fun js(configure: Closure<*>) = js { ConfigureUtil.configure(configure, this) }
fun jsIr( // fun jsIr(
name: String = "jsIr", // name: String = "jsIr",
configure: KotlinJsIrTarget.() -> Unit = { } // configure: KotlinJsIrTarget.() -> Unit = { }
): KotlinJsIrTarget = // ): KotlinJsIrTarget =
configureOrCreate( // configureOrCreate(
name, // name,
presets.getByName("jsIr") as KotlinJsIrTargetPreset, // presets.getByName("jsIr") as KotlinJsIrTargetPreset,
configure // configure
) // )
//
fun jsIr() = jsIr("jsIr") { } // fun jsIr() = jsIr("jsIr") { }
fun jsIr(name: String) = jsIr(name) { } // fun jsIr(name: String) = jsIr(name) { }
fun jsIr(name: String, configure: Closure<*>) = jsIr(name) { ConfigureUtil.configure(configure, this) } // fun jsIr(name: String, configure: Closure<*>) = jsIr(name) { ConfigureUtil.configure(configure, this) }
fun jsIr(configure: Closure<*>) = jsIr { ConfigureUtil.configure(configure, this) } // fun jsIr(configure: Closure<*>) = jsIr { ConfigureUtil.configure(configure, this) }
fun android( fun android(
name: String = "android", name: String = "android",
@@ -8,13 +8,11 @@ package org.jetbrains.kotlin.gradle.targets.js
import org.jetbrains.kotlin.gradle.execution.KotlinAggregateExecutionSource import org.jetbrains.kotlin.gradle.execution.KotlinAggregateExecutionSource
import org.jetbrains.kotlin.gradle.plugin.CompilationExecutionSource import org.jetbrains.kotlin.gradle.plugin.CompilationExecutionSource
import org.jetbrains.kotlin.gradle.plugin.CompilationExecutionSourceSupport import org.jetbrains.kotlin.gradle.plugin.CompilationExecutionSourceSupport
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetTestRun import org.jetbrains.kotlin.gradle.plugin.KotlinTargetTestRun
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrCompilation import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetDsl
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrSubTarget import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubtargetContainerDsl
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTest
import org.jetbrains.kotlin.gradle.targets.js.subtargets.KotlinJsSubTarget
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
import org.jetbrains.kotlin.gradle.testing.KotlinReportAggregatingTestRun import org.jetbrains.kotlin.gradle.testing.KotlinReportAggregatingTestRun
import org.jetbrains.kotlin.gradle.testing.KotlinTaskTestRun import org.jetbrains.kotlin.gradle.testing.KotlinTaskTestRun
@@ -24,11 +22,8 @@ import kotlin.properties.Delegates
class JsCompilationExecutionSource(override val compilation: KotlinJsCompilation) : class JsCompilationExecutionSource(override val compilation: KotlinJsCompilation) :
CompilationExecutionSource<KotlinJsCompilation> CompilationExecutionSource<KotlinJsCompilation>
class JsIrCompilationExecutionSource(override val compilation: KotlinJsIrCompilation) : open class KotlinJsPlatformTestRun(testRunName: String, target: KotlinTarget) :
CompilationExecutionSource<KotlinJsIrCompilation> KotlinTaskTestRun<JsCompilationExecutionSource, KotlinJsTest>(testRunName, target),
open class KotlinJsPlatformTestRun(testRunName: String, subtarget: KotlinJsSubTarget) :
KotlinTaskTestRun<JsCompilationExecutionSource, KotlinJsTest>(testRunName, subtarget.target),
CompilationExecutionSourceSupport<KotlinJsCompilation> { CompilationExecutionSourceSupport<KotlinJsCompilation> {
private var _executionSource: JsCompilationExecutionSource by Delegates.notNull() private var _executionSource: JsCompilationExecutionSource by Delegates.notNull()
@@ -47,26 +42,6 @@ open class KotlinJsPlatformTestRun(testRunName: String, subtarget: KotlinJsSubTa
} }
} }
open class KotlinJsIrPlatformTestRun(testRunName: String, subtarget: KotlinJsIrSubTarget) :
KotlinTaskTestRun<JsIrCompilationExecutionSource, KotlinJsIrTest>(testRunName, subtarget.target),
CompilationExecutionSourceSupport<KotlinJsIrCompilation> {
private var _executionSource: JsIrCompilationExecutionSource by Delegates.notNull()
final override var executionSource: JsIrCompilationExecutionSource
get() = _executionSource
set(value) {
executionTask.configure { it.compilation = value.compilation }
_executionSource = value
}
override fun setExecutionSourceFrom(compilation: KotlinJsIrCompilation) {
requireCompilationOfTarget(compilation, target)
executionSource = JsIrCompilationExecutionSource(compilation)
}
}
class JsAggregatingExecutionSource(private val aggregatingTestRun: KotlinJsReportAggregatingTestRun) : class JsAggregatingExecutionSource(private val aggregatingTestRun: KotlinJsReportAggregatingTestRun) :
KotlinAggregateExecutionSource<JsCompilationExecutionSource> { KotlinAggregateExecutionSource<JsCompilationExecutionSource> {
@@ -74,16 +49,9 @@ class JsAggregatingExecutionSource(private val aggregatingTestRun: KotlinJsRepor
get() = aggregatingTestRun.getConfiguredExecutions().map { it.executionSource } get() = aggregatingTestRun.getConfiguredExecutions().map { it.executionSource }
} }
class JsIrAggregatingExecutionSource(private val aggregatingTestRun: KotlinJsIrReportAggregatingTestRun) :
KotlinAggregateExecutionSource<JsIrCompilationExecutionSource> {
override val executionSources: Iterable<JsIrCompilationExecutionSource>
get() = aggregatingTestRun.getConfiguredExecutions().map { it.executionSource }
}
open class KotlinJsReportAggregatingTestRun( open class KotlinJsReportAggregatingTestRun(
testRunName: String, testRunName: String,
override val target: KotlinJsTarget override val target: KotlinJsSubtargetContainerDsl
) : KotlinReportAggregatingTestRun<JsCompilationExecutionSource, JsAggregatingExecutionSource, KotlinJsPlatformTestRun>(testRunName), ) : KotlinReportAggregatingTestRun<JsCompilationExecutionSource, JsAggregatingExecutionSource, KotlinJsPlatformTestRun>(testRunName),
KotlinTargetTestRun<JsAggregatingExecutionSource>, KotlinTargetTestRun<JsAggregatingExecutionSource>,
CompilationExecutionSourceSupport<KotlinJsCompilation> { CompilationExecutionSourceSupport<KotlinJsCompilation> {
@@ -95,7 +63,7 @@ open class KotlinJsReportAggregatingTestRun(
override val executionSource: JsAggregatingExecutionSource override val executionSource: JsAggregatingExecutionSource
get() = JsAggregatingExecutionSource(this) get() = JsAggregatingExecutionSource(this)
private fun KotlinJsSubTarget.getChildTestExecution() = testRuns.maybeCreate(testRunName) private fun KotlinJsSubTargetDsl.getChildTestExecution() = testRuns.maybeCreate(testRunName)
override fun getConfiguredExecutions(): Iterable<KotlinJsPlatformTestRun> = mutableListOf<KotlinJsPlatformTestRun>().apply { override fun getConfiguredExecutions(): Iterable<KotlinJsPlatformTestRun> = mutableListOf<KotlinJsPlatformTestRun>().apply {
if (target.isNodejsConfigured) { if (target.isNodejsConfigured) {
@@ -107,46 +75,11 @@ open class KotlinJsReportAggregatingTestRun(
} }
override fun configureAllExecutions(configure: KotlinJsPlatformTestRun.() -> Unit) { override fun configureAllExecutions(configure: KotlinJsPlatformTestRun.() -> Unit) {
val doConfigureInChildren: KotlinJsSubTarget.() -> Unit = { val doConfigureInChildren: KotlinJsSubTargetDsl.() -> Unit = {
configure(getChildTestExecution()) configure(getChildTestExecution())
} }
target.whenBrowserConfigured { doConfigureInChildren(this as KotlinJsSubTarget) } target.whenBrowserConfigured { doConfigureInChildren(this) }
target.whenNodejsConfigured { doConfigureInChildren(this as KotlinJsSubTarget) } target.whenNodejsConfigured { doConfigureInChildren(this) }
}
}
open class KotlinJsIrReportAggregatingTestRun(
testRunName: String,
override val target: KotlinJsIrTarget
) : KotlinReportAggregatingTestRun<JsIrCompilationExecutionSource, JsIrAggregatingExecutionSource, KotlinJsIrPlatformTestRun>(testRunName),
KotlinTargetTestRun<JsIrAggregatingExecutionSource>,
CompilationExecutionSourceSupport<KotlinJsIrCompilation> {
override fun setExecutionSourceFrom(compilation: KotlinJsIrCompilation) = configureAllExecutions {
setExecutionSourceFrom(compilation)
}
override val executionSource: JsIrAggregatingExecutionSource
get() = JsIrAggregatingExecutionSource(this)
private fun KotlinJsIrSubTarget.getChildTestExecution() = testRuns.maybeCreate(testRunName)
override fun getConfiguredExecutions(): Iterable<KotlinJsIrPlatformTestRun> = mutableListOf<KotlinJsIrPlatformTestRun>().apply {
if (target.isNodejsConfigured) {
add(target.nodejs.getChildTestExecution())
}
if (target.isBrowserConfigured) {
add(target.browser.getChildTestExecution())
}
}
override fun configureAllExecutions(configure: KotlinJsIrPlatformTestRun.() -> Unit) {
val doConfigureInChildren: KotlinJsIrSubTarget.() -> Unit = {
configure(getChildTestExecution())
}
target.whenBrowserConfigured { doConfigureInChildren(this as KotlinJsIrSubTarget) }
target.whenNodejsConfigured { doConfigureInChildren(this as KotlinJsIrSubTarget) }
} }
} }
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.PRIMARY_SINGLE_COMPONENT_NAME import org.jetbrains.kotlin.gradle.plugin.mpp.PRIMARY_SINGLE_COMPONENT_NAME
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBrowserDsl import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBrowserDsl
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsNodeDsl import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsNodeDsl
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubtargetContainerDsl
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsTargetDsl import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsTargetDsl
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget
import org.jetbrains.kotlin.gradle.targets.js.subtargets.KotlinBrowserJs import org.jetbrains.kotlin.gradle.targets.js.subtargets.KotlinBrowserJs
@@ -42,7 +43,7 @@ constructor(
) : ) :
KotlinOnlyTarget<KotlinJsCompilation>(project, platformType), KotlinOnlyTarget<KotlinJsCompilation>(project, platformType),
KotlinTargetWithTests<JsAggregatingExecutionSource, KotlinJsReportAggregatingTestRun>, KotlinTargetWithTests<JsAggregatingExecutionSource, KotlinJsReportAggregatingTestRun>,
KotlinJsTargetDsl { KotlinJsTargetDsl, KotlinJsSubtargetContainerDsl {
override lateinit var testRuns: NamedDomainObjectContainer<KotlinJsReportAggregatingTestRun> override lateinit var testRuns: NamedDomainObjectContainer<KotlinJsReportAggregatingTestRun>
internal set internal set
@@ -96,9 +97,9 @@ constructor(
private val browserConfiguredHandlers = mutableListOf<KotlinJsBrowserDsl.() -> Unit>() private val browserConfiguredHandlers = mutableListOf<KotlinJsBrowserDsl.() -> Unit>()
val browser by browserLazyDelegate override val browser by browserLazyDelegate
internal val isBrowserConfigured: Boolean = browserLazyDelegate.isInitialized() override val isBrowserConfigured: Boolean = browserLazyDelegate.isInitialized()
override fun browser(body: KotlinJsBrowserDsl.() -> Unit) { override fun browser(body: KotlinJsBrowserDsl.() -> Unit) {
body(browser) body(browser)
@@ -117,9 +118,9 @@ constructor(
private val nodejsConfiguredHandlers = mutableListOf<KotlinJsNodeDsl.() -> Unit>() private val nodejsConfiguredHandlers = mutableListOf<KotlinJsNodeDsl.() -> Unit>()
val nodejs by nodejsLazyDelegate override val nodejs by nodejsLazyDelegate
internal val isNodejsConfigured: Boolean = nodejsLazyDelegate.isInitialized() override val isNodejsConfigured: Boolean = nodejsLazyDelegate.isInitialized()
override fun nodejs(body: KotlinJsNodeDsl.() -> Unit) { override fun nodejs(body: KotlinJsNodeDsl.() -> Unit) {
body(nodejs) body(nodejs)
@@ -156,7 +157,7 @@ constructor(
} }
} }
fun whenBrowserConfigured(body: KotlinJsBrowserDsl.() -> Unit) { override fun whenBrowserConfigured(body: KotlinJsBrowserDsl.() -> Unit) {
if (browserLazyDelegate.isInitialized()) { if (browserLazyDelegate.isInitialized()) {
browser(body) browser(body)
} else { } else {
@@ -164,7 +165,7 @@ constructor(
} }
} }
fun whenNodejsConfigured(body: KotlinJsNodeDsl.() -> Unit) { override fun whenNodejsConfigured(body: KotlinJsNodeDsl.() -> Unit) {
if (nodejsLazyDelegate.isInitialized()) { if (nodejsLazyDelegate.isInitialized()) {
nodejs(body) nodejs(body)
} else { } else {
@@ -9,15 +9,27 @@ import groovy.lang.Closure
import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.NamedDomainObjectContainer
import org.gradle.util.ConfigureUtil import org.gradle.util.ConfigureUtil
import org.jetbrains.kotlin.gradle.dsl.KotlinJsDce import org.jetbrains.kotlin.gradle.dsl.KotlinJsDce
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsIrPlatformTestRun import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsIrReportAggregatingTestRun
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsPlatformTestRun import org.jetbrains.kotlin.gradle.targets.js.KotlinJsPlatformTestRun
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsReportAggregatingTestRun import org.jetbrains.kotlin.gradle.targets.js.KotlinJsReportAggregatingTestRun
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTest
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsExec import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsExec
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpack import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpack
interface KotlinJsSubtargetContainerDsl : KotlinTarget {
val nodejs: KotlinJsNodeDsl
val browser: KotlinJsBrowserDsl
val isNodejsConfigured: Boolean
val isBrowserConfigured: Boolean
fun whenNodejsConfigured(body: KotlinJsNodeDsl.() -> Unit)
fun whenBrowserConfigured(body: KotlinJsBrowserDsl.() -> Unit)
}
interface KotlinJsIrTargetDsl { interface KotlinJsIrTargetDsl {
fun browser() = browser { } fun browser() = browser { }
fun browser(body: KotlinJsIrBrowserDsl.() -> Unit) fun browser(body: KotlinJsIrBrowserDsl.() -> Unit)
@@ -39,10 +51,10 @@ interface KotlinJsIrTargetDsl {
fun produceExecutable() fun produceExecutable()
val testRuns: NamedDomainObjectContainer<KotlinJsIrReportAggregatingTestRun> val testRuns: NamedDomainObjectContainer<KotlinJsReportAggregatingTestRun>
} }
interface KotlinJsTargetDsl { interface KotlinJsTargetDsl : KotlinTarget {
fun browser() = browser { } fun browser() = browser { }
fun browser(body: KotlinJsBrowserDsl.() -> Unit) fun browser(body: KotlinJsBrowserDsl.() -> Unit)
fun browser(fn: Closure<*>) { fun browser(fn: Closure<*>) {
@@ -78,14 +90,14 @@ interface KotlinJsSubTargetDsl {
} }
interface KotlinJsIrSubTargetDsl { interface KotlinJsIrSubTargetDsl {
fun testTask(body: KotlinJsIrTest.() -> Unit) fun testTask(body: KotlinJsTest.() -> Unit)
fun testTask(fn: Closure<*>) { fun testTask(fn: Closure<*>) {
testTask { testTask {
ConfigureUtil.configure(fn, this) ConfigureUtil.configure(fn, this)
} }
} }
val testRuns: NamedDomainObjectContainer<KotlinJsIrPlatformTestRun> val testRuns: NamedDomainObjectContainer<KotlinJsPlatformTestRun>
} }
interface KotlinJsBrowserDsl : KotlinJsSubTargetDsl { interface KotlinJsBrowserDsl : KotlinJsSubTargetDsl {
@@ -10,9 +10,11 @@ import org.gradle.api.Task
import org.gradle.api.plugins.BasePluginConvention import org.gradle.api.plugins.BasePluginConvention
import org.gradle.api.tasks.Copy import org.gradle.api.tasks.Copy
import org.gradle.language.base.plugins.LifecycleBasePlugin import org.gradle.language.base.plugins.LifecycleBasePlugin
import org.jetbrains.kotlin.gradle.dsl.KotlinJsDce
import org.jetbrains.kotlin.gradle.targets.js.dsl.* import org.jetbrains.kotlin.gradle.targets.js.dsl.*
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
import org.jetbrains.kotlin.gradle.targets.js.subtargets.BrowserDistribution import org.jetbrains.kotlin.gradle.targets.js.subtargets.BrowserDistribution
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpack import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpack
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig.Devtool import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig.Devtool
@@ -22,7 +24,7 @@ import javax.inject.Inject
open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) : open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
KotlinJsIrSubTarget(target, "browser"), KotlinJsIrSubTarget(target, "browser"),
KotlinJsIrBrowserDsl { KotlinJsBrowserDsl {
private val commonWebpackConfigurations: MutableList<KotlinWebpack.() -> Unit> = mutableListOf() private val commonWebpackConfigurations: MutableList<KotlinWebpack.() -> Unit> = mutableListOf()
private val commonRunConfigurations: MutableList<KotlinWebpack.() -> Unit> = mutableListOf() private val commonRunConfigurations: MutableList<KotlinWebpack.() -> Unit> = mutableListOf()
@@ -33,7 +35,7 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
override val testTaskDescription: String override val testTaskDescription: String
get() = "Run all ${target.name} tests inside browser using karma and webpack" get() = "Run all ${target.name} tests inside browser using karma and webpack"
override fun configureDefaultTestFramework(it: KotlinJsIrTest) { override fun configureDefaultTestFramework(it: KotlinJsTest) {
it.useKarma { it.useKarma {
useChromeHeadless() useChromeHeadless()
} }
@@ -52,6 +54,11 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
commonWebpackConfigurations.add(body) commonWebpackConfigurations.add(body)
} }
@ExperimentalDceDsl
override fun dceTask(body: KotlinJsDce.() -> Unit) {
TODO("Not yet implemented")
}
override fun configureMain(compilation: KotlinJsIrCompilation) { override fun configureMain(compilation: KotlinJsIrCompilation) {
configureRun(compilation) configureRun(compilation)
configureBuild(compilation) configureBuild(compilation)
@@ -12,11 +12,12 @@ import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinTargetConfigurator
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetWithTests import org.jetbrains.kotlin.gradle.plugin.KotlinTargetWithTests
import org.jetbrains.kotlin.gradle.plugin.whenEvaluated import org.jetbrains.kotlin.gradle.plugin.whenEvaluated
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsIrPlatformTestRun import org.jetbrains.kotlin.gradle.targets.js.KotlinJsPlatformTestRun
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsIrSubTargetDsl import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetDsl
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmResolverPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.NpmResolverPlugin
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
import org.jetbrains.kotlin.gradle.tasks.registerTask import org.jetbrains.kotlin.gradle.tasks.registerTask
import org.jetbrains.kotlin.gradle.testing.internal.configureConventions import org.jetbrains.kotlin.gradle.testing.internal.configureConventions
import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry
@@ -25,13 +26,13 @@ import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
abstract class KotlinJsIrSubTarget( abstract class KotlinJsIrSubTarget(
val target: KotlinJsIrTarget, val target: KotlinJsIrTarget,
private val disambiguationClassifier: String private val disambiguationClassifier: String
) : KotlinJsIrSubTargetDsl { ) : KotlinJsSubTargetDsl {
val project get() = target.project val project get() = target.project
private val nodeJs = NodeJsRootPlugin.apply(project.rootProject) private val nodeJs = NodeJsRootPlugin.apply(project.rootProject)
abstract val testTaskDescription: String abstract val testTaskDescription: String
final override lateinit var testRuns: NamedDomainObjectContainer<KotlinJsIrPlatformTestRun> final override lateinit var testRuns: NamedDomainObjectContainer<KotlinJsPlatformTestRun>
private set private set
internal fun configure() { internal fun configure() {
@@ -79,7 +80,7 @@ abstract class KotlinJsIrSubTarget(
} }
} }
override fun testTask(body: KotlinJsIrTest.() -> Unit) { override fun testTask(body: KotlinJsTest.() -> Unit) {
testRuns.getByName(KotlinTargetWithTests.DEFAULT_TEST_RUN_NAME).executionTask.configure(body) testRuns.getByName(KotlinTargetWithTests.DEFAULT_TEST_RUN_NAME).executionTask.configure(body)
} }
@@ -89,7 +90,7 @@ abstract class KotlinJsIrSubTarget(
abstract fun configureBuildVariants() abstract fun configureBuildVariants()
private fun configureTests() { private fun configureTests() {
testRuns = project.container(KotlinJsIrPlatformTestRun::class.java) { name -> KotlinJsIrPlatformTestRun(name, this) }.also { testRuns = project.container(KotlinJsPlatformTestRun::class.java) { name -> KotlinJsPlatformTestRun(name, target) }.also {
(this as ExtensionAware).extensions.add(this::testRuns.name, it) (this as ExtensionAware).extensions.add(this::testRuns.name, it)
} }
@@ -97,21 +98,21 @@ abstract class KotlinJsIrSubTarget(
testRuns.create(KotlinTargetWithTests.DEFAULT_TEST_RUN_NAME) testRuns.create(KotlinTargetWithTests.DEFAULT_TEST_RUN_NAME)
} }
protected open fun configureTestRunDefaults(testRun: KotlinJsIrPlatformTestRun) { 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 }.all { compilation ->
configureTestsRun(testRun, compilation) configureTestsRun(testRun, compilation)
} }
} }
private fun configureTestsRun(testRun: KotlinJsIrPlatformTestRun, compilation: KotlinJsIrCompilation) { private fun configureTestsRun(testRun: KotlinJsPlatformTestRun, compilation: KotlinJsIrCompilation) {
fun KotlinJsIrPlatformTestRun.subtargetTestTaskName(): String = disambiguateCamelCased( fun KotlinJsPlatformTestRun.subtargetTestTaskName(): String = disambiguateCamelCased(
lowerCamelCaseName( lowerCamelCaseName(
name.takeIf { it != KotlinTargetWithTests.DEFAULT_TEST_RUN_NAME }, name.takeIf { it != KotlinTargetWithTests.DEFAULT_TEST_RUN_NAME },
AbstractKotlinTargetConfigurator.testTaskNameSuffix AbstractKotlinTargetConfigurator.testTaskNameSuffix
) )
) )
val testJs = project.registerTask<KotlinJsIrTest>(testRun.subtargetTestTaskName()) { testJs -> val testJs = project.registerTask<KotlinJsTest>(testRun.subtargetTestTaskName()) { testJs ->
val compileTask = compilation.compileKotlinTask val compileTask = compilation.compileKotlinTask
testJs.group = LifecycleBasePlugin.VERIFICATION_GROUP testJs.group = LifecycleBasePlugin.VERIFICATION_GROUP
@@ -151,7 +152,7 @@ abstract class KotlinJsIrSubTarget(
} }
} }
protected abstract fun configureDefaultTestFramework(it: KotlinJsIrTest) protected abstract fun configureDefaultTestFramework(it: KotlinJsTest)
private fun configureMain() { private fun configureMain() {
target.compilations.all { compilation -> target.compilations.all { compilation ->
@@ -12,12 +12,13 @@ import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinTargetConfigurator.Compa
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetWithTests import org.jetbrains.kotlin.gradle.plugin.KotlinTargetWithTests
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget
import org.jetbrains.kotlin.gradle.targets.js.JsIrAggregatingExecutionSource import org.jetbrains.kotlin.gradle.targets.js.JsAggregatingExecutionSource
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsIrReportAggregatingTestRun
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsProducingType import org.jetbrains.kotlin.gradle.targets.js.KotlinJsProducingType
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsIrBrowserDsl import org.jetbrains.kotlin.gradle.targets.js.KotlinJsReportAggregatingTestRun
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsIrNodeDsl import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBrowserDsl
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsIrTargetDsl import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsNodeDsl
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubtargetContainerDsl
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsTargetDsl
import org.jetbrains.kotlin.gradle.tasks.locateTask import org.jetbrains.kotlin.gradle.tasks.locateTask
import org.jetbrains.kotlin.gradle.testing.internal.KotlinTestReport import org.jetbrains.kotlin.gradle.testing.internal.KotlinTestReport
import org.jetbrains.kotlin.gradle.testing.testTaskName import org.jetbrains.kotlin.gradle.testing.testTaskName
@@ -26,9 +27,9 @@ import javax.inject.Inject
open class KotlinJsIrTarget @Inject constructor(project: Project, platformType: KotlinPlatformType) : open class KotlinJsIrTarget @Inject constructor(project: Project, platformType: KotlinPlatformType) :
KotlinOnlyTarget<KotlinJsIrCompilation>(project, platformType), KotlinOnlyTarget<KotlinJsIrCompilation>(project, platformType),
KotlinTargetWithTests<JsIrAggregatingExecutionSource, KotlinJsIrReportAggregatingTestRun>, KotlinTargetWithTests<JsAggregatingExecutionSource, KotlinJsReportAggregatingTestRun>,
KotlinJsIrTargetDsl { KotlinJsTargetDsl, KotlinJsSubtargetContainerDsl {
override lateinit var testRuns: NamedDomainObjectContainer<KotlinJsIrReportAggregatingTestRun> override lateinit var testRuns: NamedDomainObjectContainer<KotlinJsReportAggregatingTestRun>
internal set internal set
var producingType: KotlinJsProducingType? = null var producingType: KotlinJsProducingType? = null
@@ -53,13 +54,13 @@ open class KotlinJsIrTarget @Inject constructor(project: Project, platformType:
} }
} }
private val browserConfiguredHandlers = mutableListOf<KotlinJsIrBrowserDsl.() -> Unit>() private val browserConfiguredHandlers = mutableListOf<KotlinJsBrowserDsl.() -> Unit>()
val browser by browserLazyDelegate override val browser by browserLazyDelegate
internal val isBrowserConfigured: Boolean = browserLazyDelegate.isInitialized() override val isBrowserConfigured: Boolean = browserLazyDelegate.isInitialized()
override fun browser(body: KotlinJsIrBrowserDsl.() -> Unit) { override fun browser(body: KotlinJsBrowserDsl.() -> Unit) {
body(browser) body(browser)
} }
@@ -74,13 +75,13 @@ open class KotlinJsIrTarget @Inject constructor(project: Project, platformType:
} }
} }
private val nodejsConfiguredHandlers = mutableListOf<KotlinJsIrNodeDsl.() -> Unit>() private val nodejsConfiguredHandlers = mutableListOf<KotlinJsNodeDsl.() -> Unit>()
val nodejs by nodejsLazyDelegate override val nodejs by nodejsLazyDelegate
internal val isNodejsConfigured: Boolean = nodejsLazyDelegate.isInitialized() override val isNodejsConfigured: Boolean = nodejsLazyDelegate.isInitialized()
override fun nodejs(body: KotlinJsIrNodeDsl.() -> Unit) { override fun nodejs(body: KotlinJsNodeDsl.() -> Unit) {
body(nodejs) body(nodejs)
} }
@@ -115,7 +116,7 @@ open class KotlinJsIrTarget @Inject constructor(project: Project, platformType:
} }
} }
fun whenBrowserConfigured(body: KotlinJsIrBrowserDsl.() -> Unit) { override fun whenBrowserConfigured(body: KotlinJsBrowserDsl.() -> Unit) {
if (browserLazyDelegate.isInitialized()) { if (browserLazyDelegate.isInitialized()) {
browser(body) browser(body)
} else { } else {
@@ -123,7 +124,7 @@ open class KotlinJsIrTarget @Inject constructor(project: Project, platformType:
} }
} }
fun whenNodejsConfigured(body: KotlinJsIrNodeDsl.() -> Unit) { override fun whenNodejsConfigured(body: KotlinJsNodeDsl.() -> Unit) {
if (nodejsLazyDelegate.isInitialized()) { if (nodejsLazyDelegate.isInitialized()) {
nodejs(body) nodejs(body)
} else { } else {
@@ -11,23 +11,22 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinJsIrSourceSetProcessor
import org.jetbrains.kotlin.gradle.plugin.KotlinOnlyTargetConfigurator import org.jetbrains.kotlin.gradle.plugin.KotlinOnlyTargetConfigurator
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetProcessor import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetProcessor
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetWithTestsConfigurator import org.jetbrains.kotlin.gradle.plugin.KotlinTargetWithTestsConfigurator
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget import org.jetbrains.kotlin.gradle.targets.js.KotlinJsReportAggregatingTestRun
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsIrReportAggregatingTestRun
import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry
import org.jetbrains.kotlin.gradle.testing.testTaskName import org.jetbrains.kotlin.gradle.testing.testTaskName
open class KotlinJsIrTargetConfigurator(kotlinPluginVersion: String) : open class KotlinJsIrTargetConfigurator(kotlinPluginVersion: String) :
KotlinOnlyTargetConfigurator<KotlinJsIrCompilation, KotlinJsIrTarget>(true, true, kotlinPluginVersion), KotlinOnlyTargetConfigurator<KotlinJsIrCompilation, KotlinJsIrTarget>(true, true, kotlinPluginVersion),
KotlinTargetWithTestsConfigurator<KotlinJsIrReportAggregatingTestRun, KotlinJsIrTarget> { KotlinTargetWithTestsConfigurator<KotlinJsReportAggregatingTestRun, KotlinJsIrTarget> {
override val testRunClass: Class<KotlinJsIrReportAggregatingTestRun> get() = KotlinJsIrReportAggregatingTestRun::class.java override val testRunClass: Class<KotlinJsReportAggregatingTestRun> get() = KotlinJsReportAggregatingTestRun::class.java
override fun createTestRun( override fun createTestRun(
name: String, name: String,
target: KotlinJsIrTarget target: KotlinJsIrTarget
): KotlinJsIrReportAggregatingTestRun { ): KotlinJsReportAggregatingTestRun {
val result = KotlinJsIrReportAggregatingTestRun(name, target) val result = KotlinJsReportAggregatingTestRun(name, target)
val testTask = target.project.kotlinTestRegistry.getOrCreateAggregatedTestTask( val testTask = target.project.kotlinTestRegistry.getOrCreateAggregatedTestTask(
name = result.testTaskName, name = result.testTaskName,
@@ -41,7 +41,7 @@ open class KotlinJsIrTargetPreset(
KotlinJsIrCompilationFactory(project, forTarget) KotlinJsIrCompilationFactory(project, forTarget)
companion object { companion object {
const val PRESET_NAME = "jsIr" const val PRESET_NAME = "js"
} }
} }
@@ -5,13 +5,14 @@
package org.jetbrains.kotlin.gradle.targets.js.ir package org.jetbrains.kotlin.gradle.targets.js.ir
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsIrNodeDsl import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsNodeDsl
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsExec import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsExec
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
import javax.inject.Inject import javax.inject.Inject
open class KotlinNodeJsIr @Inject constructor(target: KotlinJsIrTarget) : open class KotlinNodeJsIr @Inject constructor(target: KotlinJsIrTarget) :
KotlinJsIrSubTarget(target, "node"), KotlinJsIrSubTarget(target, "node"),
KotlinJsIrNodeDsl { KotlinJsNodeDsl {
override val testTaskDescription: String override val testTaskDescription: String
get() = "Run all ${target.name} tests inside nodejs using the builtin test framework" get() = "Run all ${target.name} tests inside nodejs using the builtin test framework"
@@ -21,7 +22,7 @@ open class KotlinNodeJsIr @Inject constructor(target: KotlinJsIrTarget) :
(project.tasks.getByName(runTaskName) as NodeJsExec).body() (project.tasks.getByName(runTaskName) as NodeJsExec).body()
} }
override fun configureDefaultTestFramework(it: KotlinJsIrTest) { override fun configureDefaultTestFramework(it: KotlinJsTest) {
it.useMocha { } it.useMocha { }
} }
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.gradle.tasks.registerTask
import org.jetbrains.kotlin.gradle.testing.internal.configureConventions import org.jetbrains.kotlin.gradle.testing.internal.configureConventions
import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import org.jetbrains.kotlin.gradle.utils.newFileProperty
abstract class KotlinJsSubTarget( abstract class KotlinJsSubTarget(
val target: KotlinJsTarget, val target: KotlinJsTarget,
@@ -66,7 +67,7 @@ abstract class KotlinJsSubTarget(
abstract fun configureBuildVariants() abstract fun configureBuildVariants()
private fun configureTests() { private fun configureTests() {
testRuns = project.container(KotlinJsPlatformTestRun::class.java) { name -> KotlinJsPlatformTestRun(name, this) }.also { testRuns = project.container(KotlinJsPlatformTestRun::class.java) { name -> KotlinJsPlatformTestRun(name, target) }.also {
(this as ExtensionAware).extensions.add(this::testRuns.name, it) (this as ExtensionAware).extensions.add(this::testRuns.name, it)
} }
@@ -94,6 +95,10 @@ abstract class KotlinJsSubTarget(
testJs.group = LifecycleBasePlugin.VERIFICATION_GROUP testJs.group = LifecycleBasePlugin.VERIFICATION_GROUP
testJs.description = testTaskDescription testJs.description = testTaskDescription
testJs.inputFileProperty.set(project.newFileProperty {
compileTask.outputFile
})
testJs.dependsOn(nodeJs.npmInstallTask, compileTask, nodeJs.nodeJsSetupTask) testJs.dependsOn(nodeJs.npmInstallTask, compileTask, nodeJs.nodeJsSetupTask)
testJs.onlyIf { testJs.onlyIf {
@@ -7,7 +7,9 @@ package org.jetbrains.kotlin.gradle.targets.js.testing
import groovy.lang.Closure import groovy.lang.Closure
import org.gradle.api.file.FileCollection import org.gradle.api.file.FileCollection
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.tasks.Input import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputFile
import org.gradle.api.tasks.InputFiles import org.gradle.api.tasks.InputFiles
import org.gradle.api.tasks.Internal import org.gradle.api.tasks.Internal
import org.gradle.process.internal.DefaultProcessForkOptions import org.gradle.process.internal.DefaultProcessForkOptions
@@ -22,6 +24,7 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
import org.jetbrains.kotlin.gradle.targets.js.testing.karma.KotlinKarma import org.jetbrains.kotlin.gradle.targets.js.testing.karma.KotlinKarma
import org.jetbrains.kotlin.gradle.targets.js.testing.mocha.KotlinMocha import org.jetbrains.kotlin.gradle.targets.js.testing.mocha.KotlinMocha
import org.jetbrains.kotlin.gradle.tasks.KotlinTest import org.jetbrains.kotlin.gradle.tasks.KotlinTest
import org.jetbrains.kotlin.gradle.utils.newFileProperty
open class KotlinJsTest : open class KotlinJsTest :
KotlinTest(), KotlinTest(),
@@ -36,6 +39,9 @@ open class KotlinJsTest :
val testFrameworkSettings: String val testFrameworkSettings: String
@Input get() = testFramework!!.settingsState @Input get() = testFramework!!.settingsState
@InputFile
val inputFileProperty: RegularFileProperty = project.newFileProperty()
@Input @Input
var debug: Boolean = false var debug: Boolean = false