34 lines
1.4 KiB
JavaScript
34 lines
1.4 KiB
JavaScript
/** Exercise the pinned source and shipped SIGCONT handlers without starting Hermes. */
|
|
const assert = require("node:assert/strict");
|
|
const fs = require("node:fs");
|
|
const path = require("node:path");
|
|
const root = process.env.HERMES_SOURCE_ROOT || "/opt/hermes";
|
|
|
|
const handlers = [
|
|
["ui-tui/packages/hermes-ink/src/ink/ink.tsx", /^ private handleResume = \(\) => \{[\s\S]*?^ }/m],
|
|
["ui-tui/dist/entry.js", /^ handleResume = \(\) => \{[\s\S]*?^ };/m],
|
|
];
|
|
|
|
for (const [file, pattern] of handlers) {
|
|
const source = fs.readFileSync(path.join(root, file), "utf8");
|
|
const match = source.match(pattern);
|
|
assert.ok(match, `missing pinned SIGCONT handler: ${file}`);
|
|
// Evaluate only the reviewed handler, with renderer effects replaced by spies.
|
|
const Renderer = new Function(`return class { ${match[0].replace("private ", "")} }`)();
|
|
for (const [isTTY, isPaused, expected] of [
|
|
[true, false, 1],
|
|
[true, true, 0],
|
|
[false, false, 0],
|
|
]) {
|
|
const renderer = new Renderer();
|
|
let repaints = 0;
|
|
renderer.options = { stdout: { isTTY } };
|
|
renderer.isPaused = isPaused;
|
|
renderer.altScreenActive = true;
|
|
renderer.reenterAltScreen = () => { repaints++; };
|
|
renderer.handleResume();
|
|
assert.equal(repaints, expected, `${file}: TTY=${isTTY}, paused=${isPaused}`);
|
|
}
|
|
}
|
|
console.log("dashboard SIGCONT source and shipped handlers passed");
|