test/java/nio/file/Path/Misc.java

Print this page

        

*** 20,40 **** * or visit www.oracle.com if you need additional information or have any * questions. */ /* @test ! * @bug 4313887 6838333 6867101 ! * @summary Unit test for java.nio.file.Path for miscellenous methods not ! * covered by other tests * @library .. */ import java.nio.file.*; - import static java.nio.file.LinkOption.*; - import java.nio.file.attribute.*; import java.io.*; - import java.util.*; public class Misc { static final boolean isWindows = System.getProperty("os.name").startsWith("Windows"); static boolean supportsLinks; --- 20,36 ---- * or visit www.oracle.com if you need additional information or have any * questions. */ /* @test ! * @bug 4313887 6838333 ! * @summary Unit test for miscellenous java.nio.file.Path methods * @library .. */ import java.nio.file.*; import java.io.*; public class Misc { static final boolean isWindows = System.getProperty("os.name").startsWith("Windows"); static boolean supportsLinks;
*** 43,79 **** Path dir = TestUtil.createTemporaryDirectory(); try { supportsLinks = TestUtil.supportsLinks(dir); // equals and hashCode methods ! equalsAndHashCode(); ! // checkAccess method ! checkAccessTests(dir); - // getFileAttributeView methods - getFileAttributeViewTests(dir); - // toRealPath method ! toRealPathTests(dir); - // isSameFile method - isSameFileTests(dir); - // isHidden method - isHiddenTests(dir); - } finally { TestUtil.removeAll(dir); } } /** * Exercise equals and hashCode methods */ ! static void equalsAndHashCode() { ! Path thisFile = Paths.get("this"); Path thatFile = Paths.get("that"); assertTrue(thisFile.equals(thisFile)); assertTrue(!thisFile.equals(thatFile)); --- 39,66 ---- Path dir = TestUtil.createTemporaryDirectory(); try { supportsLinks = TestUtil.supportsLinks(dir); // equals and hashCode methods ! testEqualsAndHashCode(); ! // toFile method ! testToFile(dir); // toRealPath method ! testToRealPath(dir); } finally { TestUtil.removeAll(dir); } } /** * Exercise equals and hashCode methods */ ! static void testEqualsAndHashCode() { Path thisFile = Paths.get("this"); Path thatFile = Paths.get("that"); assertTrue(thisFile.equals(thisFile)); assertTrue(!thisFile.equals(thatFile));
*** 91,266 **** assertTrue(!thisFile.equals(likeThis)); } } /** ! * Exercise checkAccess method */ ! static void checkAccessTests(Path dir) throws IOException { ! final Path file = dir.resolve("foo").createFile(); ! ! /** ! * Test: This directory should readable and writable ! */ ! dir.checkAccess(); ! dir.checkAccess(AccessMode.READ); ! dir.checkAccess(AccessMode.WRITE); ! dir.checkAccess(AccessMode.READ, AccessMode.WRITE); ! ! /** ! * Test: Check access to all files in all root directories. ! * (A useful test on Windows for special files such as pagefile.sys) ! */ ! for (Path root: FileSystems.getDefault().getRootDirectories()) { ! DirectoryStream<Path> stream; ! try { ! stream = root.newDirectoryStream(); ! } catch (IOException x) { ! continue; // skip root directories that aren't accessible } - try { - for (Path entry: stream) { - try { - entry.checkAccess(); - } catch (AccessDeniedException ignore) { } - } - } finally { - stream.close(); - } - } /** - * Test: File does not exist - */ - Path doesNotExist = dir.resolve("thisDoesNotExists"); - try { - doesNotExist.checkAccess(); - throw new RuntimeException("NoSuchFileException expected"); - } catch (NoSuchFileException x) { - } - try { - doesNotExist.checkAccess(AccessMode.READ); - throw new RuntimeException("NoSuchFileException expected"); - } catch (NoSuchFileException x) { - } - try { - doesNotExist.checkAccess(AccessMode.WRITE); - throw new RuntimeException("NoSuchFileException expected"); - } catch (NoSuchFileException x) { - } - try { - doesNotExist.checkAccess(AccessMode.EXECUTE); - throw new RuntimeException("NoSuchFileException expected"); - } catch (NoSuchFileException x) { - } - - /** - * Test: Edit ACL to deny WRITE and EXECUTE - */ - AclFileAttributeView view = file - .getFileAttributeView(AclFileAttributeView.class); - if (view != null && - file.getFileStore().supportsFileAttributeView("acl")) - { - UserPrincipal owner = view.getOwner(); - List<AclEntry> acl = view.getAcl(); - - // Insert entry to deny WRITE and EXECUTE - AclEntry entry = AclEntry.newBuilder() - .setType(AclEntryType.DENY) - .setPrincipal(owner) - .setPermissions(AclEntryPermission.WRITE_DATA, - AclEntryPermission.EXECUTE) - .build(); - acl.add(0, entry); - view.setAcl(acl); - - try { - file.checkAccess(AccessMode.WRITE); - throw new RuntimeException("AccessDeniedException expected"); - } catch (AccessDeniedException x) { - } - - try { - file.checkAccess(AccessMode.EXECUTE); - throw new RuntimeException("AccessDeniedException expected"); - } catch (AccessDeniedException x) { - } - - - // Restore ACL - acl.remove(0); - view.setAcl(acl); - } - - /** - * Test: Windows DOS read-only attribute - */ - if (isWindows) { - DosFileAttributeView dview = - file.getFileAttributeView(DosFileAttributeView.class); - dview.setReadOnly(true); - try { - file.checkAccess(AccessMode.WRITE); - throw new RuntimeException("AccessDeniedException expected"); - } catch (AccessDeniedException x) { - } - dview.setReadOnly(false); - - // Read-only attribute does not make direcory read-only - dview = dir.getFileAttributeView(DosFileAttributeView.class); - boolean save = dview.readAttributes().isReadOnly(); - dview.setReadOnly(true); - dir.checkAccess(AccessMode.WRITE); - dview.setReadOnly(save); - } - - /** - * Test: null - */ - try { - file.checkAccess((AccessMode)null); - throw new RuntimeException("NullPointerException expected"); - } catch (NullPointerException ignore) { } - - // clean-up - file.delete(); - } - - /** - * Exercise getFileAttributeFile methods - */ - static void getFileAttributeViewTests(Path dir) { - assertTrue(dir.getFileAttributeView(BasicFileAttributeView.class) - instanceof BasicFileAttributeView); - assertTrue(dir.getFileAttributeView(BasicFileAttributeView.class, NOFOLLOW_LINKS) - instanceof BasicFileAttributeView); - assertTrue(dir.getFileAttributeView(BogusFileAttributeView.class) == null); - try { - dir.getFileAttributeView((Class<FileAttributeView>)null); - } catch (NullPointerException ignore) { } - try { - dir.getFileAttributeView(BasicFileAttributeView.class, (LinkOption[])null); - } catch (NullPointerException ignore) { } - try { - dir.getFileAttributeView(BasicFileAttributeView.class, (LinkOption)null); - } catch (NullPointerException ignore) { } - - } - interface BogusFileAttributeView extends FileAttributeView { } - - /** * Exercise toRealPath method */ ! static void toRealPathTests(Path dir) throws IOException { ! final Path file = dir.resolve("foo").createFile(); final Path link = dir.resolve("link"); /** ! * Test: toRealPath(true) will access same file as toRealPath(false) */ ! assertTrue(file.toRealPath(true).isSameFile(file.toRealPath(false))); /** * Test: toRealPath should fail if file does not exist */ Path doesNotExist = dir.resolve("DoesNotExist"); --- 78,106 ---- assertTrue(!thisFile.equals(likeThis)); } } /** ! * Exercise toFile method */ ! static void testToFile(Path dir) throws IOException { ! File d = dir.toFile(); ! assertTrue(d.toString().equals(dir.toString())); ! assertTrue(d.toPath().equals(dir)); } /** * Exercise toRealPath method */ ! static void testToRealPath(Path dir) throws IOException { ! final Path file = Files.createFile(dir.resolve("foo")); final Path link = dir.resolve("link"); /** ! * Test: totRealPath(true) will access same file as toRealPath(false) */ ! assertTrue(Files.isSameFile(file.toRealPath(true), file.toRealPath(false))); /** * Test: toRealPath should fail if file does not exist */ Path doesNotExist = dir.resolve("DoesNotExist");
*** 277,309 **** /** * Test: toRealPath(true) should resolve links */ if (supportsLinks) { ! link.createSymbolicLink(file.toAbsolutePath()); assertTrue(link.toRealPath(true).equals(file.toRealPath(true))); ! link.delete(); } - /** * Test: toRealPath(false) should not resolve links */ if (supportsLinks) { ! link.createSymbolicLink(file.toAbsolutePath()); ! assertTrue(link.toRealPath(false).getName().equals(link.getName())); ! link.delete(); } /** * Test: toRealPath(false) with broken link */ if (supportsLinks) { ! Path broken = dir.resolve("doesNotExist"); ! link.createSymbolicLink(broken); ! assertTrue(link.toRealPath(false).getName().equals(link.getName())); ! link.delete(); } /** * Test: toRealPath should eliminate "." */ --- 117,147 ---- /** * Test: toRealPath(true) should resolve links */ if (supportsLinks) { ! Files.createSymbolicLink(link, file.toAbsolutePath()); assertTrue(link.toRealPath(true).equals(file.toRealPath(true))); ! Files.delete(link); } /** * Test: toRealPath(false) should not resolve links */ if (supportsLinks) { ! Files.createSymbolicLink(link, file.toAbsolutePath()); ! assertTrue(link.toRealPath(false).getFileName().equals(link.getFileName())); ! Files.delete(link); } /** * Test: toRealPath(false) with broken link */ if (supportsLinks) { ! Path broken = Files.createSymbolicLink(link, doesNotExist); ! assertTrue(link.toRealPath(false).getFileName().equals(link.getFileName())); ! Files.delete(link); } /** * Test: toRealPath should eliminate "." */
*** 312,422 **** /** * Test: toRealPath should eliminate ".." when it doesn't follow a * symbolic link */ ! Path subdir = dir.resolve("subdir").createDirectory(); assertTrue(subdir.resolve("..").toRealPath(true).equals(dir.toRealPath(true))); assertTrue(subdir.resolve("..").toRealPath(false).equals(dir.toRealPath(false))); ! subdir.delete(); // clean-up ! file.delete(); } - /** - * Exercise isSameFile method - */ - static void isSameFileTests(Path dir) throws IOException { - Path thisFile = dir.resolve("thisFile"); - Path thatFile = dir.resolve("thatFile"); - - /** - * Test: isSameFile for self and null - */ - assertTrue(thisFile.isSameFile(thisFile)); - assertTrue(!thisFile.isSameFile(null)); - - /** - * Test: Neither files exist - */ - try { - thisFile.isSameFile(thatFile); - throw new RuntimeException("IOException not thrown"); - } catch (IOException x) { - } - try { - thatFile.isSameFile(thisFile); - throw new RuntimeException("IOException not thrown"); - } catch (IOException x) { - } - - thisFile.createFile(); - try { - /** - * Test: One file exists - */ - try { - thisFile.isSameFile(thatFile); - throw new RuntimeException("IOException not thrown"); - } catch (IOException x) { - } - try { - thatFile.isSameFile(thisFile); - throw new RuntimeException("IOException not thrown"); - } catch (IOException x) { - } - - thatFile.createFile(); - - /** - * Test: Both file exists - */ - try { - assertTrue(!thisFile.isSameFile(thatFile)); - assertTrue(!thatFile.isSameFile(thisFile)); - } finally { - TestUtil.deleteUnchecked(thatFile); - } - - /** - * Test: Symbolic links - */ - if (supportsLinks) { - thatFile.createSymbolicLink(thisFile); - try { - assertTrue(thisFile.isSameFile(thatFile)); - assertTrue(thatFile.isSameFile(thisFile)); - } finally { - TestUtil.deleteUnchecked(thatFile); - } - } - } finally { - thisFile.delete(); - } - } - - /** - * Exercise isHidden method - */ - static void isHiddenTests(Path dir) throws IOException { - assertTrue(!dir.isHidden()); - - Path file = dir.resolve(".foo"); - if (isWindows) { - file.createFile(); - try { - file.setAttribute("dos:hidden", true); - assertTrue(file.isHidden()); - } finally { - file.delete(); - } - } else { - assertTrue(file.isHidden()); - } - } - static void assertTrue(boolean okay) { if (!okay) throw new RuntimeException("Assertion Failed"); } } --- 150,168 ---- /** * Test: toRealPath should eliminate ".." when it doesn't follow a * symbolic link */ ! Path subdir = Files.createDirectory(dir.resolve("subdir")); assertTrue(subdir.resolve("..").toRealPath(true).equals(dir.toRealPath(true))); assertTrue(subdir.resolve("..").toRealPath(false).equals(dir.toRealPath(false))); ! Files.delete(subdir); // clean-up ! Files.delete(file); } static void assertTrue(boolean okay) { if (!okay) throw new RuntimeException("Assertion Failed"); } }