mock tty using interfaces to test more easily

This commit is contained in:
Adrien Delorme 2019-02-28 14:40:55 +01:00
parent 7f5c794e5f
commit 22df491c67
3 changed files with 17 additions and 3 deletions

5
packer/tty.go Normal file
View File

@ -0,0 +1,5 @@
package packer
type TTY interface {
ReadString() (string, error)
}

View File

@ -82,7 +82,7 @@ type BasicUi struct {
ErrorWriter io.Writer ErrorWriter io.Writer
l sync.Mutex l sync.Mutex
interrupted bool interrupted bool
tty *tty.TTY tty TTY
StackableProgressBar StackableProgressBar
} }
@ -235,7 +235,7 @@ func (rw *BasicUi) Ask(query string) (string, error) {
log.Printf("ui: scan err: %s", err) log.Printf("ui: scan err: %s", err)
return return
} }
result <- line result <- strings.TrimSpace(line)
}() }()
select { select {

View File

@ -34,9 +34,18 @@ func testUi() *BasicUi {
Reader: new(bytes.Buffer), Reader: new(bytes.Buffer),
Writer: new(bytes.Buffer), Writer: new(bytes.Buffer),
ErrorWriter: new(bytes.Buffer), ErrorWriter: new(bytes.Buffer),
tty: new(testTTY),
} }
} }
type testTTY struct {
say string
}
func (tttyy *testTTY) ReadString() (string, error) {
return tttyy.say, nil
}
func TestColoredUi(t *testing.T) { func TestColoredUi(t *testing.T) {
bufferUi := testUi() bufferUi := testUi()
ui := &ColoredUi{UiColorYellow, UiColorRed, bufferUi} ui := &ColoredUi{UiColorYellow, UiColorRed, bufferUi}
@ -217,7 +226,7 @@ func TestBasicUi_Ask(t *testing.T) {
for _, testCase := range testCases { for _, testCase := range testCases {
// Because of the internal bufio we can't easily reset the input, so create a new one each time // Because of the internal bufio we can't easily reset the input, so create a new one each time
bufferUi := testUi() bufferUi := testUi()
writeReader(bufferUi, testCase.Input) bufferUi.tty = &testTTY{testCase.Input}
actual, err = bufferUi.Ask(testCase.Prompt) actual, err = bufferUi.Ask(testCase.Prompt)
if err != nil { if err != nil {