|
| 1 | +package dotty.tools.io |
| 2 | + |
| 3 | +import org.junit.Test |
| 4 | + |
| 5 | +import dotty.tools.io.AbstractFile |
| 6 | +import java.nio.file.Files._ |
| 7 | + |
| 8 | +class AbstractFileTest { |
| 9 | + // |
| 10 | + // Cope with symbolic links. Exercised by -d output. |
| 11 | + // |
| 12 | + // BytecodeWriters#getFile ensures d.isDirectory for elements in path, |
| 13 | + // but d.fileNamed and d.subdirectoryNamed also Files.createDirectories |
| 14 | + // for prefixes, which may optionally fail on an existing symbolic link. |
| 15 | + // |
| 16 | + private def exerciseSymbolicLinks(temp: Directory): Unit = { |
| 17 | + val base = { |
| 18 | + val target = createTempDirectory(temp.jpath, "real") |
| 19 | + val link = temp.jpath.resolve("link") |
| 20 | + createSymbolicLink(link, target) // may bail early if unsupported |
| 21 | + AbstractFile.getDirectory(link) |
| 22 | + } |
| 23 | + |
| 24 | + val file = base.fileNamed("foo") |
| 25 | + assert(file.exists && !file.isDirectory) |
| 26 | + |
| 27 | + val dir = base.subdirectoryNamed("bar") |
| 28 | + assert(dir.isDirectory) |
| 29 | + val leaf = dir.fileNamed("basement") |
| 30 | + assert(leaf.exists && !leaf.isDirectory) |
| 31 | + |
| 32 | + val nested = AbstractFile.getDirectory(createSymbolicLink(dir.jpath.resolve("link"), dir.subdirectoryNamed("nested").jpath)) |
| 33 | + val doubly = nested.fileNamed("doubly") |
| 34 | + assert(nested.exists && nested.isDirectory) // /tmp/link/bar/link |
| 35 | + assert(doubly.exists && !doubly.isDirectory) // /tmp/link/bar/link/doubly |
| 36 | + assert(dir.subdirectoryNamed("link").exists) |
| 37 | + } |
| 38 | + @Test def t6450(): Unit = |
| 39 | + try Directory.inTempDirectory(exerciseSymbolicLinks) |
| 40 | + catch { case _: UnsupportedOperationException => () } |
| 41 | +} |
| 42 | + |
| 43 | +/* Was: |
| 44 | +[error] Test dotty.tools.io.AbstractFileTest.t6450 failed: java.nio.file.FileAlreadyExistsException: /var/folders/2_/xb149z895wb5f1y632xp2bw40000gq/T/temp9110019868196066936/link, took 0.124 sec |
| 45 | +[error] at sun.nio.fs.UnixException.translateToIOException(UnixException.java:88) |
| 46 | +[error] at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102) |
| 47 | +[error] at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107) |
| 48 | +[error] at sun.nio.fs.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:384) |
| 49 | +[error] at java.nio.file.Files.createDirectory(Files.java:674) |
| 50 | +[error] at java.nio.file.Files.createAndCheckIsDirectory(Files.java:781) |
| 51 | +[error] at java.nio.file.Files.createDirectories(Files.java:727) |
| 52 | +[error] at dotty.tools.io.AbstractFile.fileOrSubdirectoryNamed(AbstractFile.scala:242) |
| 53 | +[error] at dotty.tools.io.AbstractFile.fileNamed(AbstractFile.scala:262) |
| 54 | +[error] at dotty.tools.io.AbstractFileTest.exerciseSymbolicLinks(AbstractFileTest.scala:25) |
| 55 | + */ |
0 commit comments