[IR, Native] KLIB ABI tests: backup but don't overwrite artifacts

^KT-50775
This commit is contained in:
Dmitriy Dolovov
2022-01-20 18:27:12 +03:00
parent 3648ae222c
commit 7df68af664
2 changed files with 23 additions and 4 deletions
@@ -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<File>, klibFile: File) -> Unit,
buildBinaryAndRun: (mainModuleKlibFile: File, allDependencies: Collection<File>) -> Unit
buildBinaryAndRun: (mainModuleKlibFile: File, allDependencies: Collection<File>) -> 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")
@@ -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<File>, 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)) }
}
}
}
}