/
extname_test.ts
90 lines (84 loc) · 2.61 KB
/
extname_test.ts
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
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
// Copyright the Browserify authors. MIT License.
// Ported from https://github.com/browserify/path-browserify/
import { assertEquals } from "../assert/mod.ts";
import * as posix from "./posix/mod.ts";
import * as windows from "./windows/mod.ts";
const slashRE = /\//g;
const pairs = [
["", ""],
["/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.//", "."],
] as const;
Deno.test("posix.extname()", function () {
pairs.forEach(function (p) {
const input = p[0];
const expected = p[1];
assertEquals(expected, posix.extname(input));
});
// On *nix, backslash is a valid name component like any other character.
assertEquals(posix.extname(".\\"), "");
assertEquals(posix.extname("..\\"), ".\\");
assertEquals(posix.extname("file.ext\\"), ".ext\\");
assertEquals(posix.extname("file.ext\\\\"), ".ext\\\\");
assertEquals(posix.extname("file\\"), "");
assertEquals(posix.extname("file\\\\"), "");
assertEquals(posix.extname("file.\\"), ".\\");
assertEquals(posix.extname("file.\\\\"), ".\\\\");
});
Deno.test("windows.extname()", function () {
pairs.forEach(function (p) {
const input = p[0].replace(slashRE, "\\");
const expected = p[1];
assertEquals(expected, windows.extname(input));
assertEquals(expected, windows.extname("C:" + input));
});
// On Windows, backslash is a path separator.
assertEquals(windows.extname(".\\"), "");
assertEquals(windows.extname("..\\"), "");
assertEquals(windows.extname("file.ext\\"), ".ext");
assertEquals(windows.extname("file.ext\\\\"), ".ext");
assertEquals(windows.extname("file\\"), "");
assertEquals(windows.extname("file\\\\"), "");
assertEquals(windows.extname("file.\\"), ".");
assertEquals(windows.extname("file.\\\\"), ".");
});