[KLIB tool] Run tests for 'dump-metadata' with & without signatures

This commit is contained in:
Dmitriy Dolovov
2023-10-23 22:47:53 +02:00
committed by Space Team
parent aa9b901926
commit 88a297b022
78 changed files with 1888 additions and 13 deletions
@@ -39,7 +39,7 @@ abstract class AbstractNativeCInteropKT39120Test : AbstractNativeCInteropBaseTes
val includeFrameworkArgs = TestCompilerArgs("-compiler-option", "-F${testDataDir.canonicalPath}")
val klib1: KLIB = cinteropToLibrary(targets, def1File, buildDir, includeFrameworkArgs).assertSuccess().resultingArtifact
val metadata1 = klib1.dumpMetadata(kotlinNativeClassLoader.classLoader)
val metadata1 = klib1.dumpMetadata(kotlinNativeClassLoader.classLoader, false, null)
val expectedFiltered1Output = golden1File.readText()
val actualFiltered1Output = filterContentsOutput(metadata1, " pod.Version|POD|class Pod")
@@ -47,7 +47,7 @@ abstract class AbstractNativeCInteropKT39120Test : AbstractNativeCInteropBaseTes
val cinterop2ExtraArgs = TestCompilerArgs("-l", klib1.klibFile.canonicalPath, "-compiler-option", "-fmodules")
val klib2: KLIB = cinteropToLibrary(targets, def2File, buildDir, includeFrameworkArgs + cinterop2ExtraArgs).assertSuccess().resultingArtifact
val metadata2 = klib2.dumpMetadata(kotlinNativeClassLoader.classLoader)
val metadata2 = klib2.dumpMetadata(kotlinNativeClassLoader.classLoader, false, null)
val expectedFiltered2Output = golden2File.readText()
val actualFiltered2Output = filterContentsOutput(metadata2, " pod.Version|POD|class Pod")
@@ -103,7 +103,7 @@ abstract class AbstractNativeCInteropTest : AbstractNativeCInteropBaseTest() {
"Test failed. CInterop compilation result was: $testCompilationResult"
}
} else {
val metadata = testCompilationResult.assertSuccess().resultingArtifact.dumpMetadata(kotlinNativeClassLoader.classLoader)
val metadata = testCompilationResult.assertSuccess().resultingArtifact.dumpMetadata(kotlinNativeClassLoader.classLoader, false, null)
.let {
if (ignoreExperimentalForeignApi) {
it.replace("@ExperimentalForeignApi ", "")
@@ -17,7 +17,9 @@ import org.jetbrains.kotlin.konan.test.blackbox.support.settings.KotlinNativeCla
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.Timeouts
import org.jetbrains.kotlin.konan.test.blackbox.support.util.getAbsoluteFile
import org.jetbrains.kotlin.konan.test.blackbox.support.util.dumpMetadata
import org.jetbrains.kotlin.library.KotlinIrSignatureVersion
import org.jetbrains.kotlin.test.services.JUnit5Assertions.assertEqualsToFile
import org.jetbrains.kotlin.test.utils.withSuffixAndExtension
import org.junit.jupiter.api.Tag
import java.io.File
@@ -33,12 +35,23 @@ abstract class AbstractNativeKlibDumpMetadataTest : AbstractNativeSimpleTest() {
val testCompilationResult: TestCompilationResult.Success<out KLIB> = compileToLibrary(testCase)
val kotlinNativeClassLoader = testRunSettings.get<KotlinNativeClassLoader>()
val metadata = testCompilationResult.assertSuccess().resultingArtifact.dumpMetadata(kotlinNativeClassLoader.classLoader)
val metadataFiltered = filterOutput(metadata)
assertEqualsToFile(
File("${testPathFull.canonicalPath.substringBeforeLast(".")}.txt"),
StringUtilRt.convertLineSeparators(metadataFiltered)
)
val klib: KLIB = testCompilationResult.assertSuccess().resultingArtifact
(KotlinIrSignatureVersion.CURRENTLY_SUPPORTED_VERSIONS + null).forEach { signatureVersion: KotlinIrSignatureVersion? ->
val metadataDump = klib.dumpMetadata(
kotlinNativeClassLoader.classLoader,
printSignatures = signatureVersion != null,
signatureVersion
)
val filteredMetadataDump = StringUtilRt.convertLineSeparators(filterMetadataDump(metadataDump))
val goldenDataFile = testPathFull.withSuffixAndExtension(
suffix = signatureVersion?.let { ".v${it.number}" } ?: "",
extension = "txt"
)
assertEqualsToFile(goldenDataFile, filteredMetadataDump)
}
}
private fun generateTestCaseWithSingleSource(source: File, extraArgs: List<String>): TestCase {
@@ -60,7 +73,7 @@ abstract class AbstractNativeKlibDumpMetadataTest : AbstractNativeSimpleTest() {
}
// Remove intermediate "}\n\npackage ABC {\n" parts.
private fun filterOutput(contents: String): String {
private fun filterMetadataDump(contents: String): String {
var packageLineMet = false
return contents.lineSequence()
.dropWhile { line -> line.isBlank() }
@@ -20,12 +20,16 @@ private fun invokeKlibTool(kotlinNativeClassLoader: ClassLoader, klibFile: File,
}
internal fun TestCompilationArtifact.KLIB.dumpMetadata(kotlinNativeClassLoader: ClassLoader): String = invokeKlibTool(
internal fun TestCompilationArtifact.KLIB.dumpMetadata(
kotlinNativeClassLoader: ClassLoader,
printSignatures: Boolean,
signatureVersion: KotlinIrSignatureVersion?
): String = invokeKlibTool(
kotlinNativeClassLoader = kotlinNativeClassLoader,
klibFile = klibFile,
functionName = "dumpMetadata",
/* printSignatures= */ false,
/* signatureVersion= */ null
/* printSignatures= */ printSignatures,
/* signatureVersion= */ signatureVersion?.let { getSignatureVersionForIsolatedClassLoader(kotlinNativeClassLoader, signatureVersion) }
)
internal fun TestCompilationArtifact.KLIB.dumpIr(