aboutsummaryrefslogtreecommitdiff
path: root/integration/bunjs-only-snippets/path.test.js
blob: 7f4708b319f2ac110f66d41d961ca4c40e02f9e4 (plain) (blame)
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]);
  });
});