From 613391d00b67bb6e421a04ffd6f0a44b9e6fb60e Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Thu, 5 Sep 2019 17:22:51 +0300 Subject: [PATCH] Add puppeteer for Chrome browsers --- .../kotlin/gradle/targets/js/NpmVersions.kt | 2 + .../targets/js/testing/karma/KotlinKarma.kt | 47 +++++++++++++++++-- 2 files changed, 44 insertions(+), 5 deletions(-) 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 d118412d843..6a1d0fbf272 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 puppeteer = NpmPackageVersion("puppeteer", "1.19.0") + val kotlinNodeJsTestRunner = KotlinGradleNpmPackage("test-nodejs-runner") val istanbulInstrumenterLoader = NpmPackageVersion("istanbul-instrumenter-loader", "3.0.1") 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 a4dab5217a4..b14fe3f93e0 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 @@ -16,10 +16,10 @@ import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesClient import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesClientSettings import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesTestExecutionSpec import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation -import org.jetbrains.kotlin.gradle.targets.js.appendConfigsFromDir -import org.jetbrains.kotlin.gradle.targets.js.internal.parseNodeJsStackTraceAsJvm import org.jetbrains.kotlin.gradle.targets.js.NpmPackageVersion import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency +import org.jetbrains.kotlin.gradle.targets.js.appendConfigsFromDir +import org.jetbrains.kotlin.gradle.targets.js.internal.parseNodeJsStackTraceAsJvm 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 @@ -77,11 +77,20 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF configDirectory = dir } - fun useChrome() = useBrowser("Chrome", versions.karmaChromeLauncher) + fun useChrome() = useChromeWithPuppeteer( + id = "Chrome", + envVar = CHROME_BIN + ) - fun useChromeCanary() = useBrowser("ChromeCanary", versions.karmaChromeLauncher) + fun useChromeCanary() = useChromeWithPuppeteer( + id = "ChromeCanary", + envVar = CHROME_CANARY_BIN + ) - fun useChromeHeadless() = useBrowser("ChromeHeadless", versions.karmaChromeLauncher) + fun useChromeHeadless() = useChromeWithPuppeteer( + id = "ChromeHeadless", + envVar = CHROME_BIN + ) fun usePhantomJS() = useBrowser("PhantomJS", versions.karmaPhantomJsLauncher) @@ -98,6 +107,29 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF requiredDependencies.add(dependency) } + private fun useChromeWithPuppeteer( + id: String, + envVar: String + ) { + usePuppeteer(envVar) + useBrowser(id, versions.karmaChromeLauncher) + } + + private fun usePuppeteer(envVar: String) { + requiredDependencies.add(versions.puppeteer) + + confJsWriters.add { + it.appendln() + //language=JavaScript 1.8 + it.appendln( + """ + // puppeteer + process.env.$envVar = require('puppeteer').executablePath() + """.trimIndent() + ) + } + } + private fun useMocha() { requiredDependencies.add(versions.karmaMocha) requiredDependencies.add(versions.mocha) @@ -318,4 +350,9 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF appendConfigsFromDir(configDirectory) appendln() } + + companion object { + const val CHROME_BIN = "CHROME_BIN" + const val CHROME_CANARY_BIN = "CHROME_CANARY_BIN" + } } \ No newline at end of file