From 3d9353f7f5214e7fcb7028bc2a3ef0e60f13178d Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Wed, 8 Jul 2020 12:04:55 +0300 Subject: [PATCH] [Gradle, JS] Add test on dependencies clash ^KT-40093 fixed --- .../kotlin/gradle/Kotlin2JsGradlePluginIT.kt | 37 +++++++++++++++++-- .../base/build.gradle.kts | 18 +++++++++ .../base/src/main/kotlin/Base.kt | 14 +++++++ .../build.gradle.kts | 13 +++++++ .../lib/build.gradle.kts | 17 +++++++++ .../lib/src/main/kotlin/Lib.kt | 14 +++++++ .../settings.gradle.kts | 11 ++++++ .../gradle/targets/js/npm/NpmDependency.kt | 2 +- 8 files changed, 121 insertions(+), 5 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dependencies-clash/base/build.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dependencies-clash/base/src/main/kotlin/Base.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dependencies-clash/build.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dependencies-clash/lib/build.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dependencies-clash/lib/src/main/kotlin/Lib.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dependencies-clash/settings.gradle.kts 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 7fd210b6e1e..0f6c0a02878 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 @@ -9,10 +9,7 @@ import com.google.gson.Gson import org.gradle.api.logging.LogLevel import org.jetbrains.kotlin.gradle.plugin.KotlinJsCompilerType import org.jetbrains.kotlin.gradle.targets.js.ir.KLIB_TYPE -import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject -import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProjectModules -import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJson -import org.jetbrains.kotlin.gradle.targets.js.npm.fromSrcPackageJson +import org.jetbrains.kotlin.gradle.targets.js.npm.* import org.jetbrains.kotlin.gradle.tasks.USING_JS_INCREMENTAL_COMPILATION_MESSAGE import org.jetbrains.kotlin.gradle.tasks.USING_JS_IR_BACKEND_MESSAGE import org.jetbrains.kotlin.gradle.util.* @@ -678,5 +675,37 @@ abstract class AbstractKotlin2JsGradlePluginIT(private val irBackend: Boolean) : } } + @Test + fun testUpdatingPackageJsonOnDependenciesClash() = with(Project("kotlin-js-dependencies-clash")) { + setupWorkingDir() + gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl) + fun assertFileVersion( + packageJson: PackageJson, + dependency: String + ) { + val version = packageJson.dependencies[dependency]!! + assertTrue("${packageJson.name} must have $dependency with file version, but $version found") { + version.isFileVersion() + } + } + + build("packageJson", "rootPackageJson", "kotlinNpmInstall") { + assertSuccessful() + + fun getPackageJson(subProject: String) = + fileInWorkingDir("build/js/packages/kotlin-js-dependencies-clash-$subProject") + .resolve(NpmProject.PACKAGE_JSON) + .let { + Gson().fromJson(it.readText(), PackageJson::class.java) + } + + val basePackageJson = getPackageJson("base") + val libPackageJson = getPackageJson("lib") + + val dependency = "kotlinx-coroutines-core" + assertFileVersion(basePackageJson, dependency) + assertFileVersion(libPackageJson, dependency) + } + } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dependencies-clash/base/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dependencies-clash/base/build.gradle.kts new file mode 100644 index 00000000000..bac8245d455 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dependencies-clash/base/build.gradle.kts @@ -0,0 +1,18 @@ +import org.jetbrains.kotlin.gradle.plugin.KotlinJsCompilerType.BOTH as BOTH_TYPE + +plugins { + kotlin("js") +} + +dependencies { + implementation(kotlin("stdlib-js")) + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-js:1.3.5") +} + +kotlin { + js { + useCommonJs() + nodejs { + } + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dependencies-clash/base/src/main/kotlin/Base.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dependencies-clash/base/src/main/kotlin/Base.kt new file mode 100644 index 00000000000..e69d852c3e0 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dependencies-clash/base/src/main/kotlin/Base.kt @@ -0,0 +1,14 @@ +/* + * Copyright 2010-2019 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. + */ + +package com.example + +fun best(): Int { + return 42 +} + +fun simpleBest(): Int { + return 73 +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dependencies-clash/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dependencies-clash/build.gradle.kts new file mode 100644 index 00000000000..598c8decf50 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dependencies-clash/build.gradle.kts @@ -0,0 +1,13 @@ +plugins { + kotlin("js").version("").apply(false) +} + +group = "com.example" +version = "1.0" + +allprojects { + repositories { + mavenLocal() + jcenter() + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dependencies-clash/lib/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dependencies-clash/lib/build.gradle.kts new file mode 100644 index 00000000000..5950432c244 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dependencies-clash/lib/build.gradle.kts @@ -0,0 +1,17 @@ +plugins { + kotlin("js") +} + +dependencies { + implementation(kotlin("stdlib-js")) + implementation(project(":base")) + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-js:1.3.7") +} + +kotlin { + target { + useCommonJs() + nodejs { + } + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dependencies-clash/lib/src/main/kotlin/Lib.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dependencies-clash/lib/src/main/kotlin/Lib.kt new file mode 100644 index 00000000000..9ec1e64a28c --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dependencies-clash/lib/src/main/kotlin/Lib.kt @@ -0,0 +1,14 @@ +/* + * Copyright 2010-2019 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. + */ + +package com.example + +fun answer(): Int { + return best() +} + +fun sheldon(): Int { + return simpleBest() +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dependencies-clash/settings.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dependencies-clash/settings.gradle.kts new file mode 100644 index 00000000000..2efc39ffb72 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-dependencies-clash/settings.gradle.kts @@ -0,0 +1,11 @@ +pluginManagement { + repositories { + mavenLocal() + gradlePluginPortal() + } +} + +rootProject.name = "kotlin-js-dependencies-clash" + +include("base") +include("lib") \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependency.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependency.kt index 2a73d09389f..38caffca093 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependency.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependency.kt @@ -142,7 +142,7 @@ internal fun onlyNameNpmDependency( throw IllegalArgumentException("NPM dependency '$name' doesn't have version. Please, set version explicitly.") } -internal fun String.isFileVersion() = +fun String.isFileVersion() = startsWith(FILE_VERSION_PREFIX) internal fun fileVersion(directory: File): String =