From c3c09204ab54b1739160dbd0cb17d71f27666b4a Mon Sep 17 00:00:00 2001 From: Onsi Fakhouri Date: Sun, 7 Mar 2021 14:31:11 -0700 Subject: [PATCH] Add Clear() method to gbytes.Buffer --- gbytes/buffer.go | 16 ++++++++++++++++ gbytes/buffer_test.go | 20 ++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/gbytes/buffer.go b/gbytes/buffer.go index 336086f4a..809f3c543 100644 --- a/gbytes/buffer.go +++ b/gbytes/buffer.go @@ -108,6 +108,22 @@ func (b *Buffer) Read(d []byte) (int, error) { return n, nil } +/* +Clear clears out the buffer's contents +*/ +func (b *Buffer) Clear() error { + b.lock.Lock() + defer b.lock.Unlock() + + if b.closed { + return errors.New("attempt to clear closed buffer") + } + + b.contents = []byte{} + b.readCursor = 0 + return nil +} + /* Close signifies that the buffer will no longer be written to */ diff --git a/gbytes/buffer_test.go b/gbytes/buffer_test.go index 9d4e8279d..4319d8d32 100644 --- a/gbytes/buffer_test.go +++ b/gbytes/buffer_test.go @@ -181,6 +181,26 @@ var _ = Describe("Buffer", func() { }) }) + Describe("clearing the buffer", func() { + It("should clear out the contents of the buffer", func() { + buffer.Write([]byte("abc")) + Expect(buffer).To(Say("ab")) + Expect(buffer.Clear()).To(Succeed()) + Expect(buffer).NotTo(Say("c")) + Expect(buffer.Contents()).To(BeEmpty()) + buffer.Write([]byte("123")) + Expect(buffer).To(Say("123")) + Expect(buffer.Contents()).To(Equal([]byte("123"))) + }) + + It("should error when the buffer is closed", func() { + buffer.Write([]byte("abc")) + buffer.Close() + err := buffer.Clear() + Expect(err).To(HaveOccurred()) + }) + }) + Describe("closing the buffer", func() { It("should error when further write attempts are made", func() { _, err := buffer.Write([]byte("abc"))