Skip to content

Commit 4f6d8b0

Browse files
committed
assign is working as expected for a min set of test cases.
1 parent 68d84af commit 4f6d8b0

File tree

4 files changed

+137
-108
lines changed

4 files changed

+137
-108
lines changed

assign_test.go

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package jsonpointer_test
22

33
import (
4+
"fmt"
45
"testing"
56

67
"github.com/chanced/jsonpointer"
@@ -18,25 +19,44 @@ func TestAssign(t *testing.T) {
1819
err error
1920
run func(v interface{})
2021
}{
21-
// {"/nested/str", "strval", nil, func(val interface{}) {
22-
// assert.Equal(val, r.Nested.String)
23-
// }},
24-
// {"/nestedptr/str", "x", nil, func(val interface{}) {
25-
// assert.Equal(val, r.NestedPtr.String)
26-
// }},
22+
{"/nested/str", "strval", nil, func(val interface{}) {
23+
assert.Equal(val, r.Nested.String)
24+
}},
25+
{"/nestedptr/str", "x", nil, func(val interface{}) {
26+
assert.Equal(val, r.NestedPtr.String)
27+
}},
2728
{"/nested/entrymap/keyval/name", "entry-name", nil, func(v interface{}) {
2829
assert.Contains(r.Nested.EntryMap, "keyval")
2930
assert.Equal("entry-name", r.Nested.EntryMap["keyval"].Name)
3031
}},
32+
{"/nested/strarray/1", "strval", nil, func(v interface{}) {
33+
assert.Equal(v, r.Nested.StrArray[1])
34+
}},
35+
{"/nested/intarray/1", int(1), nil, func(v interface{}) {
36+
assert.Equal(v, r.Nested.IntArray[1])
37+
}},
38+
{"/nested/anon/value", "val", nil, func(v interface{}) {
39+
assert.Equal(v, r.Nested.AnonStruct.Value)
40+
}},
41+
{"/nested/strslice/-", "val", nil, func(v interface{}) {
42+
assert.Len(r.Nested.StrSlice, 1)
43+
assert.Equal(v, r.Nested.StrSlice[0])
44+
}},
45+
{"/nested/strslice/-", "val2", nil, func(v interface{}) {
46+
assert.Len(r.Nested.StrSlice, 2)
47+
assert.Equal(v, r.Nested.StrSlice[1])
48+
}},
3149
}
3250

3351
for i, test := range tests {
52+
fmt.Printf("=== test %d, pointer %s\n", i, test.ptr)
3453
err := jsonpointer.Assign(test.ptr, &r, test.value)
3554
if test.err != nil {
36-
assert.ErrorIs(err, test.err, "test %d, pointer %s", i, test.ptr)
55+
assert.ErrorIs(err, test.err)
3756
} else {
3857
assert.NoError(err)
3958
test.run(test.value)
4059
}
60+
fmt.Println("\tPASS")
4161
}
4262
}

errors.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ var (
5858
// jsonpoint.Resolver and return a non-nil implemention of the interface.
5959
//
6060
ErrNilInterface = errors.New("jsonpointer: can not assign due to nil interface")
61+
62+
// ErrMalformedIndex indicates a syntax error in the index or a slice or an
63+
// array.
64+
ErrMalformedIndex = errors.New("jsonpointer: malformed slice/array index")
6165
)
6266

6367
// Error is a base error type returned from Resolve, Assign, and Delete.

resolve_test.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package jsonpointer_test
22

33
import (
4+
"fmt"
45
"testing"
56

67
"github.com/chanced/jsonpointer"
@@ -26,6 +27,7 @@ func TestResolveField(t *testing.T) {
2627
Inline: Inline{InlineStr: "inline value"},
2728
Nested: &Nested{String: "deeply nested value"},
2829
Embedded: Embedded{Value: "embedded value"},
30+
IntSlice: []int{},
2931
Bool: true,
3032
BoolPtr: bp,
3133
AnonStructPtr: &anon,
@@ -49,17 +51,20 @@ func TestResolveField(t *testing.T) {
4951
{"/nested/invalid", nil, jsonpointer.ErrNotFound},
5052
{"/nested/empty/str", nil, jsonpointer.ErrUnreachable},
5153
{"/nested/empty/str", nil, jsonpointer.ErrNotFound},
54+
{"/nested/intslice/badkey", nil, jsonpointer.ErrMalformedIndex},
5255
}
5356

5457
for i, test := range tests {
58+
fmt.Printf("=== test %d, pointer %s", i, test.ptr)
5559
var val interface{}
5660
err := jsonpointer.Resolve(r, test.ptr, &val)
5761
if test.expectederr != nil {
58-
assert.ErrorIs(err, test.expectederr, "test %d, pointer %s", i, test.ptr)
62+
assert.ErrorIs(err, test.expectederr)
5963
} else {
6064
assert.NoError(err)
6165
}
62-
assert.Equal(test.expectedval, val, "test %d, pointer %s", i, test.ptr)
66+
assert.Equal(test.expectedval, val)
67+
fmt.Printf("\n\tPASS\n")
6368
}
6469
}
6570

0 commit comments

Comments
 (0)