File tree 2 files changed +87
-0
lines changed
2 files changed +87
-0
lines changed Original file line number Diff line number Diff line change @@ -116,6 +116,23 @@ func (node *KeyValue) AddChild(value *KeyValue) error {
116
116
return nil
117
117
}
118
118
119
+ func (node * KeyValue ) RemoveChild (key string ) error {
120
+ if ! node .HasChildren () {
121
+ return errors .New ("parent does not accept child keys" )
122
+ }
123
+ ret ,err := node .Find (key )
124
+ if err != nil {
125
+ return errors .New ("key does not exist" )
126
+ }
127
+ for idx ,c := range node .value {
128
+ if c == ret {
129
+ node .value = append (node .value [:idx ], node .value [idx + 1 :]... )
130
+ return nil
131
+ }
132
+ }
133
+ return nil
134
+ }
135
+
119
136
// Parent returns this node's parent.
120
137
// Parent can be nil
121
138
func (node * KeyValue ) Parent () * KeyValue {
Original file line number Diff line number Diff line change @@ -242,3 +242,73 @@ func TestKeyValue_MergeInto(t *testing.T) {
242
242
t .Error (err )
243
243
}
244
244
}
245
+
246
+
247
+ func TestKeyValue_RemoveChild (t * testing.T ) {
248
+ a := & KeyValue {
249
+ key : "foo" ,
250
+ valueType : ValueArray ,
251
+ value : []interface {}{
252
+ & KeyValue {
253
+ key : "bar" ,
254
+ valueType : ValueString ,
255
+ value : []interface {}{
256
+ "bar" ,
257
+ },
258
+ },
259
+ & KeyValue {
260
+ key : "baz" ,
261
+ valueType : ValueString ,
262
+ value : []interface {}{
263
+ "baz" ,
264
+ },
265
+ },
266
+ & KeyValue {
267
+ key : "bat" ,
268
+ valueType : ValueString ,
269
+ value : []interface {}{
270
+ "bat" ,
271
+ },
272
+ },
273
+ },
274
+ }
275
+ b := & KeyValue {
276
+ key : "foo" ,
277
+ valueType : ValueArray ,
278
+ value : []interface {}{
279
+ & KeyValue {
280
+ key : "bar" ,
281
+ valueType : ValueString ,
282
+ value : []interface {}{
283
+ "cart" ,
284
+ },
285
+ },
286
+ & KeyValue {
287
+ key : "egg" ,
288
+ valueType : ValueString ,
289
+ value : []interface {}{
290
+ "bat" ,
291
+ },
292
+ },
293
+ },
294
+ }
295
+
296
+ result ,err := a .MergeInto (b )
297
+ if err != nil {
298
+ t .Error (err )
299
+ }
300
+
301
+ actual ,err := result .Find ("bar" )
302
+ if actual == nil {
303
+ t .Error (err )
304
+ }
305
+ err = result .RemoveChild ("bar" )
306
+ if err != nil {
307
+ t .Error (err )
308
+ }
309
+ actual ,err = result .Find ("bar" )
310
+ if actual != nil {
311
+ t .Error ("found key that should have been removed" )
312
+ }
313
+
314
+ }
You can’t perform that action at this time.
0 commit comments