...

Source file src/github.com/launchdarkly/go-jsonstream/v3/jreader/reader_object_test.go

Documentation: github.com/launchdarkly/go-jsonstream/v3/jreader

     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