Files
deepseek-harness/examples/desktop/test/stream-flex-collapse.test.js
T

67 lines
2.7 KiB
JavaScript
Raw Normal View History

// task #164: guard against .stream flex-column collapsing non-scrolling
// children (approval / exit_plan_mode / steer cards) to ~16px. The fix in
// style.css relies on two rules:
// 1. `.stream { min-height: 0; ... }` — lets stream itself scroll instead
// of overflowing its column-flex parent (.pane / .main).
// 2. `.stream > * { flex-shrink: 0; }` — each direct child renders at its
// intrinsic height so interaction cards with fixed textarea+buttons do
// not get squashed when the total body is taller than the viewport.
// Both regressed silently before because CSS isn't in the unit test loop; this
// file adds a source-string assertion so the ratchet catches removals.
const test = require('node:test');
const assert = require('node:assert/strict');
const fs = require('node:fs');
const path = require('node:path');
const CSS = fs.readFileSync(
path.join(__dirname, '..', 'src', 'renderer', 'style.css'),
'utf8',
);
test('#164: .stream declares min-height:0 so it can scroll inside column-flex parent', () => {
// find the first `.stream {` block (line 289 region) — the layout rule, not
// the theme rebase rule further down that only tweaks padding.
const idx = CSS.indexOf('.stream {');
assert.ok(idx >= 0, '.stream rule must exist');
const block = CSS.slice(idx, CSS.indexOf('}', idx) + 1);
assert.match(
block,
/min-height:\s*0\b/,
'.stream must set min-height:0 to allow internal scroll under flex parent',
);
assert.match(
block,
/flex-direction:\s*column/,
'sanity: the guarded block is still the column-flex stream rule',
);
assert.match(
block,
/overflow-y:\s*auto/,
'sanity: stream is still the scroll container',
);
});
test('#164: .stream > * has flex-shrink:0 so intrinsic-height children do not collapse', () => {
// The rule appears on its own line as `.stream > * { flex-shrink: 0; ... }`.
// Assert directly on that shape so a rewrite that reorders declarations
// still passes as long as the intent stays.
const re = /^\.stream\s*>\s*\*\s*\{[^}]*flex-shrink:\s*0/m;
assert.match(
CSS,
re,
'.stream > * must set flex-shrink:0 to keep interaction cards / rows from collapsing',
);
});
test('#164: guarded rules are documented in-place so future edits know why', () => {
// Both rules should carry a "#164" reference in a nearby comment so a
// subsequent editor sees the bug id before deleting them. The comment
// preceding `.stream > *` is the primary docstring for the fix.
const bookmark = CSS.match(/task #164:[\s\S]{0,600}\.stream > \*/);
assert.ok(
bookmark,
'a task #164 comment must sit adjacent to the .stream > * rule so the intent survives future refactors',
);
});