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:
+19
-1
@@ -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),
|
||||
|
||||
+6
@@ -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/");
|
||||
|
||||
Reference in New Issue
Block a user