| package skip_tests |
| |
| import ( |
| "bytes" |
| "encoding/json" |
| "testing" |
| |
| "github.com/json-iterator/go" |
| "github.com/stretchr/testify/require" |
| ) |
| |
| func Test_skip_number_in_array(t *testing.T) { |
| should := require.New(t) |
| iter := jsoniter.ParseString(jsoniter.ConfigDefault, `[-0.12, "stream"]`) |
| iter.ReadArray() |
| iter.Skip() |
| iter.ReadArray() |
| should.Nil(iter.Error) |
| should.Equal("stream", iter.ReadString()) |
| } |
| |
| func Test_skip_string_in_array(t *testing.T) { |
| should := require.New(t) |
| iter := jsoniter.ParseString(jsoniter.ConfigDefault, `["hello", "stream"]`) |
| iter.ReadArray() |
| iter.Skip() |
| iter.ReadArray() |
| should.Nil(iter.Error) |
| should.Equal("stream", iter.ReadString()) |
| } |
| |
| func Test_skip_null(t *testing.T) { |
| iter := jsoniter.ParseString(jsoniter.ConfigDefault, `[null , "stream"]`) |
| iter.ReadArray() |
| iter.Skip() |
| iter.ReadArray() |
| if iter.ReadString() != "stream" { |
| t.FailNow() |
| } |
| } |
| |
| func Test_skip_true(t *testing.T) { |
| iter := jsoniter.ParseString(jsoniter.ConfigDefault, `[true , "stream"]`) |
| iter.ReadArray() |
| iter.Skip() |
| iter.ReadArray() |
| if iter.ReadString() != "stream" { |
| t.FailNow() |
| } |
| } |
| |
| func Test_skip_false(t *testing.T) { |
| iter := jsoniter.ParseString(jsoniter.ConfigDefault, `[false , "stream"]`) |
| iter.ReadArray() |
| iter.Skip() |
| iter.ReadArray() |
| if iter.ReadString() != "stream" { |
| t.FailNow() |
| } |
| } |
| |
| func Test_skip_array(t *testing.T) { |
| iter := jsoniter.ParseString(jsoniter.ConfigDefault, `[[1, [2, [3], 4]], "stream"]`) |
| iter.ReadArray() |
| iter.Skip() |
| iter.ReadArray() |
| if iter.ReadString() != "stream" { |
| t.FailNow() |
| } |
| } |
| |
| func Test_skip_empty_array(t *testing.T) { |
| iter := jsoniter.ParseString(jsoniter.ConfigDefault, `[ [ ], "stream"]`) |
| iter.ReadArray() |
| iter.Skip() |
| iter.ReadArray() |
| if iter.ReadString() != "stream" { |
| t.FailNow() |
| } |
| } |
| |
| func Test_skip_nested(t *testing.T) { |
| iter := jsoniter.ParseString(jsoniter.ConfigDefault, `[ {"a" : [{"stream": "c"}], "d": 102 }, "stream"]`) |
| iter.ReadArray() |
| iter.Skip() |
| iter.ReadArray() |
| if iter.ReadString() != "stream" { |
| t.FailNow() |
| } |
| } |
| |
| func Test_skip_and_return_bytes(t *testing.T) { |
| should := require.New(t) |
| iter := jsoniter.ParseString(jsoniter.ConfigDefault, `[ {"a" : [{"stream": "c"}], "d": 102 }, "stream"]`) |
| iter.ReadArray() |
| skipped := iter.SkipAndReturnBytes() |
| should.Equal(`{"a" : [{"stream": "c"}], "d": 102 }`, string(skipped)) |
| } |
| |
| func Test_skip_and_return_bytes_with_reader(t *testing.T) { |
| should := require.New(t) |
| iter := jsoniter.Parse(jsoniter.ConfigDefault, bytes.NewBufferString(`[ {"a" : [{"stream": "c"}], "d": 102 }, "stream"]`), 4) |
| iter.ReadArray() |
| skipped := iter.SkipAndReturnBytes() |
| should.Equal(`{"a" : [{"stream": "c"}], "d": 102 }`, string(skipped)) |
| } |
| |
| func Test_skip_empty(t *testing.T) { |
| should := require.New(t) |
| should.NotNil(jsoniter.Get([]byte("")).LastError()) |
| } |
| |
| type TestResp struct { |
| Code uint64 |
| } |
| |
| func Benchmark_jsoniter_skip(b *testing.B) { |
| input := []byte(` |
| { |
| "_shards":{ |
| "total" : 5, |
| "successful" : 5, |
| "failed" : 0 |
| }, |
| "hits":{ |
| "total" : 1, |
| "hits" : [ |
| { |
| "_index" : "twitter", |
| "_type" : "tweet", |
| "_id" : "1", |
| "_source" : { |
| "user" : "kimchy", |
| "postDate" : "2009-11-15T14:12:12", |
| "message" : "trying out Elasticsearch" |
| } |
| } |
| ] |
| }, |
| "code": 200 |
| }`) |
| for n := 0; n < b.N; n++ { |
| result := TestResp{} |
| iter := jsoniter.ParseBytes(jsoniter.ConfigDefault, input) |
| for field := iter.ReadObject(); field != ""; field = iter.ReadObject() { |
| switch field { |
| case "code": |
| result.Code = iter.ReadUint64() |
| default: |
| iter.Skip() |
| } |
| } |
| } |
| } |
| |
| func Benchmark_json_skip(b *testing.B) { |
| input := []byte(` |
| { |
| "_shards":{ |
| "total" : 5, |
| "successful" : 5, |
| "failed" : 0 |
| }, |
| "hits":{ |
| "total" : 1, |
| "hits" : [ |
| { |
| "_index" : "twitter", |
| "_type" : "tweet", |
| "_id" : "1", |
| "_source" : { |
| "user" : "kimchy", |
| "postDate" : "2009-11-15T14:12:12", |
| "message" : "trying out Elasticsearch" |
| } |
| } |
| ] |
| }, |
| "code": 200 |
| }`) |
| for n := 0; n < b.N; n++ { |
| result := TestResp{} |
| json.Unmarshal(input, &result) |
| } |
| } |