diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/NpmVersions.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/NpmVersions.kt index 6a1d0fbf272..a384c753c5a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/NpmVersions.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/NpmVersions.kt @@ -43,6 +43,8 @@ class NpmVersions { val karmaSourceMapLoader = NpmPackageVersion("karma-sourcemap-loader", "0.3.7") val karmaSourceMapSupport = NpmPackageVersion("karma-source-map-support", "1.4.0") + val browserProcessHrtime = NpmPackageVersion("browser-process-hrtime", "1.0.0") + val puppeteer = NpmPackageVersion("puppeteer", "1.19.0") val kotlinNodeJsTestRunner = KotlinGradleNpmPackage("test-nodejs-runner") diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/KotlinTestRunnerCliArgs.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/KotlinTestRunnerCliArgs.kt index 26680919cd3..8be02390949 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/KotlinTestRunnerCliArgs.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/KotlinTestRunnerCliArgs.kt @@ -6,7 +6,7 @@ package org.jetbrains.kotlin.gradle.targets.js.testing data class KotlinTestRunnerCliArgs( - val moduleNames: List, + val moduleNames: List = listOf(), val include: Collection = listOf(), val exclude: Collection = listOf(), val ignoredTestSuites: IgnoredTestSuitesReporting = IgnoredTestSuitesReporting.reportAllInnerTestsAsIgnored diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KarmaConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KarmaConfig.kt index 8d50364ffa0..ea7762658c1 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KarmaConfig.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KarmaConfig.kt @@ -12,6 +12,7 @@ data class KarmaConfig( var basePath: String? = null, val files: MutableList = mutableListOf(), val frameworks: MutableList = mutableListOf(), + val client: KarmaClient = KarmaClient(), val browsers: MutableList = mutableListOf(), val customLaunchers: MutableMap = mutableMapOf(), val reporters: MutableList = mutableListOf(), @@ -19,6 +20,10 @@ data class KarmaConfig( var coverageReporter: CoverageReporter? = null ) +data class KarmaClient( + val args: MutableList = mutableListOf() +) + class CustomLauncher(var base: String) { val flags = mutableListOf() var debug: Boolean? = 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 3f90a04f2e0..3f309b22077 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 @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTestFramework +import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinTestRunnerCliArgs import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig import org.jetbrains.kotlin.gradle.testing.internal.reportsDir import org.slf4j.Logger @@ -233,6 +234,9 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF } private fun useWebpack() { + createAdapterJs() + requiredDependencies.add(versions.browserProcessHrtime) + requiredDependencies.add(versions.karmaWebpack) requiredDependencies.add(versions.webpack) @@ -324,6 +328,25 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF } } + private fun createAdapterJs() { + configurators.add { + val npmProject = compilation.npmProject + val files = it.nodeModulesToLoad.map { npmProject.require(it) } + + val adapterJs = npmProject.dir.resolve("adapter.js") + adapterJs.printWriter().use { writer -> + val karmaRunner = npmProject.require("kotlin-test-nodejs-runner/kotlin-test-karma-runner.js") + writer.println("require('$karmaRunner')") + + files.forEach { file -> + writer.println("require('$file')") + } + } + + config.files.add(adapterJs.canonicalPath) + } + } + override fun createTestExecutionSpec( task: KotlinJsTest, forkOptions: ProcessForkOptions, @@ -343,15 +366,19 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF val npmProject = compilation.npmProject - val files = task.nodeModulesToLoad.map { npmProject.require(it) } - config.files.addAll(files) - config.basePath = npmProject.nodeModulesDir.absolutePath configurators.forEach { it(task) } + val cliArgs = KotlinTestRunnerCliArgs( + include = task.includePatterns, + exclude = task.excludePatterns + ) + + config.client.args.addAll(cliArgs.toList()) + val karmaConfJs = npmProject.dir.resolve("karma.conf.js") karmaConfJs.printWriter().use { confWriter -> confWriter.println("// environment variables")