diff --git a/build-common/test/org/jetbrains/kotlin/incremental/testingUtils/classFilesComparison.kt b/build-common/test/org/jetbrains/kotlin/incremental/testingUtils/classFilesComparison.kt index b4f4a470bfa..922f9d0dfe4 100644 --- a/build-common/test/org/jetbrains/kotlin/incremental/testingUtils/classFilesComparison.kt +++ b/build-common/test/org/jetbrains/kotlin/incremental/testingUtils/classFilesComparison.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf import org.jetbrains.kotlin.metadata.jvm.deserialization.BitEncoding import org.jetbrains.kotlin.protobuf.ExtensionRegistry import org.jetbrains.kotlin.serialization.js.JsSerializerProtocol +import org.jetbrains.kotlin.serialization.js.KotlinJavascriptSerializationUtil import org.jetbrains.kotlin.utils.KotlinJavascriptMetadata import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils import org.jetbrains.kotlin.utils.Printer @@ -40,7 +41,6 @@ import java.io.* import java.util.* import java.util.zip.CRC32 import java.util.zip.GZIPInputStream -import kotlin.comparisons.compareBy // Set this to true if you want to dump all bytecode (test will fail in this case) private val DUMP_ALL = System.getProperty("comparison.dump.all") == "true" @@ -187,6 +187,23 @@ private fun metaJsToString(metaJsFile: File): String { return out.toString() } +private fun kjsmToString(kjsmFile: File): String { + val out = StringWriter() + + val stream = DataInputStream(kjsmFile.inputStream()) + // Read and skip the metadata version + repeat(stream.readInt()) { stream.readInt() } + + val (header, content) = + DebugJsProtoBuf.Header.parseDelimitedFrom(stream, JsSerializerProtocol.extensionRegistry) to + DebugJsProtoBuf.Library.parseFrom(stream, JsSerializerProtocol.extensionRegistry) + + out.write("\n------ header -----\n$header") + out.write("\n------ library -----\n$content") + + return out.toString() +} + private fun sourceMapFileToString(sourceMapFile: File, generatedJsFile: File): String { val sourceMapParseResult = SourceMapParser.parse(StringReader(sourceMapFile.readText())) return when (sourceMapParseResult) { @@ -217,6 +234,9 @@ private fun fileToStringRepresentation(file: File): String { file.name.endsWith(KotlinJavascriptMetadataUtils.META_JS_SUFFIX) -> { metaJsToString(file) } + file.name.endsWith(KotlinJavascriptSerializationUtil.CLASS_METADATA_FILE_EXTENSION) -> { + kjsmToString(file) + } file.name.endsWith(".js.map") -> { val generatedJsPath = file.canonicalPath.removeSuffix(".map") sourceMapFileToString(file, File(generatedJsPath))