-
Notifications
You must be signed in to change notification settings - Fork 0
/
cli_provider_test.go
125 lines (114 loc) · 2.72 KB
/
cli_provider_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package config
import (
"fmt"
"reflect"
"sort"
"strings"
"testing"
)
func TestCliProviderSetUp(t *testing.T) {
tests := []struct {
name string
registry map[string]Value
wantRegs []string
}{
{
"An empty map",
map[string]Value{},
[]string{},
},
{
"A sample map",
map[string]Value{
"foo.bar": 42,
"foo.baz": true,
"moo": []string{"a", "b", "c"},
},
[]string{"foo.bar", "foo.baz", "moo"},
},
}
t.Parallel()
for _, testCase := range tests {
t.Run(testCase.name, func(t *testing.T) {
// Redefined function
oldRegFlags := regFlags
regFlags = func(cp *CliProvider) {
for k, v := range testCase.registry {
cp.registry[k] = v
}
}
repo := NewRepository()
prov, err := NewCliProvider(repo, 0)
if err != nil {
t.Fatalf("Failed to initialize a new cli provider: %s", err)
}
if err := prov.SetUp(repo); err != nil {
t.Fatalf("Failed to set up cli provider: %s", err)
}
gotRegs := flattenRepo(repo)
for _, k := range testCase.wantRegs {
provs, ok := gotRegs[k]
if !ok {
t.Fatalf("Failed to find a registration for key %q", k)
}
if !reflect.DeepEqual(provs, []Provider{prov}) {
t.Fatalf("Unexpected provider list for key %q: %#v, want: %#v", k, provs, []Provider{prov})
}
delete(gotRegs, k)
}
if len(gotRegs) > 0 {
extraKeys := make([]string, 0, len(gotRegs))
for k := range gotRegs {
extraKeys = append(extraKeys, k)
}
sort.Strings(extraKeys)
t.Fatalf("Unexpected registration keys: %s", strings.Join(extraKeys, ", "))
}
regFlags = oldRegFlags
})
}
}
func TestCliProviderSet(t *testing.T) {
tests := []struct {
name string
setVal string
wantRegistry map[string]Value
wantErr error
}{
{
"A bool flag",
"foo",
map[string]Value{"foo": true},
nil,
},
{
"A simple value",
"foo=bar",
map[string]Value{"foo": "bar"},
nil,
},
{
"Way too many = signs",
"foo=bar=baz",
map[string]Value{},
fmt.Errorf("Possibly malformed flag (way too many `=`): %q", "foo=bar=baz"),
},
}
t.Parallel()
for _, testCase := range tests {
t.Run(testCase.name, func(t *testing.T) {
repo := NewRepository()
prov, err := NewCliProvider(repo, 0)
if err != nil {
t.Fatalf("Failed to instantiate a new cli provider: %s", err)
}
err = prov.Set(testCase.setVal)
if !reflect.DeepEqual(err, testCase.wantErr) {
t.Fatalf("Unexpected error while calling CliProvider.Set(%q): %s, want: %s", testCase.setVal, err, testCase.wantErr)
}
if !reflect.DeepEqual(prov.registry, testCase.wantRegistry) {
t.Fatalf("Unexpected state for CliProvider.registry: want: %#v, got: %#v", testCase.wantRegistry, prov.registry)
}
})
}
}