summaryrefslogtreecommitdiff
path: root/std/fs/path/join_test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'std/fs/path/join_test.ts')
m---------std0
-rw-r--r--std/fs/path/join_test.ts128
2 files changed, 128 insertions, 0 deletions
diff --git a/std b/std
deleted file mode 160000
-Subproject 43aafbf33285753e7b42230f0eb7969b300f71c
diff --git a/std/fs/path/join_test.ts b/std/fs/path/join_test.ts
new file mode 100644
index 000000000..2c0f35e48
--- /dev/null
+++ b/std/fs/path/join_test.ts
@@ -0,0 +1,128 @@
+import { test } from "../../testing/mod.ts";
+import { assertEquals } from "../../testing/asserts.ts";
+import * as path from "./mod.ts";
+
+const backslashRE = /\\/g;
+
+const joinTests =
+ // arguments result
+ [
+ [[".", "x/b", "..", "/b/c.js"], "x/b/c.js"],
+ [[], "."],
+ [["/.", "x/b", "..", "/b/c.js"], "/x/b/c.js"],
+ [["/foo", "../../../bar"], "/bar"],
+ [["foo", "../../../bar"], "../../bar"],
+ [["foo/", "../../../bar"], "../../bar"],
+ [["foo/x", "../../../bar"], "../bar"],
+ [["foo/x", "./bar"], "foo/x/bar"],
+ [["foo/x/", "./bar"], "foo/x/bar"],
+ [["foo/x/", ".", "bar"], "foo/x/bar"],
+ [["./"], "./"],
+ [[".", "./"], "./"],
+ [[".", ".", "."], "."],
+ [[".", "./", "."], "."],
+ [[".", "/./", "."], "."],
+ [[".", "/////./", "."], "."],
+ [["."], "."],
+ [["", "."], "."],
+ [["", "foo"], "foo"],
+ [["foo", "/bar"], "foo/bar"],
+ [["", "/foo"], "/foo"],
+ [["", "", "/foo"], "/foo"],
+ [["", "", "foo"], "foo"],
+ [["foo", ""], "foo"],
+ [["foo/", ""], "foo/"],
+ [["foo", "", "/bar"], "foo/bar"],
+ [["./", "..", "/foo"], "../foo"],
+ [["./", "..", "..", "/foo"], "../../foo"],
+ [[".", "..", "..", "/foo"], "../../foo"],
+ [["", "..", "..", "/foo"], "../../foo"],
+ [["/"], "/"],
+ [["/", "."], "/"],
+ [["/", ".."], "/"],
+ [["/", "..", ".."], "/"],
+ [[""], "."],
+ [["", ""], "."],
+ [[" /foo"], " /foo"],
+ [[" ", "foo"], " /foo"],
+ [[" ", "."], " "],
+ [[" ", "/"], " /"],
+ [[" ", ""], " "],
+ [["/", "foo"], "/foo"],
+ [["/", "/foo"], "/foo"],
+ [["/", "//foo"], "/foo"],
+ [["/", "", "/foo"], "/foo"],
+ [["", "/", "foo"], "/foo"],
+ [["", "/", "/foo"], "/foo"]
+ ];
+
+// Windows-specific join tests
+const windowsJoinTests = [
+ // arguments result
+ // UNC path expected
+ [["//foo/bar"], "\\\\foo\\bar\\"],
+ [["\\/foo/bar"], "\\\\foo\\bar\\"],
+ [["\\\\foo/bar"], "\\\\foo\\bar\\"],
+ // UNC path expected - server and share separate
+ [["//foo", "bar"], "\\\\foo\\bar\\"],
+ [["//foo/", "bar"], "\\\\foo\\bar\\"],
+ [["//foo", "/bar"], "\\\\foo\\bar\\"],
+ // UNC path expected - questionable
+ [["//foo", "", "bar"], "\\\\foo\\bar\\"],
+ [["//foo/", "", "bar"], "\\\\foo\\bar\\"],
+ [["//foo/", "", "/bar"], "\\\\foo\\bar\\"],
+ // UNC path expected - even more questionable
+ [["", "//foo", "bar"], "\\\\foo\\bar\\"],
+ [["", "//foo/", "bar"], "\\\\foo\\bar\\"],
+ [["", "//foo/", "/bar"], "\\\\foo\\bar\\"],
+ // No UNC path expected (no double slash in first component)
+ [["\\", "foo/bar"], "\\foo\\bar"],
+ [["\\", "/foo/bar"], "\\foo\\bar"],
+ [["", "/", "/foo/bar"], "\\foo\\bar"],
+ // No UNC path expected (no non-slashes in first component -
+ // questionable)
+ [["//", "foo/bar"], "\\foo\\bar"],
+ [["//", "/foo/bar"], "\\foo\\bar"],
+ [["\\\\", "/", "/foo/bar"], "\\foo\\bar"],
+ [["//"], "\\"],
+ // No UNC path expected (share name missing - questionable).
+ [["//foo"], "\\foo"],
+ [["//foo/"], "\\foo\\"],
+ [["//foo", "/"], "\\foo\\"],
+ [["//foo", "", "/"], "\\foo\\"],
+ // No UNC path expected (too many leading slashes - questionable)
+ [["///foo/bar"], "\\foo\\bar"],
+ [["////foo", "bar"], "\\foo\\bar"],
+ [["\\\\\\/foo/bar"], "\\foo\\bar"],
+ // Drive-relative vs drive-absolute paths. This merely describes the
+ // status quo, rather than being obviously right
+ [["c:"], "c:."],
+ [["c:."], "c:."],
+ [["c:", ""], "c:."],
+ [["", "c:"], "c:."],
+ [["c:.", "/"], "c:.\\"],
+ [["c:.", "file"], "c:file"],
+ [["c:", "/"], "c:\\"],
+ [["c:", "file"], "c:\\file"]
+];
+
+test(function join() {
+ joinTests.forEach(function(p) {
+ const _p = p[0] as string[];
+ const actual = path.posix.join.apply(null, _p);
+ assertEquals(actual, p[1]);
+ });
+});
+
+test(function joinWin32() {
+ joinTests.forEach(function(p) {
+ const _p = p[0] as string[];
+ const actual = path.win32.join.apply(null, _p).replace(backslashRE, "/");
+ assertEquals(actual, p[1]);
+ });
+ windowsJoinTests.forEach(function(p) {
+ const _p = p[0] as string[];
+ const actual = path.win32.join.apply(null, _p);
+ assertEquals(actual, p[1]);
+ });
+});