(t *testing.T)
| 26 | ) |
| 27 | |
| 28 | func TestReferenceResolver(t *testing.T) { |
| 29 | refResolver := newRefResolver(true) |
| 30 | buf := NewByteBuffer(nil) |
| 31 | var values []any |
| 32 | values = append(values, commonSlice()...) |
| 33 | values = append(values, commonMap()...) |
| 34 | foo := newFoo() |
| 35 | bar := Bar{} |
| 36 | values = append(values, &foo, &bar) |
| 37 | for _, data := range values { |
| 38 | refWritten, err := refResolver.WriteRefOrNull(buf, reflect.ValueOf(data)) |
| 39 | require.Nil(t, err) |
| 40 | require.False(t, refWritten) |
| 41 | refWritten, err = refResolver.WriteRefOrNull(buf, reflect.ValueOf(data)) |
| 42 | require.Nil(t, err) |
| 43 | require.True(t, refWritten) |
| 44 | } |
| 45 | refResolver.readObjects = make([]reflect.Value, len(refResolver.writtenObjects)) |
| 46 | ctxErr := &Error{} |
| 47 | for range values { |
| 48 | require.Equal(t, refResolver.ReadRefOrNull(buf, ctxErr), RefValueFlag) |
| 49 | require.Equal(t, refResolver.ReadRefOrNull(buf, ctxErr), RefFlag) |
| 50 | } |
| 51 | { |
| 52 | s := []int{1, 2, 3} |
| 53 | require.True(t, same(s, s)) |
| 54 | require.False(t, same(s, s[1:])) |
| 55 | refWritten, err := refResolver.WriteRefOrNull(buf, reflect.ValueOf(s)) |
| 56 | require.Nil(t, err) |
| 57 | require.False(t, refWritten) |
| 58 | refWritten, err = refResolver.WriteRefOrNull(buf, reflect.ValueOf(s)) |
| 59 | require.Nil(t, err) |
| 60 | require.True(t, refWritten) |
| 61 | refWritten, err = refResolver.WriteRefOrNull(buf, reflect.ValueOf(s[1:])) |
| 62 | require.Nil(t, err) |
| 63 | require.False(t, refWritten) |
| 64 | } |
| 65 | } |
| 66 | |
| 67 | func TestNonReferenceResolver(t *testing.T) { |
| 68 | refResolver := newRefResolver(false) |
nothing calls this directly
no test coverage detected