1package config
2
3import (
4 "strings"
5 "testing"
6
7 "github.com/bnema/vev/internal/domain"
8 "github.com/stretchr/testify/require"
9)
10
11func TestParseScrollbackPolicy(t *testing.T) {
12 for _, tt := range []struct {
13 name, input string
14 want domain.ScrollbackConfig
15 warnings int
16 }{
17 {"defaults", "", domain.DefaultScrollbackConfig(), 0},
18 {"bytes only", "scrollback.megabytes = 20\nscrollback.lines = 0", domain.ScrollbackConfig{Megabytes: 20}, 0},
19 {"disabled", "scrollback.megabytes = 0", domain.ScrollbackConfig{Lines: 10_000}, 0},
20 {"both limits", "scrollback.megabytes = 10\nscrollback.lines = 100", domain.ScrollbackConfig{Megabytes: 10, Lines: 100}, 0},
21 {"upper bounds", "scrollback.megabytes = 4096\nscrollback.lines = 1000000", domain.ScrollbackConfig{Megabytes: 4096, Lines: 1_000_000}, 0},
22 {"negative bytes", "scrollback.megabytes = -1", domain.DefaultScrollbackConfig(), 1},
23 {"negative lines", "scrollback.lines = -1", domain.DefaultScrollbackConfig(), 1},
24 {"oversized bytes", "scrollback.megabytes = 4097", domain.DefaultScrollbackConfig(), 1},
25 {"oversized lines", "scrollback.lines = 1000001", domain.DefaultScrollbackConfig(), 1},
26 {"overflow", "scrollback.megabytes = 18446744073709551616", domain.DefaultScrollbackConfig(), 1},
27 {"duplicate invalid keeps valid", "scrollback.megabytes = 20\nscrollback.megabytes = -1", domain.ScrollbackConfig{Megabytes: 20, Lines: 10_000}, 2},
28 } {
29 t.Run(tt.name, func(t *testing.T) {
30 cfg, warnings, err := Parse(strings.NewReader(tt.input))
31 require.NoError(t, err)
32 require.Equal(t, tt.want, cfg.Scrollback)
33 require.Len(t, warnings, tt.warnings)
34 require.Empty(t, cfg.BindingEntries)
35 })
36 }
37}