From 9b4f503fbe62c641fb36e5252f62025d79785a9a Mon Sep 17 00:00:00 2001 From: Vladimir Sukharev Date: Thu, 29 Feb 2024 09:59:06 +0100 Subject: [PATCH] [Tests] Port KotlinKlibSerializerTest to K2 ^KT-64440 Fixed --- .../compileTimeConstants.fir.txt | 50 +++++++++++++++++++ .../klib/KotlinKlibSerializerTest.kt | 46 +++++++---------- 2 files changed, 67 insertions(+), 29 deletions(-) create mode 100644 compiler/testData/serialization/builtinsSerializer/compileTimeConstants.fir.txt diff --git a/compiler/testData/serialization/builtinsSerializer/compileTimeConstants.fir.txt b/compiler/testData/serialization/builtinsSerializer/compileTimeConstants.fir.txt new file mode 100644 index 00000000000..9a3585530ec --- /dev/null +++ b/compiler/testData/serialization/builtinsSerializer/compileTimeConstants.fir.txt @@ -0,0 +1,50 @@ +package test + +public val a: kotlin.Int = 10 +public val arrayConst: kotlin.Any = {1.toByte(), 2.toByte()} +public val b: kotlin.Int +public val booleanConst: kotlin.Boolean = true +public val byteConst: kotlin.Byte = 10.toByte() +public val charConst: kotlin.Char = \u0041 ('A') +public val doubleConst: kotlin.Double = 3.0.toDouble() +public val enumConst: test.Weapon? = Weapon.ROCK +public val floatConst: kotlin.Float = 2.0.toFloat() +public val intConst: kotlin.Int = 30 +public val longConst: kotlin.Long = 40.toLong() +public val shortConst: kotlin.Short = 20.toShort() +public val stringConst: kotlin.String = "abcd" + +public final class Class { + public constructor Class() + public final val a: kotlin.Int = 10 + public final val arrayConst: kotlin.Any = {1.toByte(), 2.toByte()} + public final val b: kotlin.Int + public final val booleanConst: kotlin.Boolean = true + public final val byteConst: kotlin.Byte = 10.toByte() + public final val charConst: kotlin.Char = \u0041 ('A') + public final val doubleConst: kotlin.Double = 3.0.toDouble() + public final val enumConst: test.Weapon? = Weapon.ROCK + public final val floatConst: kotlin.Float = 2.0.toFloat() + public final val intConst: kotlin.Int = 30 + public final val longConst: kotlin.Long = 40.toLong() + public final val shortConst: kotlin.Short = 20.toShort() + public final val stringConst: kotlin.String = "abcd" +} + +public final enum class Weapon : kotlin.Enum { + enum entry ROCK + + enum entry PAPER + + enum entry SCISSORS + + private constructor Weapon() + @kotlin.internal.IntrinsicConstEvaluation public final override /*1*/ /*fake_override*/ val name: kotlin.String + public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int + protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any + public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: test.Weapon): kotlin.Int + + // Static members + public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): test.Weapon + public final /*synthesized*/ fun values(): kotlin.Array +} diff --git a/compiler/tests/org/jetbrains/kotlin/serialization/klib/KotlinKlibSerializerTest.kt b/compiler/tests/org/jetbrains/kotlin/serialization/klib/KotlinKlibSerializerTest.kt index fdaf7a8e84e..fc485f8bb4b 100644 --- a/compiler/tests/org/jetbrains/kotlin/serialization/klib/KotlinKlibSerializerTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/serialization/klib/KotlinKlibSerializerTest.kt @@ -16,53 +16,39 @@ package org.jetbrains.kotlin.serialization.klib -import com.intellij.openapi.util.Disposer -import com.intellij.openapi.util.io.FileUtil -import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys -import org.jetbrains.kotlin.cli.common.config.addKotlinSourceRoots -import org.jetbrains.kotlin.cli.common.messages.MessageCollector -import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles -import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment -import org.jetbrains.kotlin.config.CommonConfigurationKeys -import org.jetbrains.kotlin.config.CompilerConfiguration -import org.jetbrains.kotlin.config.languageVersionSettings -import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl -import org.jetbrains.kotlin.incremental.components.LookupTracker -import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS -import org.jetbrains.kotlin.js.config.JSConfigurationKeys -import org.jetbrains.kotlin.js.config.JsConfig -import org.jetbrains.kotlin.js.resolve.JsPlatformAnalyzerServices +import org.jetbrains.kotlin.cli.metadata.K2MetadataCompiler +import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime import org.jetbrains.kotlin.jvm.compiler.LoadDescriptorUtil.TEST_PACKAGE_FQNAME -import org.jetbrains.kotlin.resolve.CompilerEnvironment -import org.jetbrains.kotlin.serialization.NonStableParameterNamesSerializationTest -import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfiguration -import org.jetbrains.kotlin.serialization.js.KotlinJavascriptSerializationUtil.readModuleAsProto -import org.jetbrains.kotlin.storage.LockBasedStorageManager +import org.jetbrains.kotlin.test.CompilerTestUtil import org.jetbrains.kotlin.test.KlibTestUtil -import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.TestCaseWithTmpdir import org.jetbrains.kotlin.test.util.RecursiveDescriptorComparator import org.jetbrains.kotlin.test.util.RecursiveDescriptorComparatorAdaptor -import org.jetbrains.kotlin.utils.JsMetadataVersion -import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils -import org.jetbrains.kotlin.utils.sure import java.io.File class KotlinKlibSerializerTest : TestCaseWithTmpdir() { private val BASE_DIR = "compiler/testData/serialization" - private fun doTest(fileName: String) { + private fun doTest(fileName: String, goldenDataExtension: String = ".txt") { val source = "$BASE_DIR/$fileName" val klibName = File(source).nameWithoutExtension val klibFile = File(tmpdir, "$klibName.klib") - KlibTestUtil.compileCommonSourcesToKlib(listOf(File(source)), klibName, klibFile) + + CompilerTestUtil.executeCompilerAssertSuccessful(K2MetadataCompiler(), listOf( + File(source).absolutePath, + "-d", klibFile.absolutePath, + "-module-name", klibName, + // support for the legacy version of kotlin-stdlib-common (JAR with .kotlin_metadata) + "-classpath", ForTestCompileRuntime.stdlibCommonForTests().absolutePath + ) + ) val module = KlibTestUtil.deserializeKlibToCommonModule(klibFile) RecursiveDescriptorComparatorAdaptor.validateAndCompareDescriptorWithFile( module.getPackage(TEST_PACKAGE_FQNAME), RecursiveDescriptorComparator.DONT_INCLUDE_METHODS_OF_OBJECT, - File(source.replace(".kt", ".txt")) + File(source.replace(".kt", goldenDataExtension)) ) } @@ -75,7 +61,9 @@ class KotlinKlibSerializerTest : TestCaseWithTmpdir() { } fun testCompileTimeConstants() { - doTest("builtinsSerializer/compileTimeConstants.kt") + // After implementation of https://youtrack.jetbrains.com/issue/KT-65805/Migrate-builtins-serializer-to-K2, + // compileTimeConstants.txt will be same as compileTimeConstants.fir.txt. So, it would be worthwhile to unify them. + doTest("builtinsSerializer/compileTimeConstants.kt", ".fir.txt") } fun testAnnotationTargets() {