1package daemon
2
3import (
4 "testing"
5
6 "github.com/stretchr/testify/require"
7)
8
9func TestAttachmentRenderStateTransitions(t *testing.T) {
10 kept, dropped := &pane{}, &pane{}
11 emitted := composeCacheInput{valid: true}
12 tests := []struct {
13 name string
14 apply func(*attachmentRenderState)
15 wantCache bool
16 wantSpare bool
17 wantPanes []*pane
18 }{
19 {name: "commit keeps previous as spare", apply: func(r *attachmentRenderState) { r.commitComposition(emitted) }, wantCache: true, wantSpare: true, wantPanes: []*pane{kept, dropped}},
20 {name: "forget composition keeps panes", apply: (*attachmentRenderState).forgetComposition, wantPanes: []*pane{kept, dropped}},
21 {name: "forget one pane", apply: func(r *attachmentRenderState) { r.forgetPanes(dropped) }, wantCache: true, wantPanes: []*pane{kept}},
22 {name: "forget all panes keeps composition", apply: (*attachmentRenderState).forgetAllPanes, wantCache: true},
23 }
24 for _, tt := range tests {
25 t.Run(tt.name, func(t *testing.T) {
26 var state attachmentRenderState
27 state.commitComposition(emitted)
28 state.storePaneSnapshot(kept, capturedPaneRenderState{})
29 state.storePaneSnapshot(dropped, capturedPaneRenderState{})
30 tt.apply(&state)
31 require.Equal(t, tt.wantCache, state.cache.valid)
32 require.Equal(t, tt.wantSpare, state.spare.valid)
33 require.Len(t, state.panes, len(tt.wantPanes))
34 for _, p := range tt.wantPanes {
35 require.Contains(t, state.panes, p)
36 }
37 })
38 }
39}