/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/* @test
* @bug 4313887 6838333 6925932 7006126
* @summary Unit test for java.nio.file.Path path operations
*/
public class PathOps {
try {
} catch (Exception x) {
exc = x;
}
}
return path;
}
void fail() {
throw new RuntimeException("PathOps failed");
}
void checkPath() {
throw new InternalError("path is null");
}
}
} else {
// compare string representations
return;
}
fail();
}
}
checkPath();
return this;
}
checkPath();
return this;
}
checkPath();
return this;
}
checkPath();
return this;
}
checkPath();
return this;
}
checkPath();
return this;
}
checkPath();
return this;
}
checkPath();
return this;
}
checkPath();
return this;
}
checkPath();
return this;
}
checkPath();
return this;
}
checkPath();
return this;
}
checkPath();
return this;
}
checkPath();
return this;
}
checkPath();
return this;
}
checkPath();
return this;
}
if (!(exc instanceof InvalidPathException)) {
fail();
}
return this;
}
}
// -- PathOpss --
}
static void doWindowsTests() {
header("Windows specific tests");
// construction
test("C:\\")
.string("C:\\");
.string("C:\\");
.string("C:\\foo");
.string("C:\\foo");
.string("C:\\foo");
.string("foo\\bar\\gus");
test("")
.string("");
.string("C:\\");
.string("foo\\bar\\gus");
// all components present
test("C:\\a\\b\\c")
.root("C:\\")
.parent("C:\\a\\b")
.name("c");
test("C:a\\b\\c")
.root("C:")
.parent("C:a\\b")
.name("c");
test("\\\\server\\share\\a")
.root("\\\\server\\share\\")
.parent("\\\\server\\share\\")
.name("a");
// root component only
test("C:\\")
.root("C:\\")
test("C:")
.root("C:")
test("\\\\server\\share\\")
.root("\\\\server\\share\\")
// no root component
test("a\\b")
.parent("a")
.name("b");
// name component only
test("foo")
.name("foo");
test("")
.name("");
// startsWith
test("C:\\")
.starts("C:\\")
.starts("c:\\")
.notStarts("C")
.notStarts("C:")
.notStarts("");
test("C:")
.starts("C:")
.starts("c:")
.notStarts("C")
.notStarts("");
test("\\")
.starts("\\");
test("C:\\foo\\bar")
.starts("C:\\")
.starts("C:\\foo")
.starts("C:\\FOO")
.starts("C:\\foo\\bar")
.starts("C:\\Foo\\Bar")
.notStarts("C:")
.notStarts("C")
.notStarts("C:foo")
.notStarts("");
test("\\foo\\bar")
.starts("\\")
.starts("\\foo")
.starts("\\foO")
.starts("\\foo\\bar")
.starts("\\fOo\\BaR")
.notStarts("foo")
.notStarts("foo\\bar")
.notStarts("");
test("foo\\bar")
.starts("foo")
.starts("foo\\bar")
.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("");
test("C:")
.ends("C:")
.ends("c:")
.notEnds("");
test("\\")
.ends("\\")
.notEnds("");
test("C:\\foo\\bar")
.ends("bar")
.ends("BAR")
.ends("foo\\bar")
.ends("Foo\\Bar")
.ends("C:\\foo\\bar")
.ends("c:\\foO\\baR")
.notEnds("r")
.notEnds("\\foo\\bar")
.notEnds("");
test("\\foo\\bar")
.ends("bar")
.ends("BaR")
.ends("foo\\bar")
.ends("foO\\baR")
.ends("\\foo\\bar")
.ends("\\Foo\\Bar")
.notEnds("oo\\bar")
.notEnds("");
test("foo\\bar")
.ends("bar")
.ends("BAR")
.ends("foo\\bar")
.ends("Foo\\Bar")
.notEnds("ar")
.notEnds("");
test("\\\\server\\share")
.ends("\\\\server\\share")
.ends("\\\\server\\share\\")
.notEnds("shared")
.notEnds("\\")
.notEnds("");
test("")
.ends("")
.notEnds("\\");
// elements
test("C:\\a\\b\\c")
test("foo.bar\\gus.alice")
test("")
// subpath
test("C:\\foo")
test("C:foo")
test("foo")
test("C:\\foo\\bar\\gus")
test("\\\\server\\share\\foo")
test("")
// isAbsolute
// resolve
test("C:\\")
test("\\")
test("\\foo")
test("foo")
test("C:")
test("\\\\server\\share\\foo")
test("")
// resolveSibling
test("foo")
test("foo\\bar")
test("C:\\foo")
test("C:\\foo\\bar")
test("\\\\server\\share\\foo")
test("")
// relativize
test("foo\\bar")
test("C:\\a\\b\\c")
test("\\\\server\\share\\foo")
test("")
// normalize
test("C:\\")
.normalize("C:\\");
test("C:\\.")
.normalize("C:\\");
test("C:\\..")
.normalize("C:\\");
test("\\\\server\\share")
.normalize("\\\\server\\share\\");
test("\\\\server\\share\\.")
.normalize("\\\\server\\share\\");
test("\\\\server\\share\\..")
.normalize("\\\\server\\share\\");
test("C:")
.normalize("C:");
test("C:.")
.normalize("C:");
test("C:..")
.normalize("C:..");
test("\\")
.normalize("\\");
test("\\.")
.normalize("\\");
test("\\..")
.normalize("\\");
test("foo")
.normalize("foo");
test("foo\\.")
.normalize("foo");
test("foo\\..")
.normalize("");
test("C:\\foo")
.normalize("C:\\foo");
test("C:\\foo\\.")
.normalize("C:\\foo");
test("C:\\.\\foo")
.normalize("C:\\foo");
test("C:\\foo\\..")
.normalize("C:\\");
test("C:\\..\\foo")
.normalize("C:\\foo");
test("\\\\server\\share\\foo")
.normalize("\\\\server\\share\\foo");
test("\\\\server\\share\\foo\\.")
.normalize("\\\\server\\share\\foo");
test("\\\\server\\share\\.\\foo")
.normalize("\\\\server\\share\\foo");
test("\\\\server\\share\\foo\\..")
.normalize("\\\\server\\share\\");
test("\\\\server\\share\\..\\foo")
.normalize("\\\\server\\share\\foo");
test("C:foo")
.normalize("C:foo");
test("C:foo\\.")
.normalize("C:foo");
test("C:.\\foo")
.normalize("C:foo");
test("C:foo\\..")
.normalize("C:");
test("C:..\\foo")
.normalize("C:..\\foo");
test("\\foo")
.normalize("\\foo");
test("\\foo\\.")
.normalize("\\foo");
test("\\.\\foo")
.normalize("\\foo");
test("\\foo\\..")
.normalize("\\");
test("\\..\\foo")
.normalize("\\foo");
test(".")
.normalize("");
test("..")
.normalize("..");
test("\\..\\..")
.normalize("\\");
test("..\\..\\foo")
.normalize("..\\..\\foo");
test("foo\\bar\\..")
.normalize("foo");
test("foo\\bar\\.\\..")
.normalize("foo");
test("foo\\bar\\gus\\..\\..")
.normalize("foo");
test(".\\foo\\.\\bar\\.\\gus\\..\\.\\..")
.normalize("foo");
test("")
.normalize("");
// UNC corner cases
test("\\\\server\\share\\")
.root("\\\\server\\share\\")
test("\\\\server")
.invalid();
test("\\\\server\\")
.invalid();
test("\\\\server\\share")
.root("\\\\server\\share\\")
// invalid
test(":\\foo")
.invalid();
test("C::")
.invalid();
.invalid();
.invalid();
test("C:\\abc\u0001\\foo")
.invalid();
test("C:\\\u0019\\foo")
.invalid();
test("\\\\server\u0019\\share")
.invalid();
test("\\\\server\\share\u0019")
.invalid();
test("foo\u0000\bar")
.invalid();
.invalid();
test("C:\\foo \\bar")
.invalid();
//test("C:\\foo.") // trailing dot
//.invalid();
//test("C:\\foo...\\bar")
//.invalid();
// normalization at construction time (remove redundant and replace slashes)
test("C:/a/b/c")
.string("C:\\a\\b\\c")
.root("C:\\")
.parent("C:\\a\\b");
test("C://a//b//c")
.string("C:\\a\\b\\c")
.root("C:\\")
.parent("C:\\a\\b");
// hashCode
header("hashCode");
throw new RuntimeException("PathOps failed");
}
static void doUnixTests() {
header("Unix specific tests");
// construction
test("/")
.string("/");
.string("/");
.string("/foo");
.string("/foo");
.string("/foo");
test("")
.string("");
.string("/");
// all components
test("/a/b/c")
.root("/")
.parent("/a/b")
.name("c");
// root component only
test("/")
.root("/")
// no root component
test("a/b")
.parent("a")
.name("b");
// name component only
test("foo")
.name("foo");
test("")
.name("");
// startsWith
test("/")
.starts("/")
.notStarts("")
.notStarts("/foo");
test("/foo")
.starts("/")
.starts("/foo")
.notStarts("/f");
.starts("/")
.starts("/foo")
.notStarts("/f")
.notStarts("foo")
test("foo")
.starts("foo")
.notStarts("")
.notStarts("f");
.starts("foo")
.notStarts("f")
.notStarts("/foo")
test("")
.starts("")
.notStarts("/");
// endsWith
test("/")
.ends("/")
.notEnds("")
.notEnds("foo")
.notEnds("/foo");
test("/foo")
.ends("foo")
.ends("/foo")
.notEnds("fool");
.ends("bar")
.notEnds("ar")
.notEnds("barack")
.notEnds("/bar")
test("foo")
.ends("foo")
.notEnds("")
.notEnds("oo")
.notEnds("oola");
.ends("bar")
.notEnds("r")
.notEnds("barmaid")
.notEnds("/bar");
.ends("gus")
.notEnds("g")
.notEnds("/gus")
test("")
.ends("")
.notEnds("/");
// elements
test("a/b/c")
test("")
// subpath
test("/foo")
test("foo")
test("")
// isAbsolute
test("/")
.absolute();
test("/tmp")
.absolute();
test("tmp")
.notAbsolute();
test("")
.notAbsolute();
// resolve
test("/tmp")
test("tmp")
test("")
// resolveSibling
test("foo")
test("/foo")
test("")
// relativize
test("/a/b/c")
test("a/b/c")
test("")
// normalize
test("/")
.normalize("/");
test("foo")
.normalize("foo");
test("/foo")
.normalize("/foo");
test(".")
.normalize("");
test("..")
.normalize("..");
test("/..")
.normalize("/");
test("/../..")
.normalize("/");
test("foo/.")
.normalize("foo");
test("./foo")
.normalize("foo");
test("foo/..")
.normalize("");
test("../foo")
.normalize("../foo");
test("../../foo")
.normalize("../../foo");
.normalize("foo");
.normalize("foo");
.normalize("/foo");
// invalid
test("foo\u0000bar")
.invalid();
test("\u0000foo")
.invalid();
test("bar\u0000")
.invalid();
test("//foo\u0000bar")
.invalid();
test("//\u0000foo")
.invalid();
test("//bar\u0000")
.invalid();
// normalization of input
test("//foo//bar")
.root("/")
.parent("/foo")
.name("bar");
}
static void npes() {
header("NullPointerException");
try {
throw new RuntimeException("NullPointerException not thrown");
} catch (NullPointerException npe) {
}
try {
throw new RuntimeException("NullPointerException not thrown");
} catch (NullPointerException npe) {
}
try {
throw new RuntimeException("NullPointerException not thrown");
} catch (NullPointerException npe) {
}
try {
throw new RuntimeException("NullPointerException not thrown");
} catch (NullPointerException npe) {
}
try {
throw new RuntimeException("NullPointerException not thrown");
} catch (NullPointerException npe) {
}
}
// all platforms
npes();
// operating system specific
} else {
doUnixTests();
}
}
}