[JS IR] Fix klib fingerprint format

^KT-56961 Fixed
This commit is contained in:
Alexander Korepanov
2023-02-24 17:41:13 +01:00
committed by Space Team
parent e82efa6a7c
commit 4cda89db9e
2 changed files with 38 additions and 0 deletions
@@ -57,6 +57,10 @@ value class SerializedIrFileFingerprint private constructor(val fileFingerprint:
constructor(file: SerializedIrFile) : this(calculateFileFingerprint(file))
constructor(lib: KotlinLibrary, fileIndex: Int) : this(calculateFileFingerprint(lib, fileIndex))
override fun toString(): String {
return fileFingerprint.toString()
}
}
@JvmInline
@@ -96,6 +100,10 @@ value class SerializedKlibFingerprint(val klibFingerprint: FingerprintHash) {
constructor(fileFingerprints: List<SerializedIrFileFingerprint>) : this(fileFingerprints.calculateKlibFingerprint())
constructor(klibFile: File) : this(FingerprintHash(klibFile.calculateKlibHash()))
override fun toString(): String {
return klibFingerprint.toString()
}
}
private const val FILE_FINGERPRINTS_SEPARATOR = " "
@@ -412,6 +412,36 @@ class Kotlin2JsIrGradlePluginIT : AbstractKotlin2JsGradlePluginIT(true) {
build("compileDevelopmentExecutableKotlinJs")
}
}
@DisplayName("klib fingerprints")
@GradleTest
fun testKlibFingerprints(gradleVersion: GradleVersion) {
project("kotlin2JsIrICProject", gradleVersion) {
val fingerprints = Array(2) {
build("compileDevelopmentExecutableKotlinJs")
val manifestLines = projectPath.resolve("build/classes/kotlin/main/default/manifest").readLines()
val serializedKlibFingerprint = manifestLines.singleOrNull { it.startsWith("serializedKlibFingerprint=") }
assertNotNull(serializedKlibFingerprint) { "can not find serializedKlibFingerprint" }
assertTrue("bad serializedKlibFingerprint format '$serializedKlibFingerprint'") {
Regex("serializedKlibFingerprint=[a-z0-9]+\\.[a-z0-9]+").matches(serializedKlibFingerprint)
}
val serializedIrFileFingerprints = manifestLines.singleOrNull { it.startsWith("serializedIrFileFingerprints=") }
assertNotNull(serializedIrFileFingerprints) { "can not find serializedIrFileFingerprints" }
assertTrue("bad serializedIrFileFingerprints format '$serializedIrFileFingerprints'") {
// kotlin2JsIrICProject has 2 files
Regex("serializedIrFileFingerprints=[a-z0-9]+\\.[a-z0-9]+ [a-z0-9]+\\.[a-z0-9]+").matches(serializedIrFileFingerprints)
}
build("clean")
serializedKlibFingerprint to serializedIrFileFingerprints
}
assertEquals(fingerprints[0], fingerprints[1], "fingerprints must be stable")
}
}
}
@JsGradlePluginTests