From 5d7e388276737e2f5f7e63bb58d27f71be2eb7f4 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Fri, 27 Mar 2015 08:43:46 +0100 Subject: [PATCH] Fix of KT-7130 --- libraries/stdlib/src/kotlin/io/files/Utils.kt | 2 +- libraries/stdlib/test/io/Files.kt | 47 ++++++++++++++----- 2 files changed, 36 insertions(+), 13 deletions(-) diff --git a/libraries/stdlib/src/kotlin/io/files/Utils.kt b/libraries/stdlib/src/kotlin/io/files/Utils.kt index 2bfc236a600..3530b97cee1 100644 --- a/libraries/stdlib/src/kotlin/io/files/Utils.kt +++ b/libraries/stdlib/src/kotlin/io/files/Utils.kt @@ -307,7 +307,7 @@ public fun File.copyRecursively(dst: File, * * @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] diff --git a/libraries/stdlib/test/io/Files.kt b/libraries/stdlib/test/io/Files.kt index 6e1ff70c135..9359c8ce028 100644 --- a/libraries/stdlib/test/io/Files.kt +++ b/libraries/stdlib/test/io/Files.kt @@ -62,18 +62,21 @@ class FilesTest { } class Walks { - fun createTestFiles(): File { - val basedir = createTempDir() - File(basedir, "1").mkdir() - File(basedir, "1/2".separatorsToSystem()).mkdir() - File(basedir, "1/3".separatorsToSystem()).mkdir() - File(basedir, "1/3/4.txt".separatorsToSystem()).createNewFile() - File(basedir, "1/3/5.txt".separatorsToSystem()).createNewFile() - File(basedir, "6").mkdir() - File(basedir, "7.txt").createNewFile() - File(basedir, "8").mkdir() - File(basedir, "8/9.txt".separatorsToSystem()).createNewFile() - return basedir + + companion object { + fun createTestFiles(): File { + val basedir = createTempDir() + File(basedir, "1").mkdir() + File(basedir, "1/2".separatorsToSystem()).mkdir() + File(basedir, "1/3".separatorsToSystem()).mkdir() + File(basedir, "1/3/4.txt".separatorsToSystem()).createNewFile() + File(basedir, "1/3/5.txt".separatorsToSystem()).createNewFile() + File(basedir, "6").mkdir() + File(basedir, "7.txt").createNewFile() + File(basedir, "8").mkdir() + File(basedir, "8/9.txt".separatorsToSystem()).createNewFile() + return basedir + } } test fun withSimple() { @@ -790,6 +793,26 @@ class FilesTest { assert(!dir.exists()) 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() { val src = createTempDir()