1package config
2
3import (
4 "strings"
5 "testing"
6
7 "github.com/stretchr/testify/require"
8
9 "github.com/bnema/vev/internal/domain"
10 "github.com/bnema/vev/internal/domain/terminalcap"
11)
12
13func TestParseTerminalColors(t *testing.T) {
14 for _, tt := range []struct {
15 name string
16 input string
17 want domain.TerminalConfig
18 warnings int
19 }{
20 {"default is auto", "", domain.TerminalConfig{}, 0},
21 {"auto", "terminal.colors = auto", domain.TerminalConfig{}, 0},
22 {"truecolor", "terminal.colors = truecolor", domain.TerminalConfig{Colors: terminalcap.TrueColor, ColorsSet: true}, 0},
23 {"256", "terminal.colors = 256", domain.TerminalConfig{Colors: terminalcap.ANSI256, ColorsSet: true}, 0},
24 {"16", "terminal.colors = 16", domain.TerminalConfig{Colors: terminalcap.ANSI16, ColorsSet: true}, 0},
25 {"mono", "terminal.colors = mono", domain.TerminalConfig{Colors: terminalcap.Monochrome, ColorsSet: true}, 0},
26 {"case-insensitive", "terminal.colors = TrueColor", domain.TerminalConfig{Colors: terminalcap.TrueColor, ColorsSet: true}, 0},
27 {"empty value is auto", "terminal.colors =", domain.TerminalConfig{}, 0},
28 {"inline comment", "terminal.colors = 16 # linux console", domain.TerminalConfig{Colors: terminalcap.ANSI16, ColorsSet: true}, 0},
29 {"invalid keeps default", "terminal.colors = rainbow", domain.TerminalConfig{}, 1},
30 {"invalid keeps earlier valid", "terminal.colors = 16\nterminal.colors = rainbow", domain.TerminalConfig{Colors: terminalcap.ANSI16, ColorsSet: true}, 2},
31 {"duplicate last wins with warning", "terminal.colors = 16\nterminal.colors = mono", domain.TerminalConfig{Colors: terminalcap.Monochrome, ColorsSet: true}, 1},
32 {"later auto clears earlier override", "terminal.colors = 16\nterminal.colors = auto", domain.TerminalConfig{}, 1},
33 } {
34 t.Run(tt.name, func(t *testing.T) {
35 cfg, warnings, err := Parse(strings.NewReader(tt.input))
36 require.NoError(t, err)
37 require.Equal(t, tt.want, cfg.Terminal)
38 require.Len(t, warnings, tt.warnings)
39 require.Empty(t, cfg.BindingEntries)
40 })
41 }
42}