HMPP: add importing tests

This commit is contained in:
Andrey Uskov
2019-06-24 19:50:24 +03:00
parent 8280c647af
commit 8445e3a2a4
5 changed files with 302 additions and 1 deletions
@@ -5,7 +5,15 @@
package org.jetbrains.kotlin.gradle
import com.intellij.openapi.roots.DependencyScope
import org.jetbrains.jps.model.java.JavaResourceRootType
import org.jetbrains.jps.model.java.JavaSourceRootType
import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.idea.codeInsight.gradle.MultiplePluginVersionGradleImportingTestCase
import org.jetbrains.kotlin.platform.js.JsPlatform
import org.jetbrains.kotlin.platform.js.JsPlatforms
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
import org.jetbrains.kotlin.platform.konan.KonanPlatforms
import org.junit.After
import org.junit.Before
import org.junit.Test
@@ -46,6 +54,179 @@ class HierarchicalMultiplatformProjectImportingTest : MultiplePluginVersionGradl
}
}
@Test
fun testImportIntermediateModules() {
configureByFiles()
importProject()
checkProjectStructure {
module("my-app")
module("project.my-app.commonMain") {
isHMPP(true)
targetPlatform(JsPlatforms.defaultJsPlatform, JvmPlatforms.jvm16, KonanPlatforms.defaultKonanPlatform)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.3.50-dev-1383", DependencyScope.COMPILE)
sourceFolder("src/commonMain/kotlin", SourceKotlinRootType)
sourceFolder("src/commonMain/resources", ResourceKotlinRootType)
}
module("project.my-app.commonTest") {
isHMPP(true)
targetPlatform(JsPlatforms.defaultJsPlatform, JvmPlatforms.jvm16, KonanPlatforms.defaultKonanPlatform)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.3.50-dev-1383", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.3.50-dev-1383", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test-common:1.3.50-dev-1383", DependencyScope.TEST)
moduleDependency("project.my-app.commonMain", DependencyScope.TEST)
sourceFolder("src/commonTest/kotlin", TestSourceKotlinRootType)
sourceFolder("src/commonTest/resources", TestResourceKotlinRootType)
}
module("project.my-app.jsMain") {
isHMPP(true)
targetPlatform(JsPlatforms.defaultJsPlatform)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.3.50-dev-1383", DependencyScope.COMPILE)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-js:1.3.50-dev-1383", DependencyScope.COMPILE)
moduleDependency("project.my-app.commonMain", DependencyScope.COMPILE)
moduleDependency("project.my-app.jvmAndJsMain", DependencyScope.COMPILE)
moduleDependency("project.my-app.linuxAndJsMain", DependencyScope.COMPILE)
sourceFolder("src/jsMain/kotlin", SourceKotlinRootType)
sourceFolder("src/jsMain/resources", ResourceKotlinRootType)
}
module("project.my-app.jsTest") {
isHMPP(true)
targetPlatform(JsPlatforms.defaultJsPlatform)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.3.50-dev-1383", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-js:1.3.50-dev-1383", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.3.50-dev-1383", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test-common:1.3.50-dev-1383", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test-js:1.3.50-dev-1383", DependencyScope.TEST)
moduleDependency("project.my-app.commonMain", DependencyScope.TEST)
moduleDependency("project.my-app.commonTest", DependencyScope.TEST)
moduleDependency("project.my-app.jsMain", DependencyScope.TEST)
moduleDependency("project.my-app.jvmAndJsMain", DependencyScope.TEST)
moduleDependency("project.my-app.jvmAndJsTest", DependencyScope.TEST)
moduleDependency("project.my-app.linuxAndJsMain", DependencyScope.TEST)
moduleDependency("project.my-app.linuxAndJsTest", DependencyScope.TEST)
sourceFolder("src/jsTest/kotlin", TestSourceKotlinRootType)
sourceFolder("src/jsTest/resources", TestResourceKotlinRootType)
}
module("project.my-app.jvmAndJsMain") {
isHMPP(true)
targetPlatform(JsPlatforms.defaultJsPlatform, JvmPlatforms.jvm16)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.3.50-dev-1383", DependencyScope.COMPILE)
moduleDependency("project.my-app.commonMain", DependencyScope.COMPILE)
sourceFolder("src/jvmAndJsMain/kotlin", SourceKotlinRootType)
sourceFolder("src/jvmAndJsMain/resources", ResourceKotlinRootType)
}
module("project.my-app.jvmAndJsTest") {
isHMPP(true)
targetPlatform(JsPlatforms.defaultJsPlatform, JvmPlatforms.jvm16)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.3.50-dev-1383", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.3.50-dev-1383", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test-common:1.3.50-dev-1383", DependencyScope.TEST)
moduleDependency("project.my-app.commonMain", DependencyScope.TEST)
moduleDependency("project.my-app.commonTest", DependencyScope.TEST)
moduleDependency("project.my-app.jvmAndJsMain", DependencyScope.TEST)
sourceFolder("src/jvmAndJsTest/kotlin", TestSourceKotlinRootType)
sourceFolder("src/jvmAndJsTest/resources", TestResourceKotlinRootType)
}
module("project.my-app.jvmMain") {
isHMPP(true)
targetPlatform(JvmPlatforms.jvm16)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.3.50-dev-1383", DependencyScope.COMPILE)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.3.50-dev-1383", DependencyScope.COMPILE)
libraryDependency("Gradle: org.jetbrains:annotations:13.0", DependencyScope.COMPILE)
moduleDependency("project.my-app.commonMain", DependencyScope.COMPILE)
moduleDependency("project.my-app.jvmAndJsMain", DependencyScope.COMPILE)
sourceFolder("src/jvmMain/kotlin", JavaSourceRootType.SOURCE)
sourceFolder("src/jvmMain/resources", JavaResourceRootType.RESOURCE)
}
module("project.my-app.jvmTest") {
isHMPP(true)
targetPlatform(JvmPlatforms.jvm16)
libraryDependency("Gradle: junit:junit:4.12", DependencyScope.TEST)
libraryDependency("Gradle: org.hamcrest:hamcrest-core:1.3", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.3.50-dev-1383", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.3.50-dev-1383", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.3.50-dev-1383", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test-common:1.3.50-dev-1383", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test-junit:1.3.50-dev-1383", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test:1.3.50-dev-1383", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains:annotations:13.0", DependencyScope.TEST)
moduleDependency("project.my-app.commonMain", DependencyScope.TEST)
moduleDependency("project.my-app.commonTest", DependencyScope.TEST)
moduleDependency("project.my-app.jvmAndJsMain", DependencyScope.TEST)
moduleDependency("project.my-app.jvmAndJsTest", DependencyScope.TEST)
moduleDependency("project.my-app.jvmMain", DependencyScope.TEST)
sourceFolder("src/jvmTest/kotlin", JavaSourceRootType.TEST_SOURCE)
sourceFolder("src/jvmTest/resources", JavaResourceRootType.TEST_RESOURCE)
}
module("project.my-app.linuxAndJsMain") {
isHMPP(true)
targetPlatform(JsPlatforms.defaultJsPlatform, KonanPlatforms.defaultKonanPlatform)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.3.50-dev-1383", DependencyScope.COMPILE)
moduleDependency("project.my-app.commonMain", DependencyScope.COMPILE)
sourceFolder("src/linuxAndJsMain/kotlin", SourceKotlinRootType)
sourceFolder("src/linuxAndJsMain/resources", ResourceKotlinRootType)
}
module("project.my-app.linuxAndJsTest") {
isHMPP(true)
targetPlatform(JsPlatforms.defaultJsPlatform, KonanPlatforms.defaultKonanPlatform)
sourceFolder("src/linuxAndJsTest/kotlin", TestSourceKotlinRootType)
sourceFolder("src/linuxAndJsTest/resources", TestResourceKotlinRootType)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.3.50-dev-1383", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.3.50-dev-1383", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test-common:1.3.50-dev-1383", DependencyScope.TEST)
moduleDependency("project.my-app.commonMain", DependencyScope.TEST)
moduleDependency("project.my-app.commonTest", DependencyScope.TEST)
moduleDependency("project.my-app.linuxAndJsMain", DependencyScope.TEST)
}
module("project.my-app.linuxX64Main") {
isHMPP(true)
targetPlatform(KonanPlatforms.defaultKonanPlatform)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.3.50-dev-1383", DependencyScope.COMPILE)
libraryDependency("Kotlin/Native 1.3.50-dev-1383 - builtin [linux_x64]", DependencyScope.PROVIDED)
libraryDependency("Kotlin/Native 1.3.50-dev-1383 - iconv [linux_x64]", DependencyScope.PROVIDED)
libraryDependency("Kotlin/Native 1.3.50-dev-1383 - linux [linux_x64]", DependencyScope.PROVIDED)
libraryDependency("Kotlin/Native 1.3.50-dev-1383 - posix [linux_x64]", DependencyScope.PROVIDED)
libraryDependency("Kotlin/Native 1.3.50-dev-1383 - stdlib", DependencyScope.PROVIDED)
libraryDependency("Kotlin/Native 1.3.50-dev-1383 - zlib [linux_x64]", DependencyScope.PROVIDED)
moduleDependency("project.my-app.commonMain", DependencyScope.COMPILE)
moduleDependency("project.my-app.linuxAndJsMain", DependencyScope.COMPILE)
sourceFolder("src/linuxX64Main/kotlin", SourceKotlinRootType)
sourceFolder("src/linuxX64Main/resources", ResourceKotlinRootType)
}
module("project.my-app.linuxX64Test") {
isHMPP(true)
targetPlatform(KonanPlatforms.defaultKonanPlatform)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.3.50-dev-1383", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.3.50-dev-1383", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-test-common:1.3.50-dev-1383", DependencyScope.TEST)
libraryDependency("Kotlin/Native 1.3.50-dev-1383 - builtin [linux_x64]", DependencyScope.PROVIDED)
libraryDependency("Kotlin/Native 1.3.50-dev-1383 - iconv [linux_x64]", DependencyScope.PROVIDED)
libraryDependency("Kotlin/Native 1.3.50-dev-1383 - linux [linux_x64]", DependencyScope.PROVIDED)
libraryDependency("Kotlin/Native 1.3.50-dev-1383 - posix [linux_x64]", DependencyScope.PROVIDED)
libraryDependency("Kotlin/Native 1.3.50-dev-1383 - stdlib", DependencyScope.PROVIDED)
libraryDependency("Kotlin/Native 1.3.50-dev-1383 - zlib [linux_x64]", DependencyScope.PROVIDED)
moduleDependency("project.my-app.commonMain", DependencyScope.TEST)
moduleDependency("project.my-app.commonTest", DependencyScope.TEST)
moduleDependency("project.my-app.linuxAndJsMain", DependencyScope.TEST)
moduleDependency("project.my-app.linuxAndJsTest", DependencyScope.TEST)
moduleDependency("project.my-app.linuxX64Main", DependencyScope.TEST)
sourceFolder("src/linuxX64Test/kotlin", TestSourceKotlinRootType)
sourceFolder("src/linuxX64Test/resources", TestResourceKotlinRootType)
}
}
}
private fun checkProjectStructure(
exhaustiveModuleList: Boolean = true,
exhaustiveSourceSourceRootList: Boolean = true,
@@ -58,7 +239,8 @@ class HierarchicalMultiplatformProjectImportingTest : MultiplePluginVersionGradl
exhaustiveModuleList,
exhaustiveSourceSourceRootList,
exhaustiveDependencyList,
body)
body
)
}
override fun importProject() {
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.idea.facet.KotlinFacet
import org.jetbrains.kotlin.idea.project.isHMPPEnabled
import org.jetbrains.kotlin.idea.project.languageVersionSettings
import org.jetbrains.kotlin.idea.project.platform
import org.jetbrains.kotlin.platform.SimplePlatform
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.presentableDescription
@@ -111,6 +112,25 @@ class ModuleInfo(
}
}
fun targetPlatform(vararg platforms: TargetPlatform) {
val expected = platforms.flatMap { it.componentPlatforms }.toSet()
val actual = module.platform?.componentPlatforms
if (actual == null) {
projectInfo.messageCollector.report("Module '${module.name}': actual target platform is null")
return
}
val notFound = expected.subtract(actual)
if (notFound.isNotEmpty()) {
projectInfo.messageCollector.report("Module '${module.name}': not found target platforms: " + notFound.joinToString(","))
}
val notExpected = actual.subtract(expected)
if (notExpected.isNotEmpty()) {
projectInfo.messageCollector.report("Module '${module.name}': found unexpected target platforms: " + notExpected.joinToString(","))
}
}
fun apiVersion(version: String) {
val actualVersion = module.languageVersionSettings.apiVersion.versionString
if (actualVersion != version) {
@@ -0,0 +1,88 @@
plugins {
// TODO parametrization
kotlin("multiplatform").version("1.3.50-dev-1383")
}
repositories {
maven("https://kotlin.bintray.com/kotlin-dev")
jcenter()
}
group = "project"
version = "1.0"
kotlin {
jvm()
js()
linuxX64()
sourceSets {
val commonMain by getting {
dependencies {
implementation(kotlin("stdlib-common"))
}
}
val commonTest by getting {
dependencies {
implementation(kotlin("test-common"))
implementation(kotlin("test-annotations-common"))
}
}
val jvmAndJsMain by creating {
dependsOn(commonMain)
}
val jvmAndJsTest by creating {
dependsOn(commonTest)
}
val linuxAndJsMain by creating {
dependsOn(commonMain)
}
val linuxAndJsTest by creating {
dependsOn(commonTest)
}
jvm().compilations["main"].defaultSourceSet {
dependsOn(jvmAndJsMain)
dependencies {
implementation(kotlin("stdlib"))
}
}
jvm().compilations["test"].defaultSourceSet {
dependsOn(jvmAndJsTest)
dependencies {
implementation(kotlin("test-junit"))
}
}
js().compilations["main"].defaultSourceSet {
dependsOn(jvmAndJsMain)
dependsOn(linuxAndJsMain)
dependencies {
implementation(kotlin("stdlib-js"))
}
}
js().compilations["test"].defaultSourceSet {
dependsOn(jvmAndJsTest)
dependsOn(linuxAndJsTest)
dependencies {
implementation(kotlin("test-js"))
}
}
linuxX64().compilations["main"].defaultSourceSet {
dependsOn(linuxAndJsMain)
}
linuxX64().compilations["test"].defaultSourceSet {
dependsOn(linuxAndJsTest)
}
}
}
@@ -0,0 +1 @@
kotlin.mpp.enableGranularSourceSetsMetadata=true
@@ -0,0 +1,10 @@
pluginManagement {
repositories {
maven("https://dl.bintray.com/kotlin/kotlin-dev")
gradlePluginPortal()
}
}
rootProject.name = "my-app"
enableFeaturePreview("GRADLE_METADATA")