1
0
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:
Tom Wright
2020-09-24 00:30:21 +01:00
parent e54d222983
commit 42cf66ef60
4 changed files with 42 additions and 36 deletions

View File

@@ -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
View File

@@ -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
View 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)
}
})
}

View File

@@ -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"})