Add filtering feature to karma testing

- Now karma use generated adapter.js as input, in which right runner and
also all real input files are required

#KT-32216 fixed
This commit is contained in:
Ilya Goncharov
2019-09-18 17:11:11 +03:00
parent 09a602d8ad
commit c2b5df83f6
4 changed files with 38 additions and 4 deletions
@@ -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")
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.gradle.targets.js.testing
data class KotlinTestRunnerCliArgs(
val moduleNames: List<String>,
val moduleNames: List<String> = listOf(),
val include: Collection<String> = listOf(),
val exclude: Collection<String> = listOf(),
val ignoredTestSuites: IgnoredTestSuitesReporting = IgnoredTestSuitesReporting.reportAllInnerTestsAsIgnored
@@ -12,6 +12,7 @@ data class KarmaConfig(
var basePath: String? = null,
val files: MutableList<String> = mutableListOf(),
val frameworks: MutableList<String> = mutableListOf(),
val client: KarmaClient = KarmaClient(),
val browsers: MutableList<String> = mutableListOf(),
val customLaunchers: MutableMap<String, CustomLauncher> = mutableMapOf(),
val reporters: MutableList<String> = mutableListOf(),
@@ -19,6 +20,10 @@ data class KarmaConfig(
var coverageReporter: CoverageReporter? = null
)
data class KarmaClient(
val args: MutableList<String> = mutableListOf()
)
class CustomLauncher(var base: String) {
val flags = mutableListOf<String>()
var debug: Boolean? = null
@@ -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")