forked from TomWright/dasel
-
Notifications
You must be signed in to change notification settings - Fork 0
/
node_propagate_internal_test.go
93 lines (87 loc) · 2.71 KB
/
node_propagate_internal_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package dasel
import (
"fmt"
"reflect"
"testing"
)
func TestPropagateValueProperty(t *testing.T) {
t.Run("NilValue", func(t *testing.T) {
n := getNodeWithValue(nil)
n.Previous.Selector.Current = "."
err := propagateValueProperty(n)
assertErrResult(t, &UnexpectedPreviousNilValue{Selector: "."}, err)
})
t.Run("UnsupportedType", func(t *testing.T) {
val := make([]interface{}, 0)
n := getNodeWithValue(val)
err := propagateValueProperty(n)
assertErrResult(t, &UnsupportedTypeForSelector{Selector: n.Selector, Value: n.Previous.Value}, err)
})
}
func TestPropagateValueIndex(t *testing.T) {
t.Run("NilValue", func(t *testing.T) {
n := getNodeWithValue(nil)
n.Previous.Selector.Current = "."
err := propagateValueIndex(n)
assertErrResult(t, &UnexpectedPreviousNilValue{Selector: "."}, err)
})
t.Run("UnsupportedType", func(t *testing.T) {
val := map[string]interface{}{}
n := getNodeWithValue(val)
n.Selector.Current = "[0]"
n.Selector.Index = 0
err := propagateValueIndex(n)
assertErrResult(t, &UnsupportedTypeForSelector{Selector: n.Selector, Value: reflect.TypeOf(val).Kind()}, err)
})
t.Run("ExistingIndex", func(t *testing.T) {
val := []interface{}{
"hello",
}
n := getNodeWithValue(val)
n.Selector.Current = "[0]"
n.Selector.Index = 0
n.Value = reflect.ValueOf("world")
err := propagateValueIndex(n)
if !assertErrResult(t, nil, err) {
return
}
if !reflect.DeepEqual(val[0], "world") {
t.Errorf("expected val %v, got %v", "world", val[0])
}
})
}
func TestPropagateValueNextAvailableIndex(t *testing.T) {
t.Run("MissingPreviousNode", func(t *testing.T) {
n := getNodeWithValue(nil)
n.Previous.Selector.Current = "x"
err := propagateValueNextAvailableIndex(n)
assertErrResult(t, &UnexpectedPreviousNilValue{Selector: "x"}, err)
})
t.Run("UnsupportedType", func(t *testing.T) {
val := map[string]interface{}{}
n := getNodeWithValue(val)
err := propagateValueNextAvailableIndex(n)
assertErrResult(t, &UnsupportedTypeForSelector{Selector: n.Selector, Value: reflect.TypeOf(val).Kind()}, err)
})
}
func TestPropagateValue(t *testing.T) {
t.Run("MissingPreviousNode", func(t *testing.T) {
n := New(nil)
err := propagateValue(n)
assertErrResult(t, nil, err)
})
t.Run("UnsupportedSelector", func(t *testing.T) {
n := getNodeWithValue([]interface{}{})
n.Selector.Type = "BAD"
err := propagateValue(n)
assertErrResult(t, &UnsupportedSelector{Selector: "BAD"}, err)
})
}
func TestPropagate(t *testing.T) {
t.Run("UnsupportedSelector", func(t *testing.T) {
n := getNodeWithValue([]interface{}{})
n.Selector.Type = "BAD"
err := propagate(n)
assertErrResult(t, fmt.Errorf("could not propagate value: %w", &UnsupportedSelector{Selector: "BAD"}), err)
})
}