summaryrefslogtreecommitdiff
path: root/reencode_test.go
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2023-02-15 15:10:00 -0700
committerLuke Shumaker <lukeshu@lukeshu.com>2023-02-18 22:45:54 -0700
commit7a938da20e8d243bc254cd821b7cf61b379be4a6 (patch)
treefa4844592ff59b0cdce06fcd758afa306725f2bb /reencode_test.go
parent49319198500729fd65bd6d69071f45f2d7ae2aa7 (diff)
reencode: Rethink the UTF-8 buffer
Diffstat (limited to 'reencode_test.go')
-rw-r--r--reencode_test.go61
1 files changed, 61 insertions, 0 deletions
diff --git a/reencode_test.go b/reencode_test.go
index f135aa5..82a1861 100644
--- a/reencode_test.go
+++ b/reencode_test.go
@@ -161,3 +161,64 @@ func TestReEncode(t *testing.T) {
})
}
}
+
+func TestReEncodeWriteSize(t *testing.T) {
+ t.Parallel()
+
+ multibyteRune := `😂`
+ assert.Len(t, multibyteRune, 4)
+
+ input := `"` + multibyteRune + `"`
+
+ t.Run("bytes-bigwrite", func(t *testing.T) {
+ t.Parallel()
+ var out strings.Builder
+ enc := NewReEncoder(&out, ReEncoderConfig{})
+
+ n, err := enc.Write([]byte(input))
+ assert.NoError(t, err)
+ assert.Equal(t, len(input), n)
+
+ assert.Equal(t, input, out.String())
+ })
+ t.Run("string-bigwrite", func(t *testing.T) {
+ t.Parallel()
+ var out strings.Builder
+ enc := NewReEncoder(&out, ReEncoderConfig{})
+
+ n, err := enc.WriteString(input)
+ assert.NoError(t, err)
+ assert.Equal(t, len(input), n)
+
+ assert.Equal(t, input, out.String())
+ })
+
+ t.Run("bytes-smallwrites", func(t *testing.T) {
+ t.Parallel()
+ var out strings.Builder
+ enc := NewReEncoder(&out, ReEncoderConfig{})
+
+ var buf [1]byte
+ for i := 0; i < len(input); i++ {
+ buf[0] = input[i]
+ n, err := enc.Write(buf[:])
+ assert.NoError(t, err)
+ assert.Equal(t, 1, n)
+ }
+
+ assert.Equal(t, input, out.String())
+ })
+ t.Run("string-smallwrites", func(t *testing.T) {
+ t.Parallel()
+ var out strings.Builder
+ enc := NewReEncoder(&out, ReEncoderConfig{})
+
+ for i := 0; i < len(input); i++ {
+ n, err := enc.WriteString(input[i : i+1])
+ assert.NoError(t, err)
+ assert.Equal(t, 1, n)
+ }
+
+ assert.Equal(t, input, out.String())
+ })
+}