diff --git a/skip_tests/array/inputs.go b/skip_tests/array/inputs.go deleted file mode 100644 index 8fb74ac..0000000 --- a/skip_tests/array/inputs.go +++ /dev/null @@ -1,12 +0,0 @@ -package test - -type typeForTest []interface{} - -var inputs = []string{ - `[]`, // valid - `[1]`, // valid - `[ 1, "hello"]`, // valid - `[abc]`, // invalid - `[`, // invalid - `[[]`, // invalid -} diff --git a/skip_tests/array/skip_test.go b/skip_tests/array/skip_test.go deleted file mode 100644 index 8d24ef0..0000000 --- a/skip_tests/array/skip_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package test - -import ( - "encoding/json" - "errors" - "github.com/json-iterator/go" - "github.com/stretchr/testify/require" - "io" - "testing" -) - -func Test_skip(t *testing.T) { - for _, input := range inputs { - t.Run(input, func(t *testing.T) { - should := require.New(t) - var dst typeForTest - stdErr := json.Unmarshal([]byte(input), &dst) - iter := jsoniter.ParseString(jsoniter.ConfigDefault, input) - iter.Skip() - iter.ReadNil() // trigger looking forward - err := iter.Error - if err == io.EOF { - err = nil - } else { - err = errors.New("remaining bytes") - } - if stdErr == nil { - should.Nil(err) - } else { - should.NotNil(err) - } - }) - } -} diff --git a/skip_tests/array_test.go b/skip_tests/array_test.go new file mode 100644 index 0000000..12e42a1 --- /dev/null +++ b/skip_tests/array_test.go @@ -0,0 +1,15 @@ +package skip_tests + +func init() { + testCases = append(testCases, testCase{ + ptr: (*[]interface{})(nil), + inputs: []string{ + `[]`, // valid + `[1]`, // valid + `[ 1, "hello"]`, // valid + `[abc]`, // invalid + `[`, // invalid + `[[]`, // invalid + }, + }) +} diff --git a/skip_tests/float64_test.go b/skip_tests/float64_test.go new file mode 100644 index 0000000..bc90f24 --- /dev/null +++ b/skip_tests/float64_test.go @@ -0,0 +1,20 @@ +package skip_tests + +func init() { + testCases = append(testCases, testCase{ + ptr: (*float64)(nil), + inputs: []string{ + "+1", // invalid + "-a", // invalid + "-\x00", // invalid, zero byte + "0.1", // valid + "0..1", // invalid, more dot + "1e+1", // valid + "1+1", // invalid + "1E1", // valid, e or E + "1ee1", // invalid + "100a", // invalid + "10.", // invalid + }, + }) +} diff --git a/skip_tests/number/inputs.go b/skip_tests/number/inputs.go deleted file mode 100644 index 4eaca2f..0000000 --- a/skip_tests/number/inputs.go +++ /dev/null @@ -1,17 +0,0 @@ -package test - -type typeForTest float64 - -var inputs = []string{ - "+1", // invalid - "-a", // invalid - "-\x00", // invalid, zero byte - "0.1", // valid - "0..1", // invalid, more dot - "1e+1", // valid - "1+1", // invalid - "1E1", // valid, e or E - "1ee1", // invalid - "100a", // invalid - "10.", // invalid -} diff --git a/skip_tests/number/skip_test.go b/skip_tests/number/skip_test.go deleted file mode 100644 index 8d24ef0..0000000 --- a/skip_tests/number/skip_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package test - -import ( - "encoding/json" - "errors" - "github.com/json-iterator/go" - "github.com/stretchr/testify/require" - "io" - "testing" -) - -func Test_skip(t *testing.T) { - for _, input := range inputs { - t.Run(input, func(t *testing.T) { - should := require.New(t) - var dst typeForTest - stdErr := json.Unmarshal([]byte(input), &dst) - iter := jsoniter.ParseString(jsoniter.ConfigDefault, input) - iter.Skip() - iter.ReadNil() // trigger looking forward - err := iter.Error - if err == io.EOF { - err = nil - } else { - err = errors.New("remaining bytes") - } - if stdErr == nil { - should.Nil(err) - } else { - should.NotNil(err) - } - }) - } -} diff --git a/skip_tests/object/inputs.go b/skip_tests/object/inputs.go deleted file mode 100644 index 91ad60f..0000000 --- a/skip_tests/object/inputs.go +++ /dev/null @@ -1,16 +0,0 @@ -package test - -type typeForTest struct{} - -var inputs = []string{ - `{}`, // valid - `{"hello":"world"}`, // valid - `{hello:"world"}`, // invalid - `{"hello:"world"}`, // invalid - `{"hello","world"}`, // invalid - `{"hello":{}`, // invalid - `{"hello":{}}`, // valid - `{"hello":{}}}`, // invalid - `{"hello": { "hello": 1}}`, // valid - `{abc}`, // invalid -} diff --git a/skip_tests/object/skip_test.go b/skip_tests/object/skip_test.go deleted file mode 100644 index 8d24ef0..0000000 --- a/skip_tests/object/skip_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package test - -import ( - "encoding/json" - "errors" - "github.com/json-iterator/go" - "github.com/stretchr/testify/require" - "io" - "testing" -) - -func Test_skip(t *testing.T) { - for _, input := range inputs { - t.Run(input, func(t *testing.T) { - should := require.New(t) - var dst typeForTest - stdErr := json.Unmarshal([]byte(input), &dst) - iter := jsoniter.ParseString(jsoniter.ConfigDefault, input) - iter.Skip() - iter.ReadNil() // trigger looking forward - err := iter.Error - if err == io.EOF { - err = nil - } else { - err = errors.New("remaining bytes") - } - if stdErr == nil { - should.Nil(err) - } else { - should.NotNil(err) - } - }) - } -} diff --git a/skip_tests/skip_test.go b/skip_tests/skip_test.go new file mode 100644 index 0000000..ce0c65d --- /dev/null +++ b/skip_tests/skip_test.go @@ -0,0 +1,45 @@ +package skip_tests + +import ( + "encoding/json" + "errors" + "github.com/json-iterator/go" + "github.com/stretchr/testify/require" + "io" + "testing" + "reflect" +) + +type testCase struct { + ptr interface{} + inputs []string +} + +var testCases []testCase + +func Test_skip(t *testing.T) { + for _, testCase := range testCases { + valType := reflect.TypeOf(testCase.ptr).Elem() + for _, input := range testCase.inputs { + t.Run(input, func(t *testing.T) { + should := require.New(t) + ptrVal := reflect.New(valType) + stdErr := json.Unmarshal([]byte(input), ptrVal.Interface()) + iter := jsoniter.ParseString(jsoniter.ConfigDefault, input) + iter.Skip() + iter.ReadNil() // trigger looking forward + err := iter.Error + if err == io.EOF { + err = nil + } else { + err = errors.New("remaining bytes") + } + if stdErr == nil { + should.Nil(err) + } else { + should.NotNil(err) + } + }) + } + } +} diff --git a/skip_tests/string/inputs.go b/skip_tests/string/inputs.go deleted file mode 100644 index 692393d..0000000 --- a/skip_tests/string/inputs.go +++ /dev/null @@ -1,14 +0,0 @@ -package test - -type typeForTest string - -var inputs = []string{ - `""`, // valid - `"hello"`, // valid - `"`, // invalid - `"\"`, // invalid - `"\x00"`, // invalid - "\"\x00\"", // invalid - "\"\t\"", // invalid - `"\t"`, // valid -} diff --git a/skip_tests/string/skip_test.go b/skip_tests/string/skip_test.go deleted file mode 100644 index 8d24ef0..0000000 --- a/skip_tests/string/skip_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package test - -import ( - "encoding/json" - "errors" - "github.com/json-iterator/go" - "github.com/stretchr/testify/require" - "io" - "testing" -) - -func Test_skip(t *testing.T) { - for _, input := range inputs { - t.Run(input, func(t *testing.T) { - should := require.New(t) - var dst typeForTest - stdErr := json.Unmarshal([]byte(input), &dst) - iter := jsoniter.ParseString(jsoniter.ConfigDefault, input) - iter.Skip() - iter.ReadNil() // trigger looking forward - err := iter.Error - if err == io.EOF { - err = nil - } else { - err = errors.New("remaining bytes") - } - if stdErr == nil { - should.Nil(err) - } else { - should.NotNil(err) - } - }) - } -} diff --git a/skip_tests/string_test.go b/skip_tests/string_test.go new file mode 100644 index 0000000..d0e08a2 --- /dev/null +++ b/skip_tests/string_test.go @@ -0,0 +1,17 @@ +package skip_tests + +func init() { + testCases = append(testCases, testCase{ + ptr: (*string)(nil), + inputs: []string{ + `""`, // valid + `"hello"`, // valid + `"`, // invalid + `"\"`, // invalid + `"\x00"`, // invalid + "\"\x00\"", // invalid + "\"\t\"", // invalid + `"\t"`, // valid + }, + }) +} \ No newline at end of file diff --git a/skip_tests/struct_test.go b/skip_tests/struct_test.go new file mode 100644 index 0000000..02af35e --- /dev/null +++ b/skip_tests/struct_test.go @@ -0,0 +1,19 @@ +package skip_tests + +func init() { + testCases = append(testCases, testCase{ + ptr: (*struct{})(nil), + inputs: []string{ + `{}`, // valid + `{"hello":"world"}`, // valid + `{hello:"world"}`, // invalid + `{"hello:"world"}`, // invalid + `{"hello","world"}`, // invalid + `{"hello":{}`, // invalid + `{"hello":{}}`, // valid + `{"hello":{}}}`, // invalid + `{"hello": { "hello": 1}}`, // valid + `{abc}`, // invalid + }, + }) +} \ No newline at end of file diff --git a/type_tests/struct_field_case_test.go b/type_tests/struct_field_case_test.go index ad23cbc..8e912cc 100644 --- a/type_tests/struct_field_case_test.go +++ b/type_tests/struct_field_case_test.go @@ -1,6 +1,12 @@ package test func init() { + //testCases = append(testCases, + // (*struct { + // Upper bool `json:"M"` + // Lower bool `json:"m"` + // })(nil), + //) asymmetricTestCases = append(asymmetricTestCases, [][2]interface{}{ { (*struct {