1package ui_test
2
3import (
4	"bytes"
5	"fmt"
6	"io"
7
8	. "github.com/onsi/ginkgo"
9	. "github.com/onsi/gomega"
10
11	. "github.com/cloudfoundry/bosh-cli/ui"
12	boshlog "github.com/cloudfoundry/bosh-utils/logger"
13)
14
15var _ = Describe("ComboWriter", func() {
16	var (
17		outBuffer *bytes.Buffer
18		errBuffer *bytes.Buffer
19		ui        UI
20		w         io.Writer
21	)
22
23	BeforeEach(func() {
24		outBuffer = bytes.NewBufferString("")
25		errBuffer = bytes.NewBufferString("")
26		logger := boshlog.NewLogger(boshlog.LevelNone)
27		ui = NewWriterUI(outBuffer, errBuffer, logger)
28		w = NewComboWriter(ui).Writer("prefix: ")
29	})
30
31	Describe("Writer.Write", func() {
32		type Example struct {
33			Ins []string
34			Out string
35		}
36
37		examples := []Example{
38			{Ins: []string{""}, Out: ""},
39			{Ins: []string{"", ""}, Out: ""},
40			{Ins: []string{"\n"}, Out: "prefix: \n"},
41			{Ins: []string{"", "\n"}, Out: "prefix: \n"},
42			{Ins: []string{"\n\n", "\n"}, Out: "prefix: \nprefix: \nprefix: \n"},
43			{Ins: []string{"piece1"}, Out: "prefix: piece1"},
44			{Ins: []string{"piece1", "piece2"}, Out: "prefix: piece1piece2"},
45			{Ins: []string{"piece1", "piece2\n"}, Out: "prefix: piece1piece2\n"},
46			{Ins: []string{"\npiece1", "piece2"}, Out: "prefix: \nprefix: piece1piece2"},
47			{Ins: []string{"piece1", "\npiece2"}, Out: "prefix: piece1\nprefix: piece2"},
48			{Ins: []string{"piece1\n", "piece2"}, Out: "prefix: piece1\nprefix: piece2"},
49		}
50
51		for i, ex := range examples {
52			ex := ex
53
54			It(fmt.Sprintf("prints correctly '%d'", i), func() {
55				for _, in := range ex.Ins {
56					w.Write([]byte(in))
57				}
58				Expect(outBuffer.String()).To(Equal(ex.Out))
59			})
60		}
61	})
62})
63