1package app
2
3import "testing"
4
5func TestParseVEVEnv(t *testing.T) {
6 tests := []struct {
7 name string
8 env string
9 session string
10 tab string
11 pane string
12 ok bool
13 }{
14 {"normal", "session=dev,tab=t_abc,pane=p_def", "dev", "t_abc", "p_def", true},
15 {"escaped components", "session=a%20b,tab=t%2Cx,pane=p%3Dy", "a b", "t,x", "p=y", true},
16 {"empty", "", "", "", "", false},
17 {"missing pane", "session=dev,tab=t_abc", "", "", "", false},
18 {"garbage", "not-a-vev-value", "", "", "", false},
19 {"unknown key", "session=dev,tab=t_abc,pane=p_def,extra=x", "", "", "", false},
20 {"duplicate key", "session=dev,session=other,tab=t_abc,pane=p_def", "", "", "", false},
21 {"bad escape", "session=dev%2,tab=t_abc,pane=p_def", "", "", "", false},
22 {"lowercase escape is invalid", "session=dev%2fwork,tab=t_abc,pane=p_def", "", "", "", false},
23 {"unescaped byte is invalid", "session=dev work,tab=t_abc,pane=p_def", "", "", "", false},
24 {"raw UTF-8 is invalid", "session=dév,tab=t_abc,pane=p_def", "", "", "", false},
25 {"empty component", "session=dev,tab=,pane=p_def", "", "", "", false},
26 }
27 for _, tt := range tests {
28 t.Run(tt.name, func(t *testing.T) {
29 got, ok := parseVEVEnv(tt.env)
30 if ok != tt.ok {
31 t.Fatalf("parseVEVEnv(%q) ok = %v, want %v", tt.env, ok, tt.ok)
32 }
33 if ok && (got.session != tt.session || got.tab != tt.tab || got.pane != tt.pane) {
34 t.Fatalf("parseVEVEnv(%q) = %+v", tt.env, got)
35 }
36 })
37 }
38}