From 03bc61c80a5438e089779b9a22b786e475b3bf5f Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Fri, 3 Jul 2020 19:16:31 +0300 Subject: [PATCH] [Gradle, JS] Add test on public package json inside archives (jar and klib) --- .../kotlin/gradle/Kotlin2JsGradlePluginIT.kt | 90 ++++++++++++++++++- 1 file changed, 89 insertions(+), 1 deletion(-) 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 2ee8fce3202..7fd210b6e1e 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 @@ -5,10 +5,13 @@ package org.jetbrains.kotlin.gradle +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.tasks.USING_JS_INCREMENTAL_COMPILATION_MESSAGE import org.jetbrains.kotlin.gradle.tasks.USING_JS_IR_BACKEND_MESSAGE @@ -16,6 +19,7 @@ import org.jetbrains.kotlin.gradle.util.* import org.junit.Assume.assumeFalse import org.junit.Test import java.io.File +import java.io.FileFilter import java.util.zip.ZipFile import kotlin.test.assertEquals import kotlin.test.assertTrue @@ -216,7 +220,10 @@ class Kotlin2JsGradlePluginIT : AbstractKotlin2JsGradlePluginIT(false) { abstract class AbstractKotlin2JsGradlePluginIT(private val irBackend: Boolean) : BaseGradleIT() { override fun defaultBuildOptions(): BuildOptions = - super.defaultBuildOptions().copy(jsIrBackend = irBackend) + super.defaultBuildOptions().copy( + jsIrBackend = irBackend, + jsCompilerType = if (irBackend) KotlinJsCompilerType.IR else KotlinJsCompilerType.LEGACY + ) protected fun CompiledProject.checkIrCompilationMessage() { if (irBackend) { @@ -544,6 +551,87 @@ abstract class AbstractKotlin2JsGradlePluginIT(private val irBackend: Boolean) : } } + @Test + fun testPackageJsonWithPublicNpmDependencies() = with(Project("npm-dependencies")) { + setupWorkingDir() + gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl) + + build("jsJar") { + assertSuccessful() + + val archive = fileInWorkingDir("build") + .resolve("libs") + .listFiles(FileFilter { + it.extension == if (irBackend) KLIB_TYPE else "jar" + })!! + .single() + + val zipFile = ZipFile(archive) + val packageJsonCandidates = zipFile.entries() + .asSequence() + .filter { it.name == NpmProject.PACKAGE_JSON } + .toList() + + assertTrue("Expected existence of package.json in archive") { + packageJsonCandidates.size == 1 + } + + zipFile.getInputStream(packageJsonCandidates.single()).use { + it.reader().use { + val packageJson = Gson().fromJson(it, PackageJson::class.java) + assertTrue("There is no expected dev dependencies in package.json") { + packageJson.devDependencies.isEmpty() + } + + assertTrue("There is expected dependency \"@yworks/optimizer\": \"1.0.6\" in package.json") { + val dependencies = packageJson.dependencies + dependencies + .containsKey("@yworks/optimizer") && + dependencies["@yworks/optimizer"] == "1.0.6" + } + + assertTrue("There is expected peer dependency \"date-arithmetic\": \"4.1.0\" in package.json") { + val peerDependencies = packageJson.peerDependencies + peerDependencies + .containsKey("date-arithmetic") && + peerDependencies["date-arithmetic"] == "4.1.0" + } + } + } + } + + val newGradleBuildScript = gradleBuildScript() + .useLines { lines -> + lines + .filterNot { + it.contains("npm", ignoreCase = true) + } + .joinToString("\n") + } + gradleBuildScript().modify { + newGradleBuildScript + } + + build("jsJar") { + assertSuccessful() + val archive = fileInWorkingDir("build") + .resolve("libs") + .listFiles(FileFilter { + it.extension == if (irBackend) KLIB_TYPE else "jar" + })!! + .single() + + val packageJsonCandidates = ZipFile(archive).entries() + .asSequence() + .filter { it.name == NpmProject.PACKAGE_JSON } + .toList() + + assertTrue("Expected absence of package.json in ${archive.name}") { + packageJsonCandidates.isEmpty() + } + } + } + @Test fun testBrowserDistribution() = with(Project("kotlin-js-browser-project")) { setupWorkingDir()