[Gradle, JS] Add test on dependencies clash
^KT-40093 fixed
This commit is contained in:
+33
-4
@@ -9,10 +9,7 @@ import com.google.gson.Gson
|
|||||||
import org.gradle.api.logging.LogLevel
|
import org.gradle.api.logging.LogLevel
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinJsCompilerType
|
import org.jetbrains.kotlin.gradle.plugin.KotlinJsCompilerType
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KLIB_TYPE
|
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.*
|
||||||
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.tasks.USING_JS_INCREMENTAL_COMPILATION_MESSAGE
|
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.tasks.USING_JS_IR_BACKEND_MESSAGE
|
||||||
import org.jetbrains.kotlin.gradle.util.*
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+18
@@ -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 {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+14
@@ -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
|
||||||
|
}
|
||||||
+13
@@ -0,0 +1,13 @@
|
|||||||
|
plugins {
|
||||||
|
kotlin("js").version("<pluginMarkerVersion>").apply(false)
|
||||||
|
}
|
||||||
|
|
||||||
|
group = "com.example"
|
||||||
|
version = "1.0"
|
||||||
|
|
||||||
|
allprojects {
|
||||||
|
repositories {
|
||||||
|
mavenLocal()
|
||||||
|
jcenter()
|
||||||
|
}
|
||||||
|
}
|
||||||
+17
@@ -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 {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+14
@@ -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()
|
||||||
|
}
|
||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
pluginManagement {
|
||||||
|
repositories {
|
||||||
|
mavenLocal()
|
||||||
|
gradlePluginPortal()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rootProject.name = "kotlin-js-dependencies-clash"
|
||||||
|
|
||||||
|
include("base")
|
||||||
|
include("lib")
|
||||||
+1
-1
@@ -142,7 +142,7 @@ internal fun onlyNameNpmDependency(
|
|||||||
throw IllegalArgumentException("NPM dependency '$name' doesn't have version. Please, set version explicitly.")
|
throw IllegalArgumentException("NPM dependency '$name' doesn't have version. Please, set version explicitly.")
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun String.isFileVersion() =
|
fun String.isFileVersion() =
|
||||||
startsWith(FILE_VERSION_PREFIX)
|
startsWith(FILE_VERSION_PREFIX)
|
||||||
|
|
||||||
internal fun fileVersion(directory: File): String =
|
internal fun fileVersion(directory: File): String =
|
||||||
|
|||||||
Reference in New Issue
Block a user