1package main
2
3import (
4 "errors"
5 "testing"
6
7 "github.com/bnema/vev/internal/app"
8)
9
10func TestCLIError(t *testing.T) {
11 tests := []struct {
12 name string
13 err error
14 want string
15 }{
16 {
17 name: "usage error",
18 err: runError([]string{"unknown"}),
19 want: `vev: unknown command "unknown"`,
20 },
21 {
22 name: "domain validation error",
23 err: runError([]string{"new", "invalid name"}),
24 want: "vev: invalid session name: must match [A-Za-z0-9][A-Za-z0-9._-]{0,63}",
25 },
26 {
27 name: "daemon error",
28 err: errors.New("vev: daemon listen: address already in use"),
29 want: "vev: daemon listen: address already in use",
30 },
31 {
32 name: "session error",
33 err: errors.New("vev: no such session: work"),
34 want: "vev: no such session: work",
35 },
36 {
37 name: "repeated prefix",
38 err: errors.New("vev: vev: message"),
39 want: "vev: message",
40 },
41 {
42 name: "prefix whitespace",
43 err: errors.New("vev:\t message"),
44 want: "vev: message",
45 },
46 }
47
48 for _, tt := range tests {
49 t.Run(tt.name, func(t *testing.T) {
50 if got := cliError(tt.err); got != tt.want {
51 t.Errorf("cliError(%v) = %q, want %q", tt.err, got, tt.want)
52 }
53 })
54 }
55}
56
57func runError(args []string) error {
58 return app.Run(args)
59}