1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
|
import { describe, it, expect } from "bun:test";
import * as path from "node:path";
const __filename = import.meta.file;
describe("path.basename", () => {
it("basics", () => {
expect(path.basename(__filename)).toBe("path.test.js");
expect(path.basename(__filename, ".js")).toBe("path.test");
expect(path.basename(".js", ".js")).toBe("");
expect(path.basename("")).toBe("");
expect(path.basename("/dir/basename.ext")).toBe("basename.ext");
expect(path.basename("/basename.ext")).toBe("basename.ext");
expect(path.basename("basename.ext")).toBe("basename.ext");
expect(path.basename("basename.ext/")).toBe("basename.ext");
expect(path.basename("basename.ext//")).toBe("basename.ext");
expect(path.basename("aaa/bbb", "/bbb")).toBe("bbb");
expect(path.basename("aaa/bbb", "a/bbb")).toBe("bbb");
expect(path.basename("aaa/bbb", "bbb")).toBe("bbb");
expect(path.basename("aaa/bbb//", "bbb")).toBe("bbb");
expect(path.basename("aaa/bbb", "bb")).toBe("b");
expect(path.basename("aaa/bbb", "b")).toBe("bb");
expect(path.basename("/aaa/bbb", "/bbb")).toBe("bbb");
expect(path.basename("/aaa/bbb", "a/bbb")).toBe("bbb");
expect(path.basename("/aaa/bbb", "bbb")).toBe("bbb");
expect(path.basename("/aaa/bbb//", "bbb")).toBe("bbb");
expect(path.basename("/aaa/bbb", "bb")).toBe("b");
expect(path.basename("/aaa/bbb", "b")).toBe("bb");
expect(path.basename("/aaa/bbb")).toBe("bbb");
expect(path.basename("/aaa/")).toBe("aaa");
expect(path.basename("/aaa/b")).toBe("b");
expect(path.basename("/a/b")).toBe("b");
expect(path.basename("//a")).toBe("a");
});
it("On unix a backslash is just treated as any other character.", () => {
expect(path.posix.basename("\\dir\\basename.ext")).toBe(
"\\dir\\basename.ext"
);
expect(path.posix.basename("\\basename.ext")).toBe("\\basename.ext");
expect(path.posix.basename("basename.ext")).toBe("basename.ext");
expect(path.posix.basename("basename.ext\\")).toBe("basename.ext\\");
expect(path.posix.basename("basename.ext\\\\")).toBe("basename.ext\\\\");
expect(path.posix.basename("foo")).toBe("foo");
});
it("POSIX filenames may include control characters", () => {
// c.f. http://www.dwheeler.com/essays/fixing-unix-linux-filenames.html
var controlCharFilename = "Icon" + String.fromCharCode(13);
expect(path.posix.basename("/a/b/" + controlCharFilename)).toBe(
controlCharFilename
);
});
});
it("path.posix.extname", () => {
var pairs = [
[__filename, ".js"],
["", ""],
["/path/to/file", ""],
["/path/to/file.ext", ".ext"],
["/path.to/file.ext", ".ext"],
["/path.to/file", ""],
["/path.to/.file", ""],
["/path.to/.file.ext", ".ext"],
["/path/to/f.ext", ".ext"],
["/path/to/..ext", ".ext"],
["/path/to/..", ""],
["file", ""],
["file.ext", ".ext"],
[".file", ""],
[".file.ext", ".ext"],
["/file", ""],
["/file.ext", ".ext"],
["/.file", ""],
["/.file.ext", ".ext"],
[".path/file.ext", ".ext"],
["file.ext.ext", ".ext"],
["file.", "."],
[".", ""],
["./", ""],
[".file.ext", ".ext"],
[".file", ""],
[".file.", "."],
[".file..", "."],
["..", ""],
["../", ""],
["..file.ext", ".ext"],
["..file", ".file"],
["..file.", "."],
["..file..", "."],
["...", "."],
["...ext", ".ext"],
["....", "."],
["file.ext/", ".ext"],
["file.ext//", ".ext"],
["file/", ""],
["file//", ""],
["file./", "."],
["file.//", "."],
];
pairs.forEach(function (p) {
var input = p[0];
var expected = p[1];
expect(expected).toBe(path.posix.extname(input));
});
});
it("path.posix.dirname", function (t) {
expect(path.posix.dirname("/a/b/")).toBe("a");
expect(path.posix.dirname("/a/b")).toBe("a");
expect(path.posix.dirname("/a")).toBe("/");
expect(path.posix.dirname("")).toBe(".");
expect(path.posix.dirname("/")).toBe("/");
expect(path.posix.dirname("//a")).toBe("//");
expect(path.posix.dirname("foo")).toBe(".");
});
it("path.posix.isAbsolute", () => {
expect(path.posix.isAbsolute("/home/foo")).toBe(true);
expect(path.posix.isAbsolute("/home/foo/..")).toBe(true);
expect(path.posix.isAbsolute("bar/")).toBe(false);
expect(path.posix.isAbsolute("./baz")).toBe(false);
});
tape("path.posix.join", () => {
var 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"],
];
joinTests.forEach(() => {
var actual = path.posix.join.apply(null, p[0]);
expect(actual).toBe(p[1]);
});
});
|