2023-10-18 01:11:53 +00:00
|
|
|
package yqlib
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/mikefarah/yq/v4/test"
|
|
|
|
)
|
|
|
|
|
|
|
|
type valueRepScenario struct {
|
|
|
|
input string
|
|
|
|
tag string
|
|
|
|
expected interface{}
|
|
|
|
}
|
|
|
|
|
|
|
|
var valueRepScenarios = []valueRepScenario{
|
|
|
|
{
|
|
|
|
input: `"cat"`,
|
|
|
|
expected: `"cat"`,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
input: `3`,
|
|
|
|
expected: int64(3),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
input: `3.1`,
|
|
|
|
expected: float64(3.1),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
input: `true`,
|
|
|
|
expected: true,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
input: `y`,
|
|
|
|
tag: "!!bool",
|
|
|
|
expected: true,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
tag: "!!null",
|
|
|
|
expected: nil,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCandidateNodeGetValueRepScenarios(t *testing.T) {
|
|
|
|
for _, tt := range valueRepScenarios {
|
|
|
|
node := CandidateNode{Value: tt.input, Tag: tt.tag}
|
|
|
|
actual, err := node.GetValueRep()
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
test.AssertResult(t, tt.expected, actual)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCandidateNodeChildWhenParentUpdated(t *testing.T) {
|
|
|
|
parent := CandidateNode{}
|
|
|
|
child := parent.CreateChild()
|
|
|
|
parent.SetDocument(1)
|
|
|
|
parent.SetFileIndex(2)
|
|
|
|
parent.SetFilename("meow")
|
|
|
|
test.AssertResultWithContext(t, "meow", child.GetFilename(), "filename")
|
|
|
|
test.AssertResultWithContext(t, 2, child.GetFileIndex(), "file index")
|
|
|
|
test.AssertResultWithContext(t, uint(1), child.GetDocument(), "document index")
|
|
|
|
}
|
|
|
|
|
|
|
|
type createScalarNodeScenario struct {
|
|
|
|
value interface{}
|
|
|
|
stringValue string
|
|
|
|
expectedTag string
|
|
|
|
}
|
|
|
|
|
|
|
|
var createScalarScenarios = []createScalarNodeScenario{
|
|
|
|
{
|
|
|
|
value: "mike",
|
|
|
|
stringValue: "mike",
|
|
|
|
expectedTag: "!!str",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
value: 3,
|
|
|
|
stringValue: "3",
|
|
|
|
expectedTag: "!!int",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
value: 3.1,
|
|
|
|
stringValue: "3.1",
|
|
|
|
expectedTag: "!!float",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
value: true,
|
|
|
|
stringValue: "true",
|
|
|
|
expectedTag: "!!bool",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
value: nil,
|
|
|
|
stringValue: "~",
|
|
|
|
expectedTag: "!!null",
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCreateScalarNodeScenarios(t *testing.T) {
|
|
|
|
for _, tt := range createScalarScenarios {
|
|
|
|
actual := createScalarNode(tt.value, tt.stringValue)
|
|
|
|
test.AssertResultWithContext(t, tt.stringValue, actual.Value, fmt.Sprintf("Value for: Value: [%v], String: %v", tt.value, tt.stringValue))
|
|
|
|
test.AssertResultWithContext(t, tt.expectedTag, actual.Tag, fmt.Sprintf("Value for: Value: [%v], String: %v", tt.value, tt.stringValue))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGetKeyForMapValue(t *testing.T) {
|
|
|
|
key := createStringScalarNode("yourKey")
|
|
|
|
n := CandidateNode{Key: key, Value: "meow", document: 3}
|
|
|
|
test.AssertResult(t, "3 - yourKey", n.GetKey())
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGetKeyForMapKey(t *testing.T) {
|
|
|
|
key := createStringScalarNode("yourKey")
|
|
|
|
key.IsMapKey = true
|
|
|
|
key.document = 3
|
|
|
|
test.AssertResult(t, "key-yourKey-3 - ", key.GetKey())
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGetKeyForValue(t *testing.T) {
|
|
|
|
n := CandidateNode{Value: "meow", document: 3}
|
|
|
|
test.AssertResult(t, "3 - ", n.GetKey())
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGetParsedKeyForMapKey(t *testing.T) {
|
|
|
|
key := createStringScalarNode("yourKey")
|
|
|
|
key.IsMapKey = true
|
|
|
|
key.document = 3
|
|
|
|
test.AssertResult(t, "yourKey", key.getParsedKey())
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGetParsedKeyForLooseValue(t *testing.T) {
|
|
|
|
n := CandidateNode{Value: "meow", document: 3}
|
|
|
|
test.AssertResult(t, nil, n.getParsedKey())
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGetParsedKeyForMapValue(t *testing.T) {
|
|
|
|
key := createStringScalarNode("yourKey")
|
|
|
|
n := CandidateNode{Key: key, Value: "meow", document: 3}
|
|
|
|
test.AssertResult(t, "yourKey", n.getParsedKey())
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGetParsedKeyForArrayValue(t *testing.T) {
|
|
|
|
key := createScalarNode(4, "4")
|
|
|
|
n := CandidateNode{Key: key, Value: "meow", document: 3}
|
|
|
|
test.AssertResult(t, 4, n.getParsedKey())
|
|
|
|
}
|
2023-11-30 03:04:54 +00:00
|
|
|
|
|
|
|
func TestCandidateNodeAddKeyValueChild(t *testing.T) {
|
|
|
|
key := CandidateNode{Value: "cool", IsMapKey: true}
|
|
|
|
node := CandidateNode{}
|
|
|
|
|
|
|
|
// if we use a key in a new node as a value, it should no longer be marked as a key
|
|
|
|
|
|
|
|
_, keyIsValueNow := node.AddKeyValueChild(&CandidateNode{Value: "newKey"}, &key)
|
|
|
|
|
|
|
|
test.AssertResult(t, keyIsValueNow.IsMapKey, false)
|
|
|
|
test.AssertResult(t, key.IsMapKey, true)
|
|
|
|
|
|
|
|
}
|