Add test (with incorrect work yet) for KT-17374

This commit is contained in:
Mikhail Glukhikh
2017-09-26 14:17:56 +03:00
parent 390de737e7
commit 848a80a266
5 changed files with 43 additions and 6 deletions
@@ -0,0 +1 @@
<error descr="[NO_ACTUAL_FOR_EXPECT] Expected function 'foo' has no actual declaration in module jvm_base for JVM"><error descr="[NO_ACTUAL_FOR_EXPECT] Expected function 'foo' has no actual declaration in module jvm_user for JVM">expect fun foo(): Int</error></error>
@@ -0,0 +1,3 @@
fun bar(): Int {
return 42
}
@@ -0,0 +1,3 @@
fun user(): Int {
return 2 * bar()
}
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime
import org.jetbrains.kotlin.config.JvmTarget
import org.jetbrains.kotlin.config.TargetPlatformKind
import org.jetbrains.kotlin.idea.framework.JSLibraryKind
import org.jetbrains.kotlin.idea.stubs.createFacet
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
import org.jetbrains.kotlin.test.TestJdkKind
@@ -85,4 +86,24 @@ class MultiPlatformHighlightingTest : AbstractMultiModuleHighlightingTest() {
fun ignore_testNestedClassWithoutImpl() {
doMultiPlatformTest(TargetPlatformKind.Jvm[JvmTarget.JVM_1_6])
}
fun testTransitive() {
val commonModule = module("common", TestJdkKind.MOCK_JDK)
commonModule.createFacet(TargetPlatformKind.Common, false)
val jvmPlatform = TargetPlatformKind.Jvm[JvmTarget.JVM_1_6]
val baseModule = module("jvm_base", TestJdkKind.MOCK_JDK)
baseModule.createFacet(jvmPlatform, implementedModuleName = "common")
baseModule.enableMultiPlatform()
baseModule.addDependency(commonModule)
val userModule = module("jvm_user", TestJdkKind.MOCK_JDK)
userModule.createFacet(jvmPlatform)
userModule.enableMultiPlatform()
userModule.addDependency(commonModule)
userModule.addDependency(baseModule)
checkHighlightingInAllFiles()
}
}
@@ -118,15 +118,24 @@ abstract class AbstractMultiModuleTest : DaemonAnalyzerTestCase() {
}
}
fun Module.createFacet(platformKind: TargetPlatformKind<*>? = null, useProjectSettings: Boolean = true) {
fun Module.createFacet(
platformKind: TargetPlatformKind<*>? = null,
useProjectSettings: Boolean = true,
implementedModuleName: String? = null
) {
val accessToken = WriteAction.start()
try {
val modelsProvider = IdeModifiableModelsProviderImpl(project)
getOrCreateFacet(modelsProvider, useProjectSettings).configuration.settings.initializeIfNeeded(
this,
modelsProvider.getModifiableRootModel(this),
platformKind
)
with (getOrCreateFacet(modelsProvider, useProjectSettings).configuration.settings) {
initializeIfNeeded(
this@createFacet,
modelsProvider.getModifiableRootModel(this@createFacet),
platformKind
)
if (implementedModuleName != null) {
this.implementedModuleName = implementedModuleName
}
}
modelsProvider.commit()
}
finally {