Files
learnharness/tests/reveal-arrival.test.ts
T

62 lines
2.6 KiB
TypeScript
Raw Normal View History

import assert from "node:assert/strict";
import { describe, it } from "node:test";
import { probeArrivalExpanded, revealArrival, shouldStampGeometryMute } from "../components/chat.tsx";
/**
* Teach-question arrival states (owner ruling, scroll-honesty round
* 2026-09-25). Applied DURING RENDER before the first paint — the bug was
* the stale expanded=true left by the previous question painting one
* frame of the open question: the dock measured itself tall, reserved that
* height permanently (fold immunity refused the give-back), and the
* transcript scrolled as if the collapsed question had opened.
*/
/**
* The geometry-mute's growth rule (flicker round, 2026-09-26): reserve
* GROWTH while a question is pending is the dock stretching itself (the
* dictation flush landing many dictated lines at once, reproduced d≈152 >
* COLLAPSE_DIST) — the spacer's scroll catch-up must not read as the
* learner leaving. Shrinks are the fold's own give-back and never stamp.
*/
describe("shouldStampGeometryMute — when a block resize is our own stretch", () => {
it("growth while a question is pending stamps (dictation flush, arrival stretch)", () => {
assert.equal(shouldStampGeometryMute(545, 393, true), true);
});
it("sub-pixel growth does not stamp (rounding noise)", () => {
assert.equal(shouldStampGeometryMute(394, 393, true), false);
});
it("shrink never stamps — the fold's own morph must not self-mute the re-expand", () => {
assert.equal(shouldStampGeometryMute(40, 545, true), false);
});
it("no growth stamps without a pending question (composer life)", () => {
assert.equal(shouldStampGeometryMute(545, 393, false), false);
});
});
describe("revealArrival — how a teach question lands", () => {
it("fresh arrival after the composer: collapsed behind the reveal button", () => {
assert.deepEqual(revealArrival(false), { expanded: false, revealed: false });
});
it("queued behind another question: open — the reading already happened", () => {
assert.deepEqual(revealArrival(true), { expanded: true, revealed: true });
});
});
/**
* Probe-question arrival state (flicker round, 2026-09-26): open iff the
* learner is following at the bottom; scrolled up in history → arrive as
* the collapsed bar, decided DURING RENDER (the old after-paint effect
* painted one stale-open frame first).
*/
describe("probeArrivalExpanded — how a probe question lands", () => {
it("at the bottom following along: open", () => {
assert.equal(probeArrivalExpanded(true), true);
});
it("scrolled up in history: arrive already-collapsed (owner ruling)", () => {
assert.equal(probeArrivalExpanded(false), false);
});
});