diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/klib/AbstractKlibABITestCase.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/klib/AbstractKlibABITestCase.kt index 320af13a290..937a493099e 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/klib/AbstractKlibABITestCase.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/klib/AbstractKlibABITestCase.kt @@ -54,7 +54,8 @@ abstract class AbstractKlibABITestCase : KtUsefulTestCase() { buildDir = buildDir, stdlibFile = stdlibFile(), buildKlib = ::buildKlib, - buildBinaryAndRun = ::buildBinaryAndRun + buildBinaryAndRun = ::buildBinaryAndRun, + onNonEmptyBuildDirectory = { directory -> directory.listFiles()?.forEach(File::deleteRecursively) } ) companion object { @@ -63,7 +64,8 @@ abstract class AbstractKlibABITestCase : KtUsefulTestCase() { buildDir: File, stdlibFile: File, buildKlib: (moduleName: String, moduleSourceDir: File, moduleDependencies: Collection, klibFile: File) -> Unit, - buildBinaryAndRun: (mainModuleKlibFile: File, allDependencies: Collection) -> Unit + buildBinaryAndRun: (mainModuleKlibFile: File, allDependencies: Collection) -> Unit, + onNonEmptyBuildDirectory: (directory: File) -> Unit ) { val projectName = testDir.name @@ -111,7 +113,8 @@ abstract class AbstractKlibABITestCase : KtUsefulTestCase() { modification.execute(moduleTestDir, moduleBuildDirs.sourceDir) } - if (klibFile.exists()) klibFile.delete() // TODO: maybe backup? + if (!moduleBuildDirs.outputDir.list().isNullOrEmpty()) + onNonEmptyBuildDirectory(moduleBuildDirs.outputDir) val moduleDependencies = moduleStep.dependencies.map { dependencyName -> if (dependencyName == "stdlib") diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/AbstractNativeKlibABITest.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/AbstractNativeKlibABITest.kt index f735c875376..4889f865f5d 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/AbstractNativeKlibABITest.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/AbstractNativeKlibABITest.kt @@ -36,7 +36,8 @@ abstract class AbstractNativeKlibABITest : AbstractNativeSimpleTest() { buildDir = buildDir, stdlibFile = stdlibFile, buildKlib = ::buildKlib, - buildBinaryAndRun = { _, allDependencies -> buildBinaryAndRun(allDependencies) } + buildBinaryAndRun = { _, allDependencies -> buildBinaryAndRun(allDependencies) }, + onNonEmptyBuildDirectory = ::backupDirectoryContents ) private fun buildKlib(moduleName: String, moduleSourceDir: File, moduleDependencies: Collection, klibFile: File) { @@ -122,5 +123,20 @@ abstract class AbstractNativeKlibABITest : AbstractNativeSimpleTest() { ) private val DEFAULT_EXTRAS = WithTestRunnerExtras(TestRunnerType.DEFAULT) + + private const val BACKED_UP_DIRECTORY_PREFIX = "__backup-" + + private fun backupDirectoryContents(directory: File) { + val filesToBackup = directory.listFiles()?.mapNotNull { file -> + if (file.isDirectory && file.name.startsWith(BACKED_UP_DIRECTORY_PREFIX)) null else file + } + + if (!filesToBackup.isNullOrEmpty()) { + val backupDirectory = directory.resolve("$BACKED_UP_DIRECTORY_PREFIX${System.currentTimeMillis()}__") + backupDirectory.mkdirs() + + filesToBackup.forEach { file -> file.renameTo(backupDirectory.resolve(file.name)) } + } + } } }