summaryrefslogtreecommitdiff
path: root/reencode_test.go
diff options
context:
space:
mode:
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())
+ })
+}