packer: Add PrefixedUi

This commit is contained in:
Mitchell Hashimoto 2013-05-21 13:20:51 -07:00
parent cc4970d424
commit 2c4a873a5f
2 changed files with 44 additions and 0 deletions

View File

@ -14,6 +14,13 @@ type Ui interface {
Error(format string, a ...interface{}) Error(format string, a ...interface{})
} }
// PrefixedUi is a UI that wraps another UI implementation and adds a
// prefix to all the messages going out.
type PrefixedUi struct {
Prefix string
Ui Ui
}
// The ReaderWriterUi is a UI that writes and reads from standard Go // The ReaderWriterUi is a UI that writes and reads from standard Go
// io.Reader and io.Writer. // io.Reader and io.Writer.
type ReaderWriterUi struct { type ReaderWriterUi struct {
@ -21,6 +28,14 @@ type ReaderWriterUi struct {
Writer io.Writer Writer io.Writer
} }
func (u *PrefixedUi) Say(format string, a ...interface{}) {
u.Ui.Say(fmt.Sprintf("%s: %s", u.Prefix, format), a...)
}
func (u *PrefixedUi) Error(format string, a ...interface{}) {
u.Ui.Error(fmt.Sprintf("%s: %s", u.Prefix, format), a...)
}
func (rw *ReaderWriterUi) Say(format string, a ...interface{}) { func (rw *ReaderWriterUi) Say(format string, a ...interface{}) {
output := fmt.Sprintf(format, a...) output := fmt.Sprintf(format, a...)
log.Printf("ui: %s", output) log.Printf("ui: %s", output)

View File

@ -13,6 +13,35 @@ func testUi() *ReaderWriterUi {
} }
} }
func TestPrefixedUi(t *testing.T) {
assert := asserts.NewTestingAsserts(t, true)
bufferUi := testUi()
prefixUi := &PrefixedUi{"mitchell", bufferUi}
prefixUi.Say("foo")
assert.Equal(readWriter(bufferUi), "mitchell: foo\n", "should have prefix")
prefixUi.Error("bar")
assert.Equal(readWriter(bufferUi), "mitchell: bar\n", "should have prefix")
}
func TestPrefixedUi_ImplUi(t *testing.T) {
var raw interface{}
raw = &PrefixedUi{}
if _, ok := raw.(Ui); !ok {
t.Fatalf("PrefixedUi must implement Ui")
}
}
func TestReaderWriterUi_ImplUi(t *testing.T) {
var raw interface{}
raw = &ReaderWriterUi{}
if _, ok := raw.(Ui); !ok {
t.Fatalf("ReaderWriterUi must implement Ui")
}
}
func TestReaderWriterUi_Error(t *testing.T) { func TestReaderWriterUi_Error(t *testing.T) {
assert := asserts.NewTestingAsserts(t, true) assert := asserts.NewTestingAsserts(t, true)