From 2173ce77d57f32a69a709159b4a0543e68cd4c87 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Mon, 21 Feb 2022 08:41:29 +0000 Subject: [PATCH] rra/ilgonmic/fork-options-js-test [Gradle, JS] Environment instead of fork options [Gradle, JS] Add test on fork options [Gradle, JS] Add fork options to kotlin js test Merge-request: KT-MR-5793 Merged-by: Ilya Goncharov ^KT-51414 fixed --- .../kotlin/gradle/Kotlin2JsGradlePluginIT.kt | 12 +++++++++ .../build.gradle | 26 +++++++++++++++++++ .../custom/index.js | 5 ++++ .../custom/package.json | 7 +++++ .../src/main/kotlin/Base.kt | 4 +++ .../src/test/kotlin/Tests.kt | 21 +++++++++++++++ .../gradle/targets/js/testing/KotlinJsTest.kt | 14 ++++++++++ 7 files changed, 89 insertions(+) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-nodejs-custom-node-module/build.gradle create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-nodejs-custom-node-module/custom/index.js create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-nodejs-custom-node-module/custom/package.json create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-nodejs-custom-node-module/src/main/kotlin/Base.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-nodejs-custom-node-module/src/test/kotlin/Tests.kt diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt index 892503f2321..e0bbfe7798a 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt @@ -980,6 +980,18 @@ abstract class AbstractKotlin2JsGradlePluginIT(protected val irBackend: Boolean) } } + @DisplayName("NodeJs test with custom fork options") + @GradleTest + fun testNodeJsForkOptions(gradleVersion: GradleVersion) { + project("kotlin-js-nodejs-custom-node-module", gradleVersion) { + build("build") { + checkIrCompilationMessage() + + assertTasksExecuted(":nodeTest") + } + } + } + @DisplayName("no dependencies from other modules are declared") @GradleTest fun testNoUnintendedDevDependencies(gradleVersion: GradleVersion) { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-nodejs-custom-node-module/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-nodejs-custom-node-module/build.gradle new file mode 100644 index 00000000000..f3131da4594 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-nodejs-custom-node-module/build.gradle @@ -0,0 +1,26 @@ +plugins { + id("org.jetbrains.kotlin.js") +} + +dependencies { + implementation("org.jetbrains.kotlin:kotlin-stdlib-js") + testImplementation("org.jetbrains.kotlin:kotlin-test-js") +} + +repositories { + mavenLocal() + mavenCentral() +} + +kotlin { + js { + useCommonJs() + binaries.executable() + nodejs { + testTask { + environment("hello", "hello") + environment("NODE_PATH", projectDir.absolutePath) + } + } + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-nodejs-custom-node-module/custom/index.js b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-nodejs-custom-node-module/custom/index.js new file mode 100644 index 00000000000..5185ff8743b --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-nodejs-custom-node-module/custom/index.js @@ -0,0 +1,5 @@ +function foo() { + return "foo" +} + +module.exports.foo = foo \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-nodejs-custom-node-module/custom/package.json b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-nodejs-custom-node-module/custom/package.json new file mode 100644 index 00000000000..caeee9b3ed6 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-nodejs-custom-node-module/custom/package.json @@ -0,0 +1,7 @@ +{ + "name": "custom", + "version": "1.0.0", + "main": "index.js", + "devDependencies": { + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-nodejs-custom-node-module/src/main/kotlin/Base.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-nodejs-custom-node-module/src/main/kotlin/Base.kt new file mode 100644 index 00000000000..687e21d2a19 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-nodejs-custom-node-module/src/main/kotlin/Base.kt @@ -0,0 +1,4 @@ +@file:JsModule("custom") +package foo + +external fun foo(): String \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-nodejs-custom-node-module/src/test/kotlin/Tests.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-nodejs-custom-node-module/src/test/kotlin/Tests.kt new file mode 100644 index 00000000000..a4a1f53fbe8 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-nodejs-custom-node-module/src/test/kotlin/Tests.kt @@ -0,0 +1,21 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +import kotlin.test.Test +import kotlin.test.assertEquals + +class Tests { + @Test + fun test1() { + assertEquals("hello", process.env.hello) + } + + @Test + fun test2() { + assertEquals("foo", foo.foo()) + } +} + +external val process: dynamic \ No newline at end of file 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 c63e854c752..6a5aee9c776 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 @@ -9,6 +9,7 @@ import groovy.lang.Closure import org.gradle.api.file.FileCollection import org.gradle.api.file.RegularFileProperty import org.gradle.api.tasks.* +import org.gradle.process.ProcessForkOptions import org.gradle.process.internal.DefaultProcessForkOptions import org.gradle.util.ConfigureUtil import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesTestExecutionSpec @@ -22,6 +23,7 @@ import org.jetbrains.kotlin.gradle.targets.js.testing.mocha.KotlinMocha import org.jetbrains.kotlin.gradle.tasks.KotlinTest import org.jetbrains.kotlin.gradle.utils.getValue import org.jetbrains.kotlin.gradle.utils.newFileProperty +import java.io.File import javax.inject.Inject open class KotlinJsTest @@ -44,6 +46,9 @@ constructor( private val projectPath = project.path + @Nested + var environment = mutableMapOf() + @get:Internal var testFramework: KotlinJsTestFramework? = null set(value) { @@ -133,12 +138,17 @@ constructor( KotlinKarma(compilation, { services }, path), body ) + fun useKarma(fn: Closure<*>) { useKarma { ConfigureUtil.configure(fn, this) } } + fun environment(key: String, value: String) { + this.environment[key] = value + } + private inline fun use(runner: T, body: T.() -> Unit): T { check(testFramework == null) { "testFramework already configured for task ${this.path}" @@ -160,6 +170,10 @@ constructor( forkOptions.workingDir = npmProjectDir forkOptions.executable = nodeExecutable + environment.forEach { (key, value) -> + forkOptions.environment(key, value) + } + val nodeJsArgs = mutableListOf() return testFramework!!.createTestExecutionSpec(