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

52 lines
1.6 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { analyzeJavaScriptStaticSource } from "./javascriptStaticAnalysis.js";
describe("native addon loader provenance", () => {
it("distinguishes CommonJS and ESM re-exports", () => {
const analysis = analyzeJavaScriptStaticSource(`
const required = require("./addon.node#literal.node");
module.exports = require("./addon.node#literal.node");
import imported from "./addon.node#literal.node";
export { default } from "./addon.node#literal.node";
`);
expect(analysis.electron.native_addon_bindings).toHaveLength(4);
expect(analysis.electron.native_addon_bindings).toEqual(
expect.arrayContaining([
expect.objectContaining({
binding_kind: "require",
module_kind: "require",
}),
expect.objectContaining({
binding_kind: "import",
module_kind: "import",
}),
expect.objectContaining({
binding_kind: "re-export",
module_kind: "require",
}),
expect.objectContaining({
binding_kind: "re-export",
module_kind: "import",
}),
]),
);
});
it.each(["#", "?"])(
"classifies require filenames literally for %s",
(punctuation) => {
const analysis = analyzeJavaScriptStaticSource(`
const script = require("./addon.node${punctuation}helper.js");
import native from "./addon.node${punctuation}helper.js";
`);
expect(analysis.electron.native_addon_bindings).toEqual([
expect.objectContaining({
binding_kind: "import",
module_kind: "import",
}),
]);
},
);
});