...
1 package jwriter
2
3 import (
4 "bytes"
5 "testing"
6
7 "github.com/stretchr/testify/assert"
8 "github.com/stretchr/testify/require"
9 )
10
11 func TestStreamableBufferInMemoryMode(t *testing.T) {
12 var b streamableBuffer
13 expected := writeTestDataToBuffer(&b)
14 assert.Equal(t, expected, string(b.Bytes()))
15 }
16
17 func TestStreamableBufferFlushDoesNothingByDefault(t *testing.T) {
18 var b streamableBuffer
19 expected := writeTestDataToBuffer(&b)
20 require.NoError(t, b.Flush())
21 assert.Equal(t, expected, string(b.Bytes()))
22 }
23
24 func TestStreamableBufferStreamingMode(t *testing.T) {
25 t.Run("verify full data", func(t *testing.T) {
26 var b streamableBuffer
27 var target bytes.Buffer
28 b.SetStreamingWriter(&target, 20)
29 expected := writeTestDataToBuffer(&b)
30 b.Flush()
31 assert.Equal(t, expected, target.String())
32 })
33
34 t.Run("data is flushed incrementally", func(t *testing.T) {
35 var b streamableBuffer
36 var target bytes.Buffer
37 b.SetStreamingWriter(&target, 10)
38
39 b.WriteString("12345678")
40 assert.Len(t, target.Bytes(), 0)
41
42 b.WriteString("90")
43 assert.Equal(t, "1234567890", target.String())
44
45 b.WriteString("abcdefghijklm")
46 assert.Equal(t, "1234567890abcdefghijklm", target.String())
47
48 b.WriteString("nopqrstu")
49 assert.Equal(t, "1234567890abcdefghijklm", target.String())
50
51 b.WriteRune('v')
52 b.WriteByte('w')
53 assert.Equal(t, "1234567890abcdefghijklmnopqrstuvw", target.String())
54
55 b.WriteString("xyz")
56 b.Flush()
57 assert.Equal(t, "1234567890abcdefghijklmnopqrstuvwxyz", target.String())
58 })
59 }
60
61 func writeTestDataToBuffer(b *streamableBuffer) string {
62 s := "abcdefghijklmnopqrstuvwxyz🐈"
63 expected := ""
64
65 for i := 0; i < 100; i++ {
66 b.WriteString(s)
67 expected += s
68 b.WriteRune('$')
69 b.WriteByte(' ')
70 expected += "$ "
71 }
72
73 return expected
74 }
75
View as plain text