123 lines
3.4 KiB
JavaScript
123 lines
3.4 KiB
JavaScript
"use strict";
|
|
|
|
const identifierUtil = require("../lib/util/identifier");
|
|
|
|
describe("util/identifier", () => {
|
|
describe("makePathsRelative", () => {
|
|
describe("given a context and a pathConstruct", () => {
|
|
it("computes the correct relative results for the path construct", () => {
|
|
[
|
|
[
|
|
"/some/dir/",
|
|
"/some/dir/to/somewhere|some/other/dir!../more/dir",
|
|
"./to/somewhere|some/other/dir!../more/dir"
|
|
],
|
|
[
|
|
"/dir/",
|
|
"/dir/to/somewhere|some/other/dir!../more/dir",
|
|
"./to/somewhere|some/other/dir!../more/dir"
|
|
],
|
|
[
|
|
"/",
|
|
"/dir/to/somewhere|some/other/dir!../more/dir",
|
|
"./dir/to/somewhere|some/other/dir!../more/dir"
|
|
],
|
|
[
|
|
"c:\\some\\dir\\",
|
|
"c:\\some\\dir\\to\\somewhere|some/other/dir!../more/dir",
|
|
"./to/somewhere|some/other/dir!../more/dir"
|
|
],
|
|
[
|
|
"c:\\some\\dir\\",
|
|
"C:\\some\\dir\\to\\somewhere|some/other/dir!../more/dir",
|
|
"./to/somewhere|some/other/dir!../more/dir"
|
|
],
|
|
[
|
|
"C:\\some\\dir",
|
|
"C:\\some\\dir\\to\\somewhere|some/other/dir!../more/dir",
|
|
"./to/somewhere|some/other/dir!../more/dir"
|
|
],
|
|
[
|
|
"C:\\\\some\\dir",
|
|
"c:\\some\\\\dir\\to\\\\somewhere|some/other/dir!../more/dir",
|
|
"./to/somewhere|some/other/dir!../more/dir"
|
|
],
|
|
["/dir", "/dir/to/somewhere??ref-123", "./to/somewhere??ref-123"]
|
|
].forEach(([context, pathConstruct, expected]) => {
|
|
expect(identifierUtil.makePathsRelative(context, pathConstruct)).toBe(
|
|
expected
|
|
);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("getUndoPath", () => {
|
|
const cases = [
|
|
["file.js", ""],
|
|
["file.js", "./", true],
|
|
["dir/file.js", "../"],
|
|
["dir/file.js", "../", true],
|
|
["./file.js", ""],
|
|
[".dir/file.js", "../"],
|
|
["./dir/file.js", "../"],
|
|
["./dir/././file.js", "../"],
|
|
["./dir/../file.js", ""],
|
|
["./dir/../file.js", "./", true],
|
|
["../file.js", "d/"],
|
|
["../file.js", "./d/", true],
|
|
["../dir/file.js", "../d/"],
|
|
[".././../dir/file.js", "../c/d/"],
|
|
["./.././../dir/file.js", "../c/d/"],
|
|
["../dir/../file.js", "d/"],
|
|
["../dir/../file.js", "./d/", true]
|
|
];
|
|
for (const [filename, expected, enforceRelative] of cases) {
|
|
it(`should handle ${filename} correctly${
|
|
enforceRelative ? " (enforced relative path)" : ""
|
|
}`, () => {
|
|
for (const outputPath of [
|
|
"/a/b/c/d",
|
|
"C:\\a\\b\\c\\d",
|
|
"/a/b/c/d/",
|
|
"C:\\a\\b\\c\\d\\"
|
|
]) {
|
|
expect(
|
|
identifierUtil.getUndoPath(filename, outputPath, enforceRelative)
|
|
).toBe(expected);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
describe("parseResourceWithoutFragment", () => {
|
|
// [input, expectedPath, expectedQuery]
|
|
/** @type {[string, string, string][]} */
|
|
const cases = [
|
|
["path#hash?query", "path#hash", "?query"],
|
|
["path?query#hash", "path", "?query#hash"],
|
|
["\0#path\0??\0#query#hash", "#path?", "?#query#hash"],
|
|
[
|
|
'./loader.js?{"items":["a\0^","b\0!","c#","d"]}',
|
|
"./loader.js",
|
|
'?{"items":["a^","b!","c#","d"]}'
|
|
],
|
|
[
|
|
"C:\\Users\\\0#\\repo\\loader.js?",
|
|
"C:\\Users\\#\\repo\\loader.js",
|
|
"?"
|
|
],
|
|
["/Users/\0#/repo/loader-\0#.js", "/Users/#/repo/loader-#.js", ""]
|
|
];
|
|
cases.forEach(case_ => {
|
|
it(case_[0], () => {
|
|
const { resource, path, query } =
|
|
identifierUtil.parseResourceWithoutFragment(case_[0]);
|
|
expect(case_[0]).toBe(resource);
|
|
expect(case_[1]).toBe(path);
|
|
expect(case_[2]).toBe(query);
|
|
});
|
|
});
|
|
});
|
|
});
|