93 lines
2.8 KiB
TypeScript
93 lines
2.8 KiB
TypeScript
import { expect } from "vitest";
|
|
|
|
import { processTest } from "../../support/process/processFixture.js";
|
|
|
|
const cases = [
|
|
{
|
|
name: "soft hyphen U+00AD",
|
|
source: "\\\\\u00ad\\share\\source.ts",
|
|
expected: { kind: "unresolved" },
|
|
},
|
|
{
|
|
name: "zero width non joiner U+200C",
|
|
source: "\\\\\u200c\\share\\source.ts",
|
|
expected: { kind: "unresolved" },
|
|
},
|
|
{
|
|
name: "ASCII delimiter",
|
|
source: "\\\\bad#host\\share\\source.ts",
|
|
expected: { kind: "unresolved" },
|
|
},
|
|
{
|
|
name: "empty host",
|
|
source: "\\\\\\share\\source.ts",
|
|
expected: { kind: "unresolved" },
|
|
},
|
|
{
|
|
name: "normal host",
|
|
source: "\\\\server\\share\\source.ts",
|
|
expected: { kind: "suffix", path: "server/share/source.ts" },
|
|
},
|
|
{
|
|
name: "valid IDNA host",
|
|
source: "\\\\bücher.example\\share\\source.ts",
|
|
expected: { kind: "suffix", path: "bücher.example/share/source.ts" },
|
|
},
|
|
{
|
|
name: "nonempty normalized host",
|
|
source: "\\\\\u00adserver\\share\\source.ts",
|
|
expected: { kind: "suffix", path: "server/share/source.ts" },
|
|
},
|
|
{
|
|
name: "localhost host",
|
|
source: "\\\\localhost\\share\\source.ts",
|
|
expected: { kind: "suffix", path: "share/source.ts" },
|
|
},
|
|
{
|
|
name: "drive letter",
|
|
source: "C:\\src\\source.ts",
|
|
expected: { kind: "suffix", path: "C:/src/source.ts" },
|
|
},
|
|
{
|
|
name: "soft hyphen source root",
|
|
source: "source.ts",
|
|
root: "\\\\\u00ad\\share",
|
|
expected: { kind: "unresolved" },
|
|
},
|
|
{
|
|
name: "zero width non joiner source root",
|
|
source: "source.ts",
|
|
root: "\\\\\u200c\\share",
|
|
expected: { kind: "unresolved" },
|
|
},
|
|
] as const;
|
|
|
|
processTest.for(cases)(
|
|
"resolves $name in an owned subprocess without a native abort",
|
|
async (scenario, { processes }) => {
|
|
const sourceRoot = "root" in scenario ? scenario.root : null;
|
|
// Import the built production helper in a child. A native assertion must
|
|
// become a failed signal assertion here, never terminate the Vitest worker.
|
|
const result = await processes.run(
|
|
process.execPath,
|
|
[
|
|
"--input-type=module",
|
|
"--eval",
|
|
`import { resolveJavaScriptSourceMapReference } from "./dist/domain/javascript/javascriptSourceMapPaths.js";
|
|
const [source, root] = JSON.parse(process.argv[1]);
|
|
console.log(JSON.stringify(resolveJavaScriptSourceMapReference(source, root, "maps/main.js.map")));`,
|
|
JSON.stringify([scenario.source, sourceRoot]),
|
|
],
|
|
{ timeoutMs: 10_000 },
|
|
);
|
|
expect(result.signal, result.stderr).toBeNull();
|
|
expect(result.exitCode, result.stderr).toBe(0);
|
|
expect(JSON.parse(result.stdout)).toMatchObject({
|
|
source_name: scenario.source,
|
|
source_root: sourceRoot,
|
|
map_path: "maps/main.js.map",
|
|
resolution: scenario.expected,
|
|
});
|
|
},
|
|
);
|