Three widgets under lib/src/terminal/src/ui/ and one TerminalView
parameter were leftovers from the era when TerminalView wrapped its
viewport in a real Scrollable. The Scrollable path was replaced with
PointerScrollEvent → PgUp/PgDown translation (alive, well-tested in
terminal_view_test.dart); these helpers stayed behind with tests but
zero production callers.
Drops:
- TerminalScrollGestureHandler (scroll_handler.dart, 100 LOC)
- InfiniteScrollView (infinite_scroll_view.dart, 117 LOC)
- KeyboardVisibilty (keyboard_visibility.dart, 59 LOC) — last
production caller was removed in 048e835
- TerminalView.simulateScroll parameter — declared, never read
- The matching test groups + imports in ui_widget_test.dart
- The KeyboardVisibilty export from the terminal barrel
Net: -585 lines from lib/ + test/, no behavior change, and
infinite_scroll_view.dart stops being the 90%-coverage outlier we
were apologising for in the previous test sweep.
Same shape as T-93 (dead onTapUp wiring), T-95 (dead tertiary tap),
and 048e835 (dead scrollController plumbing). Public-or-tested
surface that no caller exercised.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds test/terminal/ui/ui_widget_test.dart — 14 widget tests
covering the lib/src/terminal/src/ui/ helpers that need a Flutter
widget tree (CustomKeyboardListener, KeyboardVisibilty,
InfiniteScrollView, TerminalScrollGestureHandler).
Files reaching ~100% (the 4 missing lines in infinite_scroll_view
sit in the render-object's `position` setter, only triggered when
Scrollable feeds a different ViewportOffset between rebuilds —
not reachable through normal widget plumbing without internal
access):
- scroll_handler.dart: 0 / unmeasured → 39/39 (100%) — main-buffer
passthrough vs. alt-buffer interception, mouse-mode forwarding
vs. simulateScroll fallback, simulateScroll=false drop, alt-flip
+ didUpdateWidget rebinding, onPointerDown tracking the cursor
for the next scroll event.
- infinite_scroll_view.dart: 0 / unmeasured → 36/40 (90%) — onScroll
fires on viewport position change, callback identity update via
updateRenderObject.
- keyboard_listener.dart: 7/12 → 12/12 (100%) — character-key
fallthrough into onInsert when onKeyEvent returns ignored,
short-circuit to onKeyEvent's "handled" return, no-op on a key
with no character.
- keyboard_visibility.dart: 18/19 → 19/19 (100%) — show + hide
callbacks paired against view-insets transitions; no fire on
same-inset metrics events.
Coverage delta:
- Total project: 68.80% → 69.12%; coverage_floor bumped 68 → 69.
Tests use a `_host()` helper that wraps the widget under test in
Directionality + MediaQuery + Center + a sized SizedBox. The
TerminalScrollGestureHandler tests use ColoredBox as the child
because Listener.onPointerSignal needs a hit-testable render
object below it, and SizedBox.expand alone doesn't paint anything.
Co-Authored-By: Claude <noreply@anthropic.com>