summaryrefslogtreecommitdiff
path: root/path/join_test.ts
diff options
context:
space:
mode:
author木杉 <zhmushan@qq.com>2018-12-19 10:29:39 +0800
committerRyan Dahl <ry@tinyclouds.org>2018-12-18 21:29:39 -0500
commit2d58da520fffaeaee1bceeb33b6e3dc339ea68a3 (patch)
treeb6b8beb08e828b45ca51fb5bbc44330d45b62df5 /path/join_test.ts
parent3c8f564ab8c3087bac8256723aed9572faba756f (diff)
migrate deno_path to deno_std (denoland/deno_std#26)
Previously https://github.com/zhmushan/deno_path Original: https://github.com/denoland/deno_std/commit/1a35f9daf5aa1c10c61d62cccbe7f9ae3c615a0e
Diffstat (limited to 'path/join_test.ts')
-rw-r--r--path/join_test.ts124
1 files changed, 124 insertions, 0 deletions
diff --git a/path/join_test.ts b/path/join_test.ts
new file mode 100644
index 000000000..70b78c7be
--- /dev/null
+++ b/path/join_test.ts
@@ -0,0 +1,124 @@
+import { test, assertEqual } from "https://deno.land/x/testing/testing.ts";
+import * as path from "./index";
+
+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 actual = path.posix.join.apply(null, p[0]);
+ assertEqual(actual, p[1]);
+ });
+});
+
+test(function joinWin32() {
+ joinTests.forEach(function(p) {
+ const actual = path.win32.join.apply(null, p[0]).replace(backslashRE, "/");
+ assertEqual(actual, p[1]);
+ });
+ windowsJoinTests.forEach(function(p) {
+ const actual = path.win32.join.apply(null, p[0]);
+ assertEqual(actual, p[1]);
+ });
+});