diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dsl/KotlinJsTargetDsl.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dsl/KotlinJsTargetDsl.kt index 67b401248b8..437c496e549 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dsl/KotlinJsTargetDsl.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dsl/KotlinJsTargetDsl.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.gradle.targets.js.dsl +import groovy.lang.Closure 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.webpack.KotlinWebpack @@ -12,18 +13,49 @@ import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpack interface KotlinJsTargetDsl { fun browser() = browser { } fun browser(body: KotlinJsBrowserDsl.() -> Unit) + fun browser(fn: Closure<*>) { + browser { + fn.delegate = this + fn.call() + } + } fun nodejs() = nodejs { } fun nodejs(body: KotlinJsNodeDsl.() -> Unit) + fun nodejs(fn: Closure<*>) { + nodejs { + fn.delegate = this + fn.call() + } + } } interface KotlinJsSubTargetDsl { fun testTask(body: KotlinJsTest.() -> Unit) + fun testTask(fn: Closure<*>) { + testTask { + fn.delegate = this + fn.call() + } + } } interface KotlinJsBrowserDsl : KotlinJsSubTargetDsl { fun runTask(body: KotlinWebpack.() -> Unit) + fun runTask(fn: Closure<*>) { + runTask { + fn.delegate = this + fn.call() + } + } + fun webpackTask(body: KotlinWebpack.() -> Unit) + fun webpackTask(fn: Closure<*>) { + testTask { + fn.delegate = this + fn.call() + } + } } interface KotlinJsNodeDsl : KotlinJsSubTargetDsl { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt index 1899a43b4af..0e26d478a89 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt @@ -25,8 +25,6 @@ class KotlinBrowserJs(target: KotlinJsTarget) : override fun configureDefaultTestFramework(it: KotlinJsTest) { it.useKarma { - useMocha() - useWebpack() useChromeHeadless() } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/KotlinJsTest.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/KotlinJsTest.kt index 8d717ec792f..26ddb19f883 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/KotlinJsTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/KotlinJsTest.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.gradle.targets.js.testing +import groovy.lang.Closure import org.gradle.api.tasks.Input import org.gradle.api.tasks.Internal import org.gradle.api.tasks.SkipWhenEmpty @@ -34,10 +35,28 @@ open class KotlinJsTest : KotlinTest(), RequiresNpmDependencies { get() = testFramework!!.requiredNpmDependencies fun useNodeJs(body: KotlinNodeJsTestRunner.() -> Unit) = use(KotlinNodeJsTestRunner(project), body) + fun useNodeJs(fn: Closure<*>) { + useNodeJs { + fn.delegate = this + fn.call() + } + } fun useMocha(body: KotlinMocha.() -> Unit) = use(KotlinMocha(project), body) + fun useMocha(fn: Closure<*>) { + useMocha { + fn.delegate = this + fn.call() + } + } fun useKarma(body: KotlinKarma.() -> Unit) = use(KotlinKarma(project), body) + fun useKarma(fn: Closure<*>) { + useKarma { + fn.delegate = this + fn.call() + } + } private inline fun use(runner: T, body: T.() -> Unit): T { check(testFramework == null) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt index 20290383483..38a51780612 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt @@ -44,6 +44,8 @@ class KotlinKarma(val project: Project) : KotlinJsTestFramework { requiredDependencies.add(versions.karma) useTeamcityReporter() + useMocha() + useWebpack() config.singleRun = true } @@ -78,13 +80,13 @@ class KotlinKarma(val project: Project) : KotlinJsTestFramework { requiredDependencies.add(dependency) } - fun useMocha() { + private fun useMocha() { requiredDependencies.add(versions.karmaMocha) requiredDependencies.add(versions.mocha) config.frameworks.add("mocha") } - fun useWebpack() { + private fun useWebpack() { requiredDependencies.add(versions.karmaWebpack) addPreprocessor("webpack")