Cleanup more test files and directories after tests

#KT-19192
This commit is contained in:
Ilya Gorbunov
2020-10-23 03:00:26 +03:00
parent fe098ec821
commit 0fa2cc15de
3 changed files with 176 additions and 162 deletions
@@ -0,0 +1,34 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package kotlin.jdk7.test
import java.nio.file.Path
import kotlin.io.path.deleteIfExists
import kotlin.test.*
abstract class AbstractPathTest {
private val cleanUpActions = mutableListOf<Pair<Path, (Path) -> Unit>>()
fun Path.cleanup(): Path {
cleanUpActions.add(this to { it.deleteIfExists() })
return this
}
fun Path.cleanupRecursively(): Path {
cleanUpActions.add(this to { it.toFile().deleteRecursively() })
return this
}
@AfterTest
fun cleanUp() {
for ((path, action) in cleanUpActions) {
try {
action(path)
} catch (e: Throwable) {
println("Failed to execute cleanup action for $path")
}
}
}
}
+135 -151
View File
@@ -12,7 +12,7 @@ import kotlin.io.path.*
import kotlin.random.Random import kotlin.random.Random
import kotlin.test.* import kotlin.test.*
class PathExtensionsTest { class PathExtensionsTest : AbstractPathTest() {
private val isCaseInsensitiveFileSystem = Path("C:/") == Path("c:/") private val isCaseInsensitiveFileSystem = Path("C:/") == Path("c:/")
private val isBackslashSeparator = FileSystems.getDefault().separator == "\\" private val isBackslashSeparator = FileSystems.getDefault().separator == "\\"
@@ -46,7 +46,7 @@ class PathExtensionsTest {
@Test @Test
fun createNewFile() { fun createNewFile() {
val dir = createTempDirectory() val dir = createTempDirectory().cleanupRecursively()
val file = dir / "new-file" val file = dir / "new-file"
@@ -61,163 +61,152 @@ class PathExtensionsTest {
@Test @Test
fun copyTo() { fun copyTo() {
val srcFile = createTempFile() val root = createTempDirectory("copyTo-root").cleanupRecursively()
val dstFile = createTempFile() val srcFile = createTempFile(root, "src")
try { val dstFile = createTempFile(root, "dst")
srcFile.writeText("Hello, World!")
assertFailsWith<FileAlreadyExistsException>("copy do not overwrite existing file") {
srcFile.copyTo(dstFile)
}
var dst = srcFile.copyTo(dstFile, overwrite = true) srcFile.writeText("Hello, World!")
assertSame(dst, dstFile) assertFailsWith<FileAlreadyExistsException>("copy do not overwrite existing file") {
compareFiles(srcFile, dst, "copy with overwrite over existing file") srcFile.copyTo(dstFile)
}
srcFile.copyTo(srcFile) var dst = srcFile.copyTo(dstFile, overwrite = true)
srcFile.copyTo(srcFile, overwrite = true) assertSame(dst, dstFile)
compareFiles(dst, srcFile, "copying file to itself leaves it intact") compareFiles(srcFile, dst, "copy with overwrite over existing file")
assertTrue(dstFile.deleteIfExists()) srcFile.copyTo(srcFile)
dst = srcFile.copyTo(dstFile) srcFile.copyTo(srcFile, overwrite = true)
compareFiles(srcFile, dst, "copy to new file") compareFiles(dst, srcFile, "copying file to itself leaves it intact")
val subDst = dstFile.resolve("foo/bar") assertTrue(dstFile.deleteIfExists())
assertFailsWith<FileSystemException> { srcFile.copyTo(subDst) } dst = srcFile.copyTo(dstFile)
assertFailsWith<FileSystemException> { srcFile.copyTo(subDst, overwrite = true) } compareFiles(srcFile, dst, "copy to new file")
assertTrue(dstFile.deleteIfExists())
assertFailsWith<FileSystemException> { srcFile.copyTo(subDst) }
dstFile.createDirectory() val subDst = dstFile.resolve("foo/bar")
val child = dstFile.resolve("child").createFile() assertFailsWith<FileSystemException> { srcFile.copyTo(subDst) }
assertFailsWith<DirectoryNotEmptyException>("copy with overwrite do not overwrite non-empty dir") { assertFailsWith<FileSystemException> { srcFile.copyTo(subDst, overwrite = true) }
srcFile.copyTo(dstFile, overwrite = true) assertTrue(dstFile.deleteIfExists())
} assertFailsWith<FileSystemException> { srcFile.copyTo(subDst) }
child.deleteExisting()
dstFile.createDirectory()
val child = dstFile.resolve("child").createFile()
assertFailsWith<DirectoryNotEmptyException>("copy with overwrite do not overwrite non-empty dir") {
srcFile.copyTo(dstFile, overwrite = true) srcFile.copyTo(dstFile, overwrite = true)
assertEquals(srcFile.readText(), dstFile.readText(), "copy with overwrite over empty dir") }
child.deleteExisting()
assertTrue(srcFile.deleteIfExists()) srcFile.copyTo(dstFile, overwrite = true)
assertTrue(dstFile.deleteIfExists()) assertEquals(srcFile.readText(), dstFile.readText(), "copy with overwrite over empty dir")
assertFailsWith<NoSuchFileException> { assertTrue(srcFile.deleteIfExists())
srcFile.copyTo(dstFile) assertTrue(dstFile.deleteIfExists())
}
srcFile.createDirectory() assertFailsWith<NoSuchFileException> {
srcFile.resolve("somefile").writeText("some content") srcFile.copyTo(dstFile)
dstFile.writeText("") }
assertFailsWith<FileAlreadyExistsException>("copy dir do not overwrite file") {
srcFile.copyTo(dstFile) srcFile.createDirectory()
} srcFile.resolve("somefile").writeText("some content")
dstFile.writeText("")
assertFailsWith<FileAlreadyExistsException>("copy dir do not overwrite file") {
srcFile.copyTo(dstFile)
}
srcFile.copyTo(dstFile, overwrite = true)
assertTrue(dstFile.isDirectory())
assertTrue(dstFile.listDirectoryEntries().isEmpty(), "only directory is copied, but not its content")
assertFailsWith<FileAlreadyExistsException>("copy dir do not overwrite dir") {
srcFile.copyTo(dstFile)
}
srcFile.copyTo(dstFile, overwrite = true)
assertTrue(dstFile.isDirectory())
assertTrue(dstFile.listDirectoryEntries().isEmpty(), "only directory is copied, but not its content")
dstFile.resolve("somefile2").writeText("some content2")
assertFailsWith<DirectoryNotEmptyException>("copy dir do not overwrite non-empty dir") {
srcFile.copyTo(dstFile, overwrite = true) srcFile.copyTo(dstFile, overwrite = true)
assertTrue(dstFile.isDirectory())
assertTrue(dstFile.listDirectoryEntries().isEmpty(), "only directory is copied, but not its content")
assertFailsWith<FileAlreadyExistsException>("copy dir do not overwrite dir") {
srcFile.copyTo(dstFile)
}
srcFile.copyTo(dstFile, overwrite = true)
assertTrue(dstFile.isDirectory())
assertTrue(dstFile.listDirectoryEntries().isEmpty(), "only directory is copied, but not its content")
dstFile.resolve("somefile2").writeText("some content2")
assertFailsWith<DirectoryNotEmptyException>("copy dir do not overwrite non-empty dir") {
srcFile.copyTo(dstFile, overwrite = true)
}
} finally {
srcFile.toFile().deleteRecursively()
dstFile.toFile().deleteRecursively()
} }
} }
@Test @Test
fun copyToNameWithoutParent() { fun copyToNameWithoutParent() {
val currentDir = Path("").toAbsolutePath() val currentDir = Path("").toAbsolutePath()
val srcFile = createTempFile() val srcFile = createTempFile().cleanup()
val dstFile = createTempFile(directory = currentDir) val dstFile = createTempFile(directory = currentDir).cleanup()
try {
srcFile.writeText("Hello, World!", Charsets.UTF_8)
dstFile.deleteExisting()
val dstRelative = Path(dstFile.name) srcFile.writeText("Hello, World!", Charsets.UTF_8)
dstFile.deleteExisting()
srcFile.copyTo(dstRelative) val dstRelative = Path(dstFile.name)
assertEquals(srcFile.readText(), dstFile.readText()) srcFile.copyTo(dstRelative)
} finally {
dstFile.deleteExisting() assertEquals(srcFile.readText(), dstFile.readText())
srcFile.deleteExisting()
}
} }
@Test @Test
fun moveTo() { fun moveTo() {
val original = createTempFile() val root = createTempDirectory("moveTo-root").cleanupRecursively()
val srcFile = createTempFile() val original = createTempFile(root, "original")
val dstFile = createTempFile() val srcFile = createTempFile(root, "src")
val dstFile = createTempFile(root, "dst")
fun restoreSrcFile() { original.copyTo(srcFile, overwrite = true) } fun restoreSrcFile() { original.copyTo(srcFile, overwrite = true) }
try { original.writeText("Hello, World!")
original.writeText("Hello, World!") restoreSrcFile()
restoreSrcFile()
assertFailsWith<FileAlreadyExistsException>("do not overwrite existing file") { assertFailsWith<FileAlreadyExistsException>("do not overwrite existing file") {
srcFile.moveTo(dstFile) srcFile.moveTo(dstFile)
}
var dst = srcFile.moveTo(dstFile, overwrite = true)
assertSame(dst, dstFile)
compareFiles(original, dst, "move with overwrite over existing file")
assertTrue(srcFile.notExists())
restoreSrcFile()
srcFile.moveTo(srcFile)
srcFile.moveTo(srcFile, overwrite = true)
compareFiles(original, srcFile, "move file to itself leaves it intact")
assertTrue(dstFile.deleteIfExists())
dst = srcFile.moveTo(dstFile)
compareFiles(original, dst, "move to new file")
restoreSrcFile()
val subDst = dstFile.resolve("foo/bar")
assertFailsWith<FileSystemException> { srcFile.moveTo(subDst) }
assertFailsWith<FileSystemException> { srcFile.moveTo(subDst, overwrite = true) }
assertTrue(dstFile.deleteIfExists())
assertFailsWith<FileSystemException> { srcFile.moveTo(subDst) }
dstFile.createDirectory()
val child = dstFile.resolve("child").createFile()
assertFailsWith<DirectoryNotEmptyException>("move with overwrite do not overwrite non-empty dir") {
srcFile.moveTo(dstFile, overwrite = true)
}
child.deleteExisting()
srcFile.moveTo(dstFile, overwrite = true)
compareFiles(original, dstFile, "move with overwrite over empty dir")
assertTrue(srcFile.notExists())
assertTrue(dstFile.deleteIfExists())
assertFailsWith<NoSuchFileException> {
srcFile.moveTo(dstFile)
}
srcFile.createDirectory()
srcFile.resolve("somefile").writeText("some content")
dstFile.writeText("")
assertFailsWith<FileAlreadyExistsException>("move dir do not overwrite file") {
srcFile.moveTo(dstFile)
}
srcFile.moveTo(dstFile, overwrite = true)
assertTrue(dstFile.isDirectory())
assertEquals(listOf(dstFile / "somefile"), dstFile.listDirectoryEntries(), "directory is moved with its content")
} finally {
srcFile.toFile().deleteRecursively()
dstFile.toFile().deleteRecursively()
} }
var dst = srcFile.moveTo(dstFile, overwrite = true)
assertSame(dst, dstFile)
compareFiles(original, dst, "move with overwrite over existing file")
assertTrue(srcFile.notExists())
restoreSrcFile()
srcFile.moveTo(srcFile)
srcFile.moveTo(srcFile, overwrite = true)
compareFiles(original, srcFile, "move file to itself leaves it intact")
assertTrue(dstFile.deleteIfExists())
dst = srcFile.moveTo(dstFile)
compareFiles(original, dst, "move to new file")
restoreSrcFile()
val subDst = dstFile.resolve("foo/bar")
assertFailsWith<FileSystemException> { srcFile.moveTo(subDst) }
assertFailsWith<FileSystemException> { srcFile.moveTo(subDst, overwrite = true) }
assertTrue(dstFile.deleteIfExists())
assertFailsWith<FileSystemException> { srcFile.moveTo(subDst) }
dstFile.createDirectory()
val child = dstFile.resolve("child").createFile()
assertFailsWith<DirectoryNotEmptyException>("move with overwrite do not overwrite non-empty dir") {
srcFile.moveTo(dstFile, overwrite = true)
}
child.deleteExisting()
srcFile.moveTo(dstFile, overwrite = true)
compareFiles(original, dstFile, "move with overwrite over empty dir")
assertTrue(srcFile.notExists())
assertTrue(dstFile.deleteIfExists())
assertFailsWith<NoSuchFileException> {
srcFile.moveTo(dstFile)
}
srcFile.createDirectory()
srcFile.resolve("somefile").writeText("some content")
dstFile.writeText("")
assertFailsWith<FileAlreadyExistsException>("move dir do not overwrite file") {
srcFile.moveTo(dstFile)
}
srcFile.moveTo(dstFile, overwrite = true)
assertTrue(dstFile.isDirectory())
assertEquals(listOf(dstFile / "somefile"), dstFile.listDirectoryEntries(), "directory is moved with its content")
} }
private fun compareFiles(src: Path, dst: Path, message: String? = null) { private fun compareFiles(src: Path, dst: Path, message: String? = null) {
@@ -231,7 +220,7 @@ class PathExtensionsTest {
@Test @Test
fun fileSize() { fun fileSize() {
val file = createTempFile() val file = createTempFile().cleanup()
assertEquals(0, file.fileSize()) assertEquals(0, file.fileSize())
file.writeBytes(ByteArray(100)) file.writeBytes(ByteArray(100))
@@ -246,29 +235,29 @@ class PathExtensionsTest {
@Test @Test
fun deleteExisting() { fun deleteExisting() {
val file = createTempFile() val file = createTempFile().cleanup()
file.deleteExisting() file.deleteExisting()
assertFailsWith<NoSuchFileException> { file.deleteExisting() } assertFailsWith<NoSuchFileException> { file.deleteExisting() }
val dir = createTempDirectory() val dir = createTempDirectory().cleanup()
dir.deleteExisting() dir.deleteExisting()
assertFailsWith<NoSuchFileException> { dir.deleteExisting() } assertFailsWith<NoSuchFileException> { dir.deleteExisting() }
} }
@Test @Test
fun deleteIfExists() { fun deleteIfExists() {
val file = createTempFile() val file = createTempFile().cleanup()
assertTrue(file.deleteIfExists()) assertTrue(file.deleteIfExists())
assertFalse(file.deleteIfExists()) assertFalse(file.deleteIfExists())
val dir = createTempDirectory() val dir = createTempDirectory().cleanup()
assertTrue(dir.deleteIfExists()) assertTrue(dir.deleteIfExists())
assertFalse(dir.deleteIfExists()) assertFalse(dir.deleteIfExists())
} }
@Test @Test
fun attributeGettersOnFile() { fun attributeGettersOnFile() {
val file = createTempFile("temp", ".file") val file = createTempFile("temp", ".file").cleanup()
assertTrue(file.exists()) assertTrue(file.exists())
assertFalse(file.notExists()) assertFalse(file.notExists())
assertTrue(file.isRegularFile()) assertTrue(file.isRegularFile())
@@ -282,12 +271,11 @@ class PathExtensionsTest {
// they don't throw an exception. // they don't throw an exception.
file.isExecutable() file.isExecutable()
file.isHidden() file.isHidden()
file.deleteExisting()
} }
@Test @Test
fun attributeGettersOnDirectory() { fun attributeGettersOnDirectory() {
val file = createTempDirectory(".tmpdir") val file = createTempDirectory(".tmpdir").cleanup()
assertTrue(file.exists()) assertTrue(file.exists())
assertFalse(file.notExists()) assertFalse(file.notExists())
assertFalse(file.isRegularFile()) assertFalse(file.isRegularFile())
@@ -299,12 +287,11 @@ class PathExtensionsTest {
file.isExecutable() file.isExecutable()
file.isHidden() file.isHidden()
file.deleteExisting()
} }
@Test @Test
fun attributeGettersOnNonExistentPath() { fun attributeGettersOnNonExistentPath() {
val file = createTempDirectory().resolve("foo") val file = createTempDirectory().cleanup().resolve("foo")
assertFalse(file.exists()) assertFalse(file.exists())
assertTrue(file.notExists()) assertTrue(file.notExists())
assertFalse(file.isRegularFile()) assertFalse(file.isRegularFile())
@@ -321,7 +308,6 @@ class PathExtensionsTest {
assertFalse(file.isHidden()) assertFalse(file.isHidden())
} catch (e: IOException) { } catch (e: IOException) {
} }
file.parent.deleteExisting()
} }
private interface SpecialFileAttributesView : FileAttributeView private interface SpecialFileAttributesView : FileAttributeView
@@ -329,7 +315,7 @@ class PathExtensionsTest {
@Test @Test
fun readWriteAttributes() { fun readWriteAttributes() {
val file = createTempFile() val file = createTempFile().cleanup()
val modifiedTime = file.getLastModifiedTime() val modifiedTime = file.getLastModifiedTime()
assertEquals(modifiedTime, file.getAttribute("lastModifiedTime")) assertEquals(modifiedTime, file.getAttribute("lastModifiedTime"))
assertEquals(modifiedTime, file.getAttribute("basic:lastModifiedTime")) assertEquals(modifiedTime, file.getAttribute("basic:lastModifiedTime"))
@@ -358,13 +344,11 @@ class PathExtensionsTest {
file.setAttribute("lastModifiedTime", null) file.setAttribute("lastModifiedTime", null)
assertEquals(newTime3, file.getLastModifiedTime()) assertEquals(newTime3, file.getLastModifiedTime())
file.deleteExisting()
} }
@Test @Test
fun links() { fun links() {
val dir = createTempDirectory() val dir = createTempDirectory().cleanupRecursively()
val original = createTempFile(dir) val original = createTempFile(dir)
original.writeBytes(Random.nextBytes(100)) original.writeBytes(Random.nextBytes(100))
@@ -385,7 +369,7 @@ class PathExtensionsTest {
@Test @Test
fun symlinks() { fun symlinks() {
val dir = createTempDirectory() val dir = createTempDirectory().cleanupRecursively()
val original = createTempFile(dir) val original = createTempFile(dir)
original.writeBytes(Random.nextBytes(100)) original.writeBytes(Random.nextBytes(100))
@@ -406,7 +390,7 @@ class PathExtensionsTest {
@Test @Test
fun directoryEntriesList() { fun directoryEntriesList() {
val dir = createTempDirectory() val dir = createTempDirectory().cleanupRecursively()
assertEquals(0, dir.listDirectoryEntries().size) assertEquals(0, dir.listDirectoryEntries().size)
val file = dir.resolve("f1").createFile() val file = dir.resolve("f1").createFile()
@@ -420,7 +404,7 @@ class PathExtensionsTest {
@Test @Test
fun directoryEntriesUseSequence() { fun directoryEntriesUseSequence() {
val dir = createTempDirectory() val dir = createTempDirectory().cleanupRecursively()
assertEquals(0, dir.useDirectoryEntries { it.toList() }.size) assertEquals(0, dir.useDirectoryEntries { it.toList() }.size)
val file = dir.resolve("f1").createFile() val file = dir.resolve("f1").createFile()
@@ -434,7 +418,7 @@ class PathExtensionsTest {
@Test @Test
fun directoryEntriesForEach() { fun directoryEntriesForEach() {
val dir = createTempDirectory() val dir = createTempDirectory().cleanupRecursively()
dir.forEachDirectoryEntry { error("shouldn't get here, but received $it") } dir.forEachDirectoryEntry { error("shouldn't get here, but received $it") }
val file = createTempFile(dir) val file = createTempFile(dir)
@@ -5,28 +5,26 @@
package kotlin.jdk7.test package kotlin.jdk7.test
import java.nio.file.Files
import java.nio.file.StandardOpenOption import java.nio.file.StandardOpenOption
import kotlin.io.path.* import kotlin.io.path.*
import kotlin.random.Random import kotlin.random.Random
import kotlin.test.* import kotlin.test.*
class PathReadWriteTest { class PathReadWriteTest : AbstractPathTest() {
@Test @Test
fun appendText() { fun appendText() {
val file = createTempFile() val file = createTempFile().cleanup()
file.writeText("Hello\n") file.writeText("Hello\n")
file.appendText("World\n") file.appendText("World\n")
file.writeText("Again", Charsets.US_ASCII, StandardOpenOption.APPEND) file.writeText("Again", Charsets.US_ASCII, StandardOpenOption.APPEND)
assertEquals("Hello\nWorld\nAgain", file.readText()) assertEquals("Hello\nWorld\nAgain", file.readText())
assertEquals(listOf("Hello", "World", "Again"), file.readLines(Charsets.UTF_8)) assertEquals(listOf("Hello", "World", "Again"), file.readLines(Charsets.UTF_8))
file.deleteExisting()
} }
@Test @Test
fun file() { fun file() {
val file = createTempFile() val file = createTempFile().cleanup()
val writer = file.outputStream().writer().buffered() val writer = file.outputStream().writer().buffered()
writer.write("Hello") writer.write("Hello")
@@ -68,13 +66,11 @@ class PathReadWriteTest {
c = 0 c = 0
file.forEachLine { c++ } file.forEachLine { c++ }
assertEquals(2, c) assertEquals(2, c)
file.toFile().deleteOnExit()
} }
@Test @Test
fun bufferedReader() { fun bufferedReader() {
val file = createTempFile() val file = createTempFile().cleanup()
val lines = listOf("line1", "line2") val lines = listOf("line1", "line2")
file.writeLines(lines) file.writeLines(lines)
@@ -84,7 +80,7 @@ class PathReadWriteTest {
@Test @Test
fun bufferedWriter() { fun bufferedWriter() {
val file = createTempFile() val file = createTempFile().cleanup()
file.bufferedWriter().use { it.write("line1\n") } file.bufferedWriter().use { it.write("line1\n") }
file.bufferedWriter(Charsets.UTF_8, 1024, StandardOpenOption.APPEND).use { it.write("line2\n") } file.bufferedWriter(Charsets.UTF_8, 1024, StandardOpenOption.APPEND).use { it.write("line2\n") }
@@ -94,7 +90,7 @@ class PathReadWriteTest {
@Test @Test
fun writeBytes() { fun writeBytes() {
val file = createTempFile() val file = createTempFile().cleanup()
file.writeBytes("Hello".encodeToByteArray()) file.writeBytes("Hello".encodeToByteArray())
file.appendBytes(" world!".encodeToByteArray()) file.appendBytes(" world!".encodeToByteArray())
assertEquals(file.readText(), "Hello world!") assertEquals(file.readText(), "Hello world!")
@@ -107,7 +103,7 @@ class PathReadWriteTest {
@Test @Test
fun writeLines() { fun writeLines() {
val file = createTempFile() val file = createTempFile().cleanup()
val lines = listOf("first line", "second line") val lines = listOf("first line", "second line")
file.writeLines(lines) file.writeLines(lines)
assertEquals(lines, file.readLines()) assertEquals(lines, file.readLines())