diff --git a/dec_skip_cases_test.go b/dec_skip_cases_test.go index 90fd73a..f6465fb 100644 --- a/dec_skip_cases_test.go +++ b/dec_skip_cases_test.go @@ -319,7 +319,7 @@ var testStrings = append([]string{ "\"\\ueeee\"", // valid "\"\\uFFFF\"", // valid `"ab\n` + "\x00" + `"`, // invalid - `"\n0123456"`, + `"\n0123456"`, // valid }, func() (r []string) { // Generate tests for invalid space sequences. for i := byte(0); i <= ' '; i++ { diff --git a/enc_str_test.go b/enc_str_test.go index 1fb073e..5e5988c 100644 --- a/enc_str_test.go +++ b/enc_str_test.go @@ -2,6 +2,7 @@ package jx import ( "encoding/json" + "fmt" "testing" "github.com/stretchr/testify/assert" @@ -17,66 +18,47 @@ func TestEncoder_StringEscape(t *testing.T) { require.Equal(t, expected, string(s.Bytes())) } -func TestEncoder_String(t *testing.T) { +func TestEncoder_Str(t *testing.T) { testCases := []struct { - name, input, expect string + input string }{ - {`Empty`, ``, `""`}, - {`Simple`, `abcd`, `"abcd"`}, + {``}, + {`abcd`}, { - `Escape`, `abcd\nH\tel\tl\ro\\World\r` + "\n\rHello\r\tHi", - `"abcd\\nH\\tel\\tl\\ro\\\\World\\r\n\rHello\r\tHi"`, }, + {"\x00"}, + {"\x00 "}, + {`"hello, world!"`}, } - for _, tt := range testCases { - t.Run(tt.name, func(t *testing.T) { - e := GetEncoder() - e.Str(tt.input) - require.Equal(t, tt.expect, string(e.Bytes())) - requireCompat(t, e.Bytes(), tt.input) - t.Run("Decode", func(t *testing.T) { - i := GetDecoder() - i.ResetBytes(e.Bytes()) - s, err := i.Str() - require.NoError(t, err) - require.Equal(t, tt.input, s) - }) + for i, tt := range testCases { + tt := tt + t.Run(fmt.Sprintf("Test%d", i+1), func(t *testing.T) { + for _, enc := range []struct { + name string + enc func(e *Encoder, input string) + }{ + {"Str", (*Encoder).Str}, + {"Bytes", func(e *Encoder, input string) { + e.ByteStr([]byte(tt.input)) + }}, + } { + enc := enc + t.Run(enc.name, func(t *testing.T) { + e := GetEncoder() + enc.enc(e, tt.input) + requireCompat(t, e.Bytes(), tt.input) + t.Run("Decode", func(t *testing.T) { + i := GetDecoder() + i.ResetBytes(e.Bytes()) + s, err := i.Str() + require.NoError(t, err) + require.Equal(t, tt.input, s) + }) + }) + } }) } - t.Run("StrEscapeFast", func(t *testing.T) { - e := GetEncoder() - e.StrEscape("Foo") - require.Equal(t, `"Foo"`, e.String()) - }) - t.Run("StrEscapeBad", func(t *testing.T) { - e := GetEncoder() - e.StrEscape("\uFFFD") - require.Equal(t, `"�"`, e.String()) - v, err := DecodeBytes(e.Bytes()).Str() - require.NoError(t, err) - require.Equal(t, "�", v) - }) - t.Run("BadUnicode", func(t *testing.T) { - e := GetEncoder() - e.StrEscape("a\xc5z") - require.Equal(t, `"a\ufffdz"`, e.String()) - v, err := DecodeBytes(e.Bytes()).Str() - require.NoError(t, err) - require.Equal(t, "a�z", v) - }) - t.Run("Emoji", func(t *testing.T) { - e := GetEncoder() - e.Str(string([]byte{240, 159, 144, 152})) - v, err := DecodeBytes(e.Bytes()).Str() - require.NoError(t, err) - require.Equal(t, "🐘", v) - }) - t.Run("BadUnicodeAfterSafeEscape", func(t *testing.T) { - e := GetEncoder() - e.StrEscape("