46 lines
1.5 KiB
TypeScript
46 lines
1.5 KiB
TypeScript
import { expect } from "vitest";
|
|
|
|
import { parseEvidence } from "../../../src/domain/evidence.js";
|
|
import { javascriptApplicationAnalysisResultSchema } from "../../../src/domain/javascript/javascriptApplicationAnalysis.js";
|
|
import {
|
|
bomSourceCases,
|
|
createBomArtifact,
|
|
expectBomSourceRange,
|
|
} from "../../fixtures/javascriptArtifactBom.js";
|
|
import { cliTest } from "../../support/cli/cliFixture.js";
|
|
|
|
for (const format of ["directory", "asar"] as const) {
|
|
for (const command of ["analyze-javascript-application", "analyze"]) {
|
|
cliTest(
|
|
`${command} preserves original BOM coordinates for ${format}`,
|
|
async ({ cli }) => {
|
|
const files = Object.fromEntries(
|
|
bomSourceCases.map((fixture) => [
|
|
fixture.path,
|
|
Buffer.from(`\uFEFF${fixture.source}`),
|
|
]),
|
|
);
|
|
const input = await createBomArtifact(format, {
|
|
...files,
|
|
"dep.js": "export const dependency = true;",
|
|
});
|
|
const output = await cli.run({ arguments: [command, input, "--json"] });
|
|
expect(output.exitCode).toBe(0);
|
|
const result = javascriptApplicationAnalysisResultSchema.parse(
|
|
parseEvidence(output.json).normalized_result,
|
|
);
|
|
expect(result.statistics).toMatchObject({
|
|
parse_failures: 0,
|
|
invalid_utf8_files: 0,
|
|
});
|
|
for (const fixture of bomSourceCases)
|
|
expectBomSourceRange(
|
|
result.graph,
|
|
fixture,
|
|
Buffer.from(`\uFEFF${fixture.source}`),
|
|
);
|
|
},
|
|
);
|
|
}
|
|
}
|