MPP: Add tests for new MPP model import
This commit is contained in:
committed by
Mikhail Glukhikh
parent
ded652382b
commit
7ae740dd91
+330
@@ -0,0 +1,330 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle
|
||||
|
||||
import com.intellij.openapi.roots.*
|
||||
import org.jetbrains.jps.model.java.JavaResourceRootType
|
||||
import org.jetbrains.jps.model.java.JavaSourceRootType
|
||||
import org.jetbrains.kotlin.config.JvmTarget
|
||||
import org.jetbrains.kotlin.config.KotlinResourceRootType
|
||||
import org.jetbrains.kotlin.config.KotlinSourceRootType
|
||||
import org.jetbrains.kotlin.config.TargetPlatformKind
|
||||
import org.jetbrains.kotlin.idea.codeInsight.gradle.GradleImportingTestCase
|
||||
import org.junit.Test
|
||||
import org.junit.runners.Parameterized
|
||||
|
||||
class NewMultiplatformProjectImportingTest : GradleImportingTestCase() {
|
||||
private val kotlinVersion = "1.2.70-dev-1648"
|
||||
|
||||
@Test
|
||||
fun testProjectDependency() {
|
||||
createProjectSubFile(
|
||||
"settings.gradle",
|
||||
"include 'lib', 'app'"
|
||||
)
|
||||
createProjectSubFile(
|
||||
"build.gradle",
|
||||
"""
|
||||
buildscript {
|
||||
repositories {
|
||||
mavenLocal()
|
||||
jcenter()
|
||||
maven { url 'https://dl.bintray.com/kotlin/kotlin-dev' }
|
||||
}
|
||||
dependencies {
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
|
||||
}
|
||||
}
|
||||
|
||||
allprojects {
|
||||
repositories {
|
||||
mavenLocal()
|
||||
jcenter()
|
||||
maven { url 'https://dl.bintray.com/kotlin/kotlin-dev' }
|
||||
}
|
||||
}
|
||||
""".trimIndent()
|
||||
)
|
||||
createProjectSubFile(
|
||||
"app/build.gradle",
|
||||
"""
|
||||
apply plugin: 'kotlin-multiplatform'
|
||||
|
||||
kotlin {
|
||||
sourceSets {
|
||||
commonMain {
|
||||
dependencies {
|
||||
implementation 'org.jetbrains.kotlin:kotlin-stdlib-common'
|
||||
implementation project(':lib')
|
||||
}
|
||||
}
|
||||
main {
|
||||
dependencies {
|
||||
implementation 'org.jetbrains.kotlin:kotlin-stdlib'
|
||||
}
|
||||
}
|
||||
jsMain {
|
||||
dependencies {
|
||||
implementation 'org.jetbrains.kotlin:kotlin-stdlib-js'
|
||||
}
|
||||
}
|
||||
}
|
||||
targets {
|
||||
fromPreset(presets.jvmWithJava, 'jvm')
|
||||
fromPreset(presets.js, 'js')
|
||||
}
|
||||
}
|
||||
|
||||
apply plugin: 'application'
|
||||
mainClassName = 'com.example.app.JvmGreeterKt'
|
||||
""".trimIndent()
|
||||
)
|
||||
createProjectSubFile(
|
||||
"lib/build.gradle",
|
||||
"""
|
||||
apply plugin: 'kotlin-multiplatform'
|
||||
|
||||
kotlin {
|
||||
sourceSets {
|
||||
commonMain {
|
||||
dependencies {
|
||||
implementation 'org.jetbrains.kotlin:kotlin-stdlib-common'
|
||||
}
|
||||
}
|
||||
jvmMain {
|
||||
dependencies {
|
||||
implementation 'org.jetbrains.kotlin:kotlin-stdlib'
|
||||
}
|
||||
}
|
||||
jsMain {
|
||||
dependencies {
|
||||
implementation 'org.jetbrains.kotlin:kotlin-stdlib-js'
|
||||
}
|
||||
}
|
||||
}
|
||||
targets {
|
||||
fromPreset(presets.jvm, 'jvm')
|
||||
fromPreset(presets.js, 'js')
|
||||
}
|
||||
}
|
||||
""".trimIndent()
|
||||
)
|
||||
|
||||
importProject()
|
||||
|
||||
checkProjectStructure() {
|
||||
allModules {
|
||||
languageVersion("1.2")
|
||||
apiVersion("1.2")
|
||||
}
|
||||
|
||||
module("project")
|
||||
module("app")
|
||||
// TODO: Delete metadata modules (after KT-26253 fixed)
|
||||
module("app_metadataMain") {
|
||||
platform(TargetPlatformKind.Common)
|
||||
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:$kotlinVersion", DependencyScope.COMPILE)
|
||||
moduleDependency("app_commonMain", DependencyScope.COMPILE)
|
||||
moduleDependency("lib_metadataMain", DependencyScope.COMPILE)
|
||||
sourceFolder("app/src/metadataMain/kotlin", KotlinSourceRootType.Source)
|
||||
sourceFolder("app/src/metadataMain/resources", KotlinResourceRootType.Resource)
|
||||
outputPath("app/build/classes/kotlin/metadata/main", true)
|
||||
}
|
||||
module("app_metadataTest") {
|
||||
platform(TargetPlatformKind.Common)
|
||||
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:$kotlinVersion", DependencyScope.COMPILE)
|
||||
moduleDependency("app_commonMain", DependencyScope.COMPILE)
|
||||
moduleDependency("app_commonTest", DependencyScope.COMPILE)
|
||||
moduleDependency("app_metadataMain", DependencyScope.COMPILE)
|
||||
moduleDependency("lib_metadataMain", DependencyScope.COMPILE)
|
||||
sourceFolder("app/src/metadataTest/kotlin", KotlinSourceRootType.TestSource)
|
||||
sourceFolder("app/src/metadataTest/resources", KotlinResourceRootType.TestResource)
|
||||
outputPath("app/build/classes/kotlin/metadata/test", false)
|
||||
}
|
||||
module("app_commonMain") {
|
||||
platform(TargetPlatformKind.Common)
|
||||
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:$kotlinVersion", DependencyScope.COMPILE)
|
||||
sourceFolder("app/src/commonMain/kotlin", KotlinSourceRootType.Source)
|
||||
sourceFolder("app/src/commonMain/resources", KotlinResourceRootType.Resource)
|
||||
inheritProjectOutput()
|
||||
}
|
||||
module("app_commonTest") {
|
||||
platform(TargetPlatformKind.Common)
|
||||
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:$kotlinVersion", DependencyScope.COMPILE)
|
||||
moduleDependency("app_commonMain", DependencyScope.COMPILE)
|
||||
sourceFolder("app/src/commonTest/kotlin", KotlinSourceRootType.TestSource)
|
||||
sourceFolder("app/src/commonTest/resources", KotlinResourceRootType.TestResource)
|
||||
inheritProjectOutput()
|
||||
}
|
||||
module("app_jsMain") {
|
||||
platform(TargetPlatformKind.JavaScript)
|
||||
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-js:$kotlinVersion", DependencyScope.COMPILE)
|
||||
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:$kotlinVersion", DependencyScope.COMPILE)
|
||||
moduleDependency("lib_jsMain", DependencyScope.COMPILE)
|
||||
moduleDependency("app_commonMain", DependencyScope.COMPILE)
|
||||
sourceFolder("app/src/jsMain/kotlin", KotlinSourceRootType.Source)
|
||||
sourceFolder("app/src/jsMain/resources", KotlinResourceRootType.Resource)
|
||||
outputPath("app/build/classes/kotlin/js/main", true)
|
||||
}
|
||||
module("app_jsTest") {
|
||||
platform(TargetPlatformKind.JavaScript)
|
||||
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-js:$kotlinVersion", DependencyScope.COMPILE)
|
||||
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:$kotlinVersion", DependencyScope.COMPILE)
|
||||
moduleDependency("lib_jsMain", DependencyScope.COMPILE)
|
||||
moduleDependency("app_commonMain", DependencyScope.COMPILE)
|
||||
moduleDependency("app_commonTest", DependencyScope.COMPILE)
|
||||
moduleDependency("app_jsMain", DependencyScope.COMPILE)
|
||||
sourceFolder("app/src/jsTest/kotlin", KotlinSourceRootType.TestSource)
|
||||
sourceFolder("app/src/jsTest/resources", KotlinResourceRootType.TestResource)
|
||||
outputPath("app/build/classes/kotlin/js/test", false)
|
||||
}
|
||||
module("app_jvmMain") {
|
||||
platform(TargetPlatformKind.Jvm[JvmTarget.JVM_1_6])
|
||||
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion", DependencyScope.COMPILE)
|
||||
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:$kotlinVersion", DependencyScope.COMPILE)
|
||||
libraryDependency("Gradle: org.jetbrains:annotations:13.0", DependencyScope.COMPILE)
|
||||
moduleDependency("lib_jvmMain", DependencyScope.COMPILE)
|
||||
moduleDependency("app_main", DependencyScope.COMPILE)
|
||||
moduleDependency("app_commonMain", DependencyScope.COMPILE)
|
||||
sourceFolder("app/src/jvmMain/kotlin", JavaSourceRootType.SOURCE)
|
||||
sourceFolder("app/src/jvmMain/resources", JavaResourceRootType.RESOURCE)
|
||||
outputPath("app/build/classes/kotlin/jvm/main", true)
|
||||
}
|
||||
module("app_jvmTest") {
|
||||
platform(TargetPlatformKind.Jvm[JvmTarget.JVM_1_6])
|
||||
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion", DependencyScope.COMPILE)
|
||||
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:$kotlinVersion", DependencyScope.COMPILE)
|
||||
libraryDependency("Gradle: org.jetbrains:annotations:13.0", DependencyScope.COMPILE)
|
||||
moduleDependency("lib_jvmMain", DependencyScope.COMPILE)
|
||||
moduleDependency("app_test", DependencyScope.COMPILE)
|
||||
moduleDependency("app_jvmMain", DependencyScope.COMPILE)
|
||||
moduleDependency("app_commonMain", DependencyScope.COMPILE)
|
||||
moduleDependency("app_commonTest", DependencyScope.COMPILE)
|
||||
sourceFolder("app/src/jvmTest/kotlin", JavaSourceRootType.TEST_SOURCE)
|
||||
sourceFolder("app/src/jvmTest/resources", JavaResourceRootType.TEST_RESOURCE)
|
||||
outputPath("app/build/classes/kotlin/jvm/test", false)
|
||||
}
|
||||
module("app_main") {
|
||||
platform(TargetPlatformKind.Jvm[JvmTarget.JVM_1_8])
|
||||
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion", DependencyScope.COMPILE)
|
||||
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:$kotlinVersion", DependencyScope.COMPILE)
|
||||
libraryDependency("Gradle: org.jetbrains:annotations:13.0", DependencyScope.COMPILE)
|
||||
sourceFolder("app/src/main/java", JavaSourceRootType.SOURCE)
|
||||
sourceFolder("app/src/main/kotlin", JavaSourceRootType.SOURCE)
|
||||
sourceFolder("app/src/main/resources", JavaResourceRootType.RESOURCE)
|
||||
inheritProjectOutput()
|
||||
}
|
||||
module("app_test") {
|
||||
platform(TargetPlatformKind.Jvm[JvmTarget.JVM_1_8])
|
||||
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion", DependencyScope.COMPILE)
|
||||
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:$kotlinVersion", DependencyScope.COMPILE)
|
||||
libraryDependency("Gradle: org.jetbrains:annotations:13.0", DependencyScope.COMPILE)
|
||||
moduleDependency("app_main", DependencyScope.COMPILE)
|
||||
sourceFolder("app/src/test/java", JavaSourceRootType.TEST_SOURCE)
|
||||
sourceFolder("app/src/test/kotlin", JavaSourceRootType.TEST_SOURCE)
|
||||
sourceFolder("app/src/test/resources", JavaResourceRootType.TEST_RESOURCE)
|
||||
inheritProjectOutput()
|
||||
}
|
||||
module("lib")
|
||||
module("lib_metadataMain") {
|
||||
platform(TargetPlatformKind.Common)
|
||||
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:$kotlinVersion", DependencyScope.COMPILE)
|
||||
moduleDependency("lib_commonMain", DependencyScope.COMPILE)
|
||||
sourceFolder("lib/src/metadataMain/kotlin", KotlinSourceRootType.Source)
|
||||
sourceFolder("lib/src/metadataMain/resources", KotlinResourceRootType.Resource)
|
||||
outputPath("lib/build/classes/kotlin/metadata/main", true)
|
||||
}
|
||||
module("lib_metadataTest") {
|
||||
platform(TargetPlatformKind.Common)
|
||||
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:$kotlinVersion", DependencyScope.COMPILE)
|
||||
moduleDependency("lib_commonMain", DependencyScope.COMPILE)
|
||||
moduleDependency("lib_commonTest", DependencyScope.COMPILE)
|
||||
moduleDependency("lib_metadataMain", DependencyScope.COMPILE)
|
||||
sourceFolder("lib/src/metadataTest/kotlin", KotlinSourceRootType.TestSource)
|
||||
sourceFolder("lib/src/metadataTest/resources", KotlinResourceRootType.TestResource)
|
||||
outputPath("lib/build/classes/kotlin/metadata/test", false)
|
||||
}
|
||||
module("lib_commonMain") {
|
||||
platform(TargetPlatformKind.Common)
|
||||
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:$kotlinVersion", DependencyScope.COMPILE)
|
||||
sourceFolder("lib/src/commonMain/kotlin", KotlinSourceRootType.Source)
|
||||
sourceFolder("lib/src/commonMain/resources", KotlinResourceRootType.Resource)
|
||||
inheritProjectOutput()
|
||||
}
|
||||
module("lib_commonTest") {
|
||||
platform(TargetPlatformKind.Common)
|
||||
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:$kotlinVersion", DependencyScope.COMPILE)
|
||||
moduleDependency("lib_commonMain", DependencyScope.COMPILE)
|
||||
sourceFolder("lib/src/commonTest/kotlin", KotlinSourceRootType.TestSource)
|
||||
sourceFolder("lib/src/commonTest/resources", KotlinResourceRootType.TestResource)
|
||||
inheritProjectOutput()
|
||||
}
|
||||
module("lib_jsMain") {
|
||||
platform(TargetPlatformKind.JavaScript)
|
||||
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-js:$kotlinVersion", DependencyScope.COMPILE)
|
||||
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:$kotlinVersion", DependencyScope.COMPILE)
|
||||
moduleDependency("lib_commonMain", DependencyScope.COMPILE)
|
||||
sourceFolder("lib/src/jsMain/kotlin", KotlinSourceRootType.Source)
|
||||
sourceFolder("lib/src/jsMain/resources", KotlinResourceRootType.Resource)
|
||||
outputPath("lib/build/classes/kotlin/js/main", true)
|
||||
}
|
||||
module("lib_jsTest") {
|
||||
platform(TargetPlatformKind.JavaScript)
|
||||
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-js:$kotlinVersion", DependencyScope.COMPILE)
|
||||
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:$kotlinVersion", DependencyScope.COMPILE)
|
||||
moduleDependency("lib_commonMain", DependencyScope.COMPILE)
|
||||
moduleDependency("lib_commonTest", DependencyScope.COMPILE)
|
||||
moduleDependency("lib_jsMain", DependencyScope.COMPILE)
|
||||
sourceFolder("lib/src/jsTest/kotlin", KotlinSourceRootType.TestSource)
|
||||
sourceFolder("lib/src/jsTest/resources", KotlinResourceRootType.TestResource)
|
||||
outputPath("lib/build/classes/kotlin/js/test", false)
|
||||
}
|
||||
module("lib_jvmMain") {
|
||||
platform(TargetPlatformKind.Jvm[JvmTarget.JVM_1_6])
|
||||
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion", DependencyScope.COMPILE)
|
||||
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:$kotlinVersion", DependencyScope.COMPILE)
|
||||
libraryDependency("Gradle: org.jetbrains:annotations:13.0", DependencyScope.COMPILE)
|
||||
moduleDependency("lib_commonMain", DependencyScope.COMPILE)
|
||||
sourceFolder("lib/src/jvmMain/kotlin", JavaSourceRootType.SOURCE)
|
||||
sourceFolder("lib/src/jvmMain/resources", JavaResourceRootType.RESOURCE)
|
||||
outputPath("lib/build/classes/kotlin/jvm/main", true)
|
||||
}
|
||||
module("lib_jvmTest") {
|
||||
platform(TargetPlatformKind.Jvm[JvmTarget.JVM_1_6])
|
||||
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion", DependencyScope.COMPILE)
|
||||
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:$kotlinVersion", DependencyScope.COMPILE)
|
||||
libraryDependency("Gradle: org.jetbrains:annotations:13.0", DependencyScope.COMPILE)
|
||||
moduleDependency("lib_commonTest", DependencyScope.COMPILE)
|
||||
moduleDependency("lib_commonMain", DependencyScope.COMPILE)
|
||||
moduleDependency("lib_jvmMain", DependencyScope.COMPILE)
|
||||
sourceFolder("lib/src/jvmTest/kotlin", JavaSourceRootType.TEST_SOURCE)
|
||||
sourceFolder("lib/src/jvmTest/resources", JavaResourceRootType.TEST_RESOURCE)
|
||||
outputPath("lib/build/classes/kotlin/jvm/test", false)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkProjectStructure(body: ProjectInfo.() -> Unit = {}) {
|
||||
checkProjectStructure(myProject, projectPath, body)
|
||||
}
|
||||
|
||||
override fun importProject() {
|
||||
val isCreateEmptyContentRootDirectories = currentExternalProjectSettings.isCreateEmptyContentRootDirectories
|
||||
currentExternalProjectSettings.isCreateEmptyContentRootDirectories = true
|
||||
try {
|
||||
super.importProject()
|
||||
} finally {
|
||||
currentExternalProjectSettings.isCreateEmptyContentRootDirectories = isCreateEmptyContentRootDirectories
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
@Parameterized.Parameters(name = "{index}: with Gradle-{0}")
|
||||
@Throws(Throwable::class)
|
||||
@JvmStatic
|
||||
fun data() = listOf(arrayOf("4.7"))
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,205 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle
|
||||
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.module.ModuleManager
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.project.rootManager
|
||||
import com.intellij.openapi.roots.*
|
||||
import com.intellij.openapi.util.io.FileUtil
|
||||
import org.jetbrains.jps.model.module.JpsModuleSourceRootType
|
||||
import org.jetbrains.jps.util.JpsPathUtil
|
||||
import org.jetbrains.kotlin.config.TargetPlatformKind
|
||||
import org.jetbrains.kotlin.idea.project.languageVersionSettings
|
||||
import org.jetbrains.kotlin.idea.project.targetPlatform
|
||||
|
||||
class MessageCollector {
|
||||
private val builder = StringBuilder()
|
||||
|
||||
fun report(message: String) {
|
||||
builder.append(message).append('\n')
|
||||
}
|
||||
|
||||
fun check() {
|
||||
val message = builder.toString()
|
||||
if (message.isNotEmpty()) {
|
||||
assert(false) { message }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class ProjectInfo(project: Project, private val projectPath: String) {
|
||||
private val messageCollector = MessageCollector()
|
||||
private val moduleManager = ModuleManager.getInstance(project)
|
||||
private val expectedModuleNames = HashSet<String>()
|
||||
private var allModulesAsserter: (ModuleInfo.() -> Unit)? = null
|
||||
|
||||
fun allModules(body: ModuleInfo.() -> Unit) {
|
||||
assert(allModulesAsserter == null)
|
||||
allModulesAsserter = body
|
||||
}
|
||||
|
||||
fun module(name: String, body: ModuleInfo.() -> Unit = {}) {
|
||||
val module = moduleManager.findModuleByName(name)
|
||||
if (module == null) {
|
||||
messageCollector.report("No module found: '$name'")
|
||||
return
|
||||
}
|
||||
val moduleInfo = ModuleInfo(module, messageCollector, projectPath)
|
||||
allModulesAsserter?.let { moduleInfo.it() }
|
||||
moduleInfo.run(body)
|
||||
expectedModuleNames += name
|
||||
}
|
||||
|
||||
fun run(body: ProjectInfo.() -> Unit = {}) {
|
||||
body()
|
||||
|
||||
val actualNames = moduleManager.modules.map { it.name }.sorted()
|
||||
val expectedNames = expectedModuleNames.sorted()
|
||||
if (actualNames != expectedNames) {
|
||||
messageCollector.report("Expected module list $expectedNames doesn't match the actual one: $actualNames")
|
||||
}
|
||||
|
||||
messageCollector.check()
|
||||
}
|
||||
}
|
||||
|
||||
class ModuleInfo(
|
||||
private val module: Module,
|
||||
private val messageCollector: MessageCollector,
|
||||
private val projectPath: String
|
||||
) {
|
||||
private val rootModel = module.rootManager
|
||||
private val expectedDependencyNames = HashSet<String>()
|
||||
private val expectedSourceRoots = HashSet<String>()
|
||||
private val sourceFolderByPath by lazy {
|
||||
rootModel.contentEntries.asSequence()
|
||||
.flatMap { it.sourceFolders.asSequence() }
|
||||
.mapNotNull {
|
||||
val path = it.file?.path ?: return@mapNotNull null
|
||||
FileUtil.getRelativePath(projectPath, path, '/')!! to it
|
||||
}
|
||||
.toMap()
|
||||
}
|
||||
|
||||
fun languageVersion(version: String) {
|
||||
val actualVersion = module.languageVersionSettings.languageVersion.versionString
|
||||
if (actualVersion != version) {
|
||||
messageCollector.report("Module '${module.name}': expected language version '$version' but found '$actualVersion'")
|
||||
}
|
||||
}
|
||||
|
||||
fun apiVersion(version: String) {
|
||||
val actualVersion = module.languageVersionSettings.apiVersion.versionString
|
||||
if (actualVersion != version) {
|
||||
messageCollector.report("Module '${module.name}': expected API version '$version' but found '$actualVersion'")
|
||||
}
|
||||
}
|
||||
|
||||
fun platform(platform: TargetPlatformKind<*>) {
|
||||
val actualPlatform = module.targetPlatform
|
||||
if (actualPlatform != platform) {
|
||||
messageCollector.report(
|
||||
"Module '${module.name}': expected platform '${platform.description}' but found '${actualPlatform?.description}'"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun libraryDependency(libraryName: String, scope: DependencyScope) {
|
||||
val libraryEntry = rootModel.orderEntries.filterIsInstance<LibraryOrderEntry>().singleOrNull { it.libraryName == libraryName }
|
||||
if (libraryEntry == null) {
|
||||
messageCollector.report("Module '${module.name}': No library dependency found: '$libraryName'")
|
||||
return
|
||||
}
|
||||
checkDependencyScope(libraryEntry, scope)
|
||||
expectedDependencyNames += libraryEntry.presentableName
|
||||
}
|
||||
|
||||
fun moduleDependency(moduleName: String, scope: DependencyScope) {
|
||||
val moduleEntry = rootModel.orderEntries.filterIsInstance<ModuleOrderEntry>().singleOrNull { it.moduleName == moduleName }
|
||||
if (moduleEntry == null) {
|
||||
messageCollector.report("Module '${module.name}': No module dependency found: '$moduleName'")
|
||||
return
|
||||
}
|
||||
checkDependencyScope(moduleEntry, scope)
|
||||
expectedDependencyNames += moduleEntry.presentableName
|
||||
}
|
||||
|
||||
fun sourceFolder(pathInProject: String, rootType: JpsModuleSourceRootType<*>) {
|
||||
val sourceFolder = sourceFolderByPath[pathInProject]
|
||||
if (sourceFolder == null) {
|
||||
messageCollector.report("Module '${module.name}': No source folder found: '$pathInProject'")
|
||||
return
|
||||
}
|
||||
expectedSourceRoots += pathInProject
|
||||
val actualRootType = sourceFolder.rootType
|
||||
if (actualRootType != rootType) {
|
||||
messageCollector.report(
|
||||
"Module '${module.name}', source root '$pathInProject': Expected root type $rootType doesn't match the actual one: $actualRootType"
|
||||
)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
fun inheritProjectOutput() {
|
||||
val isInherited = CompilerModuleExtension.getInstance(module)?.isCompilerOutputPathInherited ?: true
|
||||
if (!isInherited) {
|
||||
messageCollector.report("Module '${module.name}': project output is not inherited")
|
||||
}
|
||||
}
|
||||
|
||||
fun outputPath(pathInProject: String, isProduction: Boolean) {
|
||||
val compilerModuleExtension = CompilerModuleExtension.getInstance(module)
|
||||
val url = if (isProduction) compilerModuleExtension?.compilerOutputUrl else compilerModuleExtension?.compilerOutputUrlForTests
|
||||
val actualPathInProject = url?.let {
|
||||
FileUtil.getRelativePath(
|
||||
projectPath,
|
||||
JpsPathUtil.urlToPath(
|
||||
it
|
||||
),
|
||||
'/'
|
||||
)
|
||||
}
|
||||
if (actualPathInProject != pathInProject) {
|
||||
messageCollector.report(
|
||||
"Module '${module.name}': Expected output path $pathInProject doesn't match the actual one: $actualPathInProject"
|
||||
)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
fun run(body: ModuleInfo.() -> Unit = {}) {
|
||||
body()
|
||||
|
||||
val actualDependencyNames = rootModel
|
||||
.orderEntries
|
||||
.filter { it is ModuleOrderEntry || it is LibraryOrderEntry }
|
||||
.map { it.presentableName }
|
||||
.sorted()
|
||||
val expectedDependencyNames = expectedDependencyNames.sorted()
|
||||
if (actualDependencyNames != expectedDependencyNames) {
|
||||
messageCollector.report("Module '${module.name}': Expected dependency list $expectedDependencyNames doesn't match the actual one: $actualDependencyNames")
|
||||
}
|
||||
|
||||
val actualSourceRoots = sourceFolderByPath.keys.sorted()
|
||||
val expectedSourceRoots = expectedSourceRoots.sorted()
|
||||
if (actualSourceRoots != expectedSourceRoots) {
|
||||
messageCollector.report("Module '${module.name}': Expected source root list $expectedSourceRoots doesn't match the actual one: $actualSourceRoots")
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkDependencyScope(library: ExportableOrderEntry, scope: DependencyScope) {
|
||||
val actualScope = library.scope
|
||||
if (actualScope != scope) {
|
||||
messageCollector.report("Module '${module.name}': Dependency '${library.presentableName}': expected scope '$scope' but found '$actualScope'")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun checkProjectStructure(project: Project, projectPath: String, body: ProjectInfo.() -> Unit = {}) {
|
||||
ProjectInfo(project, projectPath).run(body)
|
||||
}
|
||||
Reference in New Issue
Block a user