detached af6e54f

test(vt): cover wide-character clear refresh cases

commit
af6e54f561dc4255b2e6bca8c0ccb04a28dda52e
author
brice · · 2026-08-03 19:45 UTC
parent
b1ef94e
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
1 file · +21 -8
M pkg/vt/row_id_test.go +21 -8
@@ -50,14 +50,27 @@ func TestScreenRowIDsDoNotAppendInteriorOrAlternateScrollHistory(t *testing.T) {
5050 }
5151
5252 func TestScreenRowIDRefreshesOnSnapExpandedFullClear(t *testing.T) {
53- s := NewScreen(2, 1)
54- s.Write([]byte("界"))
55- before := s.RowID(0)
56-
57- s.clearRow(0, 1, 2)
58-
59- if got := s.RowID(0); got == before {
60- t.Fatalf("row ID = %d after snap-expanded full clear, want a fresh ID", got)
53+ tests := []struct {
54+ name string
55+ x0, x1 int
56+ wantRefresh bool
57+ }{
58+ {name: "snap-expanded full clear", x0: 1, x1: 4, wantRefresh: true},
59+ {name: "partial clear", x0: 0, x1: 1, wantRefresh: false},
60+ }
61+
62+ for _, tt := range tests {
63+ t.Run(tt.name, func(t *testing.T) {
64+ s := NewScreen(4, 1)
65+ s.Write([]byte("界"))
66+ before := s.RowID(0)
67+
68+ s.clearRow(0, tt.x0, tt.x1)
69+
70+ if got := s.RowID(0) != before; got != tt.wantRefresh {
71+ t.Fatalf("row ID refreshed = %t, want %t", got, tt.wantRefresh)
72+ }
73+ })
6174 }
6275 }
6376
@@ -50,14 +50,27 @@ func TestScreenRowIDsDoNotAppendInteriorOrAlternateScrollHistory(t *testing.T) {
50 }50 }
51 51
52 func TestScreenRowIDRefreshesOnSnapExpandedFullClear(t *testing.T) {52 func TestScreenRowIDRefreshesOnSnapExpandedFullClear(t *testing.T) {
53- s := NewScreen(2, 1)53+ tests := []struct {
54- s.Write([]byte("界"))54+ name string
55- before := s.RowID(0)55+ x0, x1 int
56-56+ wantRefresh bool
57- s.clearRow(0, 1, 2)57+ }{
58-58+ {name: "snap-expanded full clear", x0: 1, x1: 4, wantRefresh: true},
59- if got := s.RowID(0); got == before {59+ {name: "partial clear", x0: 0, x1: 1, wantRefresh: false},
60- t.Fatalf("row ID = %d after snap-expanded full clear, want a fresh ID", got)60+ }
61+
62+ for _, tt := range tests {
63+ t.Run(tt.name, func(t *testing.T) {
64+ s := NewScreen(4, 1)
65+ s.Write([]byte("界"))
66+ before := s.RowID(0)
67+
68+ s.clearRow(0, tt.x0, tt.x1)
69+
70+ if got := s.RowID(0) != before; got != tt.wantRefresh {
71+ t.Fatalf("row ID refreshed = %t, want %t", got, tt.wantRefresh)
72+ }
73+ })
61 }74 }
62 }75 }
63 76

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 2

Tags 13

↑↓ moveenter openesc close