1package visual
2
3import (
4 "errors"
5 "fmt"
6 "testing"
7
8 "github.com/stretchr/testify/require"
9)
10
11// The messages are the ones neferclient v0.2.0 reports through Handler.Error.
12func TestLockErrorPolicyEndsOnlyOnKeyboardFailures(t *testing.T) {
13 fatal := []error{
14 errors.New("neferclient: keymap descriptor unavailable"),
15 fmt.Errorf("neferclient: unsupported keymap format %d or size %d", 2, 0),
16 fmt.Errorf("neferclient: keymap: %w", errors.New("compile failed")),
17 fmt.Errorf("neferclient: keyboard: %w", errors.New("xkb context")),
18 fmt.Errorf("neferclient: bind wl_seat: %w", errors.New("gone")),
19 }
20 benign := []error{
21 fmt.Errorf("neferclient: bind cursor shape manager: %w", errors.New("gone")),
22 fmt.Errorf("neferclient: dmabuf format table index %d out of range", 9),
23 errors.New("neferclient: invalid fractional scale zero"),
24 errors.New("timerfd read: resource temporarily unavailable"),
25 }
26 var reported []error
27 l := &locker{cfg: lockConfig{OnError: func(err error) { reported = append(reported, err) }}}
28 for _, err := range fatal {
29 require.ErrorIs(t, l.errorPolicy(err), err, "%v must end the lock run", err)
30 }
31 require.Empty(t, reported)
32 for _, err := range benign {
33 require.NoError(t, l.errorPolicy(err), "%v must not end the lock run", err)
34 }
35 require.Equal(t, benign, reported)
36}