detached 3e41022

test(core): build the swipe rig's timer mock before core runs

commit
3e41022427a3ff31e8314678815acae932da9ffc
author
brice · · 2026-10-04 16:03 UTC
committer
brice · · 2026-10-04 19:08 UTC
parent
f2967d7
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
1 file · +7 -7
M internal/core/swipe_test.go +7 -7
@@ -46,13 +46,13 @@ func startSwipe(t *testing.T, edit func(*ports.Config)) *swipeRig {
4646 defer r.mu.Unlock()
4747 return r.now
4848 }).Maybe()
49- // The fallback timer never fires: frames come from the test.
50- clock.EXPECT().NewTimer(mock.Anything).RunAndReturn(func(time.Duration) ports.Timer {
51- timer := portsmocks.NewMockTimer(t)
52- timer.EXPECT().C().Return(make(chan time.Time)).Maybe()
53- timer.EXPECT().Stop().Return(true).Maybe()
54- return timer
55- }).Maybe()
49+ // The fallback timer never fires: frames come from the test. One timer
50+ // built before core runs: a mock created by core while the test ends
51+ // would race its own cleanup check.
52+ timer := portsmocks.NewMockTimer(t)
53+ timer.EXPECT().C().Return(make(chan time.Time)).Maybe()
54+ timer.EXPECT().Stop().Return(true).Maybe()
55+ clock.EXPECT().NewTimer(mock.Anything).Return(timer).Maybe()
5656 c, err := core.New(cfg, core.Channels{Client: r.client, Input: r.input, Output: r.output, Config: r.reload, Commands: r.commands, Scenes: r.scenes, Spawn: r.spawn, State: r.state, Clock: clock, Frames: r.frames})
5757 if err != nil {
5858 t.Fatal(err)
@@ -46,13 +46,13 @@ func startSwipe(t *testing.T, edit func(*ports.Config)) *swipeRig {
46 defer r.mu.Unlock()46 defer r.mu.Unlock()
47 return r.now47 return r.now
48 }).Maybe()48 }).Maybe()
49- // The fallback timer never fires: frames come from the test.49+ // The fallback timer never fires: frames come from the test. One timer
50- clock.EXPECT().NewTimer(mock.Anything).RunAndReturn(func(time.Duration) ports.Timer {50+ // built before core runs: a mock created by core while the test ends
51- timer := portsmocks.NewMockTimer(t)51+ // would race its own cleanup check.
52- timer.EXPECT().C().Return(make(chan time.Time)).Maybe()52+ timer := portsmocks.NewMockTimer(t)
53- timer.EXPECT().Stop().Return(true).Maybe()53+ timer.EXPECT().C().Return(make(chan time.Time)).Maybe()
54- return timer54+ timer.EXPECT().Stop().Return(true).Maybe()
55- }).Maybe()55+ clock.EXPECT().NewTimer(mock.Anything).Return(timer).Maybe()
56 c, err := core.New(cfg, core.Channels{Client: r.client, Input: r.input, Output: r.output, Config: r.reload, Commands: r.commands, Scenes: r.scenes, Spawn: r.spawn, State: r.state, Clock: clock, Frames: r.frames})56 c, err := core.New(cfg, core.Channels{Client: r.client, Input: r.input, Output: r.output, Config: r.reload, Commands: r.commands, Scenes: r.scenes, Spawn: r.spawn, State: r.state, Clock: clock, Frames: r.frames})
57 if err != nil {57 if err != nil {
58 t.Fatal(err)58 t.Fatal(err)

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 26

Tags 10

↑↓ moveenter openesc close