mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 18:38:55 +00:00
108 lines
3.5 KiB
JavaScript
108 lines
3.5 KiB
JavaScript
import { describe, test } from "bun:test";
|
|
import assert from "node:assert";
|
|
import path from "node:path";
|
|
|
|
describe("path.extname", () => {
|
|
test("general", () => {
|
|
const failures = [];
|
|
const slashRE = /\//g;
|
|
|
|
const testPaths = [
|
|
[__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.//", "."],
|
|
];
|
|
|
|
for (const testPath of testPaths) {
|
|
const expected = testPath[1];
|
|
const extNames = [path.posix.extname, path.win32.extname];
|
|
for (const extname of extNames) {
|
|
let input = testPath[0];
|
|
let os;
|
|
if (extname === path.win32.extname) {
|
|
input = input.replace(slashRE, "\\");
|
|
os = "win32";
|
|
} else {
|
|
os = "posix";
|
|
}
|
|
const actual = extname(input);
|
|
const message = `path.${os}.extname(${JSON.stringify(input)})\n expect=${JSON.stringify(
|
|
expected,
|
|
)}\n actual=${JSON.stringify(actual)}`;
|
|
if (actual !== expected) failures.push(`\n${message}`);
|
|
}
|
|
const input = `C:${testPath[0].replace(slashRE, "\\")}`;
|
|
const actual = path.win32.extname(input);
|
|
const message = `path.win32.extname(${JSON.stringify(input)})\n expect=${JSON.stringify(
|
|
expected,
|
|
)}\n actual=${JSON.stringify(actual)}`;
|
|
if (actual !== expected) failures.push(`\n${message}`);
|
|
}
|
|
assert.strictEqual(failures.length, 0, failures.join(""));
|
|
});
|
|
|
|
test("win32", () => {
|
|
// On Windows, backslash is a path separator.
|
|
assert.strictEqual(path.win32.extname(".\\"), "");
|
|
assert.strictEqual(path.win32.extname("..\\"), "");
|
|
assert.strictEqual(path.win32.extname("file.ext\\"), ".ext");
|
|
assert.strictEqual(path.win32.extname("file.ext\\\\"), ".ext");
|
|
assert.strictEqual(path.win32.extname("file\\"), "");
|
|
assert.strictEqual(path.win32.extname("file\\\\"), "");
|
|
assert.strictEqual(path.win32.extname("file.\\"), ".");
|
|
assert.strictEqual(path.win32.extname("file.\\\\"), ".");
|
|
});
|
|
|
|
test("posix", () => {
|
|
// On *nix, backslash is a valid name component like any other character.
|
|
assert.strictEqual(path.posix.extname(".\\"), "");
|
|
assert.strictEqual(path.posix.extname("..\\"), ".\\");
|
|
assert.strictEqual(path.posix.extname("file.ext\\"), ".ext\\");
|
|
assert.strictEqual(path.posix.extname("file.ext\\\\"), ".ext\\\\");
|
|
assert.strictEqual(path.posix.extname("file\\"), "");
|
|
assert.strictEqual(path.posix.extname("file\\\\"), "");
|
|
assert.strictEqual(path.posix.extname("file.\\"), ".\\");
|
|
assert.strictEqual(path.posix.extname("file.\\\\"), ".\\\\");
|
|
});
|
|
});
|