55 "testing"
66
77 "github.com/chanced/jsonpointer"
8+ "github.com/sanity-io/litter"
89 "github.com/stretchr/testify/require"
910)
1011
@@ -62,7 +63,7 @@ func TestAssign(t *testing.T) {
6263 }
6364
6465 for i , test := range tests {
65- fmt .Printf ("=== RUN TestAssign#%d, pointer %s\n " , i + 1 , test .ptr )
66+ fmt .Printf ("=== RUN TestAssign #%d, pointer %s\n " , i + 1 , test .ptr )
6667 err := jsonpointer .Assign (& r , test .ptr , test .value )
6768 if test .err != nil {
6869 assert .ErrorIs (err , test .err )
@@ -73,3 +74,67 @@ func TestAssign(t *testing.T) {
7374 fmt .Printf ("--- PASS TestAssign #%d, pointer %s\n " , i , test .ptr )
7475 }
7576}
77+
78+ func TestAssignAny (t * testing.T ) {
79+ assert := require .New (t )
80+
81+ m := map [string ]interface {}{}
82+ tests := []struct {
83+ ptr jsonpointer.JSONPointer
84+ value interface {}
85+ err error
86+ run func (v interface {})
87+ }{
88+ {"/nested/str" , "strval" , nil , func (val interface {}) {
89+ assert .Contains (m , "nested" )
90+ assert .Contains (m ["nested" ], "str" )
91+ m := m ["nested" ].(map [string ]interface {})
92+ assert .Equal (val , m ["str" ])
93+ }},
94+ {"/nestedptr/str" , "x" , nil , func (val interface {}) {
95+ assert .Contains (m , "nestedptr" )
96+ assert .Contains (m ["nestedptr" ], "str" )
97+ n := m ["nestedptr" ].(map [string ]interface {})
98+ assert .Equal (n ["str" ], "x" )
99+ }},
100+ {"/nested/array/0/entry/value" , "entry value" , nil , func (v interface {}) {
101+ litter .Dump (m )
102+ a := m ["nested" ].(map [string ]interface {})["array" ].([]interface {})
103+ assert .Len (a , 1 )
104+ mv := a [0 ].(map [string ]interface {})
105+ assert .Contains (mv , "entry" )
106+ e := mv ["entry" ].(map [string ]interface {})
107+ assert .Contains (e , "value" )
108+ assert .Equal (v , e ["value" ])
109+ }},
110+
111+ {"/nested/intarray/0" , int (1 ), nil , func (v interface {}) {
112+ }},
113+ {"/nested/anon/value" , "val" , nil , func (v interface {}) {
114+ }},
115+ {"/nested/strslice/-" , "val" , nil , func (v interface {}) {
116+ }},
117+ {"/nested/strslice/-" , "val2" , nil , func (v interface {}) {
118+ }},
119+ {"/nested/custommap/key" , "val" , nil , func (v interface {}) {
120+ }},
121+ {"/nested/embedded/value" , "embed-val" , nil , func (v interface {}) {
122+ }},
123+ {"/nested/yield/value" , "yielded value" , nil , func (v interface {}) {
124+ }},
125+ {"/nested/interface/private/value" , uint (3 ), nil , func (v interface {}) {
126+ }},
127+ }
128+
129+ for i , test := range tests {
130+ fmt .Printf ("=== RUN TestAssignAny #%d, pointer %s\n " , i , test .ptr )
131+ err := jsonpointer .Assign (& m , test .ptr , test .value )
132+ if test .err != nil {
133+ assert .ErrorIs (err , test .err )
134+ } else {
135+ assert .NoError (err )
136+ test .run (test .value )
137+ }
138+ fmt .Printf ("--- PASS TestAssign #%d, pointer %s\n " , i , test .ptr )
139+ }
140+ }
0 commit comments