package packer import ( "bytes" "cgl.tideland.biz/asserts" "testing" ) func testUi() *BasicUi { return &BasicUi{ Reader: new(bytes.Buffer), Writer: new(bytes.Buffer), } } func TestColoredUi(t *testing.T) { bufferUi := testUi() ui := &ColoredUi{UiColorYellow, UiColorRed, bufferUi} ui.Say("foo") result := readWriter(bufferUi) if result != "\033[1;33;40mfoo\033[0m\n" { t.Fatalf("invalid output: %s", result) } ui.Message("foo") result = readWriter(bufferUi) if result != "\033[0;33;40mfoo\033[0m\n" { t.Fatalf("invalid output: %s", result) } ui.Error("foo") result = readWriter(bufferUi) if result != "\033[1;31;40mfoo\033[0m\n" { t.Fatalf("invalid output: %s", result) } } func TestTargettedUi(t *testing.T) { assert := asserts.NewTestingAsserts(t, true) bufferUi := testUi() TargettedUi := &TargettedUi{ Target: "foo", Ui: bufferUi, } TargettedUi.Say("foo") assert.Equal(readWriter(bufferUi), "==> foo: foo\n", "should have prefix") TargettedUi.Message("foo") assert.Equal(readWriter(bufferUi), " foo: foo\n", "should have prefix") TargettedUi.Error("bar") assert.Equal(readWriter(bufferUi), "==> foo: bar\n", "should have prefix") TargettedUi.Say("foo\nbar") assert.Equal(readWriter(bufferUi), "==> foo: foo\n==> foo: bar\n", "should multiline") } func TestColoredUi_ImplUi(t *testing.T) { var raw interface{} raw = &ColoredUi{} if _, ok := raw.(Ui); !ok { t.Fatalf("ColoredUi must implement Ui") } } func TestTargettedUi_ImplUi(t *testing.T) { var raw interface{} raw = &TargettedUi{} if _, ok := raw.(Ui); !ok { t.Fatalf("TargettedUi must implement Ui") } } func TestBasicUi_ImplUi(t *testing.T) { var raw interface{} raw = &BasicUi{} if _, ok := raw.(Ui); !ok { t.Fatalf("BasicUi must implement Ui") } } func TestBasicUi_Error(t *testing.T) { assert := asserts.NewTestingAsserts(t, true) bufferUi := testUi() bufferUi.Error("foo") assert.Equal(readWriter(bufferUi), "foo\n", "basic output") bufferUi.Error("5") assert.Equal(readWriter(bufferUi), "5\n", "formatting") } func TestBasicUi_Say(t *testing.T) { assert := asserts.NewTestingAsserts(t, true) bufferUi := testUi() bufferUi.Say("foo") assert.Equal(readWriter(bufferUi), "foo\n", "basic output") bufferUi.Say("5") assert.Equal(readWriter(bufferUi), "5\n", "formatting") } // This reads the output from the bytes.Buffer in our test object // and then resets the buffer. func readWriter(ui *BasicUi) (result string) { buffer := ui.Writer.(*bytes.Buffer) result = buffer.String() buffer.Reset() return }