Files
rea/src/domain/javascript/javascriptStaticAnalysisCapturedRequire.test.ts
T

49 lines
1.5 KiB
TypeScript
Raw Normal View History

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 })]
: [],
);
},
);