Allow multiple expectedBy dependencies in Gradle MPP support
Issue #KT-22864 Fixed
This commit is contained in:
+30
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.gradle.util.getFileByName
|
||||
import org.jetbrains.kotlin.gradle.util.modify
|
||||
import org.junit.Test
|
||||
import java.io.File
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
class MultiplatformGradleIT : BaseGradleIT() {
|
||||
|
||||
@@ -155,4 +156,33 @@ class MultiplatformGradleIT : BaseGradleIT() {
|
||||
assertTasksUpToDate(listOf(compileCommonTask, compileJvmTask))
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testMultipleCommonModules(): Unit = with(Project("multiplatformMultipleCommonModules")) {
|
||||
build("build") {
|
||||
assertSuccessful()
|
||||
|
||||
val sourceSets = listOf("", "Test")
|
||||
val commonTasks = listOf("libA", "libB").flatMap { module ->
|
||||
sourceSets.map { sourceSet -> ":$module:compile${sourceSet}KotlinCommon" }
|
||||
}
|
||||
val platformTasks = listOf("libJvm" to "", "libJs" to "2Js").flatMap { (module, platformSuffix) ->
|
||||
sourceSets.map { sourceSet -> ":$module:compile${sourceSet}Kotlin$platformSuffix" }
|
||||
}
|
||||
assertTasksExecuted(commonTasks + platformTasks)
|
||||
|
||||
val expectedJvmMainClasses =
|
||||
listOf("PlatformClassB", "PlatformClassA", "JavaLibUseKt", "CommonClassB", "CommonClassA").map { "foo/$it" }
|
||||
val jvmMainClassesDir = File(projectDir, kotlinClassesDir(subproject = "libJvm"))
|
||||
expectedJvmMainClasses.forEach { className ->
|
||||
assertTrue(File(jvmMainClassesDir, className + ".class").isFile, "Class $className should be compiled for JVM.")
|
||||
}
|
||||
|
||||
val expectedJvmTestClasses = listOf("PlatformTestB", "PlatformTestA", "CommonTestB", "CommonTestA").map { "foo/$it" }
|
||||
val jvmTestClassesDir = File(projectDir, kotlinClassesDir(subproject = "libJvm", sourceSet = "test"))
|
||||
expectedJvmTestClasses.forEach { className ->
|
||||
assertTrue(File(jvmTestClassesDir, className + ".class").isFile, "Class $className should be compiled for JVM.")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
buildscript {
|
||||
repositories {
|
||||
mavenLocal()
|
||||
jcenter()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
}
|
||||
}
|
||||
|
||||
allprojects {
|
||||
repositories {
|
||||
mavenLocal()
|
||||
jcenter()
|
||||
}
|
||||
}
|
||||
+1
@@ -0,0 +1 @@
|
||||
apply plugin: 'kotlin-platform-common'
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package foo
|
||||
|
||||
expect class PlatformClassA {
|
||||
val valueA: String
|
||||
}
|
||||
|
||||
class CommonClassA
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package foo
|
||||
|
||||
expect class PlatformTestA {
|
||||
val valueA: PlatformClassA
|
||||
}
|
||||
|
||||
class CommonTestA(val commonClassA: CommonClassA)
|
||||
+1
@@ -0,0 +1 @@
|
||||
apply plugin: 'kotlin-platform-common'
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package foo
|
||||
|
||||
expect class PlatformClassB {
|
||||
val valueB: String
|
||||
}
|
||||
|
||||
class CommonClassB
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package foo
|
||||
|
||||
expect class PlatformTestB {
|
||||
val valueB: PlatformClassB
|
||||
}
|
||||
|
||||
class CommonTestB(val commonClassB: CommonClassB)
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
apply plugin: 'kotlin-platform-js'
|
||||
|
||||
dependencies {
|
||||
expectedBy project(":libA")
|
||||
expectedBy project(":libB")
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
package foo
|
||||
|
||||
actual class PlatformClassA {
|
||||
actual val valueA: String = "JS"
|
||||
}
|
||||
|
||||
actual class PlatformClassB {
|
||||
actual val valueB: String = "JS"
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
package foo
|
||||
|
||||
actual class PlatformTestA {
|
||||
actual val valueA: PlatformClassA = PlatformClassA()
|
||||
}
|
||||
|
||||
actual class PlatformTestB {
|
||||
actual val valueB: PlatformClassB = PlatformClassB()
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
apply plugin: 'kotlin-platform-jvm'
|
||||
|
||||
dependencies {
|
||||
expectedBy project(":libA")
|
||||
expectedBy project(":libB")
|
||||
compile 'com.google.guava:guava:20.0'
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
package foo
|
||||
|
||||
actual class PlatformClassA {
|
||||
actual val valueA: String = "JVM"
|
||||
}
|
||||
|
||||
actual class PlatformClassB {
|
||||
actual val valueB: String = "JVM"
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package foo
|
||||
|
||||
import com.google.common.collect.ImmutableSet
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
val colors = ImmutableSet.of("red", "orange", "yellow")
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
package foo
|
||||
|
||||
actual class PlatformTestA {
|
||||
actual val valueA: PlatformClassA = PlatformClassA()
|
||||
}
|
||||
|
||||
actual class PlatformTestB {
|
||||
actual val valueB: PlatformClassB = PlatformClassB()
|
||||
}
|
||||
+1
@@ -0,0 +1 @@
|
||||
include ':libA', ':libB', ':libJvm', ':libJs'
|
||||
-6
@@ -98,12 +98,6 @@ open class KotlinPlatformImplementationPluginBase(platformName: String) : Kotlin
|
||||
|
||||
private fun addCommonProject(commonProject: Project, platformProject: Project) {
|
||||
commonProjects.add(commonProject)
|
||||
if (commonProjects.size > 1) {
|
||||
throw GradleException(
|
||||
"Platform project $platformProject has more than one " +
|
||||
"'$EXPECTED_BY_CONFIG_NAME'${if (implementConfigurationIsUsed) "/'$IMPLEMENT_CONFIG_NAME'" else ""} " +
|
||||
"dependency: ${commonProjects.joinToString()}")
|
||||
}
|
||||
|
||||
commonProject.whenEvaluated {
|
||||
if (!commonProject.pluginManager.hasPlugin("kotlin-platform-common")) {
|
||||
|
||||
Reference in New Issue
Block a user