rea/tests/bridgeTruthfulness.test.ts

55 lines
2.3 KiB
TypeScript

import { readFile } from "node:fs/promises";
import { describe, expect, it } from "vitest";
const bridgeSource = await readFile(
new URL("../bridge/hopper_bridge.py", import.meta.url),
"utf8",
);
describe("Hopper bridge truthfulness", () => {
it("collects CFG successors from Hopper instead of fabricating empty edges", () => {
expect(bridgeSource).toContain("block.getSuccessorCount()");
expect(bridgeSource).toContain("block.getSuccessorAddressAtIndex(index)");
expect(bridgeSource).not.toContain(
"Hopper's public Python API does not expose CFG successor edges",
);
});
it("does not fabricate non-writable and non-executable segment permissions", () => {
expect(bridgeSource).toContain('"writable": None');
expect(bridgeSource).toContain('"executable": None');
expect(bridgeSource).toContain('"permissions": _unavailable(');
expect(bridgeSource).not.toContain('"writable": False');
expect(bridgeSource).not.toContain('"executable": False');
});
it("uses Hopper containment and raw-reference APIs without inferring kinds", () => {
expect(bridgeSource).toContain("segment.getProcedureAtAddress(address)");
expect(bridgeSource).toContain("segment.getReferencesFromAddress(address)");
expect(bridgeSource).toContain("segment.getReferencesOfAddress(address)");
expect(bridgeSource).toContain(
"Hopper's public Python API does not classify reference kinds",
);
});
it("scans procedure instructions for comments and typed reference evidence", () => {
expect(bridgeSource).toContain("for address in addresses:");
expect(bridgeSource).toContain("segment.getCommentAtAddress(address)");
expect(bridgeSource).toContain(
"segment.getInlineCommentAtAddress(address)",
);
expect(bridgeSource).toContain('"source_procedure"');
expect(bridgeSource).toContain('"target_procedure"');
expect(bridgeSource).toContain('"outgoing_references"');
expect(bridgeSource).toContain('"referenced_strings"');
expect(bridgeSource).toContain('"referenced_names"');
});
it("supports independent dossier continuation offsets", () => {
expect(bridgeSource).toContain('_offset(params, "pseudocode_offset")');
expect(bridgeSource).toContain('_offset(params, "assembly_offset")');
expect(bridgeSource).toContain('params.get("collection_offset", {})');
});
});