-
Notifications
You must be signed in to change notification settings - Fork 4
/
interactive_test.go
56 lines (49 loc) · 1.36 KB
/
interactive_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
package clt
import (
"bufio"
"bytes"
"testing"
"github.com/BTBurke/snapshot"
)
func WithTestInput(input string) (*InteractiveSession, *bytes.Buffer) {
var out bytes.Buffer
return &InteractiveSession{
input: bufio.NewReader(bytes.NewBufferString(input)),
output: &out,
}, &out
}
func TestSay(t *testing.T) {
tt := []struct {
Name string
Method string
Prompt string
Default string
ValHint string
Options map[string]string
Input string
Resp string
Validators []ValidationFunc
}{
{Name: "simple ask", Method: "ask", Prompt: "Did this work", Input: "yes\n", Resp: "yes"},
{Name: "simple yn", Method: "yn", Prompt: "Do you want this to work", Input: "y", Default: "n", Resp: "y"},
{Name: "retry yn", Method: "yn", Prompt: "Do you want this to work", Input: "q\ny", Default: "n", Resp: "y"},
}
for _, tc := range tt {
t.Run(tc.Name, func(t *testing.T) {
sess, buf := WithTestInput(tc.Input)
var got string
switch tc.Method {
case "ask":
got = sess.ask(tc.Prompt, tc.Default, tc.ValHint, tc.Validators...)
case "yn":
got = sess.AskYesNo(tc.Prompt, tc.Default)
default:
t.Errorf("unexpected test: %s", tc.Method)
}
if tc.Resp != got {
t.Errorf("interactive session returned bad response, expected %s, got %s", tc.Resp, got)
}
snapshot.Assert(t, buf.Bytes())
})
}
}