diff --git a/libraries/tools/binary-compatibility-validator/src/test/kotlin/org.jetbrains.kotlin.tools.tests/RuntimePublicAPITest.kt b/libraries/tools/binary-compatibility-validator/src/test/kotlin/org.jetbrains.kotlin.tools.tests/RuntimePublicAPITest.kt index 2d8aff613d2..d74e7f22dd2 100644 --- a/libraries/tools/binary-compatibility-validator/src/test/kotlin/org.jetbrains.kotlin.tools.tests/RuntimePublicAPITest.kt +++ b/libraries/tools/binary-compatibility-validator/src/test/kotlin/org.jetbrains.kotlin.tools.tests/RuntimePublicAPITest.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.tools.tests import org.jetbrains.kotlin.tools.* +import org.junit.Ignore import org.junit.Rule import org.junit.Test import org.junit.rules.TestName @@ -29,20 +30,31 @@ class RuntimePublicAPITest { val testName = TestName() @Test fun kotlinRuntime() { - snapshotAPIAndCompare("../../tools/runtime/target", "kotlin-runtime-0.1-SNAPSHOT.jar", "runtime-declarations.json") + snapshotAPIAndCompare("../../tools/runtime/target", "kotlin-runtime", "runtime-declarations.json") } @Test fun kotlinStdlib() { - snapshotAPIAndCompare("../../stdlib/target", "kotlin-stdlib-0.1-SNAPSHOT.jar", "stdlib-declarations.json") + snapshotAPIAndCompare("../../stdlib/target", "kotlin-stdlib", "stdlib-declarations.json") } - private fun snapshotAPIAndCompare(basePath: String, jarPath: String, kotlinJvmMappingsPath: String) { - val base = File(basePath).absoluteFile - val visibilities = readKotlinVisibilities(base.resolve(kotlinJvmMappingsPath)) +/* + @Test fun kotlinReflect() { + // requires declaration mapping JSON from kotlin-reflect which isn't built by maven build + snapshotAPIAndCompare("../../tools/kotlin-reflect/target", "kotlin-reflect", "../../../../dist/declarations/reflect-declarations.json ") + } +*/ - // TODO: List jars since version can differ - // TODO: Excluded package list - val api = getBinaryAPI(JarFile(base.resolve(jarPath)), visibilities).filterOutNonPublic() + private fun snapshotAPIAndCompare(basePath: String, jarPrefix: String, kotlinJvmMappingsPath: String) { + val base = File(basePath).absoluteFile.normalize() + val jarFile = getJarPath(base, jarPrefix) + val kotlinJvmMappingsFile = base.resolve(kotlinJvmMappingsPath) + + println("Reading kotlin visibilities from $kotlinJvmMappingsFile") + val visibilities = + readKotlinVisibilities(kotlinJvmMappingsFile) + + println("Reading binary API from $jarFile") + val api = getBinaryAPI(JarFile(jarFile), visibilities).filterOutNonPublic() val target = File("src/test/resources/output") .resolve(testName.methodName.replaceCamelCaseWithDashedLowerCase() + ".txt") @@ -50,5 +62,15 @@ class RuntimePublicAPITest { api.dumpAndCompareWith(target) } + private fun getJarPath(base: File, jarPrefix: String): File { + val files = (base.listFiles() ?: throw Exception("Cannot list files in $base")) + .filter { it.name.let { + it.startsWith(jarPrefix) && it.endsWith(".jar") + && !it.endsWith("-sources.jar") + && !it.endsWith("-javadoc.jar") }} + + return files.singleOrNull() ?: throw Exception("No single file matching $jarPrefix in $base: $files") + } + }