diff --git a/compiler/testData/jvmPackageTable/simple/AnotherFooMultiFilePart1.kt b/compiler/testData/jvmPackageTable/simple/AnotherFooMultiFilePart1.kt new file mode 100644 index 00000000000..e6123c6ccf2 --- /dev/null +++ b/compiler/testData/jvmPackageTable/simple/AnotherFooMultiFilePart1.kt @@ -0,0 +1,6 @@ +@file:JvmMultifileClass +@file:JvmName("AnotherMultiFoo") + +package foo + +fun anotherMultiFile1() {} diff --git a/compiler/testData/jvmPackageTable/simple/BarFileFacade1.kt b/compiler/testData/jvmPackageTable/simple/BarFileFacade1.kt new file mode 100644 index 00000000000..e2f4ddb4391 --- /dev/null +++ b/compiler/testData/jvmPackageTable/simple/BarFileFacade1.kt @@ -0,0 +1,3 @@ +package bar + +fun file1() {} diff --git a/compiler/testData/jvmPackageTable/simple/BarMultiFilePart1.kt b/compiler/testData/jvmPackageTable/simple/BarMultiFilePart1.kt new file mode 100644 index 00000000000..28677dc7afc --- /dev/null +++ b/compiler/testData/jvmPackageTable/simple/BarMultiFilePart1.kt @@ -0,0 +1,6 @@ +@file:JvmMultifileClass +@file:JvmName("MultiBar") + +package bar + +fun multiFile1() {} diff --git a/compiler/testData/jvmPackageTable/simple/BarMultiFilePart2.kt b/compiler/testData/jvmPackageTable/simple/BarMultiFilePart2.kt new file mode 100644 index 00000000000..5c51c524d85 --- /dev/null +++ b/compiler/testData/jvmPackageTable/simple/BarMultiFilePart2.kt @@ -0,0 +1,6 @@ +@file:JvmMultifileClass +@file:JvmName("MultiBar") + +package bar + +fun multiFile2() {} diff --git a/compiler/testData/jvmPackageTable/simple/FooFileFacade1.kt b/compiler/testData/jvmPackageTable/simple/FooFileFacade1.kt new file mode 100644 index 00000000000..ffa0ca17992 --- /dev/null +++ b/compiler/testData/jvmPackageTable/simple/FooFileFacade1.kt @@ -0,0 +1,3 @@ +package foo + +fun file1() {} diff --git a/compiler/testData/jvmPackageTable/simple/FooFileFacade2.kt b/compiler/testData/jvmPackageTable/simple/FooFileFacade2.kt new file mode 100644 index 00000000000..41ad3fe5961 --- /dev/null +++ b/compiler/testData/jvmPackageTable/simple/FooFileFacade2.kt @@ -0,0 +1,3 @@ +package foo + +fun file2() {} diff --git a/compiler/testData/jvmPackageTable/simple/FooMultiFilePart1.kt b/compiler/testData/jvmPackageTable/simple/FooMultiFilePart1.kt new file mode 100644 index 00000000000..7383c86fb4e --- /dev/null +++ b/compiler/testData/jvmPackageTable/simple/FooMultiFilePart1.kt @@ -0,0 +1,6 @@ +@file:JvmMultifileClass +@file:JvmName("MultiFoo") + +package foo + +fun multiFile1() {} diff --git a/compiler/testData/jvmPackageTable/simple/FooMultiFilePart2.kt b/compiler/testData/jvmPackageTable/simple/FooMultiFilePart2.kt new file mode 100644 index 00000000000..f0c51517028 --- /dev/null +++ b/compiler/testData/jvmPackageTable/simple/FooMultiFilePart2.kt @@ -0,0 +1,6 @@ +@file:JvmMultifileClass +@file:JvmName("MultiFoo") + +package foo + +fun multiFile2() {} diff --git a/compiler/testData/jvmPackageTable/simple/jvm-package-table.txt b/compiler/testData/jvmPackageTable/simple/jvm-package-table.txt new file mode 100644 index 00000000000..d240da53c10 --- /dev/null +++ b/compiler/testData/jvmPackageTable/simple/jvm-package-table.txt @@ -0,0 +1,10 @@ +bar + MultiBar__BarMultiFilePart1Kt (MultiBar) + MultiBar__BarMultiFilePart2Kt (MultiBar) + BarFileFacade1Kt +foo + AnotherMultiFoo__AnotherFooMultiFilePart1Kt (AnotherMultiFoo) + MultiFoo__FooMultiFilePart1Kt (MultiFoo) + MultiFoo__FooMultiFilePart2Kt (MultiFoo) + FooFileFacade1Kt + FooFileFacade2Kt diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/JvmPackageTableTest.kt b/compiler/tests/org/jetbrains/kotlin/codegen/JvmPackageTableTest.kt new file mode 100644 index 00000000000..a7cd31600f8 --- /dev/null +++ b/compiler/tests/org/jetbrains/kotlin/codegen/JvmPackageTableTest.kt @@ -0,0 +1,65 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.codegen + +import org.jetbrains.kotlin.cli.AbstractCliTest +import org.jetbrains.kotlin.cli.common.ExitCode +import org.jetbrains.kotlin.cli.jvm.K2JVMCompiler +import org.jetbrains.kotlin.load.kotlin.ModuleMapping +import org.jetbrains.kotlin.test.KotlinTestUtils +import org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase +import java.io.File + +class JvmPackageTableTest : KtUsefulTestCase() { + private fun doTest(relativeDirectory: String) { + val directory = KotlinTestUtils.getTestDataPathBase() + relativeDirectory + val tmpdir = KotlinTestUtils.tmpDir(this::class.simpleName) + + val moduleName = "main" + val (output, exitCode) = AbstractCliTest.executeCompilerGrabOutput(K2JVMCompiler(), listOf( + directory, + "-d", tmpdir.path, + "-module-name", moduleName + )) + System.err.println(output) // normally output is empty + assertEquals("Compilation should complete successfully", ExitCode.OK, exitCode) + + val mapping = ModuleMapping.create(File(tmpdir, "META-INF/$moduleName.${ModuleMapping.MAPPING_FILE_EXT}").readBytes(), "test") + val result = buildString { + for ((fqName, packageParts) in mapping.packageFqName2Parts) { + appendln(fqName) + for (part in packageParts.parts) { + append(" ") + append(part) + val facadeName = packageParts.getMultifileFacadeName(part) + if (facadeName != null) { + append(" (") + append(facadeName) + append(")") + } + appendln() + } + } + } + + KotlinTestUtils.assertEqualsToFile(File(directory, "jvm-package-table.txt"), result) + } + + fun testSimple() { + doTest("/jvmPackageTable/simple") + } +}