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");
}
}