diff options
Diffstat (limited to 'binary-compatibility-validator/test/CasesPublicAPITest.kt')
-rw-r--r-- | binary-compatibility-validator/test/CasesPublicAPITest.kt | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/binary-compatibility-validator/test/CasesPublicAPITest.kt b/binary-compatibility-validator/test/CasesPublicAPITest.kt new file mode 100644 index 00000000..f0212e70 --- /dev/null +++ b/binary-compatibility-validator/test/CasesPublicAPITest.kt @@ -0,0 +1,98 @@ +/* + * Copyright 2016-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. + */ + +package kotlinx.coroutines.tools + +import org.junit.* +import org.junit.rules.* +import java.io.* + +class CasesPublicAPITest { + + companion object { + val visibilities by lazy { readKotlinVisibilities(File(System.getProperty("testCasesDeclarations")!!)) } + + val baseClassPaths: List<File> = + System.getProperty("testCasesClassesDirs") + .let { requireNotNull(it) { "Specify testCasesClassesDirs with a system property" } } + .split(File.pathSeparator) + .map { File(it, "cases").canonicalFile } + val baseOutputPath = File("test/cases") + } + + @Rule + @JvmField + val testName = TestName() + + @Test + fun companions() { + snapshotAPIAndCompare(testName.methodName) + } + + @Test + fun inline() { + snapshotAPIAndCompare(testName.methodName) + } + + @Test + fun interfaces() { + snapshotAPIAndCompare(testName.methodName) + } + + @Test + fun internal() { + snapshotAPIAndCompare(testName.methodName) + } + + @Test + fun java() { + snapshotAPIAndCompare(testName.methodName) + } + + @Test + fun localClasses() { + snapshotAPIAndCompare(testName.methodName) + } + + @Test + fun nestedClasses() { + snapshotAPIAndCompare(testName.methodName) + } + + @Test + fun private() { + snapshotAPIAndCompare(testName.methodName) + } + + @Test + fun protected() { + snapshotAPIAndCompare(testName.methodName) + } + + @Test + fun public() { + snapshotAPIAndCompare(testName.methodName) + } + + @Test + fun special() { + snapshotAPIAndCompare(testName.methodName) + } + + @Test + fun whenMappings() { + snapshotAPIAndCompare(testName.methodName) + } + + + private fun snapshotAPIAndCompare(testClassRelativePath: String) { + val testClassPaths = baseClassPaths.map { it.resolve(testClassRelativePath) } + val testClasses = testClassPaths.flatMap { it.listFiles().orEmpty().asIterable() } + check(testClasses.isNotEmpty()) { "No class files are found in paths: $testClassPaths" } + val testClassStreams = testClasses.asSequence().filter { it.name.endsWith(".class") }.map { it.inputStream() } + val api = getBinaryAPI(testClassStreams, visibilities).filterOutNonPublic() + val target = baseOutputPath.resolve(testClassRelativePath).resolve(testName.methodName + ".txt") + api.dumpAndCompareWith(target) + } +} |