[Gradle, JS] Use live collections for webpack configurations
^KT-57116 fixed
This commit is contained in:
committed by
Space Team
parent
f058ee21b0
commit
133992d0bc
+45
@@ -498,6 +498,51 @@ class Kotlin2JsIrGradlePluginIT : AbstractKotlin2JsGradlePluginIT(true) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@DisplayName("Webpack config block works after task configured")
|
||||
@GradleTest
|
||||
fun testWebpackConfigWorksAfterTaskConfigured(gradleVersion: GradleVersion) {
|
||||
project("js-library-with-executable", gradleVersion) {
|
||||
buildGradleKts.modify(::transformBuildScriptWithPluginsDsl)
|
||||
|
||||
buildGradleKts.modify { originalScript ->
|
||||
buildString {
|
||||
append(originalScript)
|
||||
append(
|
||||
"""
|
||||
|
|
||||
|kotlin {
|
||||
| js {
|
||||
| browser {
|
||||
| }
|
||||
| }
|
||||
|}
|
||||
|
|
||||
|tasks.all {
|
||||
| // do nothing
|
||||
|}
|
||||
|
|
||||
|kotlin {
|
||||
| js {
|
||||
| browser {
|
||||
| commonWebpackConfig {
|
||||
| outputFileName = "CORRECT_NAME.js"
|
||||
| }
|
||||
| }
|
||||
| }
|
||||
|}
|
||||
|
|
||||
""".trimMargin()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
build("browserProductionWebpack") {
|
||||
assertTasksExecuted(":browserProductionWebpack")
|
||||
assertFileExists(projectPath.resolve("build/${Distribution.DIST}/js/productionExecutable/CORRECT_NAME.js"))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@JsGradlePluginTests
|
||||
|
||||
+8
-4
@@ -6,6 +6,8 @@
|
||||
package org.jetbrains.kotlin.gradle.targets.js.ir
|
||||
|
||||
import org.gradle.api.Action
|
||||
import org.gradle.api.DomainObjectCollection
|
||||
import org.gradle.api.DomainObjectSet
|
||||
import org.gradle.api.Task
|
||||
import org.gradle.api.provider.Property
|
||||
import org.gradle.api.provider.Provider
|
||||
@@ -42,8 +44,10 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
|
||||
|
||||
private val nodeJs = project.rootProject.kotlinNodeJsExtension
|
||||
|
||||
private val webpackTaskConfigurations: MutableList<Action<KotlinWebpack>> = mutableListOf()
|
||||
private val runTaskConfigurations: MutableList<Action<KotlinWebpack>> = mutableListOf()
|
||||
private val webpackTaskConfigurations: DomainObjectSet<Action<KotlinWebpack>> = project.objects.domainObjectSet(Action::class.java)
|
||||
as DomainObjectSet<Action<KotlinWebpack>>
|
||||
private val runTaskConfigurations: DomainObjectSet<Action<KotlinWebpack>> = project.objects.domainObjectSet(Action::class.java)
|
||||
as DomainObjectSet<Action<KotlinWebpack>>
|
||||
|
||||
override val testTaskDescription: String
|
||||
get() = "Run all ${target.name} tests inside browser using karma and webpack"
|
||||
@@ -267,7 +271,7 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
|
||||
mode: KotlinJsBinaryMode,
|
||||
inputFilesDirectory: Provider<File>,
|
||||
entryModuleName: Provider<String>,
|
||||
configurationActions: List<Action<KotlinWebpack>>,
|
||||
configurationActions: DomainObjectSet<Action<KotlinWebpack>>,
|
||||
nodeJs: NodeJsRootExtension,
|
||||
defaultArchivesName: Property<String>,
|
||||
) {
|
||||
@@ -285,7 +289,7 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
|
||||
|
||||
mainOutputFileName.convention(defaultArchivesName.orElse("main").map { "$it.js" }).finalizeValueOnRead()
|
||||
|
||||
configurationActions.forEach { configure ->
|
||||
configurationActions.all { configure ->
|
||||
configure.execute(this)
|
||||
}
|
||||
}
|
||||
|
||||
+8
-10
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.gradle.targets.js.testing
|
||||
|
||||
import org.gradle.api.Action
|
||||
import org.gradle.api.DomainObjectSet
|
||||
import org.gradle.api.file.FileCollection
|
||||
import org.gradle.api.file.RegularFileProperty
|
||||
import org.gradle.api.tasks.*
|
||||
@@ -19,6 +20,8 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.RequiresNpmDependencies
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
||||
import org.jetbrains.kotlin.gradle.targets.js.testing.karma.KotlinKarma
|
||||
import org.jetbrains.kotlin.gradle.targets.js.testing.mocha.KotlinMocha
|
||||
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpack
|
||||
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinTest
|
||||
import org.jetbrains.kotlin.gradle.utils.getValue
|
||||
import org.jetbrains.kotlin.gradle.utils.newFileProperty
|
||||
@@ -46,21 +49,16 @@ constructor(
|
||||
var testFramework: KotlinJsTestFramework? = null
|
||||
set(value) {
|
||||
field = value
|
||||
onTestFrameworkCallbacks.forEach { callback ->
|
||||
callback(value)
|
||||
onTestFrameworkCallbacks.all { callback ->
|
||||
callback.execute(value)
|
||||
}
|
||||
}
|
||||
|
||||
private var onTestFrameworkCallbacks: MutableList<(KotlinJsTestFramework?) -> Unit> =
|
||||
mutableListOf()
|
||||
private var onTestFrameworkCallbacks: DomainObjectSet<Action<KotlinJsTestFramework?>> =
|
||||
project.objects.domainObjectSet(Action::class.java) as DomainObjectSet<Action<KotlinJsTestFramework?>>
|
||||
|
||||
fun onTestFrameworkSet(action: (KotlinJsTestFramework?) -> Unit) {
|
||||
fun onTestFrameworkSet(action: Action<KotlinJsTestFramework?>) {
|
||||
onTestFrameworkCallbacks.add(action)
|
||||
testFramework?.let { testFramework: KotlinJsTestFramework ->
|
||||
onTestFrameworkCallbacks.forEach { callback ->
|
||||
callback(testFramework)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Suppress("unused")
|
||||
|
||||
Reference in New Issue
Block a user