...
1 package jreader
2
3 import (
4 "errors"
5 "testing"
6
7 "github.com/stretchr/testify/assert"
8 "github.com/stretchr/testify/require"
9 )
10
11 func TestAddErrorStopsObjectParsing(t *testing.T) {
12 r := NewReader([]byte(`{"a":1, "b":2}`))
13 obj := r.Object()
14 require.True(t, obj.Next())
15 require.Equal(t, "a", string(obj.Name()))
16 require.Equal(t, 1, r.Int())
17
18 err := errors.New("sorry")
19 r.AddError(err)
20 require.Equal(t, err, r.Error())
21
22 require.False(t, obj.Next())
23 require.Equal(t, err, r.Error())
24 }
25
26 func TestSyntaxErrorStopsObjectParsing(t *testing.T) {
27 r := NewReader([]byte(`{"a":1, x: 2, "c":3}`))
28 obj := r.Object()
29 require.True(t, obj.Next())
30 require.Equal(t, "a", string(obj.Name()))
31 require.Equal(t, 1, r.Int())
32
33 require.False(t, obj.Next())
34 require.Equal(t, 0, r.Int())
35
36 require.Error(t, r.Error())
37
38 require.False(t, obj.Next())
39 }
40
41 func TestRequiredPropertiesAreAllFound(t *testing.T) {
42 data := []byte(`{"a":1, "b":2, "c":3}`)
43 requiredProps := []string{"c", "b", "a"}
44 r := NewReader(data)
45 for obj := r.Object().WithRequiredProperties(requiredProps); obj.Next(); {
46 }
47 require.NoError(t, r.Error())
48 }
49
50 func TestRequiredPropertyIsNotFound(t *testing.T) {
51 data := []byte(`{"a":1, "c":3}`)
52 requiredProps := []string{"c", "b", "a"}
53 r := NewReader(data)
54 for obj := r.Object().WithRequiredProperties(requiredProps); obj.Next(); {
55 }
56 require.Error(t, r.Error())
57 require.IsType(t, RequiredPropertyError{}, r.Error())
58 rpe := r.Error().(RequiredPropertyError)
59 assert.Equal(t, "b", rpe.Name)
60 assert.GreaterOrEqual(t, rpe.Offset, len(data)-1)
61 }
62
View as plain text