Fix of KT-7130

This commit is contained in:
Mikhail Glukhikh
2015-03-27 08:43:46 +01:00
committed by Mikhail Glukhikh
parent 1e536af87e
commit 5d7e388276
2 changed files with 36 additions and 13 deletions
@@ -307,7 +307,7 @@ public fun File.copyRecursively(dst: File,
* *
* @return true if the file or directory is successfully deleted, false otherwise. * @return true if the file or directory is successfully deleted, false otherwise.
*/ */
public fun File.deleteRecursively(): Boolean = walkBottomUp().fold(exists(), { res, it -> res && it.delete() }) public fun File.deleteRecursively(): Boolean = walkBottomUp().fold(exists(), { res, it -> it.delete() && res })
/** /**
* Returns an array of files and directories in the directory that match the specified [filter] * Returns an array of files and directories in the directory that match the specified [filter]
+35 -12
View File
@@ -62,18 +62,21 @@ class FilesTest {
} }
class Walks { class Walks {
fun createTestFiles(): File {
val basedir = createTempDir() companion object {
File(basedir, "1").mkdir() fun createTestFiles(): File {
File(basedir, "1/2".separatorsToSystem()).mkdir() val basedir = createTempDir()
File(basedir, "1/3".separatorsToSystem()).mkdir() File(basedir, "1").mkdir()
File(basedir, "1/3/4.txt".separatorsToSystem()).createNewFile() File(basedir, "1/2".separatorsToSystem()).mkdir()
File(basedir, "1/3/5.txt".separatorsToSystem()).createNewFile() File(basedir, "1/3".separatorsToSystem()).mkdir()
File(basedir, "6").mkdir() File(basedir, "1/3/4.txt".separatorsToSystem()).createNewFile()
File(basedir, "7.txt").createNewFile() File(basedir, "1/3/5.txt".separatorsToSystem()).createNewFile()
File(basedir, "8").mkdir() File(basedir, "6").mkdir()
File(basedir, "8/9.txt".separatorsToSystem()).createNewFile() File(basedir, "7.txt").createNewFile()
return basedir File(basedir, "8").mkdir()
File(basedir, "8/9.txt".separatorsToSystem()).createNewFile()
return basedir
}
} }
test fun withSimple() { test fun withSimple() {
@@ -791,6 +794,26 @@ class FilesTest {
assert(!dir.deleteRecursively()) assert(!dir.deleteRecursively())
} }
test fun deleteRecursivelyWithFail() {
val basedir = Walks.createTestFiles()
val restricted = File(basedir, "1")
try {
if (restricted.setReadable(false)) {
if (File(basedir, "7.txt").setReadable(false)) {
basedir.deleteRecursively()
var i = 0
for (file in basedir.walkTopDown()) {
i++
}
assertEquals(7, i)
}
}
} finally {
restricted.setReadable(true)
basedir.deleteRecursively()
}
}
test fun copyRecursively() { test fun copyRecursively() {
val src = createTempDir() val src = createTempDir()
val dst = createTempDir() val dst = createTempDir()