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:
+2
@@ -43,6 +43,8 @@ class NpmVersions {
|
|||||||
val karmaSourceMapLoader = NpmPackageVersion("karma-sourcemap-loader", "0.3.7")
|
val karmaSourceMapLoader = NpmPackageVersion("karma-sourcemap-loader", "0.3.7")
|
||||||
val karmaSourceMapSupport = NpmPackageVersion("karma-source-map-support", "1.4.0")
|
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 puppeteer = NpmPackageVersion("puppeteer", "1.19.0")
|
||||||
|
|
||||||
val kotlinNodeJsTestRunner = KotlinGradleNpmPackage("test-nodejs-runner")
|
val kotlinNodeJsTestRunner = KotlinGradleNpmPackage("test-nodejs-runner")
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.gradle.targets.js.testing
|
package org.jetbrains.kotlin.gradle.targets.js.testing
|
||||||
|
|
||||||
data class KotlinTestRunnerCliArgs(
|
data class KotlinTestRunnerCliArgs(
|
||||||
val moduleNames: List<String>,
|
val moduleNames: List<String> = listOf(),
|
||||||
val include: Collection<String> = listOf(),
|
val include: Collection<String> = listOf(),
|
||||||
val exclude: Collection<String> = listOf(),
|
val exclude: Collection<String> = listOf(),
|
||||||
val ignoredTestSuites: IgnoredTestSuitesReporting = IgnoredTestSuitesReporting.reportAllInnerTestsAsIgnored
|
val ignoredTestSuites: IgnoredTestSuitesReporting = IgnoredTestSuitesReporting.reportAllInnerTestsAsIgnored
|
||||||
|
|||||||
+5
@@ -12,6 +12,7 @@ data class KarmaConfig(
|
|||||||
var basePath: String? = null,
|
var basePath: String? = null,
|
||||||
val files: MutableList<String> = mutableListOf(),
|
val files: MutableList<String> = mutableListOf(),
|
||||||
val frameworks: MutableList<String> = mutableListOf(),
|
val frameworks: MutableList<String> = mutableListOf(),
|
||||||
|
val client: KarmaClient = KarmaClient(),
|
||||||
val browsers: MutableList<String> = mutableListOf(),
|
val browsers: MutableList<String> = mutableListOf(),
|
||||||
val customLaunchers: MutableMap<String, CustomLauncher> = mutableMapOf(),
|
val customLaunchers: MutableMap<String, CustomLauncher> = mutableMapOf(),
|
||||||
val reporters: MutableList<String> = mutableListOf(),
|
val reporters: MutableList<String> = mutableListOf(),
|
||||||
@@ -19,6 +20,10 @@ data class KarmaConfig(
|
|||||||
var coverageReporter: CoverageReporter? = null
|
var coverageReporter: CoverageReporter? = null
|
||||||
)
|
)
|
||||||
|
|
||||||
|
data class KarmaClient(
|
||||||
|
val args: MutableList<String> = mutableListOf()
|
||||||
|
)
|
||||||
|
|
||||||
class CustomLauncher(var base: String) {
|
class CustomLauncher(var base: String) {
|
||||||
val flags = mutableListOf<String>()
|
val flags = mutableListOf<String>()
|
||||||
var debug: Boolean? = null
|
var debug: Boolean? = null
|
||||||
|
|||||||
+30
-3
@@ -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.npm.npmProject
|
||||||
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.testing.KotlinJsTestFramework
|
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.targets.js.webpack.KotlinWebpackConfig
|
||||||
import org.jetbrains.kotlin.gradle.testing.internal.reportsDir
|
import org.jetbrains.kotlin.gradle.testing.internal.reportsDir
|
||||||
import org.slf4j.Logger
|
import org.slf4j.Logger
|
||||||
@@ -233,6 +234,9 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun useWebpack() {
|
private fun useWebpack() {
|
||||||
|
createAdapterJs()
|
||||||
|
requiredDependencies.add(versions.browserProcessHrtime)
|
||||||
|
|
||||||
requiredDependencies.add(versions.karmaWebpack)
|
requiredDependencies.add(versions.karmaWebpack)
|
||||||
requiredDependencies.add(versions.webpack)
|
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(
|
override fun createTestExecutionSpec(
|
||||||
task: KotlinJsTest,
|
task: KotlinJsTest,
|
||||||
forkOptions: ProcessForkOptions,
|
forkOptions: ProcessForkOptions,
|
||||||
@@ -343,15 +366,19 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF
|
|||||||
|
|
||||||
val npmProject = compilation.npmProject
|
val npmProject = compilation.npmProject
|
||||||
|
|
||||||
val files = task.nodeModulesToLoad.map { npmProject.require(it) }
|
|
||||||
config.files.addAll(files)
|
|
||||||
|
|
||||||
config.basePath = npmProject.nodeModulesDir.absolutePath
|
config.basePath = npmProject.nodeModulesDir.absolutePath
|
||||||
|
|
||||||
configurators.forEach {
|
configurators.forEach {
|
||||||
it(task)
|
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")
|
val karmaConfJs = npmProject.dir.resolve("karma.conf.js")
|
||||||
karmaConfJs.printWriter().use { confWriter ->
|
karmaConfJs.printWriter().use { confWriter ->
|
||||||
confWriter.println("// environment variables")
|
confWriter.println("// environment variables")
|
||||||
|
|||||||
Reference in New Issue
Block a user