| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- package jsoniter
- import (
- "encoding/json"
- "reflect"
- "testing"
- fuzz "github.com/google/gofuzz"
- )
- func Test_NilInput(t *testing.T) {
- var jb []byte // nil
- var out string
- err := Unmarshal(jb, &out)
- if err == nil {
- t.Errorf("Expected error")
- }
- }
- func Test_EmptyInput(t *testing.T) {
- jb := []byte("")
- var out string
- err := Unmarshal(jb, &out)
- if err == nil {
- t.Errorf("Expected error")
- }
- }
- func Test_RandomInput_Bytes(t *testing.T) {
- fz := fuzz.New().NilChance(0)
- for i := 0; i < 10000; i++ {
- var jb []byte
- fz.Fuzz(&jb)
- testRandomInput(t, jb)
- }
- }
- func Test_RandomInput_String(t *testing.T) {
- fz := fuzz.New().NilChance(0)
- for i := 0; i < 10000; i++ {
- var js string
- fz.Fuzz(&js)
- jb := []byte(js)
- testRandomInput(t, jb)
- }
- }
- func testRandomInput(t *testing.T, jb []byte) {
- var outString string
- testRandomInputTo(t, jb, &outString)
- var outInt int
- testRandomInputTo(t, jb, &outInt)
- var outStruct struct{}
- testRandomInputTo(t, jb, &outStruct)
- var outSlice []string
- testRandomInputTo(t, jb, &outSlice)
- }
- func testRandomInputTo(t *testing.T, jb []byte, out interface{}) {
- err := Unmarshal(jb, out)
- if err == nil {
- // Cross-check stdlib to see if we just happened to fuzz a legit value.
- err := json.Unmarshal(jb, out)
- if err != nil {
- t.Fatalf("Expected error unmarshaling as %s:\nas string: %q\nas bytes: %v",
- reflect.TypeOf(out).Elem().Kind(), string(jb), jb)
- }
- }
- }
|