49 lines
1.5 KiB
TypeScript
49 lines
1.5 KiB
TypeScript
import { expect, it } from "vitest";
|
|||
|
|
|
||
|
|
import { analyzeJavaScriptStaticSource } from "./javascriptStaticAnalysis.js";
|
||
|
|
|
||
|
|
it.each([
|
||
|
|
['const load = module.require; load.call(module, "../shared.cjs");', true],
|
||
|
|
['const load = module.require; load.apply(module, ["../shared.cjs"]);', true],
|
||
|
|
['const load = module.require; load("../shared.cjs");', true],
|
||
|
|
[
|
||
|
|
'const load = module.require; const alias = load; alias.call(module, "../shared.cjs");',
|
||
|
|
true,
|
||
|
|
],
|
||
|
|
[
|
||
|
|
'const { require: load } = module; load.call(module, "../shared.cjs");',
|
||
|
|
true,
|
||
|
|
],
|
||
|
|
[
|
||
|
|
'const holder = { load: module.require }; holder.load.call(module, "../shared.cjs");',
|
||
|
|
true,
|
||
|
|
],
|
||
|
|
['const holder = [module.require]; holder[0]("../shared.cjs");', true],
|
||
|
|
[
|
||
|
|
'let load = () => {}; if (flag) load = module.require; load("../shared.cjs");',
|
||
|
|
true,
|
||
|
|
],
|
||
|
|
[
|
||
|
|
'let load = module.require; load = () => {}; load.call(module, "../shared.cjs");',
|
||
|
|
false,
|
||
|
|
],
|
||
|
|
[
|
||
|
|
'const api = { require() {} }; const load = api.require; load.call(api, "../shared.cjs");',
|
||
|
|
false,
|
||
|
|
],
|
||
|
|
[
|
||
|
|
'const load = module.exports.require; load.call(module.exports, "../shared.cjs");',
|
||
|
|
false,
|
||
|
|
],
|
||
|
|
])(
|
||
|
|
"retains captured CommonJS delegates by source identity: %s",
|
||
|
|
(source, expected) => {
|
||
|
|
const analysis = analyzeJavaScriptStaticSource(source);
|
||
|
|
expect(analysis.parse_error_count).toBe(0);
|
||
|
|
expect(analysis.references).toEqual(
|
||
|
|
expected
|
||
|
|
? [expect.objectContaining({ kind: "require", specifier: null })]
|
||
|
|
: [],
|
||
|
|
);
|
||
|
|
},
|
||
|
|
);
|