@@ -14,16 +14,15 @@ import org.spekframework.spek2.lifecycle.TestScope
1414import org.spekframework.spek2.runtime.scope.ScopeImpl
1515import java.io.IOException
1616import java.lang.Integer.MAX_VALUE
17+ import java.nio.file.DirectoryNotEmptyException
1718import java.nio.file.FileVisitResult
1819import java.nio.file.FileVisitResult.CONTINUE
1920import java.nio.file.FileVisitResult.SKIP_SUBTREE
2021import java.nio.file.Files.createDirectories
2122import java.nio.file.Files.createDirectory
2223import java.nio.file.Files.createFile
2324import java.nio.file.Files.delete
24- import java.nio.file.Files.exists
2525import java.nio.file.Files.isDirectory
26- import java.nio.file.Files.list
2726import java.nio.file.Files.walkFileTree
2827import java.nio.file.Path
2928import java.nio.file.Paths
@@ -147,31 +146,34 @@ class DefaultTestFiles internal constructor(): LifecycleListener, TestFiles {
147146 */
148147fun Root.testFiles (): TestFiles = DefaultTestFiles ().also { this .registerListener(it) }
149148
150- private fun clear (path : Path ) {
151- when {
152- isDirectory(path) -> deleteNonGroupFilesRecursively(path)
153- exists(path) -> delete(path)
154- }
155- }
156-
157- private fun deleteNonGroupFilesRecursively (rootDirectory : Path ) {
158- walkFileTree(rootDirectory, object : SimpleFileVisitor <Path >() {
149+ private fun clear (path : Path ) = tolerateDoesNotExist(path) {
150+ walkFileTree(path, object : SimpleFileVisitor <Path >() {
159151 override fun preVisitDirectory (dir : Path ? , attrs : BasicFileAttributes ? ): FileVisitResult {
160152 checkNotNull(dir) { " dir was null" }
161- return if (dir != rootDirectory && SCOPE_DIRECTORY_PATTERN .matches(dir.fileName.toString())) SKIP_SUBTREE
153+ return if (dir != path && SCOPE_DIRECTORY_PATTERN .matches(dir.fileName.toString())) SKIP_SUBTREE
162154 else CONTINUE
163155 }
164156
165157 override fun postVisitDirectory (dir : Path , exc : IOException ? ) =
166- super .postVisitDirectory(dir, exc).also { if (dir != rootDirectory ) deleteIfEmpty(dir) }
158+ super .postVisitDirectory(dir, exc).also { if (dir != path ) deleteIfEmpty(dir) }
167159
168160 override fun visitFile (file : Path , attrs : BasicFileAttributes ? ) =
169- super .visitFile(file, attrs).also { delete(file) }
161+ super .visitFile(file, attrs).also { tolerateDoesNotExist(file) { delete(file) } }
170162 })
171163}
172164
173- private fun deleteIfEmpty (path : Path ) {
174- if (! list(path).findAny().isPresent) {
175- delete(path)
165+ private fun deleteIfEmpty (directory : Path ) = tolerateDoesNotExist(directory) {
166+ try {
167+ delete(directory)
168+ } catch (notEmpty: DirectoryNotEmptyException ) {
169+ // swallow
170+ }
171+ }
172+
173+ private inline fun tolerateDoesNotExist (path : Path , block : (Path ) -> Unit ) {
174+ try {
175+ block(path)
176+ } catch (noSuchFile: java.nio.file.NoSuchFileException ) {
177+ // swallow
176178 }
177179}
0 commit comments