Do not try to generate 'expect' declarations in multifile classes

Similarly to PackageCodegenImpl#generateFile

 #KT-15754 Fixed
 #KT-17478 Fixed
This commit is contained in:
Alexander Udalov
2017-09-19 17:24:47 +03:00
parent 3f1ee74475
commit 09f36927a5
13 changed files with 70 additions and 22 deletions
@@ -26,6 +26,9 @@ import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase
import org.jetbrains.kotlin.test.util.trimTrailingWhitespacesAndAddNewlineAtEOF
import java.io.File
import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.Paths
abstract class AbstractMultiPlatformIntegrationTest : KtUsefulTestCase() {
fun doTest(directoryPath: String) {
@@ -38,6 +41,11 @@ abstract class AbstractMultiPlatformIntegrationTest : KtUsefulTestCase() {
val tmpdir = KotlinTestUtils.tmpDir(getTestName(true))
val optionalStdlibCommon =
if (InTextDirectivesUtils.isDirectiveDefined(commonSrc.readText(), "WITH_RUNTIME"))
arrayOf("-cp", findStdlibCommon().absolutePath)
else emptyArray()
val commonDest = File(tmpdir, "common").absolutePath
val jvmDest = File(tmpdir, "jvm").absolutePath
val jsDest = File(File(tmpdir, "js"), "output.js").absolutePath
@@ -45,7 +53,7 @@ abstract class AbstractMultiPlatformIntegrationTest : KtUsefulTestCase() {
val result = buildString {
appendln("-- Common --")
appendln(K2MetadataCompiler().compile(listOf(commonSrc), "-d", commonDest))
appendln(K2MetadataCompiler().compile(listOf(commonSrc), "-d", commonDest, *optionalStdlibCommon))
if (jvmSrc.exists()) {
appendln()
@@ -69,6 +77,16 @@ abstract class AbstractMultiPlatformIntegrationTest : KtUsefulTestCase() {
KotlinTestUtils.assertEqualsToFile(File(root, "output.txt"), result.replace('\\', '/'))
}
private fun findStdlibCommon(): File {
// Take kotlin-stdlib-common.jar from dist/ when it's there
val stdlibCommonLibsDir = "libraries/stdlib/common/build/libs"
val commonLibs = Files.newDirectoryStream(Paths.get(stdlibCommonLibsDir)).use(Iterable<Path>::toList)
return commonLibs.sorted().findLast {
val name = it.toFile().name
!name.endsWith("-javadoc.jar") && !name.endsWith("-sources.jar")
}?.toFile() ?: error("kotlin-stdlib-common is not found in $stdlibCommonLibsDir")
}
private fun CLICompiler<*>.compileBothWays(commonSource: File, platformSource: File, vararg mainArguments: String): String {
val configurations = listOf(
listOf(platformSource, commonSource),
@@ -102,6 +102,12 @@ public class MultiPlatformIntegrationTestGenerated extends AbstractMultiPlatform
doTest(fileName);
}
@TestMetadata("jvmMultifileClass")
public void testJvmMultifileClass() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/multiplatform/jvmMultifileClass/");
doTest(fileName);
}
@TestMetadata("missingOverload")
public void testMissingOverload() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/multiplatform/missingOverload/");