1
0
mirror of https://github.com/TomWright/dasel.git synced 2022-05-22 02:32:45 +03:00
Files
dasel-data-selector/node_propagate_internal_test.go
2021-02-24 22:36:43 +00:00

94 lines
2.7 KiB
Go

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.ValueOf(val)}, 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.ValueOf(val)}, 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)
})
}