--- a/jdk/test/java/nio/file/Path/PathOps.java Thu Jan 13 22:21:58 2011 -0800
+++ b/jdk/test/java/nio/file/Path/PathOps.java Fri Jan 28 09:28:43 2011 +0000
@@ -22,7 +22,7 @@
*/
/* @test
- * @bug 4313887 6838333 6925932
+ * @bug 4313887 6838333 6925932 7006126
* @summary Unit test for java.nio.file.Path path operations
*/
@@ -36,15 +36,15 @@
private Path path;
private Exception exc;
- private PathOps(String s) {
+ private PathOps(String first, String... more) {
out.println();
- input = s;
+ input = first;
try {
- path = FileSystems.getDefault().getPath(s);
- out.format("%s -> %s", s, path);
+ path = FileSystems.getDefault().getPath(first, more);
+ out.format("%s -> %s", first, path);
} catch (Exception x) {
exc = x;
- out.format("%s -> %s", s, x);
+ out.format("%s -> %s", first, x);
}
out.println();
}
@@ -97,7 +97,7 @@
PathOps name(String expected) {
out.println("check name");
checkPath();
- check(path.getName(), expected);
+ check(path.getFileName(), expected);
return this;
}
@@ -168,6 +168,13 @@
return this;
}
+ PathOps resolveSibling(String other, String expected) {
+ out.format("test resolveSibling %s\n", other);
+ checkPath();
+ check(path.resolveSibling(other), expected);
+ return this;
+ }
+
PathOps relativize(String other, String expected) {
out.format("test relativize %s\n", other);
checkPath();
@@ -198,8 +205,8 @@
return this;
}
- static PathOps test(String s) {
- return new PathOps(s);
+ static PathOps test(String first, String... more) {
+ return new PathOps(first, more);
}
// -- PathOpss --
@@ -213,6 +220,26 @@
static void doWindowsTests() {
header("Windows specific tests");
+ // construction
+ test("C:\\")
+ .string("C:\\");
+ test("C:\\", "")
+ .string("C:\\");
+ test("C:\\", "foo")
+ .string("C:\\foo");
+ test("C:\\", "\\foo")
+ .string("C:\\foo");
+ test("C:\\", "foo\\")
+ .string("C:\\foo");
+ test("foo", "bar", "gus")
+ .string("foo\\bar\\gus");
+ test("")
+ .string("");
+ test("", "C:\\")
+ .string("C:\\");
+ test("", "foo", "", "bar", "", "\\gus")
+ .string("foo\\bar\\gus");
+
// all components present
test("C:\\a\\b\\c")
.root("C:\\")
@@ -252,17 +279,23 @@
.root(null)
.parent(null)
.name("foo");
+ test("")
+ .root(null)
+ .parent(null)
+ .name("");
// startsWith
test("C:\\")
.starts("C:\\")
.starts("c:\\")
.notStarts("C")
- .notStarts("C:");
+ .notStarts("C:")
+ .notStarts("");
test("C:")
.starts("C:")
.starts("c:")
- .notStarts("C");
+ .notStarts("C")
+ .notStarts("");
test("\\")
.starts("\\");
test("C:\\foo\\bar")
@@ -273,7 +306,8 @@
.starts("C:\\Foo\\Bar")
.notStarts("C:")
.notStarts("C")
- .notStarts("C:foo");
+ .notStarts("C:foo")
+ .notStarts("");
test("\\foo\\bar")
.starts("\\")
.starts("\\foo")
@@ -281,26 +315,35 @@
.starts("\\foo\\bar")
.starts("\\fOo\\BaR")
.notStarts("foo")
- .notStarts("foo\\bar");
+ .notStarts("foo\\bar")
+ .notStarts("");
test("foo\\bar")
.starts("foo")
.starts("foo\\bar")
- .notStarts("\\");
+ .notStarts("\\")
+ .notStarts("");
test("\\\\server\\share")
.starts("\\\\server\\share")
.starts("\\\\server\\share\\")
+ .notStarts("\\")
+ .notStarts("");
+ test("")
+ .starts("")
.notStarts("\\");
// endsWith
test("C:\\")
.ends("C:\\")
.ends("c:\\")
- .notEnds("\\");
+ .notEnds("\\")
+ .notEnds("");
test("C:")
.ends("C:")
- .ends("c:");
+ .ends("c:")
+ .notEnds("");
test("\\")
- .ends("\\");
+ .ends("\\")
+ .notEnds("");
test("C:\\foo\\bar")
.ends("bar")
.ends("BAR")
@@ -309,7 +352,8 @@
.ends("C:\\foo\\bar")
.ends("c:\\foO\\baR")
.notEnds("r")
- .notEnds("\\foo\\bar");
+ .notEnds("\\foo\\bar")
+ .notEnds("");
test("\\foo\\bar")
.ends("bar")
.ends("BaR")
@@ -317,17 +361,23 @@
.ends("foO\\baR")
.ends("\\foo\\bar")
.ends("\\Foo\\Bar")
- .notEnds("oo\\bar");
+ .notEnds("oo\\bar")
+ .notEnds("");
test("foo\\bar")
.ends("bar")
.ends("BAR")
.ends("foo\\bar")
.ends("Foo\\Bar")
- .notEnds("ar");
+ .notEnds("ar")
+ .notEnds("");
test("\\\\server\\share")
.ends("\\\\server\\share")
.ends("\\\\server\\share\\")
.notEnds("shared")
+ .notEnds("\\")
+ .notEnds("");
+ test("")
+ .ends("")
.notEnds("\\");
// elements
@@ -338,6 +388,8 @@
test("foo.bar\\gus.alice")
.element(0, "foo.bar")
.element(1, "gus.alice");
+ test("")
+ .element(0, "");
// subpath
test("C:\\foo")
@@ -355,6 +407,8 @@
.subpath(2, 3, "gus");
test("\\\\server\\share\\foo")
.subpath(0, 1, "foo");
+ test("")
+ .subpath(0, 1, "");
// isAbsolute
test("foo").notAbsolute();
@@ -362,6 +416,7 @@
test("C:\\").absolute();
test("C:\\abc").absolute();
test("\\\\server\\share\\").absolute();
+ test("").notAbsolute();
// resolve
test("C:\\")
@@ -369,42 +424,99 @@
.resolve("D:\\bar", "D:\\bar")
.resolve("\\\\server\\share\\bar", "\\\\server\\share\\bar")
.resolve("C:foo", "C:\\foo")
- .resolve("D:foo", "D:foo");
+ .resolve("D:foo", "D:foo")
+ .resolve("", "C:\\");
test("\\")
.resolve("foo", "\\foo")
.resolve("D:bar", "D:bar")
.resolve("C:\\bar", "C:\\bar")
.resolve("\\\\server\\share\\bar", "\\\\server\\share\\bar")
- .resolve("\\foo", "\\foo");
+ .resolve("\\foo", "\\foo")
+ .resolve("", "\\");
test("\\foo")
.resolve("bar", "\\foo\\bar")
.resolve("D:bar", "D:bar")
.resolve("C:\\bar", "C:\\bar")
.resolve("\\\\server\\share\\bar", "\\\\server\\share\\bar")
- .resolve("\\bar", "\\bar");
+ .resolve("\\bar", "\\bar")
+ .resolve("", "\\foo");
test("foo")
.resolve("bar", "foo\\bar")
.resolve("D:\\bar", "D:\\bar")
.resolve("\\\\server\\share\\bar", "\\\\server\\share\\bar")
.resolve("C:bar", "C:bar")
- .resolve("D:foo", "D:foo");
+ .resolve("D:foo", "D:foo")
+ .resolve("", "foo");
test("C:")
- .resolve("foo", "C:foo");
+ .resolve("foo", "C:foo")
+ .resolve("", "C:");
test("\\\\server\\share\\foo")
.resolve("bar", "\\\\server\\share\\foo\\bar")
.resolve("\\bar", "\\\\server\\share\\bar")
.resolve("D:\\bar", "D:\\bar")
.resolve("\\\\other\\share\\bar", "\\\\other\\share\\bar")
- .resolve("D:bar", "D:bar");
+ .resolve("D:bar", "D:bar")
+ .resolve("", "\\\\server\\share\\foo");
+ test("")
+ .resolve("", "")
+ .resolve("foo", "foo")
+ .resolve("C:\\", "C:\\")
+ .resolve("C:foo", "C:foo")
+ .resolve("\\\\server\\share\\bar", "\\\\server\\share\\bar");
+
+ // resolveSibling
+ test("foo")
+ .resolveSibling("bar", "bar")
+ .resolveSibling("D:\\bar", "D:\\bar")
+ .resolveSibling("\\\\server\\share\\bar", "\\\\server\\share\\bar")
+ .resolveSibling("C:bar", "C:bar")
+ .resolveSibling("D:foo", "D:foo")
+ .resolveSibling("", "");
+ test("foo\\bar")
+ .resolveSibling("gus", "foo\\gus")
+ .resolveSibling("D:\\bar", "D:\\bar")
+ .resolveSibling("\\\\server\\share\\bar", "\\\\server\\share\\bar")
+ .resolveSibling("C:bar", "C:bar")
+ .resolveSibling("D:foo", "D:foo")
+ .resolveSibling("", "foo");
+ test("C:\\foo")
+ .resolveSibling("gus", "C:\\gus")
+ .resolveSibling("D:\\bar", "D:\\bar")
+ .resolveSibling("\\\\server\\share\\bar", "\\\\server\\share\\bar")
+ .resolveSibling("C:bar", "C:\\bar")
+ .resolveSibling("D:foo", "D:foo")
+ .resolveSibling("", "C:\\");
+ test("C:\\foo\\bar")
+ .resolveSibling("gus", "C:\\foo\\gus")
+ .resolveSibling("D:\\bar", "D:\\bar")
+ .resolveSibling("\\\\server\\share\\bar", "\\\\server\\share\\bar")
+ .resolveSibling("C:bar", "C:\\foo\\bar")
+ .resolveSibling("D:foo", "D:foo")
+ .resolveSibling("", "C:\\foo");
+ test("\\\\server\\share\\foo")
+ .resolveSibling("bar", "\\\\server\\share\\bar")
+ .resolveSibling("\\bar", "\\\\server\\share\\bar")
+ .resolveSibling("D:\\bar", "D:\\bar")
+ .resolveSibling("\\\\other\\share\\bar", "\\\\other\\share\\bar")
+ .resolveSibling("D:bar", "D:bar")
+ .resolveSibling("", "\\\\server\\share\\");
+ test("")
+ .resolveSibling("", "")
+ .resolveSibling("foo", "foo")
+ .resolveSibling("C:\\", "C:\\");
// relativize
test("foo\\bar")
- .relativize("foo\\bar", null)
+ .relativize("foo\\bar", "")
.relativize("foo", "..");
test("C:\\a\\b\\c")
- .relativize("C:\\a", "..\\..");
+ .relativize("C:\\a", "..\\..")
+ .relativize("C:\\a\\b\\c", "");
test("\\\\server\\share\\foo")
- .relativize("\\\\server\\share\\bar", "..\\bar");
+ .relativize("\\\\server\\share\\bar", "..\\bar")
+ .relativize("\\\\server\\share\\foo", "");
+ test("")
+ .relativize("", "");
// normalize
test("C:\\")
@@ -436,7 +548,7 @@
test("foo\\.")
.normalize("foo");
test("foo\\..")
- .normalize(null);
+ .normalize("");
test("C:\\foo")
.normalize("C:\\foo");
test("C:\\foo\\.")
@@ -478,7 +590,7 @@
test("\\..\\foo")
.normalize("\\foo");
test(".")
- .normalize(null);
+ .normalize("");
test("..")
.normalize("..");
test("\\..\\..")
@@ -493,6 +605,8 @@
.normalize("foo");
test(".\\foo\\.\\bar\\.\\gus\\..\\.\\..")
.normalize("foo");
+ test("")
+ .normalize("");
// UNC corner cases
test("\\\\server\\share\\")
@@ -557,6 +671,26 @@
static void doUnixTests() {
header("Unix specific tests");
+ // construction
+ test("/")
+ .string("/");
+ test("/", "")
+ .string("/");
+ test("/", "foo")
+ .string("/foo");
+ test("/", "/foo")
+ .string("/foo");
+ test("/", "foo/")
+ .string("/foo");
+ test("foo", "bar", "gus")
+ .string("foo/bar/gus");
+ test("")
+ .string("");
+ test("", "/")
+ .string("/");
+ test("", "foo", "", "bar", "", "/gus")
+ .string("foo/bar/gus");
+
// all components
test("/a/b/c")
.root("/")
@@ -580,10 +714,15 @@
.root(null)
.parent(null)
.name("foo");
+ test("")
+ .root(null)
+ .parent(null)
+ .name("");
// startsWith
test("/")
.starts("/")
+ .notStarts("")
.notStarts("/foo");
test("/foo")
.starts("/")
@@ -598,6 +737,7 @@
.notStarts("foo/bar");
test("foo")
.starts("foo")
+ .notStarts("")
.notStarts("f");
test("foo/bar")
.starts("foo")
@@ -605,10 +745,14 @@
.notStarts("f")
.notStarts("/foo")
.notStarts("/foo/bar");
+ test("")
+ .starts("")
+ .notStarts("/");
// endsWith
test("/")
.ends("/")
+ .notEnds("")
.notEnds("foo")
.notEnds("/foo");
test("/foo")
@@ -625,6 +769,7 @@
.notEnds("o/bar");
test("foo")
.ends("foo")
+ .notEnds("")
.notEnds("oo")
.notEnds("oola");
test("foo/bar")
@@ -642,12 +787,47 @@
.notEnds("r/gus")
.notEnds("barack/gus")
.notEnds("bar/gust");
+ test("")
+ .ends("")
+ .notEnds("/");
// elements
test("a/b/c")
- .element(0,"a")
- .element(1,"b")
- .element(2,"c");
+ .element(0, "a")
+ .element(1, "b")
+ .element(2, "c");
+ test("")
+ .element(0, "");
+
+ // subpath
+ test("/foo")
+ .subpath(0, 1, "foo");
+ test("foo")
+ .subpath(0, 1, "foo");
+ test("/foo/bar")
+ .subpath(0, 1, "foo")
+ .subpath(1, 2, "bar")
+ .subpath(0, 2, "foo/bar");
+ test("foo/bar")
+ .subpath(0, 1, "foo")
+ .subpath(1, 2, "bar")
+ .subpath(0, 2, "foo/bar");
+ test("/foo/bar/gus")
+ .subpath(0, 1, "foo")
+ .subpath(1, 2, "bar")
+ .subpath(2, 3, "gus")
+ .subpath(0, 2, "foo/bar")
+ .subpath(1, 3, "bar/gus")
+ .subpath(0, 3, "foo/bar/gus");
+ test("foo/bar/gus")
+ .subpath(0, 1, "foo")
+ .subpath(1, 2, "bar")
+ .subpath(2, 3, "gus")
+ .subpath(0, 2, "foo/bar")
+ .subpath(1, 3, "bar/gus")
+ .subpath(0, 3, "foo/bar/gus");
+ test("")
+ .subpath(0, 1, "");
// isAbsolute
test("/")
@@ -656,20 +836,61 @@
.absolute();
test("tmp")
.notAbsolute();
+ test("")
+ .notAbsolute();
+
// resolve
test("/tmp")
.resolve("foo", "/tmp/foo")
- .resolve("/foo", "/foo");
+ .resolve("/foo", "/foo")
+ .resolve("", "/tmp");
test("tmp")
.resolve("foo", "tmp/foo")
+ .resolve("/foo", "/foo")
+ .resolve("", "tmp");
+ test("")
+ .resolve("", "")
+ .resolve("foo", "foo")
.resolve("/foo", "/foo");
+ // resolveSibling
+ test("foo")
+ .resolveSibling("bar", "bar")
+ .resolveSibling("/bar", "/bar")
+ .resolveSibling("", "");
+ test("foo/bar")
+ .resolveSibling("gus", "foo/gus")
+ .resolveSibling("/gus", "/gus")
+ .resolveSibling("", "foo");
+ test("/foo")
+ .resolveSibling("gus", "/gus")
+ .resolveSibling("/gus", "/gus")
+ .resolveSibling("", "/");
+ test("/foo/bar")
+ .resolveSibling("gus", "/foo/gus")
+ .resolveSibling("/gus", "/gus")
+ .resolveSibling("", "/foo");
+ test("")
+ .resolveSibling("foo", "foo")
+ .resolveSibling("/foo", "/foo")
+ .resolve("", "");
+
// relativize
test("/a/b/c")
- .relativize("/a/b/c", null)
+ .relativize("/a/b/c", "")
.relativize("/a/b/c/d/e", "d/e")
- .relativize("/a/x", "../../x");
+ .relativize("/a/x", "../../x")
+ .relativize("/x", "../../../x");
+ test("a/b/c")
+ .relativize("a/b/c/d", "d")
+ .relativize("a/x", "../../x")
+ .relativize("x", "../../../x")
+ .relativize("", "../../..");
+ test("")
+ .relativize("a", "a")
+ .relativize("a/b/c", "a/b/c")
+ .relativize("", "");
// normalize
test("/")
@@ -679,7 +900,7 @@
test("/foo")
.normalize("/foo");
test(".")
- .normalize(null);
+ .normalize("");
test("..")
.normalize("..");
test("/..")
@@ -691,7 +912,7 @@
test("./foo")
.normalize("foo");
test("foo/..")
- .normalize(null);
+ .normalize("");
test("../foo")
.normalize("../foo");
test("../../foo")
@@ -717,7 +938,7 @@
test("//bar\u0000")
.invalid();
- // normalization
+ // normalization of input
test("//foo//bar")
.string("/foo/bar")
.root("/")
@@ -749,13 +970,13 @@
}
try {
- path.startsWith(null);
+ path.startsWith((Path)null);
throw new RuntimeException("NullPointerException not thrown");
} catch (NullPointerException npe) {
}
try {
- path.endsWith(null);
+ path.endsWith((Path)null);
throw new RuntimeException("NullPointerException not thrown");
} catch (NullPointerException npe) {
}