read tests

This commit is contained in:
Mike Farah 2020-10-13 13:17:18 +11:00
parent d19e9f6917
commit 829ca3b424
2 changed files with 19 additions and 7 deletions

View File

@ -320,7 +320,7 @@ dog: bark
defer test.RemoveTempYamlFile(filename) defer test.RemoveTempYamlFile(filename)
cmd := getRootCommand() cmd := getRootCommand()
result := test.RunCmd(cmd, fmt.Sprintf("read -l %s", filename)) result := test.RunCmd(cmd, fmt.Sprintf("read %s count(*)", filename))
if result.Error != nil { if result.Error != nil {
t.Error(result.Error) t.Error(result.Error)
} }
@ -336,7 +336,7 @@ func TestReadObjectLengthDeepCmd(t *testing.T) {
defer test.RemoveTempYamlFile(filename) defer test.RemoveTempYamlFile(filename)
cmd := getRootCommand() cmd := getRootCommand()
result := test.RunCmd(cmd, fmt.Sprintf("read -l %s holder", filename)) result := test.RunCmd(cmd, fmt.Sprintf("read %s count(holder.*)", filename))
if result.Error != nil { if result.Error != nil {
t.Error(result.Error) t.Error(result.Error)
} }
@ -355,7 +355,7 @@ holderB:
defer test.RemoveTempYamlFile(filename) defer test.RemoveTempYamlFile(filename)
cmd := getRootCommand() cmd := getRootCommand()
result := test.RunCmd(cmd, fmt.Sprintf("read -l -c %s holder*", filename)) result := test.RunCmd(cmd, fmt.Sprintf("read %s count(holder*)", filename))
if result.Error != nil { if result.Error != nil {
t.Error(result.Error) t.Error(result.Error)
} }
@ -374,7 +374,7 @@ holderB:
defer test.RemoveTempYamlFile(filename) defer test.RemoveTempYamlFile(filename)
cmd := getRootCommand() cmd := getRootCommand()
result := test.RunCmd(cmd, fmt.Sprintf("read -l -ppv %s holder*", filename)) result := test.RunCmd(cmd, fmt.Sprintf("read -ppv %s holder*.(count(*))", filename))
if result.Error != nil { if result.Error != nil {
t.Error(result.Error) t.Error(result.Error)
} }
@ -387,7 +387,7 @@ func TestReadScalarLengthCmd(t *testing.T) {
defer test.RemoveTempYamlFile(filename) defer test.RemoveTempYamlFile(filename)
cmd := getRootCommand() cmd := getRootCommand()
result := test.RunCmd(cmd, fmt.Sprintf("read -l %s", filename)) result := test.RunCmd(cmd, fmt.Sprintf("read %s 'count(.)'", filename))
if result.Error != nil { if result.Error != nil {
t.Error(result.Error) t.Error(result.Error)
} }

View File

@ -1,6 +1,8 @@
package treeops package treeops
import ( import (
"fmt"
"gopkg.in/yaml.v3" "gopkg.in/yaml.v3"
) )
@ -68,13 +70,23 @@ func (t *traverser) traverseArray(candidate *CandidateNode, pathNode *PathElemen
} }
index := pathNode.Value.(int64) index := pathNode.Value.(int64)
if int64(len(candidate.Node.Content)) < index { indexToUse := index
contentLength := int64(len(candidate.Node.Content))
if contentLength <= index {
// handle auto append here // handle auto append here
return make([]*CandidateNode, 0), nil return make([]*CandidateNode, 0), nil
} }
if indexToUse < 0 {
indexToUse = contentLength + indexToUse
}
if indexToUse < 0 {
return nil, fmt.Errorf("Index [%v] out of range, array size is %v", index, contentLength)
}
return []*CandidateNode{&CandidateNode{ return []*CandidateNode{&CandidateNode{
Node: candidate.Node.Content[index], Node: candidate.Node.Content[indexToUse],
Document: candidate.Document, Document: candidate.Document,
Path: append(candidate.Path, index), Path: append(candidate.Path, index),
}}, nil }}, nil