mirror of
https://github.com/TomWright/dasel.git
synced 2022-05-22 02:32:45 +03:00
Code cleanup and tests
This commit is contained in:
@@ -19,10 +19,7 @@ func (c EqualCondition) Check(other reflect.Value) (bool, error) {
|
||||
return false, &UnhandledCheckType{Value: nil}
|
||||
}
|
||||
|
||||
value := other
|
||||
if value.Kind() == reflect.Interface {
|
||||
value = value.Elem()
|
||||
}
|
||||
value := unwrapValue(other)
|
||||
|
||||
if value.Kind() == reflect.Map {
|
||||
for _, key := range value.MapKeys() {
|
||||
|
||||
47
node.go
47
node.go
@@ -75,6 +75,13 @@ func nilValue() reflect.Value {
|
||||
return reflect.ValueOf(nil)
|
||||
}
|
||||
|
||||
func unwrapValue(value reflect.Value) reflect.Value {
|
||||
if value.Kind() == reflect.Interface {
|
||||
return value.Elem()
|
||||
}
|
||||
return value
|
||||
}
|
||||
|
||||
// ParseSelector parses the given selector string and returns a Selector.
|
||||
func ParseSelector(selector string) (Selector, error) {
|
||||
sel := Selector{
|
||||
@@ -263,10 +270,7 @@ func findValueProperty(n *Node) (reflect.Value, error) {
|
||||
return nilValue(), &UnexpectedPreviousNilValue{Selector: n.Previous.Selector.Current}
|
||||
}
|
||||
|
||||
value := n.Previous.Value
|
||||
if value.Kind() == reflect.Interface {
|
||||
value = value.Elem()
|
||||
}
|
||||
value := unwrapValue(n.Previous.Value)
|
||||
|
||||
if value.Kind() == reflect.Map {
|
||||
for _, key := range value.MapKeys() {
|
||||
@@ -288,10 +292,7 @@ func propagateValueProperty(n *Node) error {
|
||||
return &UnexpectedPreviousNilValue{Selector: n.Previous.Selector.Current}
|
||||
}
|
||||
|
||||
value := n.Previous.Value
|
||||
if value.Kind() == reflect.Interface {
|
||||
value = value.Elem()
|
||||
}
|
||||
value := unwrapValue(n.Previous.Value)
|
||||
|
||||
if value.Kind() == reflect.Map {
|
||||
value.SetMapIndex(reflect.ValueOf(n.Selector.Property), n.Value)
|
||||
@@ -308,10 +309,7 @@ func findValueIndex(n *Node) (reflect.Value, error) {
|
||||
return nilValue(), &UnexpectedPreviousNilValue{Selector: n.Previous.Selector.Current}
|
||||
}
|
||||
|
||||
value := n.Previous.Value
|
||||
if value.Kind() == reflect.Interface {
|
||||
value = value.Elem()
|
||||
}
|
||||
value := unwrapValue(n.Previous.Value)
|
||||
|
||||
if value.Kind() == reflect.Slice {
|
||||
if n.Selector.Index >= 0 && n.Selector.Index < int64(value.Len()) {
|
||||
@@ -330,10 +328,7 @@ func putNextAvailableIndex(n *Node) (reflect.Value, error) {
|
||||
return nilValue(), &UnexpectedPreviousNilValue{Selector: n.Previous.Selector.Current}
|
||||
}
|
||||
|
||||
value := n.Previous.Value
|
||||
if value.Kind() == reflect.Interface {
|
||||
value = value.Elem()
|
||||
}
|
||||
value := unwrapValue(n.Previous.Value)
|
||||
|
||||
if value.Kind() == reflect.Slice {
|
||||
if value.Len() == 0 {
|
||||
@@ -353,10 +348,7 @@ func propagateValueIndex(n *Node) error {
|
||||
return &UnexpectedPreviousNilValue{Selector: n.Previous.Selector.Current}
|
||||
}
|
||||
|
||||
value := n.Previous.Value
|
||||
if value.Kind() == reflect.Interface {
|
||||
value = value.Elem()
|
||||
}
|
||||
value := unwrapValue(n.Previous.Value)
|
||||
|
||||
if value.Kind() == reflect.Slice {
|
||||
if n.Selector.Index >= 0 && n.Selector.Index < int64(value.Len()) {
|
||||
@@ -378,10 +370,7 @@ func propagateValueNextAvailableIndex(n *Node) error {
|
||||
return &UnexpectedPreviousNilValue{Selector: n.Previous.Selector.Current}
|
||||
}
|
||||
|
||||
value := n.Previous.Value
|
||||
if value.Kind() == reflect.Interface {
|
||||
value = value.Elem()
|
||||
}
|
||||
value := unwrapValue(n.Previous.Value)
|
||||
|
||||
if value.Kind() == reflect.Slice {
|
||||
n.Previous.Value = reflect.Append(value, n.Value)
|
||||
@@ -419,10 +408,7 @@ func findValueDynamic(n *Node) (reflect.Value, error) {
|
||||
return nilValue(), &UnexpectedPreviousNilValue{Selector: n.Previous.Selector.Current}
|
||||
}
|
||||
|
||||
value := n.Previous.Value
|
||||
if value.Kind() == reflect.Interface {
|
||||
value = value.Elem()
|
||||
}
|
||||
value := unwrapValue(n.Previous.Value)
|
||||
|
||||
if value.Kind() == reflect.Slice {
|
||||
for i := 0; i < value.Len(); i++ {
|
||||
@@ -449,10 +435,7 @@ func propagateValueDynamic(n *Node) error {
|
||||
return &UnexpectedPreviousNilValue{Selector: n.Previous.Selector.Current}
|
||||
}
|
||||
|
||||
value := n.Previous.Value
|
||||
if value.Kind() == reflect.Interface {
|
||||
value = value.Elem()
|
||||
}
|
||||
value := unwrapValue(n.Previous.Value)
|
||||
|
||||
if value.Kind() == reflect.Slice {
|
||||
for i := 0; i < value.Len(); i++ {
|
||||
|
||||
14
node_internal_test.go
Normal file
14
node_internal_test.go
Normal file
@@ -0,0 +1,14 @@
|
||||
package dasel
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestSafeIsNil(t *testing.T) {
|
||||
t.Run("String", func(t *testing.T) {
|
||||
if exp, got := false, safeIsNil(reflect.ValueOf("")); exp != got {
|
||||
t.Errorf("expected %v, got %v", exp, got)
|
||||
}
|
||||
})
|
||||
}
|
||||
12
node_test.go
12
node_test.go
@@ -72,6 +72,18 @@ func TestNode_Query(t *testing.T) {
|
||||
t.Errorf("expected value `%s`, got `%s`", exp, got)
|
||||
}
|
||||
})
|
||||
t.Run("NotFound", func(t *testing.T) {
|
||||
_, err := dasel.New(value).Query(".colours.[0].a")
|
||||
expErr := fmt.Errorf("could not find value: selector [PROPERTY] does not support value: reflect.Kind: interface")
|
||||
if err == nil {
|
||||
t.Errorf("expected err %v, got %v", expErr, err)
|
||||
return
|
||||
}
|
||||
if err.Error() != expErr.Error() {
|
||||
t.Errorf("expected err %v, got %v", expErr, err)
|
||||
return
|
||||
}
|
||||
})
|
||||
t.Run("InvalidSelector", func(t *testing.T) {
|
||||
_, err := dasel.New(value).Query(".colours.[a]")
|
||||
expErr := fmt.Errorf("failed to parse selector: %w", &dasel.InvalidIndexErr{Index: "a"})
|
||||
|
||||
Reference in New Issue
Block a user