Test Path.copyTo when source and target paths are the same file
This commit is contained in:
committed by
Space
parent
6fde3391d3
commit
7271de2642
@@ -331,6 +331,135 @@ class PathExtensionsTest : AbstractPathTest() {
|
|||||||
assertEquals(srcFile.readText(), dstFile.readText())
|
assertEquals(srcFile.readText(), dstFile.readText())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun copyToDstLinkPointingToSrc() {
|
||||||
|
for (options in listOf(arrayOf(), arrayOf<CopyOption>(LinkOption.NOFOLLOW_LINKS))) {
|
||||||
|
val root = createTempDirectory().cleanupRecursively()
|
||||||
|
val src = root.resolve("src").createFile()
|
||||||
|
val dstLink = root.resolve("dstLink").tryCreateSymbolicLinkTo(src) ?: return
|
||||||
|
|
||||||
|
assertTrue(src.isSameFileAs(dstLink))
|
||||||
|
assertTrue(dstLink.isSameFileAs(src))
|
||||||
|
assertFailsWith<FileAlreadyExistsException> {
|
||||||
|
src.copyTo(dstLink, *options)
|
||||||
|
}
|
||||||
|
assertTrue(dstLink.isSymbolicLink())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun copyToDstLinkPointingToSrcOverwrite() {
|
||||||
|
for (options in listOf(arrayOf(), arrayOf<CopyOption>(LinkOption.NOFOLLOW_LINKS))) {
|
||||||
|
val root = createTempDirectory().cleanupRecursively()
|
||||||
|
val src = root.resolve("src").createFile()
|
||||||
|
val dstLink = root.resolve("dstLink").tryCreateSymbolicLinkTo(src) ?: return
|
||||||
|
|
||||||
|
src.copyTo(dstLink, StandardCopyOption.REPLACE_EXISTING, *options)
|
||||||
|
assertFalse(dstLink.isSymbolicLink())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun copyToSrcLinkAndDstLinkPointingToSameFile() {
|
||||||
|
for (options in listOf(arrayOf(), arrayOf<CopyOption>(LinkOption.NOFOLLOW_LINKS))) {
|
||||||
|
val root = createTempDirectory().cleanupRecursively()
|
||||||
|
val original = root.resolve("original").createFile()
|
||||||
|
val srcLink = root.resolve("srcLink").tryCreateSymbolicLinkTo(original) ?: return
|
||||||
|
val dstLink = root.resolve("dstLink").tryCreateSymbolicLinkTo(original) ?: return
|
||||||
|
|
||||||
|
assertTrue(srcLink.isSameFileAs(dstLink))
|
||||||
|
assertTrue(dstLink.isSameFileAs(srcLink))
|
||||||
|
assertFailsWith<FileAlreadyExistsException> {
|
||||||
|
srcLink.copyTo(dstLink, *options)
|
||||||
|
}
|
||||||
|
assertTrue(dstLink.isSymbolicLink())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun copyToSrcLinkAndDstLinkPointingToSameFileOverwrite() {
|
||||||
|
for (options in listOf(arrayOf(), arrayOf<CopyOption>(LinkOption.NOFOLLOW_LINKS))) {
|
||||||
|
val root = createTempDirectory().cleanupRecursively()
|
||||||
|
val original = root.resolve("original").createFile()
|
||||||
|
val srcLink = root.resolve("srcLink").tryCreateSymbolicLinkTo(original) ?: return
|
||||||
|
val dstLink = root.resolve("dstLink").tryCreateSymbolicLinkTo(original) ?: return
|
||||||
|
|
||||||
|
srcLink.copyTo(dstLink, StandardCopyOption.REPLACE_EXISTING, *options)
|
||||||
|
|
||||||
|
if (LinkOption.NOFOLLOW_LINKS in options) {
|
||||||
|
assertTrue(dstLink.isSymbolicLink()) // src symlink was copied
|
||||||
|
} else {
|
||||||
|
assertFalse(dstLink.isSymbolicLink()) // src symlink target was copied
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun copyToSameLinkDifferentRoute() {
|
||||||
|
for (options in listOf(arrayOf(), arrayOf<CopyOption>(LinkOption.NOFOLLOW_LINKS))) {
|
||||||
|
val root = createTempDirectory().cleanupRecursively()
|
||||||
|
val original = root.resolve("original").createFile()
|
||||||
|
val srcLink = root.resolve("srcLink").tryCreateSymbolicLinkTo(original) ?: return
|
||||||
|
val dstLink = root.resolve("dstLink").tryCreateSymbolicLinkTo(root)?.resolve("srcLink") ?: return
|
||||||
|
|
||||||
|
assertTrue(srcLink.isSameFileAs(dstLink))
|
||||||
|
assertTrue(dstLink.isSameFileAs(srcLink))
|
||||||
|
|
||||||
|
if (LinkOption.NOFOLLOW_LINKS in options) {
|
||||||
|
srcLink.copyTo(dstLink, *options) // same file
|
||||||
|
} else {
|
||||||
|
assertFailsWith<FileAlreadyExistsException> {
|
||||||
|
srcLink.copyTo(dstLink, *options) // target of srcLink copied to srcLink location
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
assertTrue(dstLink.isSymbolicLink())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun copyToSameLinkDifferentRouteOverwrite() {
|
||||||
|
for (options in listOf(arrayOf(), arrayOf<CopyOption>(LinkOption.NOFOLLOW_LINKS))) {
|
||||||
|
val root = createTempDirectory().cleanupRecursively()
|
||||||
|
val original = root.resolve("original").createFile()
|
||||||
|
val srcLink = root.resolve("srcLink").tryCreateSymbolicLinkTo(original) ?: return
|
||||||
|
val dstLink = root.resolve("dstLink").tryCreateSymbolicLinkTo(root)?.resolve("srcLink") ?: return
|
||||||
|
|
||||||
|
if (LinkOption.NOFOLLOW_LINKS in options) {
|
||||||
|
srcLink.copyTo(dstLink, StandardCopyOption.REPLACE_EXISTING, *options) // same file
|
||||||
|
} else {
|
||||||
|
// dstLink is deleted before srcLink gets copied.
|
||||||
|
// Actually srcLink gets removed because dstLink is srcLink with different path.
|
||||||
|
val error = assertFailsWith<NoSuchFileException> {
|
||||||
|
srcLink.copyTo(dstLink, StandardCopyOption.REPLACE_EXISTING, *options)
|
||||||
|
}
|
||||||
|
assertEquals(srcLink.toString(), error.file)
|
||||||
|
assertFalse(srcLink.exists(LinkOption.NOFOLLOW_LINKS))
|
||||||
|
assertFalse(dstLink.exists(LinkOption.NOFOLLOW_LINKS))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun copyToSameFileDifferentRoute() {
|
||||||
|
val root = createTempDirectory().cleanupRecursively()
|
||||||
|
val src = root.resolve("src").createFile()
|
||||||
|
val dst = root.resolve("dstLink").tryCreateSymbolicLinkTo(root)?.resolve("src") ?: return
|
||||||
|
|
||||||
|
assertTrue(src.isSameFileAs(dst))
|
||||||
|
assertTrue(dst.isSameFileAs(src))
|
||||||
|
src.copyTo(dst)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun copyToSameFileDifferentRouteOverwrite() {
|
||||||
|
val root = createTempDirectory().cleanupRecursively()
|
||||||
|
val src = root.resolve("src").createFile()
|
||||||
|
val dst = root.resolve("dstLink").tryCreateSymbolicLinkTo(root)?.resolve("src") ?: return
|
||||||
|
|
||||||
|
src.copyTo(dst, overwrite = true)
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun moveTo() {
|
fun moveTo() {
|
||||||
val root = createTempDirectory("moveTo-root").cleanupRecursively()
|
val root = createTempDirectory("moveTo-root").cleanupRecursively()
|
||||||
|
|||||||
Reference in New Issue
Block a user