Binary compatibility validation: dump public API of merged stdlib to another file

This commit is contained in:
Ilya Gorbunov
2017-01-20 22:40:27 +03:00
parent 4da4de1104
commit 070f9d9d17
2 changed files with 4029 additions and 7 deletions
@@ -30,11 +30,15 @@ class RuntimePublicAPITest {
val testName = TestName()
@Test fun kotlinRuntime() {
snapshotAPIAndCompare("../../tools/runtime/target", "kotlin-runtime", "runtime-declarations.json", listOf("kotlin.jvm.internal"))
snapshotAPIAndCompare("../../tools/runtime/target", "kotlin-runtime", listOf("runtime-declarations.json"), listOf("kotlin.jvm.internal"))
}
@Test fun kotlinStdlib() {
snapshotAPIAndCompare("../../stdlib/target", "kotlin-stdlib", "stdlib-declarations.json")
snapshotAPIAndCompare("../../stdlib/target", "original-kotlin-stdlib", listOf("stdlib-declarations.json"))
}
@Test fun kotlinStdlibRuntimeMerged() {
snapshotAPIAndCompare("../../stdlib/target", "kotlin-stdlib", listOf("stdlib-declarations.json", "../../tools/runtime/target/runtime-declarations.json"), listOf("kotlin.jvm.internal"))
}
/*
@@ -44,16 +48,17 @@ class RuntimePublicAPITest {
}
*/
private fun snapshotAPIAndCompare(basePath: String, jarPrefix: String, kotlinJvmMappingsPath: String, publicPackages: List<String> = emptyList()) {
private fun snapshotAPIAndCompare(basePath: String, jarPrefix: String, kotlinJvmMappingsPath: List<String>, publicPackages: List<String> = emptyList()) {
val base = File(basePath).absoluteFile.normalize()
val jarFile = getJarPath(base, jarPrefix)
val kotlinJvmMappingsFile = base.resolve(kotlinJvmMappingsPath)
val kotlinJvmMappingsFiles = kotlinJvmMappingsPath.map(base::resolve)
println("Reading kotlin visibilities from $kotlinJvmMappingsFile")
println("Reading kotlin visibilities from $kotlinJvmMappingsFiles")
val publicPackagePrefixes = publicPackages.map { it.replace('.', '/') + '/' }
val visibilities =
readKotlinVisibilities(kotlinJvmMappingsFile)
.filterKeys { name -> publicPackagePrefixes.none { name.startsWith(it) } }
kotlinJvmMappingsFiles
.map { readKotlinVisibilities(it).filterKeys { name -> publicPackagePrefixes.none { name.startsWith(it) } } }
.reduce { m1, m2 -> m1 + m2 }
println("Reading binary API from $jarFile")
val api = getBinaryAPI(JarFile(jarFile), visibilities).filterOutNonPublic()