[Gradle, JS] Add test on JS IR IC case with multiple artifacts

This commit is contained in:
Ilya Goncharov
2022-01-21 17:26:07 +03:00
committed by Space
parent 80b50f5452
commit d52fa8dd9b
9 changed files with 166 additions and 0 deletions
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.gradle.util.normalizePath
import org.junit.jupiter.api.Disabled
import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.condition.DisabledIf
import java.io.File
import java.nio.file.Files
import java.nio.file.Paths
import java.util.zip.ZipFile
@@ -169,6 +170,57 @@ class Kotlin2JsIrGradlePluginIT : AbstractKotlin2JsGradlePluginIT(true) {
}
}
}
@DisplayName("incremental compilation for JS IR consider multiple artifacts in one project")
@GradleTest
fun testJsIrIncrementalMultipleArtifacts(gradleVersion: GradleVersion) {
project("kotlin-js-ir-ic-multiple-artifacts", gradleVersion) {
buildGradleKts.modify(::transformBuildScriptWithPluginsDsl)
build("compileDevelopmentExecutableKotlinJs") {
val cacheDir = projectPath.resolve("app/build/klib/cache/lib/unspecified/")
.toFile()
assertTrue("Lib cache size should be 2") {
cacheDir
.list()
?.size == 2
}
var lib: Boolean = false
var libOther: Boolean = false
cacheDir.listFiles()!!
.forEach {
it.listFiles()!!
.single()
.let {
it.listFiles()!!
.filter { it.isFile }
.forEach {
val text = it.readText()
if (text.contains("<kotlin-js-ir-ic-multiple-artifacts:lib>")) {
if (lib) {
error("lib should be only once in cache")
}
lib = true
}
if (text.contains("<kotlin-js-ir-ic-multiple-artifacts:lib_other>")) {
if (libOther) {
error("libOther should be only once in cache")
}
libOther = true
}
}
}
}
assertTrue("lib and libOther should be once in cache") {
lib && libOther
}
}
}
}
}
@JsGradlePluginTests
@@ -0,0 +1,19 @@
plugins {
kotlin("js")
}
dependencies {
implementation(project(":lib"))
}
kotlin {
js {
browser {
}
binaries.executable()
}
}
configurations["compileClasspath"].apply {
attributes.attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage::class.java, "kotlin-runtime"))
}
@@ -0,0 +1,10 @@
/*
* 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 main() {
println("Sheldon: ${sheldon()}")
}
@@ -0,0 +1,13 @@
plugins {
kotlin("js").version("<pluginMarkerVersion>").apply(false)
}
group = "com.example"
version = "1.0"
allprojects {
repositories {
mavenLocal()
mavenCentral()
}
}
@@ -0,0 +1,2 @@
kotlin.incremental.js.klib=true
kotlin.incremental.js.ir=true
@@ -0,0 +1,42 @@
plugins {
kotlin("js")
}
var conf: Configuration? = null
kotlin {
js {
val otherCompilation = compilations.create("other")
tasks.register<Zip>("otherKlib") {
from(otherCompilation.output.allOutputs)
archiveExtension.set("klib")
}
val otherDist by configurations.creating {
isCanBeConsumed = true
isCanBeResolved = false
}
conf = otherDist
artifacts {
add(otherDist.name, tasks.named("otherKlib").map { it.outputs.files.files.first() })
}
useCommonJs()
browser {
}
}
sourceSets {
val main by getting {
kotlin.exclude("**/other/**")
dependencies {
runtimeOnly(conf!!)
}
}
val other by getting {
kotlin.srcDirs("src/main/kotlin/other")
dependencies {
implementation(project(path = project.path))
}
}
}
}
@@ -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 42
}
fun sheldon(): Int {
return 73
}
@@ -0,0 +1,10 @@
/*
* 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.other
fun foo(): Int {
return 3
}
@@ -0,0 +1,4 @@
rootProject.name = "kotlin-js-ir-ic-multiple-artifacts"
include("lib")
include("app")