summaryrefslogtreecommitdiff
path: root/vendor/github.com/onsi/ginkgo/internal/writer
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/onsi/ginkgo/internal/writer')
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/writer/fake_writer.go36
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/writer/writer.go89
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/writer/writer_suite_test.go13
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/writer/writer_test.go75
4 files changed, 213 insertions, 0 deletions
diff --git a/vendor/github.com/onsi/ginkgo/internal/writer/fake_writer.go b/vendor/github.com/onsi/ginkgo/internal/writer/fake_writer.go
new file mode 100644
index 000000000..6739c3f60
--- /dev/null
+++ b/vendor/github.com/onsi/ginkgo/internal/writer/fake_writer.go
@@ -0,0 +1,36 @@
+package writer
+
+type FakeGinkgoWriter struct {
+ EventStream []string
+}
+
+func NewFake() *FakeGinkgoWriter {
+ return &FakeGinkgoWriter{
+ EventStream: []string{},
+ }
+}
+
+func (writer *FakeGinkgoWriter) AddEvent(event string) {
+ writer.EventStream = append(writer.EventStream, event)
+}
+
+func (writer *FakeGinkgoWriter) Truncate() {
+ writer.EventStream = append(writer.EventStream, "TRUNCATE")
+}
+
+func (writer *FakeGinkgoWriter) DumpOut() {
+ writer.EventStream = append(writer.EventStream, "DUMP")
+}
+
+func (writer *FakeGinkgoWriter) DumpOutWithHeader(header string) {
+ writer.EventStream = append(writer.EventStream, "DUMP_WITH_HEADER: "+header)
+}
+
+func (writer *FakeGinkgoWriter) Bytes() []byte {
+ writer.EventStream = append(writer.EventStream, "BYTES")
+ return nil
+}
+
+func (writer *FakeGinkgoWriter) Write(data []byte) (n int, err error) {
+ return 0, nil
+}
diff --git a/vendor/github.com/onsi/ginkgo/internal/writer/writer.go b/vendor/github.com/onsi/ginkgo/internal/writer/writer.go
new file mode 100644
index 000000000..98eca3bdd
--- /dev/null
+++ b/vendor/github.com/onsi/ginkgo/internal/writer/writer.go
@@ -0,0 +1,89 @@
+package writer
+
+import (
+ "bytes"
+ "io"
+ "sync"
+)
+
+type WriterInterface interface {
+ io.Writer
+
+ Truncate()
+ DumpOut()
+ DumpOutWithHeader(header string)
+ Bytes() []byte
+}
+
+type Writer struct {
+ buffer *bytes.Buffer
+ outWriter io.Writer
+ lock *sync.Mutex
+ stream bool
+ redirector io.Writer
+}
+
+func New(outWriter io.Writer) *Writer {
+ return &Writer{
+ buffer: &bytes.Buffer{},
+ lock: &sync.Mutex{},
+ outWriter: outWriter,
+ stream: true,
+ }
+}
+
+func (w *Writer) AndRedirectTo(writer io.Writer) {
+ w.redirector = writer
+}
+
+func (w *Writer) SetStream(stream bool) {
+ w.lock.Lock()
+ defer w.lock.Unlock()
+ w.stream = stream
+}
+
+func (w *Writer) Write(b []byte) (n int, err error) {
+ w.lock.Lock()
+ defer w.lock.Unlock()
+
+ n, err = w.buffer.Write(b)
+ if w.redirector != nil {
+ w.redirector.Write(b)
+ }
+ if w.stream {
+ return w.outWriter.Write(b)
+ }
+ return n, err
+}
+
+func (w *Writer) Truncate() {
+ w.lock.Lock()
+ defer w.lock.Unlock()
+ w.buffer.Reset()
+}
+
+func (w *Writer) DumpOut() {
+ w.lock.Lock()
+ defer w.lock.Unlock()
+ if !w.stream {
+ w.buffer.WriteTo(w.outWriter)
+ }
+}
+
+func (w *Writer) Bytes() []byte {
+ w.lock.Lock()
+ defer w.lock.Unlock()
+ b := w.buffer.Bytes()
+ copied := make([]byte, len(b))
+ copy(copied, b)
+ return copied
+}
+
+func (w *Writer) DumpOutWithHeader(header string) {
+ w.lock.Lock()
+ defer w.lock.Unlock()
+ if !w.stream && w.buffer.Len() > 0 {
+ w.outWriter.Write([]byte(header))
+ w.buffer.WriteTo(w.outWriter)
+ }
+}
diff --git a/vendor/github.com/onsi/ginkgo/internal/writer/writer_suite_test.go b/vendor/github.com/onsi/ginkgo/internal/writer/writer_suite_test.go
new file mode 100644
index 000000000..e20657791
--- /dev/null
+++ b/vendor/github.com/onsi/ginkgo/internal/writer/writer_suite_test.go
@@ -0,0 +1,13 @@
+package writer_test
+
+import (
+ . "github.com/onsi/ginkgo"
+ . "github.com/onsi/gomega"
+
+ "testing"
+)
+
+func TestWriter(t *testing.T) {
+ RegisterFailHandler(Fail)
+ RunSpecs(t, "Writer Suite")
+}
diff --git a/vendor/github.com/onsi/ginkgo/internal/writer/writer_test.go b/vendor/github.com/onsi/ginkgo/internal/writer/writer_test.go
new file mode 100644
index 000000000..3e1d17c6d
--- /dev/null
+++ b/vendor/github.com/onsi/ginkgo/internal/writer/writer_test.go
@@ -0,0 +1,75 @@
+package writer_test
+
+import (
+ "github.com/onsi/gomega/gbytes"
+
+ . "github.com/onsi/ginkgo"
+ . "github.com/onsi/ginkgo/internal/writer"
+ . "github.com/onsi/gomega"
+)
+
+var _ = Describe("Writer", func() {
+ var writer *Writer
+ var out *gbytes.Buffer
+
+ BeforeEach(func() {
+ out = gbytes.NewBuffer()
+ writer = New(out)
+ })
+
+ It("should stream directly to the outbuffer by default", func() {
+ writer.Write([]byte("foo"))
+ Ω(out).Should(gbytes.Say("foo"))
+ })
+
+ It("should not emit the header when asked to DumpOutWitHeader", func() {
+ writer.Write([]byte("foo"))
+ writer.DumpOutWithHeader("my header")
+ Ω(out).ShouldNot(gbytes.Say("my header"))
+ Ω(out).Should(gbytes.Say("foo"))
+ })
+
+ Context("when told not to stream", func() {
+ BeforeEach(func() {
+ writer.SetStream(false)
+ })
+
+ It("should only write to the buffer when told to DumpOut", func() {
+ writer.Write([]byte("foo"))
+ Ω(out).ShouldNot(gbytes.Say("foo"))
+ writer.DumpOut()
+ Ω(out).Should(gbytes.Say("foo"))
+ })
+
+ It("should truncate the internal buffer when told to truncate", func() {
+ writer.Write([]byte("foo"))
+ writer.Truncate()
+ writer.DumpOut()
+ Ω(out).ShouldNot(gbytes.Say("foo"))
+
+ writer.Write([]byte("bar"))
+ writer.DumpOut()
+ Ω(out).Should(gbytes.Say("bar"))
+ })
+
+ Describe("emitting a header", func() {
+ Context("when the buffer has content", func() {
+ It("should emit the header followed by the content", func() {
+ writer.Write([]byte("foo"))
+ writer.DumpOutWithHeader("my header")
+
+ Ω(out).Should(gbytes.Say("my header"))
+ Ω(out).Should(gbytes.Say("foo"))
+ })
+ })
+
+ Context("when the buffer has no content", func() {
+ It("should not emit the header", func() {
+ writer.DumpOutWithHeader("my header")
+
+ Ω(out).ShouldNot(gbytes.Say("my header"))
+ })
+ })
+ })
+ })
+})