Drop document type

This commit is contained in:
Mike Farah 2023-06-05 15:27:59 -07:00
parent 28909bbc5a
commit b2415f2ca5
67 changed files with 346 additions and 486 deletions

View File

@ -63,14 +63,7 @@ func (e *allAtOnceEvaluator) EvaluateFiles(expression string, filenames []string
} }
if allDocuments.Len() == 0 { if allDocuments.Len() == 0 {
candidateNode := &CandidateNode{ candidateNode := createScalarNode(nil, "")
document: 0,
filename: "",
Kind: DocumentNode,
Content: []*CandidateNode{createScalarNode(nil, "")},
fileIndex: 0,
LeadingContent: "",
}
allDocuments.PushBack(candidateNode) allDocuments.PushBack(candidateNode)
} }

View File

@ -20,7 +20,7 @@ var evaluateNodesScenario = []expressionScenario{
document: `a: hello`, document: `a: hello`,
expression: `.`, expression: `.`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: hello\n", "D0, P[], (!!map)::a: hello\n",
}, },
}, },
{ {

View File

@ -10,8 +10,7 @@ import (
type Kind uint32 type Kind uint32
const ( const (
DocumentNode Kind = 1 << iota SequenceNode Kind = 1 << iota
SequenceNode
MappingNode MappingNode
ScalarNode ScalarNode
AliasNode AliasNode
@ -140,9 +139,9 @@ func (n *CandidateNode) GetKey() string {
} }
func (n *CandidateNode) unwrapDocument() *CandidateNode { func (n *CandidateNode) unwrapDocument() *CandidateNode {
if n.Kind == DocumentNode { // if n.Kind == DocumentNode {
return n.Content[0] // return n.Content[0]
} // }
return n return n
} }

View File

@ -108,22 +108,22 @@ func (o *CandidateNode) decodeIntoChild(childNode *yaml.Node, anchorMap map[stri
func (o *CandidateNode) UnmarshalYAML(node *yaml.Node, anchorMap map[string]*CandidateNode) error { func (o *CandidateNode) UnmarshalYAML(node *yaml.Node, anchorMap map[string]*CandidateNode) error {
log.Debugf("UnmarshalYAML %v", node.Tag) log.Debugf("UnmarshalYAML %v", node.Tag)
switch node.Kind { switch node.Kind {
case yaml.DocumentNode: // case yaml.DocumentNode:
log.Debugf("UnmarshalYAML - a document") // log.Debugf("UnmarshalYAML - a document")
o.Kind = DocumentNode // o.Kind = DocumentNode
o.copyFromYamlNode(node, anchorMap) // o.copyFromYamlNode(node, anchorMap)
if len(node.Content) == 0 { // if len(node.Content) == 0 {
return nil // return nil
} // }
singleChild, err := o.decodeIntoChild(node.Content[0], anchorMap) // singleChild, err := o.decodeIntoChild(node.Content[0], anchorMap)
if err != nil { // if err != nil {
return err // return err
} // }
o.Content = []*CandidateNode{singleChild} // o.Content = []*CandidateNode{singleChild}
log.Debugf("UnmarshalYAML - finished document node") // log.Debugf("UnmarshalYAML - finished document node")
return nil // return nil
case yaml.AliasNode: case yaml.AliasNode:
log.Debug("UnmarshalYAML - alias from yaml: %v", o.Tag) log.Debug("UnmarshalYAML - alias from yaml: %v", o.Tag)
o.Kind = AliasNode o.Kind = AliasNode
@ -197,19 +197,19 @@ func (o *CandidateNode) UnmarshalYAML(node *yaml.Node, anchorMap map[string]*Can
func (o *CandidateNode) MarshalYAML() (*yaml.Node, error) { func (o *CandidateNode) MarshalYAML() (*yaml.Node, error) {
log.Debug("MarshalYAML to yaml: %v", o.Tag) log.Debug("MarshalYAML to yaml: %v", o.Tag)
switch o.Kind { switch o.Kind {
case DocumentNode: // case DocumentNode:
log.Debug("MarshalYAML its a document") // log.Debug("MarshalYAML its a document")
target := &yaml.Node{Kind: yaml.DocumentNode} // target := &yaml.Node{Kind: yaml.DocumentNode}
o.copyToYamlNode(target) // o.copyToYamlNode(target)
singleChild, err := o.Content[0].MarshalYAML() // singleChild, err := o.Content[0].MarshalYAML()
log.Debug("MarshalYAML its a document - singChild is %v", singleChild) // log.Debug("MarshalYAML its a document - singChild is %v", singleChild)
if err != nil { // if err != nil {
return nil, err // return nil, err
} // }
target.Content = []*yaml.Node{singleChild} // target.Content = []*yaml.Node{singleChild}
return target, nil // return target, nil
case AliasNode: case AliasNode:
log.Debug("MarshalYAML - alias to yaml: %v", o.Tag) log.Debug("MarshalYAML - alias to yaml: %v", o.Tag)
target := &yaml.Node{Kind: yaml.AliasNode} target := &yaml.Node{Kind: yaml.AliasNode}

View File

@ -132,10 +132,10 @@ func (o *CandidateNode) MarshalJSON() ([]byte, error) {
enc.SetEscapeHTML(false) // do not escape html chars e.g. &, <, > enc.SetEscapeHTML(false) // do not escape html chars e.g. &, <, >
switch o.Kind { switch o.Kind {
case DocumentNode: // case DocumentNode:
log.Debugf("MarshalJSON DocumentNode") // log.Debugf("MarshalJSON DocumentNode")
err := enc.Encode(o.Content[0]) // err := enc.Encode(o.Content[0])
return buf.Bytes(), err // return buf.Bytes(), err
case AliasNode: case AliasNode:
log.Debugf("MarshalJSON AliasNode") log.Debugf("MarshalJSON AliasNode")
err := enc.Encode(o.Alias) err := enc.Encode(o.Alias)

View File

@ -68,8 +68,5 @@ func (dec *csvObjectDecoder) Decode() (*CandidateNode, error) {
return nil, err return nil, err
} }
return &CandidateNode{ return rootArray, nil
Kind: DocumentNode,
Content: []*CandidateNode{rootArray},
}, nil
} }

View File

@ -29,8 +29,5 @@ func (dec *jsonDecoder) Decode() (*CandidateNode, error) {
return nil, err return nil, err
} }
return &CandidateNode{ return &dataBucket, nil
Kind: DocumentNode,
Content: []*CandidateNode{&dataBucket},
}, nil
} }

View File

@ -124,9 +124,6 @@ func (dec *propertiesDecoder) Decode() (*CandidateNode, error) {
} }
dec.finished = true dec.finished = true
return &CandidateNode{ return rootMap, nil
Kind: DocumentNode,
Content: []*CandidateNode{rootMap},
}, nil
} }

View File

@ -242,10 +242,7 @@ func (dec *tomlDecoder) Decode() (*CandidateNode, error) {
return nil, io.EOF return nil, io.EOF
} }
return &CandidateNode{ return dec.rootMap, deferredError
Kind: DocumentNode,
Content: []*CandidateNode{dec.rootMap},
}, deferredError
} }

View File

@ -188,10 +188,7 @@ func (dec *xmlDecoder) Decode() (*CandidateNode, error) {
dec.readAnything = true dec.readAnything = true
dec.finished = true dec.finished = true
return &CandidateNode{ return firstNode, nil
Kind: DocumentNode,
Content: []*CandidateNode{firstNode},
}, nil
} }
type xmlNode struct { type xmlNode struct {

View File

@ -120,11 +120,15 @@ func (dec *yamlDecoder) Decode() (*CandidateNode, error) {
} }
candidateNode := CandidateNode{document: dec.documentIndex} candidateNode := CandidateNode{document: dec.documentIndex}
err = candidateNode.UnmarshalYAML(&yamlNode, make(map[string]*CandidateNode)) // don't bother with the DocumentNode
err = candidateNode.UnmarshalYAML(yamlNode.Content[0], make(map[string]*CandidateNode))
if err != nil { if err != nil {
return nil, err return nil, err
} }
candidateNode.HeadComment = yamlNode.HeadComment + candidateNode.HeadComment
candidateNode.FootComment = yamlNode.FootComment + candidateNode.FootComment
if dec.leadingContent != "" { if dec.leadingContent != "" {
candidateNode.LeadingContent = dec.leadingContent candidateNode.LeadingContent = dec.leadingContent
dec.leadingContent = "" dec.leadingContent = ""
@ -139,12 +143,7 @@ func (dec *yamlDecoder) Decode() (*CandidateNode, error) {
} }
func (dec *yamlDecoder) blankNodeWithComment() *CandidateNode { func (dec *yamlDecoder) blankNodeWithComment() *CandidateNode {
return &CandidateNode{ node := createScalarNode(nil, "")
document: 0, node.LeadingContent = dec.leadingContent
filename: "", return node
Kind: DocumentNode,
Content: []*CandidateNode{createScalarNode(nil, "")},
fileIndex: 0,
LeadingContent: dec.leadingContent,
}
} }

View File

@ -75,11 +75,6 @@ yq '[... | {"p": path | join("."), "isKey": is_key, "hc": headComment, "lc": lin
``` ```
will output will output
```yaml ```yaml
- p: ""
isKey: false
hc: ""
lc: ""
fc: ""
- p: "" - p: ""
isKey: false isKey: false
hc: "" hc: ""
@ -140,11 +135,6 @@ yq '[... | {"p": path | join("."), "isKey": is_key, "hc": headComment, "lc": lin
``` ```
will output will output
```yaml ```yaml
- p: ""
isKey: false
hc: ""
lc: ""
fc: ""
- p: "" - p: ""
isKey: false isKey: false
hc: "" hc: ""
@ -197,7 +187,6 @@ yq '. head_comment="single"' sample.yml
will output will output
```yaml ```yaml
# single # single
a: cat a: cat
``` ```

View File

@ -31,7 +31,6 @@ yq '..' sample.yml
will output will output
```yaml ```yaml
a: frog a: frog
a: frog
frog frog
``` ```
@ -93,7 +92,6 @@ yq '...' sample.yml
will output will output
```yaml ```yaml
a: frog a: frog
a: frog
a a
frog frog
``` ```
@ -111,9 +109,6 @@ yq '[..]' sample.yml
``` ```
will output will output
```yaml ```yaml
- a: &cat
c: frog
b: *cat
- a: &cat - a: &cat
c: frog c: frog
b: *cat b: *cat

View File

@ -99,8 +99,6 @@ func (pe *propertiesEncoder) doEncode(p *properties.Properties, node *CandidateN
} }
_, _, err := p.Set(path, nodeValue) _, _, err := p.Set(path, nodeValue)
return err return err
case DocumentNode:
return pe.doEncode(p, node.Content[0], path, node)
case SequenceNode: case SequenceNode:
return pe.encodeArray(p, node.Content, path) return pe.encodeArray(p, node.Content, path)
case MappingNode: case MappingNode:

View File

@ -54,8 +54,6 @@ func (pe *shellVariablesEncoder) doEncode(w *io.Writer, node *CandidateNode, pat
} }
_, err := io.WriteString(*w, nonemptyPath+"="+quoteValue(node.Value)+"\n") _, err := io.WriteString(*w, nonemptyPath+"="+quoteValue(node.Value)+"\n")
return err return err
case DocumentNode:
return pe.doEncode(w, node.Content[0], path)
case SequenceNode: case SequenceNode:
for index, child := range node.Content { for index, child := range node.Content {
err := pe.doEncode(w, child, appendPath(path, index)) err := pe.doEncode(w, child, appendPath(path, index))

View File

@ -85,23 +85,6 @@ func (e *xmlEncoder) Encode(writer io.Writer, node *CandidateNode) error {
if err != nil { if err != nil {
return err return err
} }
case DocumentNode:
err := e.encodeComment(encoder, headAndLineComment(node))
if err != nil {
return err
}
unwrappedNode := node.unwrapDocument()
if unwrappedNode.Kind != MappingNode {
return fmt.Errorf("cannot encode %v to XML - only maps can be encoded", unwrappedNode.Tag)
}
err = e.encodeTopLevelMap(encoder, unwrappedNode)
if err != nil {
return err
}
err = e.encodeComment(encoder, footComment(node))
if err != nil {
return err
}
case ScalarNode: case ScalarNode:
var charData xml.CharData = []byte(node.Value) var charData xml.CharData = []byte(node.Value)
err := encoder.EncodeToken(charData) err := encoder.EncodeToken(charData)

View File

@ -239,7 +239,7 @@ var jsonScenarios = []formatScenario{
description: "empty string", description: "empty string",
skipDoc: true, skipDoc: true,
input: `""`, input: `""`,
expected: "\"\"\n", expected: "\n",
scenarioType: "decode-ndjson", scenarioType: "decode-ndjson",
}, },
{ {

View File

@ -385,9 +385,7 @@ func NodeToString(node *CandidateNode) string {
return "-- nil --" return "-- nil --"
} }
tag := node.Tag tag := node.Tag
if node.Kind == DocumentNode { if node.Kind == AliasNode {
tag = "doc"
} else if node.Kind == AliasNode {
tag = "alias" tag = "alias"
} }
valueToUse := node.Value valueToUse := node.Value
@ -422,8 +420,6 @@ func KindString(kind Kind) string {
return "SequenceNode" return "SequenceNode"
case MappingNode: case MappingNode:
return "MappingNode" return "MappingNode"
case DocumentNode:
return "DocumentNode"
case AliasNode: case AliasNode:
return "AliasNode" return "AliasNode"
default: default:

View File

@ -36,7 +36,7 @@ var addOperatorScenarios = []expressionScenario{
document: `{}`, document: `{}`,
expression: "(.a + .b) as $x | .", expression: "(.a + .b) as $x | .",
expected: []string{ expected: []string{
"D0, P[], (doc)::{}\n", "D0, P[], (!!map)::{}\n",
}, },
}, },
{ {
@ -44,7 +44,7 @@ var addOperatorScenarios = []expressionScenario{
document: `a: 0`, document: `a: 0`,
expression: ".a += .b.c", expression: ".a += .b.c",
expected: []string{ expected: []string{
"D0, P[], (doc)::a: 0\n", "D0, P[], (!!map)::a: 0\n",
}, },
}, },
@ -63,7 +63,7 @@ var addOperatorScenarios = []expressionScenario{
dontFormatInputForDoc: true, dontFormatInputForDoc: true,
expression: `.a += .b`, expression: `.a += .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: [1, 2, 3, 4]\nb:\n - 3\n - 4\n", "D0, P[], (!!map)::a: [1, 2, 3, 4]\nb:\n - 3\n - 4\n",
}, },
}, },
{ {
@ -98,7 +98,7 @@ var addOperatorScenarios = []expressionScenario{
document: `a: ['dog']`, document: `a: ['dog']`,
expression: `.a += "cat"`, expression: `.a += "cat"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: ['dog', 'cat']\n", "D0, P[], (!!map)::a: ['dog', 'cat']\n",
}, },
}, },
{ {
@ -106,7 +106,7 @@ var addOperatorScenarios = []expressionScenario{
document: `a: [dog]`, document: `a: [dog]`,
expression: `.a = ["cat"] + .a`, expression: `.a = ["cat"] + .a`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: [cat, dog]\n", "D0, P[], (!!map)::a: [cat, dog]\n",
}, },
}, },
{ {
@ -116,7 +116,7 @@ var addOperatorScenarios = []expressionScenario{
document: `{a: ['dog'], b: cat}`, document: `{a: ['dog'], b: cat}`,
expression: `.a = .a + .b`, expression: `.a = .a + .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: ['dog', 'cat'], b: cat}\n", "D0, P[], (!!map)::{a: ['dog', 'cat'], b: cat}\n",
}, },
}, },
{ {
@ -125,7 +125,7 @@ var addOperatorScenarios = []expressionScenario{
document: `a: []`, document: `a: []`,
expression: `.a += "cat"`, expression: `.a += "cat"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a:\n - cat\n", "D0, P[], (!!map)::a:\n - cat\n",
}, },
}, },
{ {
@ -134,7 +134,7 @@ var addOperatorScenarios = []expressionScenario{
document: `a: [dog]`, document: `a: [dog]`,
expression: `.a += "cat"`, expression: `.a += "cat"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: [dog, cat]\n", "D0, P[], (!!map)::a: [dog, cat]\n",
}, },
}, },
{ {
@ -171,7 +171,7 @@ var addOperatorScenarios = []expressionScenario{
document: `a: {}`, document: `a: {}`,
expression: `.a += {"b": "cat"}`, expression: `.a += {"b": "cat"}`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a:\n b: cat\n", "D0, P[], (!!map)::a:\n b: cat\n",
}, },
}, },
{ {
@ -180,7 +180,7 @@ var addOperatorScenarios = []expressionScenario{
document: `a: {c: dog}`, document: `a: {c: dog}`,
expression: `.a += {"b": "cat"}`, expression: `.a += {"b": "cat"}`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: {c: dog, b: cat}\n", "D0, P[], (!!map)::a: {c: dog, b: cat}\n",
}, },
}, },
{ {
@ -196,7 +196,7 @@ var addOperatorScenarios = []expressionScenario{
document: `a: { a1: {b: [cat]}, a2: {b: [dog]}, a3: {} }`, document: `a: { a1: {b: [cat]}, a2: {b: [dog]}, a3: {} }`,
expression: `.a[].b += ["mouse"]`, expression: `.a[].b += ["mouse"]`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: {a1: {b: [cat, mouse]}, a2: {b: [dog, mouse]}, a3: {b: [mouse]}}\n", "D0, P[], (!!map)::a: {a1: {b: [cat, mouse]}, a2: {b: [dog, mouse]}, a3: {b: [mouse]}}\n",
}, },
}, },
{ {
@ -204,7 +204,7 @@ var addOperatorScenarios = []expressionScenario{
document: `{a: cat, b: meow}`, document: `{a: cat, b: meow}`,
expression: `.a += .b`, expression: `.a += .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: catmeow, b: meow}\n", "D0, P[], (!!map)::{a: catmeow, b: meow}\n",
}, },
}, },
{ {
@ -231,7 +231,7 @@ var addOperatorScenarios = []expressionScenario{
document: `{a: 3, b: 4.9}`, document: `{a: 3, b: 4.9}`,
expression: `.a = .a + .b`, expression: `.a = .a + .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: 7.9, b: 4.9}\n", "D0, P[], (!!map)::{a: 7.9, b: 4.9}\n",
}, },
}, },
{ {
@ -240,7 +240,7 @@ var addOperatorScenarios = []expressionScenario{
document: `{a: 3, b: 4}`, document: `{a: 3, b: 4}`,
expression: `.a = .a + .b`, expression: `.a = .a + .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: 7, b: 4}\n", "D0, P[], (!!map)::{a: 7, b: 4}\n",
}, },
}, },
{ {
@ -248,7 +248,7 @@ var addOperatorScenarios = []expressionScenario{
document: `{a: 3, b: 5}`, document: `{a: 3, b: 5}`,
expression: `.[] += 1`, expression: `.[] += 1`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: 4, b: 6}\n", "D0, P[], (!!map)::{a: 4, b: 6}\n",
}, },
}, },
{ {
@ -257,7 +257,7 @@ var addOperatorScenarios = []expressionScenario{
document: `a: 2021-01-01T00:00:00Z`, document: `a: 2021-01-01T00:00:00Z`,
expression: `.a += "3h10m"`, expression: `.a += "3h10m"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: 2021-01-01T03:10:00Z\n", "D0, P[], (!!map)::a: 2021-01-01T03:10:00Z\n",
}, },
}, },
{ {
@ -266,7 +266,7 @@ var addOperatorScenarios = []expressionScenario{
document: `a: 2021-01-01`, document: `a: 2021-01-01`,
expression: `.a += "24h"`, expression: `.a += "24h"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: 2021-01-02T00:00:00Z\n", "D0, P[], (!!map)::a: 2021-01-02T00:00:00Z\n",
}, },
}, },
{ {
@ -275,7 +275,7 @@ var addOperatorScenarios = []expressionScenario{
document: `a: Saturday, 15-Dec-01 at 2:59AM GMT`, document: `a: Saturday, 15-Dec-01 at 2:59AM GMT`,
expression: `with_dtf("Monday, 02-Jan-06 at 3:04PM MST", .a += "3h1m")`, expression: `with_dtf("Monday, 02-Jan-06 at 3:04PM MST", .a += "3h1m")`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: Saturday, 15-Dec-01 at 6:00AM GMT\n", "D0, P[], (!!map)::a: Saturday, 15-Dec-01 at 6:00AM GMT\n",
}, },
}, },
{ {
@ -285,7 +285,7 @@ var addOperatorScenarios = []expressionScenario{
document: `a: !cat Saturday, 15-Dec-01 at 2:59AM GMT`, document: `a: !cat Saturday, 15-Dec-01 at 2:59AM GMT`,
expression: `with_dtf("Monday, 02-Jan-06 at 3:04PM MST", .a += "3h1m")`, expression: `with_dtf("Monday, 02-Jan-06 at 3:04PM MST", .a += "3h1m")`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: !cat Saturday, 15-Dec-01 at 6:00AM GMT\n", "D0, P[], (!!map)::a: !cat Saturday, 15-Dec-01 at 6:00AM GMT\n",
}, },
}, },
{ {
@ -302,7 +302,7 @@ var addOperatorScenarios = []expressionScenario{
document: "a: {thing: {name: Astuff, value: x}, a1: cool}\nb: {thing: {name: Bstuff, legs: 3}, b1: neat}", document: "a: {thing: {name: Astuff, value: x}, a1: cool}\nb: {thing: {name: Bstuff, legs: 3}, b1: neat}",
expression: `.a += .b`, expression: `.a += .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: {thing: {name: Bstuff, legs: 3}, a1: cool, b1: neat}\nb: {thing: {name: Bstuff, legs: 3}, b1: neat}\n", "D0, P[], (!!map)::a: {thing: {name: Bstuff, legs: 3}, a1: cool, b1: neat}\nb: {thing: {name: Bstuff, legs: 3}, b1: neat}\n",
}, },
}, },
{ {
@ -311,7 +311,7 @@ var addOperatorScenarios = []expressionScenario{
document: "a: !horse cat\nb: !goat _meow", document: "a: !horse cat\nb: !goat _meow",
expression: `.a += .b`, expression: `.a += .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: !horse cat_meow\nb: !goat _meow\n", "D0, P[], (!!map)::a: !horse cat_meow\nb: !goat _meow\n",
}, },
}, },
{ {
@ -320,7 +320,7 @@ var addOperatorScenarios = []expressionScenario{
document: "a: !horse 1.2\nb: !goat 2.3", document: "a: !horse 1.2\nb: !goat 2.3",
expression: `.a += .b`, expression: `.a += .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: !horse 3.5\nb: !goat 2.3\n", "D0, P[], (!!map)::a: !horse 3.5\nb: !goat 2.3\n",
}, },
}, },
{ {
@ -328,7 +328,7 @@ var addOperatorScenarios = []expressionScenario{
document: "a: !horse 2\nb: !goat 2.3", document: "a: !horse 2\nb: !goat 2.3",
expression: `.a += .b`, expression: `.a += .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: !horse 4.3\nb: !goat 2.3\n", "D0, P[], (!!map)::a: !horse 4.3\nb: !goat 2.3\n",
}, },
}, },
{ {
@ -336,7 +336,7 @@ var addOperatorScenarios = []expressionScenario{
document: "a: 2\nb: !goat 2.3", document: "a: 2\nb: !goat 2.3",
expression: `.a += .b`, expression: `.a += .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: 4.3\nb: !goat 2.3\n", "D0, P[], (!!map)::a: 4.3\nb: !goat 2.3\n",
}, },
}, },
{ {
@ -345,7 +345,7 @@ var addOperatorScenarios = []expressionScenario{
document: "a: !horse 2\nb: !goat 3", document: "a: !horse 2\nb: !goat 3",
expression: `.a += .b`, expression: `.a += .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: !horse 5\nb: !goat 3\n", "D0, P[], (!!map)::a: !horse 5\nb: !goat 3\n",
}, },
}, },
{ {
@ -355,7 +355,7 @@ var addOperatorScenarios = []expressionScenario{
document: "a: !horse [a]\nb: !goat [b]", document: "a: !horse [a]\nb: !goat [b]",
expression: `.a += .b`, expression: `.a += .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: !horse [a, b]\nb: !goat [b]\n", "D0, P[], (!!map)::a: !horse [a, b]\nb: !goat [b]\n",
}, },
}, },
{ {
@ -364,7 +364,7 @@ var addOperatorScenarios = []expressionScenario{
document: "a: &horse [1]", document: "a: &horse [1]",
expression: `.a += 2`, expression: `.a += 2`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: &horse [1, 2]\n", "D0, P[], (!!map)::a: &horse [1, 2]\n",
}, },
}, },
{ {

View File

@ -19,7 +19,7 @@ var alternativeOperatorScenarios = []expressionScenario{
expression: `(.b // "hello") as $x | .`, expression: `(.b // "hello") as $x | .`,
document: `a: bridge`, document: `a: bridge`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: bridge\n", "D0, P[], (!!map)::a: bridge\n",
}, },
}, },
{ {
@ -91,7 +91,7 @@ var alternativeOperatorScenarios = []expressionScenario{
expression: "(.a // (.a = 0)) += 1", expression: "(.a // (.a = 0)) += 1",
document: `a: 1`, document: `a: 1`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: 2\n", "D0, P[], (!!map)::a: 2\n",
}, },
}, },
{ {
@ -100,7 +100,7 @@ var alternativeOperatorScenarios = []expressionScenario{
expression: "(.a // (.a = 0)) += 1", expression: "(.a // (.a = 0)) += 1",
document: `b: camel`, document: `b: camel`,
expected: []string{ expected: []string{
"D0, P[], (doc)::b: camel\na: 1\n", "D0, P[], (!!map)::b: camel\na: 1\n",
}, },
}, },
} }

View File

@ -182,7 +182,7 @@ func explodeNode(node *CandidateNode, context Context) error {
log.Debugf("explodeNode - %v", NodeToString(node)) log.Debugf("explodeNode - %v", NodeToString(node))
node.Anchor = "" node.Anchor = ""
switch node.Kind { switch node.Kind {
case SequenceNode, DocumentNode: case SequenceNode:
for index, contentNode := range node.Content { for index, contentNode := range node.Content {
log.Debugf("explodeNode - index %v", index) log.Debugf("explodeNode - index %v", index)
errorInContent := explodeNode(contentNode, context) errorInContent := explodeNode(contentNode, context)

View File

@ -24,7 +24,7 @@ thingTwo:
<<: *item_value <<: *item_value
` `
var expectedUpdatedArrayRef = `D0, P[], (doc)::item_value: &item_value var expectedUpdatedArrayRef = `D0, P[], (!!map)::item_value: &item_value
value: true value: true
thingOne: thingOne:
name: item_1 name: item_1
@ -34,7 +34,7 @@ thingTwo:
!!merge <<: *item_value !!merge <<: *item_value
` `
var explodeMergeAnchorsExpected = `D0, P[], (doc)::foo: var explodeMergeAnchorsExpected = `D0, P[], (!!map)::foo:
a: foo_a a: foo_a
thing: foo_thing thing: foo_thing
c: foo_c c: foo_c
@ -95,7 +95,7 @@ var anchorOperatorScenarios = []expressionScenario{
document: `a: cat`, document: `a: cat`,
expression: `.a anchor = "foobar"`, expression: `.a anchor = "foobar"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: &foobar cat\n", "D0, P[], (!!map)::a: &foobar cat\n",
}, },
}, },
{ {
@ -103,7 +103,7 @@ var anchorOperatorScenarios = []expressionScenario{
document: `a: {b: cat}`, document: `a: {b: cat}`,
expression: `.a anchor |= .b`, expression: `.a anchor |= .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: &cat {b: cat}\n", "D0, P[], (!!map)::a: &cat {b: cat}\n",
}, },
}, },
{ {
@ -111,7 +111,7 @@ var anchorOperatorScenarios = []expressionScenario{
document: `a: {c: cat}`, document: `a: {c: cat}`,
expression: `.a anchor |= .b`, expression: `.a anchor |= .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: {c: cat}\n", "D0, P[], (!!map)::a: {c: cat}\n",
}, },
}, },
{ {
@ -119,7 +119,7 @@ var anchorOperatorScenarios = []expressionScenario{
document: `a: {c: cat}`, document: `a: {c: cat}`,
expression: `.a anchor = .b`, expression: `.a anchor = .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: {c: cat}\n", "D0, P[], (!!map)::a: {c: cat}\n",
}, },
}, },
{ {
@ -135,7 +135,7 @@ var anchorOperatorScenarios = []expressionScenario{
document: `{b: &meow purr, a: cat}`, document: `{b: &meow purr, a: cat}`,
expression: `.a alias = "meow"`, expression: `.a alias = "meow"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{b: &meow purr, a: *meow}\n", "D0, P[], (!!map)::{b: &meow purr, a: *meow}\n",
}, },
}, },
{ {
@ -143,7 +143,7 @@ var anchorOperatorScenarios = []expressionScenario{
document: `{b: &meow purr, a: cat}`, document: `{b: &meow purr, a: cat}`,
expression: `.a alias = ""`, expression: `.a alias = ""`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{b: &meow purr, a: cat}\n", "D0, P[], (!!map)::{b: &meow purr, a: cat}\n",
}, },
}, },
{ {
@ -151,7 +151,7 @@ var anchorOperatorScenarios = []expressionScenario{
document: `{b: &meow purr, a: cat}`, document: `{b: &meow purr, a: cat}`,
expression: `.a alias = .c`, expression: `.a alias = .c`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{b: &meow purr, a: cat}\n", "D0, P[], (!!map)::{b: &meow purr, a: cat}\n",
}, },
}, },
{ {
@ -159,7 +159,7 @@ var anchorOperatorScenarios = []expressionScenario{
document: `{b: &meow purr, a: cat}`, document: `{b: &meow purr, a: cat}`,
expression: `.a alias |= .c`, expression: `.a alias |= .c`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{b: &meow purr, a: cat}\n", "D0, P[], (!!map)::{b: &meow purr, a: cat}\n",
}, },
}, },
{ {
@ -167,7 +167,7 @@ var anchorOperatorScenarios = []expressionScenario{
document: `{b: &meow purr, a: {f: meow}}`, document: `{b: &meow purr, a: {f: meow}}`,
expression: `.a alias |= .f`, expression: `.a alias |= .f`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{b: &meow purr, a: *meow}\n", "D0, P[], (!!map)::{b: &meow purr, a: *meow}\n",
}, },
}, },
// { // {
@ -202,7 +202,7 @@ var anchorOperatorScenarios = []expressionScenario{
document: `{f : {a: &a cat, b: *a}}`, document: `{f : {a: &a cat, b: *a}}`,
expression: `explode(.f)`, expression: `explode(.f)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{f: {a: cat, b: cat}}\n", "D0, P[], (!!map)::{f: {a: cat, b: cat}}\n",
}, },
}, },
{ {
@ -210,7 +210,7 @@ var anchorOperatorScenarios = []expressionScenario{
document: `a: mike`, document: `a: mike`,
expression: `explode(.a)`, expression: `explode(.a)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: mike\n", "D0, P[], (!!map)::a: mike\n",
}, },
}, },
{ {
@ -218,7 +218,7 @@ var anchorOperatorScenarios = []expressionScenario{
document: `{f : {a: &a cat, *a: b}}`, document: `{f : {a: &a cat, *a: b}}`,
expression: `explode(.f)`, expression: `explode(.f)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{f: {a: cat, cat: b}}\n", "D0, P[], (!!map)::{f: {a: cat, cat: b}}\n",
}, },
}, },
{ {
@ -252,7 +252,7 @@ var anchorOperatorScenarios = []expressionScenario{
document: `{f : {a: &a cat, b: &b {foo: *a}, *a: *b}}`, document: `{f : {a: &a cat, b: &b {foo: *a}, *a: *b}}`,
expression: `explode(.f)`, expression: `explode(.f)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{f: {a: cat, b: {foo: cat}, cat: {foo: cat}}}\n", "D0, P[], (!!map)::{f: {a: cat, b: {foo: cat}, cat: {foo: cat}}}\n",
}, },
}, },
{ {

View File

@ -10,7 +10,7 @@ var arrayToMapScenarios = []expressionScenario{
document: `cool: [null, null, hello]`, document: `cool: [null, null, hello]`,
expression: `.cool |= array_to_map`, expression: `.cool |= array_to_map`,
expected: []string{ expected: []string{
"D0, P[], (doc)::cool:\n 2: hello\n", "D0, P[], (!!map)::cool:\n 2: hello\n",
}, },
}, },
} }

View File

@ -22,7 +22,7 @@ var assignOperatorScenarios = []expressionScenario{
document: "{}", document: "{}",
expression: `.a |= .b`, expression: `.a |= .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: null\n", "D0, P[], (!!map)::a: null\n",
}, },
}, },
{ {
@ -30,7 +30,7 @@ var assignOperatorScenarios = []expressionScenario{
document: mergeAnchorAssign, document: mergeAnchorAssign,
expression: `.c = .b | .a.x = "ModifiedValue" | explode(.)`, expression: `.c = .b | .a.x = "ModifiedValue" | explode(.)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a:\n x: ModifiedValue\nb:\n x: ModifiedValue\nc:\n x: ModifiedValue\n", "D0, P[], (!!map)::a:\n x: ModifiedValue\nb:\n x: ModifiedValue\nc:\n x: ModifiedValue\n",
}, },
}, },
{ {
@ -38,7 +38,7 @@ var assignOperatorScenarios = []expressionScenario{
document: "{}", document: "{}",
expression: `.a = .b`, expression: `.a = .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: null\n", "D0, P[], (!!map)::a: null\n",
}, },
}, },
{ {
@ -47,7 +47,7 @@ var assignOperatorScenarios = []expressionScenario{
document: "a: cat", document: "a: cat",
expression: `.a = [.a]`, expression: `.a = [.a]`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a:\n - cat\n", "D0, P[], (!!map)::a:\n - cat\n",
}, },
}, },
{ {
@ -56,7 +56,7 @@ var assignOperatorScenarios = []expressionScenario{
document: `a: "3"`, document: `a: "3"`,
expression: `.a = 3`, expression: `.a = 3`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: 3\n", "D0, P[], (!!map)::a: 3\n",
}, },
}, },
{ {
@ -65,7 +65,7 @@ var assignOperatorScenarios = []expressionScenario{
document: `a: "true"`, document: `a: "true"`,
expression: `.a = true`, expression: `.a = true`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: true\n", "D0, P[], (!!map)::a: true\n",
}, },
}, },
{ {
@ -74,7 +74,7 @@ var assignOperatorScenarios = []expressionScenario{
document: `a: !cat "meow"`, document: `a: !cat "meow"`,
expression: `.a = "woof"`, expression: `.a = "woof"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: !cat \"woof\"\n", "D0, P[], (!!map)::a: !cat \"woof\"\n",
}, },
}, },
{ {
@ -82,7 +82,7 @@ var assignOperatorScenarios = []expressionScenario{
document: `{a: {b: {g: foof}}}`, document: `{a: {b: {g: foof}}}`,
expression: `.a |= .b`, expression: `.a |= .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: {g: foof}}\n", "D0, P[], (!!map)::{a: {g: foof}}\n",
}, },
}, },
{ {
@ -90,7 +90,7 @@ var assignOperatorScenarios = []expressionScenario{
document: `[1,2,3]`, document: `[1,2,3]`,
expression: `.[] |= . * 2`, expression: `.[] |= . * 2`,
expected: []string{ expected: []string{
"D0, P[], (doc)::[2, 4, 6]\n", "D0, P[], (!!seq)::[2, 4, 6]\n",
}, },
}, },
{ {
@ -100,7 +100,7 @@ var assignOperatorScenarios = []expressionScenario{
document2: "{b: bob}", document2: "{b: bob}",
expression: `select(fileIndex==0).a = select(fileIndex==1) | select(fileIndex==0)`, expression: `select(fileIndex==0).a = select(fileIndex==1) | select(fileIndex==0)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: {b: bob}}\n", "D0, P[], (!!map)::{a: {b: bob}}\n",
}, },
}, },
{ {
@ -108,7 +108,7 @@ var assignOperatorScenarios = []expressionScenario{
document: `{a: {b: child}, b: sibling}`, document: `{a: {b: child}, b: sibling}`,
expression: `.a = .b`, expression: `.a = .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: sibling, b: sibling}\n", "D0, P[], (!!map)::{a: sibling, b: sibling}\n",
}, },
}, },
{ {
@ -116,7 +116,7 @@ var assignOperatorScenarios = []expressionScenario{
document: `{a: fieldA, b: fieldB, c: fieldC}`, document: `{a: fieldA, b: fieldB, c: fieldC}`,
expression: `(.a, .c) = "potato"`, expression: `(.a, .c) = "potato"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: potato, b: fieldB, c: potato}\n", "D0, P[], (!!map)::{a: potato, b: fieldB, c: potato}\n",
}, },
}, },
{ {
@ -124,7 +124,7 @@ var assignOperatorScenarios = []expressionScenario{
document: `{a: {b: apple}}`, document: `{a: {b: apple}}`,
expression: `.a.b = "frog"`, expression: `.a.b = "frog"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: {b: frog}}\n", "D0, P[], (!!map)::{a: {b: frog}}\n",
}, },
}, },
{ {
@ -133,7 +133,7 @@ var assignOperatorScenarios = []expressionScenario{
document: `{a: {b: apple}}`, document: `{a: {b: apple}}`,
expression: `.a.b |= "frog"`, expression: `.a.b |= "frog"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: {b: frog}}\n", "D0, P[], (!!map)::{a: {b: frog}}\n",
}, },
}, },
{ {
@ -149,7 +149,7 @@ var assignOperatorScenarios = []expressionScenario{
document: `{a: {b: apple}}`, document: `{a: {b: apple}}`,
expression: `.a.b |= 5`, expression: `.a.b |= 5`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: {b: 5}}\n", "D0, P[], (!!map)::{a: {b: 5}}\n",
}, },
}, },
{ {
@ -157,7 +157,7 @@ var assignOperatorScenarios = []expressionScenario{
document: `{a: {b: apple}}`, document: `{a: {b: apple}}`,
expression: `.a.b |= 3.142`, expression: `.a.b |= 3.142`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: {b: 3.142}}\n", "D0, P[], (!!map)::{a: {b: 3.142}}\n",
}, },
}, },
{ {
@ -166,7 +166,7 @@ var assignOperatorScenarios = []expressionScenario{
document: `{a: {b: apple, c: cactus}}`, document: `{a: {b: apple, c: cactus}}`,
expression: `(.a[] | select(. == "apple")) = "frog"`, expression: `(.a[] | select(. == "apple")) = "frog"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: {b: frog, c: cactus}}\n", "D0, P[], (!!map)::{a: {b: frog, c: cactus}}\n",
}, },
}, },
{ {
@ -174,7 +174,7 @@ var assignOperatorScenarios = []expressionScenario{
document: `{a: {b: apple, c: cactus}}`, document: `{a: {b: apple, c: cactus}}`,
expression: `(.a.[] | select(. == "apple")) = "frog"`, expression: `(.a.[] | select(. == "apple")) = "frog"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: {b: frog, c: cactus}}\n", "D0, P[], (!!map)::{a: {b: frog, c: cactus}}\n",
}, },
}, },
{ {
@ -182,7 +182,7 @@ var assignOperatorScenarios = []expressionScenario{
document: `[candy, apple, sandy]`, document: `[candy, apple, sandy]`,
expression: `(.[] | select(. == "*andy")) = "bogs"`, expression: `(.[] | select(. == "*andy")) = "bogs"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::[bogs, apple, bogs]\n", "D0, P[], (!!seq)::[bogs, apple, bogs]\n",
}, },
}, },
{ {
@ -191,7 +191,7 @@ var assignOperatorScenarios = []expressionScenario{
document: `{}`, document: `{}`,
expression: `.a.b |= "bogs"`, expression: `.a.b |= "bogs"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a:\n b: bogs\n", "D0, P[], (!!map)::a:\n b: bogs\n",
}, },
}, },
{ {
@ -201,7 +201,7 @@ var assignOperatorScenarios = []expressionScenario{
document: `a: &cool cat`, document: `a: &cool cat`,
expression: `.a = "dog"`, expression: `.a = "dog"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: &cool dog\n", "D0, P[], (!!map)::a: &cool dog\n",
}, },
}, },
{ {
@ -210,7 +210,7 @@ var assignOperatorScenarios = []expressionScenario{
document: `{}`, document: `{}`,
expression: `.a.b.[0] |= "bogs"`, expression: `.a.b.[0] |= "bogs"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a:\n b:\n - bogs\n", "D0, P[], (!!map)::a:\n b:\n - bogs\n",
}, },
}, },
{ {
@ -218,7 +218,7 @@ var assignOperatorScenarios = []expressionScenario{
document: `{}`, document: `{}`,
expression: `.a.b.[1].c |= "bogs"`, expression: `.a.b.[1].c |= "bogs"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a:\n b:\n - null\n - c: bogs\n", "D0, P[], (!!map)::a:\n b:\n - null\n - c: bogs\n",
}, },
}, },
{ {
@ -226,7 +226,7 @@ var assignOperatorScenarios = []expressionScenario{
document: "a: !cat meow\nb: !dog woof", document: "a: !cat meow\nb: !dog woof",
expression: `.a = .b`, expression: `.a = .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: !cat woof\nb: !dog woof\n", "D0, P[], (!!map)::a: !cat woof\nb: !dog woof\n",
}, },
}, },
{ {
@ -235,7 +235,7 @@ var assignOperatorScenarios = []expressionScenario{
document: "a: !cat meow\nb: !dog woof", document: "a: !cat meow\nb: !dog woof",
expression: `.a =c .b`, expression: `.a =c .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: !dog woof\nb: !dog woof\n", "D0, P[], (!!map)::a: !dog woof\nb: !dog woof\n",
}, },
}, },
} }

View File

@ -43,7 +43,7 @@ var booleanOperatorScenarios = []expressionScenario{
document: "b: hi", document: "b: hi",
expression: `select(.a or .b)`, expression: `select(.a or .b)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::b: hi\n", "D0, P[], (!!map)::b: hi\n",
}, },
}, },
{ {
@ -51,7 +51,7 @@ var booleanOperatorScenarios = []expressionScenario{
document: "b: hi", document: "b: hi",
expression: `select((.a and .b) | not)`, expression: `select((.a and .b) | not)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::b: hi\n", "D0, P[], (!!map)::b: hi\n",
}, },
}, },
{ {
@ -106,7 +106,7 @@ var booleanOperatorScenarios = []expressionScenario{
document: "a: [rad, awesome]\nb: [meh, whatever]", document: "a: [rad, awesome]\nb: [meh, whatever]",
expression: `.[] |= any_c(. == "awesome")`, expression: `.[] |= any_c(. == "awesome")`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: true\nb: false\n", "D0, P[], (!!map)::a: true\nb: false\n",
}, },
}, },
{ {
@ -114,7 +114,7 @@ var booleanOperatorScenarios = []expressionScenario{
document: `[{pet: cat}]`, document: `[{pet: cat}]`,
expression: `any_c(.name == "harry") as $c | .`, expression: `any_c(.name == "harry") as $c | .`,
expected: []string{ expected: []string{
"D0, P[], (doc)::[{pet: cat}]\n", "D0, P[], (!!seq)::[{pet: cat}]\n",
}, },
}, },
{ {
@ -170,7 +170,7 @@ var booleanOperatorScenarios = []expressionScenario{
document: "a: [rad, awesome]\nb: [meh, 12]", document: "a: [rad, awesome]\nb: [meh, 12]",
expression: `.[] |= all_c(tag == "!!str")`, expression: `.[] |= all_c(tag == "!!str")`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: true\nb: false\n", "D0, P[], (!!map)::a: true\nb: false\n",
}, },
}, },
{ {
@ -205,7 +205,7 @@ var booleanOperatorScenarios = []expressionScenario{
document: `{}`, document: `{}`,
expression: `(.a.b or .c) as $x | .`, expression: `(.a.b or .c) as $x | .`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{}\n", "D0, P[], (!!map)::{}\n",
}, },
}, },
{ {
@ -213,7 +213,7 @@ var booleanOperatorScenarios = []expressionScenario{
document: `{}`, document: `{}`,
expression: `(.a.b and .c) as $x | .`, expression: `(.a.b and .c) as $x | .`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{}\n", "D0, P[], (!!map)::{}\n",
}, },
}, },
{ {

View File

@ -40,7 +40,7 @@ var collectObjectOperatorScenarios = []expressionScenario{
document: "a: []", document: "a: []",
expression: `.a += [{"key": "att2", "value": "val2"}]`, expression: `.a += [{"key": "att2", "value": "val2"}]`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a:\n - key: att2\n value: val2\n", "D0, P[], (!!map)::a:\n - key: att2\n value: val2\n",
}, },
}, },
{ {

View File

@ -112,7 +112,7 @@ func getCommentsOperator(d *dataTreeNavigator, context Context, expressionNode *
comment = chompRegexp.ReplaceAllString(comment, "") comment = chompRegexp.ReplaceAllString(comment, "")
} else if preferences.HeadComment { } else if preferences.HeadComment {
comment = candidate.HeadComment comment = candidate.HeadComment
} else if preferences.FootComment && candidate.Kind == DocumentNode && candidate.TrailingContent != "" { } else if preferences.FootComment && candidate.TrailingContent != "" {
comment = candidate.TrailingContent comment = candidate.TrailingContent
} else if preferences.FootComment { } else if preferences.FootComment {
comment = candidate.FootComment comment = candidate.FootComment

View File

@ -60,7 +60,7 @@ var commentOperatorScenarios = []expressionScenario{
document: `a: cat`, document: `a: cat`,
expression: `.a line_comment="single"`, expression: `.a line_comment="single"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: cat # single\n", "D0, P[], (!!map)::a: cat # single\n",
}, },
}, },
{ {
@ -69,7 +69,7 @@ var commentOperatorScenarios = []expressionScenario{
document: "a:\n b: things", document: "a:\n b: things",
expression: `(.a | key) line_comment="single"`, expression: `(.a | key) line_comment="single"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: # single\n b: things\n", "D0, P[], (!!map)::a: # single\n b: things\n",
}, },
}, },
{ {
@ -77,7 +77,7 @@ var commentOperatorScenarios = []expressionScenario{
document: "a: cat\nb: dog", document: "a: cat\nb: dog",
expression: `.a line_comment=.b`, expression: `.a line_comment=.b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: cat # dog\nb: dog\n", "D0, P[], (!!map)::a: cat # dog\nb: dog\n",
}, },
}, },
{ {
@ -85,8 +85,8 @@ var commentOperatorScenarios = []expressionScenario{
document: "a: cat\n---\na: dog", document: "a: cat\n---\na: dog",
expression: `.a line_comment |= documentIndex`, expression: `.a line_comment |= documentIndex`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: cat # 0\n", "D0, P[], (!!map)::a: cat # 0\n",
"D1, P[], (doc)::a: dog # 1\n", "D1, P[], (!!map)::a: dog # 1\n",
}, },
}, },
{ {
@ -94,7 +94,7 @@ var commentOperatorScenarios = []expressionScenario{
document: "a: cat\nb: dog", document: "a: cat\nb: dog",
expression: `.. line_comment |= .`, expression: `.. line_comment |= .`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: cat # cat\nb: dog # dog\n", "D0, P[], (!!map)::a: cat # cat\nb: dog # dog\n",
}, },
}, },
{ {
@ -102,7 +102,7 @@ var commentOperatorScenarios = []expressionScenario{
document: "a: cat\nb: dog", document: "a: cat\nb: dog",
expression: `.. comments |= .`, expression: `.. comments |= .`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: cat # cat\n# cat\n\n# cat\nb: dog # dog\n# dog\n\n# dog\n", "D0, P[], (!!map)::a: cat # cat\n# cat\n\n# cat\nb: dog # dog\n# dog\n\n# dog\n",
}, },
}, },
{ {
@ -146,7 +146,7 @@ var commentOperatorScenarios = []expressionScenario{
document: `a: cat`, document: `a: cat`,
expression: `. head_comment="single"`, expression: `. head_comment="single"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::# single\n\na: cat\n", "D0, P[], (!!map)::# single\na: cat\n",
}, },
}, },
{ {
@ -154,7 +154,7 @@ var commentOperatorScenarios = []expressionScenario{
document: "f: foo\na:\n b: cat", document: "f: foo\na:\n b: cat",
expression: `(.a | key) head_comment="single"`, expression: `(.a | key) head_comment="single"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::f: foo\n# single\na:\n b: cat\n", "D0, P[], (!!map)::f: foo\n# single\na:\n b: cat\n",
}, },
}, },
{ {
@ -162,7 +162,7 @@ var commentOperatorScenarios = []expressionScenario{
document: `a: cat`, document: `a: cat`,
expression: `. foot_comment=.a`, expression: `. foot_comment=.a`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: cat\n# cat\n", "D0, P[], (!!map)::a: cat\n\n# cat\n",
}, },
}, },
{ {
@ -171,7 +171,7 @@ var commentOperatorScenarios = []expressionScenario{
document: "a: cat\n\n# hi", document: "a: cat\n\n# hi",
expression: `. foot_comment=""`, expression: `. foot_comment=""`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: cat\n", "D0, P[], (!!map)::a: cat\n",
}, },
}, },
{ {
@ -179,7 +179,7 @@ var commentOperatorScenarios = []expressionScenario{
document: `a: cat`, document: `a: cat`,
expression: `. foot_comment=.b.d`, expression: `. foot_comment=.b.d`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: cat\n", "D0, P[], (!!map)::a: cat\n",
}, },
}, },
{ {
@ -187,7 +187,7 @@ var commentOperatorScenarios = []expressionScenario{
document: `a: cat`, document: `a: cat`,
expression: `. foot_comment|=.b.d`, expression: `. foot_comment|=.b.d`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: cat\n", "D0, P[], (!!map)::a: cat\n",
}, },
}, },
{ {
@ -195,7 +195,7 @@ var commentOperatorScenarios = []expressionScenario{
document: "a: cat # comment\nb: dog # leave this", document: "a: cat # comment\nb: dog # leave this",
expression: `.a line_comment=""`, expression: `.a line_comment=""`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: cat\nb: dog # leave this\n", "D0, P[], (!!map)::a: cat\nb: dog # leave this\n",
}, },
}, },
{ {
@ -204,7 +204,7 @@ var commentOperatorScenarios = []expressionScenario{
document: "# hi\n\na: cat # comment\n\n# great\n\nb: # key comment", document: "# hi\n\na: cat # comment\n\n# great\n\nb: # key comment",
expression: `... comments=""`, expression: `... comments=""`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: cat\nb:\n", "D0, P[], (!!map)::a: cat\nb:\n",
}, },
}, },
{ {
@ -230,7 +230,7 @@ var commentOperatorScenarios = []expressionScenario{
document: "a: cat\n\n# haha", document: "a: cat\n\n# haha",
expression: `... comments= ""`, expression: `... comments= ""`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: cat\n", "D0, P[], (!!map)::a: cat\n",
}, },
}, },
{ {
@ -239,7 +239,7 @@ var commentOperatorScenarios = []expressionScenario{
document: "a: cat\n\n# haha", document: "a: cat\n\n# haha",
expression: `.. comments= ""`, expression: `.. comments= ""`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: cat\n", "D0, P[], (!!map)::a: cat\n",
}, },
}, },
{ {

View File

@ -11,7 +11,7 @@ var dateTimeOperatorScenarios = []expressionScenario{
document: `a: 2001-12-15T02:59:43.1Z`, document: `a: 2001-12-15T02:59:43.1Z`,
expression: `.a |= format_datetime("Monday, 02-Jan-06 at 3:04PM")`, expression: `.a |= format_datetime("Monday, 02-Jan-06 at 3:04PM")`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: Saturday, 15-Dec-01 at 2:59AM\n", "D0, P[], (!!map)::a: Saturday, 15-Dec-01 at 2:59AM\n",
}, },
}, },
{ {
@ -20,7 +20,7 @@ var dateTimeOperatorScenarios = []expressionScenario{
document: `a: Saturday, 15-Dec-01 at 2:59AM`, document: `a: Saturday, 15-Dec-01 at 2:59AM`,
expression: `.a |= with_dtf("Monday, 02-Jan-06 at 3:04PM"; format_datetime("2006-01-02"))`, expression: `.a |= with_dtf("Monday, 02-Jan-06 at 3:04PM"; format_datetime("2006-01-02"))`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: 2001-12-15\n", "D0, P[], (!!map)::a: 2001-12-15\n",
}, },
}, },
{ {
@ -36,7 +36,7 @@ var dateTimeOperatorScenarios = []expressionScenario{
document: "a: cool", document: "a: cool",
expression: `.updated = now`, expression: `.updated = now`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: cool\nupdated: 2021-05-19T01:02:03Z\n", "D0, P[], (!!map)::a: cool\nupdated: 2021-05-19T01:02:03Z\n",
}, },
}, },
{ {
@ -62,7 +62,7 @@ var dateTimeOperatorScenarios = []expressionScenario{
document: "a: cool", document: "a: cool",
expression: `.updated = (now | tz("Australia/Sydney"))`, expression: `.updated = (now | tz("Australia/Sydney"))`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: cool\nupdated: 2021-05-19T11:02:03+10:00\n", "D0, P[], (!!map)::a: cool\nupdated: 2021-05-19T11:02:03+10:00\n",
}, },
}, },
{ {
@ -71,7 +71,7 @@ var dateTimeOperatorScenarios = []expressionScenario{
document: "a: Saturday, 15-Dec-01 at 2:59AM GMT", document: "a: Saturday, 15-Dec-01 at 2:59AM GMT",
expression: `.a |= with_dtf("Monday, 02-Jan-06 at 3:04PM MST"; tz("Australia/Sydney"))`, expression: `.a |= with_dtf("Monday, 02-Jan-06 at 3:04PM MST"; tz("Australia/Sydney"))`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: Saturday, 15-Dec-01 at 1:59PM AEDT\n", "D0, P[], (!!map)::a: Saturday, 15-Dec-01 at 1:59PM AEDT\n",
}, },
}, },
{ {
@ -80,7 +80,7 @@ var dateTimeOperatorScenarios = []expressionScenario{
document: "a: Saturday, 15-Dec-01 at 2:59AM GMT", document: "a: Saturday, 15-Dec-01 at 2:59AM GMT",
expression: `.a |= with_dtf("Monday, 02-Jan-06 at 3:04PM MST"; tz("Australia/Sydney"))`, expression: `.a |= with_dtf("Monday, 02-Jan-06 at 3:04PM MST"; tz("Australia/Sydney"))`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: Saturday, 15-Dec-01 at 1:59PM AEDT\n", "D0, P[], (!!map)::a: Saturday, 15-Dec-01 at 1:59PM AEDT\n",
}, },
}, },
{ {
@ -88,7 +88,7 @@ var dateTimeOperatorScenarios = []expressionScenario{
document: `a: 2021-01-01T00:00:00Z`, document: `a: 2021-01-01T00:00:00Z`,
expression: `.a += "3h10m"`, expression: `.a += "3h10m"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: 2021-01-01T03:10:00Z\n", "D0, P[], (!!map)::a: 2021-01-01T03:10:00Z\n",
}, },
}, },
{ {
@ -97,7 +97,7 @@ var dateTimeOperatorScenarios = []expressionScenario{
document: `a: 2021-01-01T03:10:00Z`, document: `a: 2021-01-01T03:10:00Z`,
expression: `.a -= "3h10m"`, expression: `.a -= "3h10m"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: 2021-01-01T00:00:00Z\n", "D0, P[], (!!map)::a: 2021-01-01T00:00:00Z\n",
}, },
}, },
{ {
@ -105,7 +105,7 @@ var dateTimeOperatorScenarios = []expressionScenario{
document: `a: Saturday, 15-Dec-01 at 2:59AM GMT`, document: `a: Saturday, 15-Dec-01 at 2:59AM GMT`,
expression: `with_dtf("Monday, 02-Jan-06 at 3:04PM MST"; .a += "3h1m")`, expression: `with_dtf("Monday, 02-Jan-06 at 3:04PM MST"; .a += "3h1m")`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: Saturday, 15-Dec-01 at 6:00AM GMT\n", "D0, P[], (!!map)::a: Saturday, 15-Dec-01 at 6:00AM GMT\n",
}, },
}, },
{ {
@ -114,7 +114,7 @@ var dateTimeOperatorScenarios = []expressionScenario{
document: `a: Saturday, 15-Dec-01 at 2:59AM GMT`, document: `a: Saturday, 15-Dec-01 at 2:59AM GMT`,
expression: `with_dtf("Monday, 02-Jan-06 at 3:04PM MST"; .a = (.a + "3h1m" | tz("Australia/Perth")))`, expression: `with_dtf("Monday, 02-Jan-06 at 3:04PM MST"; .a = (.a + "3h1m" | tz("Australia/Perth")))`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: Saturday, 15-Dec-01 at 2:00PM AWST\n", "D0, P[], (!!map)::a: Saturday, 15-Dec-01 at 2:00PM AWST\n",
}, },
}, },
{ {
@ -123,7 +123,7 @@ var dateTimeOperatorScenarios = []expressionScenario{
document: "a: Saturday, 15-Dec-01 at 2:59AM GMT", document: "a: Saturday, 15-Dec-01 at 2:59AM GMT",
expression: `.a |= with_dtf("Monday, 02-Jan-06 at 3:04PM MST", tz("Australia/Sydney"))`, expression: `.a |= with_dtf("Monday, 02-Jan-06 at 3:04PM MST", tz("Australia/Sydney"))`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: Saturday, 15-Dec-01 at 1:59PM AEDT\n", "D0, P[], (!!map)::a: Saturday, 15-Dec-01 at 1:59PM AEDT\n",
}, },
}, },
} }

View File

@ -15,25 +15,14 @@ func deleteChildOperator(d *dataTreeNavigator, context Context, expressionNode *
for el := nodesToDelete.MatchingNodes.Back(); el != nil; el = el.Prev() { for el := nodesToDelete.MatchingNodes.Back(); el != nil; el = el.Prev() {
candidate := el.Value.(*CandidateNode) candidate := el.Value.(*CandidateNode)
if candidate.Kind == DocumentNode { if candidate.Parent == nil {
//need to delete this node from context. // must be a top level thing, delete it
return removeFromContext(context, candidate) return removeFromContext(context, candidate)
} else if candidate.Parent == nil {
//problem: context may already be '.a' and then I pass in '.a.a2'.
// should pass in .a2.
log.Info("Could not find parent of %v", NodeToString(candidate))
return context, nil
} }
log.Debugf("processing deletion of candidate %v", NodeToString(candidate)) log.Debugf("processing deletion of candidate %v", NodeToString(candidate))
parentNode := candidate.Parent parentNode := candidate.Parent
if parentNode != nil && parentNode.Kind == DocumentNode {
log.Debugf("it has a document parent")
return removeFromContext(context, candidate.Parent)
}
candidatePath := candidate.GetPath() candidatePath := candidate.GetPath()
childPath := candidatePath[len(candidatePath)-1] childPath := candidatePath[len(candidatePath)-1]

View File

@ -10,7 +10,7 @@ var deleteOperatorScenarios = []expressionScenario{
document: `{a: cat, b: dog}`, document: `{a: cat, b: dog}`,
expression: `del(.b)`, expression: `del(.b)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: cat}\n", "D0, P[], (!!map)::{a: cat}\n",
}, },
}, },
{ {
@ -18,7 +18,7 @@ var deleteOperatorScenarios = []expressionScenario{
document: `{a: {a1: fred, a2: frood}}`, document: `{a: {a1: fred, a2: frood}}`,
expression: `del(.a.a1)`, expression: `del(.a.a1)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: {a2: frood}}\n", "D0, P[], (!!map)::{a: {a2: frood}}\n",
}, },
}, },
{ {
@ -36,7 +36,7 @@ var deleteOperatorScenarios = []expressionScenario{
document: `a: fast`, document: `a: fast`,
expression: `del(select(.a == "fast"))`, expression: `del(select(.a == "fast"))`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: slow\n", "D0, P[], (!!map)::a: slow\n",
}, },
}, },
{ {
@ -100,7 +100,7 @@ var deleteOperatorScenarios = []expressionScenario{
document: `{a: {a1: fred, a2: frood}}`, document: `{a: {a1: fred, a2: frood}}`,
expression: `del(.. | select(.=="frood"))`, expression: `del(.. | select(.=="frood"))`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: {a1: fred}}\n", "D0, P[], (!!map)::{a: {a1: fred}}\n",
}, },
}, },
{ {
@ -108,7 +108,7 @@ var deleteOperatorScenarios = []expressionScenario{
document: `[1,2,3]`, document: `[1,2,3]`,
expression: `del(.[1])`, expression: `del(.[1])`,
expected: []string{ expected: []string{
"D0, P[], (doc)::[1, 3]\n", "D0, P[], (!!seq)::[1, 3]\n",
}, },
}, },
{ {
@ -116,7 +116,7 @@ var deleteOperatorScenarios = []expressionScenario{
document: `a: [1,2,3]`, document: `a: [1,2,3]`,
expression: `del(.a[])`, expression: `del(.a[])`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: []\n", "D0, P[], (!!map)::a: []\n",
}, },
}, },
{ {
@ -124,7 +124,7 @@ var deleteOperatorScenarios = []expressionScenario{
document: `a: [10,x,10, 10, x, 10]`, document: `a: [10,x,10, 10, x, 10]`,
expression: `del(.a[] | select(. == 10))`, expression: `del(.a[] | select(. == 10))`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: [x, x]\n", "D0, P[], (!!map)::a: [x, x]\n",
}, },
}, },
{ {
@ -144,7 +144,7 @@ var deleteOperatorScenarios = []expressionScenario{
document: `a: {thing1: yep, thing2: cool, thing3: hi, b: {thing1: cool, great: huh}}`, document: `a: {thing1: yep, thing2: cool, thing3: hi, b: {thing1: cool, great: huh}}`,
expression: `del(.. | select(tag == "!!map") | (.b.thing1,.thing2))`, expression: `del(.. | select(tag == "!!map") | (.b.thing1,.thing2))`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: {thing1: yep, thing3: hi, b: {great: huh}}\n", "D0, P[], (!!map)::a: {thing1: yep, thing3: hi, b: {great: huh}}\n",
}, },
}, },
{ {
@ -152,7 +152,7 @@ var deleteOperatorScenarios = []expressionScenario{
document: `[{a: cat, b: dog}]`, document: `[{a: cat, b: dog}]`,
expression: `del(.[0].a)`, expression: `del(.[0].a)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::[{b: dog}]\n", "D0, P[], (!!seq)::[{b: dog}]\n",
}, },
}, },
{ {
@ -160,7 +160,7 @@ var deleteOperatorScenarios = []expressionScenario{
document: `{a: cat, b: dog}`, document: `{a: cat, b: dog}`,
expression: `del(.c)`, expression: `del(.c)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: cat, b: dog}\n", "D0, P[], (!!map)::{a: cat, b: dog}\n",
}, },
}, },
{ {
@ -168,7 +168,7 @@ var deleteOperatorScenarios = []expressionScenario{
document: `{a: cat, b: dog, c: bat}`, document: `{a: cat, b: dog, c: bat}`,
expression: `del( .[] | select(. == "*at") )`, expression: `del( .[] | select(. == "*at") )`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{b: dog}\n", "D0, P[], (!!map)::{b: dog}\n",
}, },
}, },
{ {
@ -176,7 +176,7 @@ var deleteOperatorScenarios = []expressionScenario{
document: `{a: {name: frog, b: {name: blog, age: 12}}}`, document: `{a: {name: frog, b: {name: blog, age: 12}}}`,
expression: `del(.. | select(has("name")).name)`, expression: `del(.. | select(has("name")).name)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: {b: {age: 12}}}\n", "D0, P[], (!!map)::{a: {b: {age: 12}}}\n",
}, },
}, },
} }

View File

@ -19,7 +19,7 @@ var divideOperatorScenarios = []expressionScenario{
document: `{}`, document: `{}`,
expression: "(.a / .b) as $x | .", expression: "(.a / .b) as $x | .",
expected: []string{ expected: []string{
"D0, P[], (doc)::{}\n", "D0, P[], (!!map)::{}\n",
}, },
}, },
{ {
@ -27,7 +27,7 @@ var divideOperatorScenarios = []expressionScenario{
document: `{a: cat_meow, b: _}`, document: `{a: cat_meow, b: _}`,
expression: `.c = .a / .b`, expression: `.c = .a / .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: cat_meow, b: _, c: [cat, meow]}\n", "D0, P[], (!!map)::{a: cat_meow, b: _, c: [cat, meow]}\n",
}, },
}, },
{ {
@ -36,7 +36,7 @@ var divideOperatorScenarios = []expressionScenario{
document: `{a: 12, b: 2.5}`, document: `{a: 12, b: 2.5}`,
expression: `.a = .a / .b`, expression: `.a = .a / .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: 4.8, b: 2.5}\n", "D0, P[], (!!map)::{a: 4.8, b: 2.5}\n",
}, },
}, },
{ {
@ -45,7 +45,7 @@ var divideOperatorScenarios = []expressionScenario{
document: `{a: 1, b: -1}`, document: `{a: 1, b: -1}`,
expression: `.a = .a / 0 | .b = .b / 0`, expression: `.a = .a / 0 | .b = .b / 0`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: !!float +Inf, b: !!float -Inf}\n", "D0, P[], (!!map)::{a: !!float +Inf, b: !!float -Inf}\n",
}, },
}, },
{ {
@ -54,7 +54,7 @@ var divideOperatorScenarios = []expressionScenario{
document: "a: !horse cat_meow\nb: !goat _", document: "a: !horse cat_meow\nb: !goat _",
expression: `.a = .a / .b`, expression: `.a = .a / .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: !horse\n - cat\n - meow\nb: !goat _\n", "D0, P[], (!!map)::a: !horse\n - cat\n - meow\nb: !goat _\n",
}, },
}, },
{ {
@ -63,7 +63,7 @@ var divideOperatorScenarios = []expressionScenario{
document: "a: !horse 1.2\nb: !goat 2.3", document: "a: !horse 1.2\nb: !goat 2.3",
expression: `.a = .a / .b`, expression: `.a = .a / .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: !horse 0.5217391304347826\nb: !goat 2.3\n", "D0, P[], (!!map)::a: !horse 0.5217391304347826\nb: !goat 2.3\n",
}, },
}, },
{ {
@ -71,7 +71,7 @@ var divideOperatorScenarios = []expressionScenario{
document: "a: 2\nb: !goat 2.3", document: "a: 2\nb: !goat 2.3",
expression: `.a = .a / .b`, expression: `.a = .a / .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: 0.8695652173913044\nb: !goat 2.3\n", "D0, P[], (!!map)::a: 0.8695652173913044\nb: !goat 2.3\n",
}, },
}, },
{ {
@ -80,7 +80,7 @@ var divideOperatorScenarios = []expressionScenario{
document: "a: !horse 2\nb: !goat 3", document: "a: !horse 2\nb: !goat 3",
expression: `.a = .a / .b`, expression: `.a = .a / .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: !horse 0.6666666666666666\nb: !goat 3\n", "D0, P[], (!!map)::a: !horse 0.6666666666666666\nb: !goat 3\n",
}, },
}, },
{ {
@ -89,7 +89,7 @@ var divideOperatorScenarios = []expressionScenario{
document: "a: &horse [1]", document: "a: &horse [1]",
expression: `.a[1] = .a[0] / 2`, expression: `.a[1] = .a[0] / 2`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: &horse [1, 0.5]\n", "D0, P[], (!!map)::a: &horse [1, 0.5]\n",
}, },
}, },
{ {

View File

@ -28,7 +28,7 @@ var documentIndexScenarios = []expressionScenario{
document: "a: cat\n---\na: frog\n", document: "a: cat\n---\na: frog\n",
expression: `select(document_index == 1)`, expression: `select(document_index == 1)`,
expected: []string{ expected: []string{
"D1, P[], (doc)::a: frog\n", "D1, P[], (!!map)::a: frog\n",
}, },
}, },
{ {
@ -36,7 +36,7 @@ var documentIndexScenarios = []expressionScenario{
document: "a: cat\n---\na: frog\n", document: "a: cat\n---\na: frog\n",
expression: `select(di == 1)`, expression: `select(di == 1)`,
expected: []string{ expected: []string{
"D1, P[], (doc)::a: frog\n", "D1, P[], (!!map)::a: frog\n",
}, },
}, },
{ {

View File

@ -4,7 +4,7 @@ import (
"testing" "testing"
) )
var prefix = "D0, P[], (doc)::a:\n cool:\n bob: dylan\n" var prefix = "D0, P[], (!!map)::a:\n cool:\n bob: dylan\n"
var encoderDecoderOperatorScenarios = []expressionScenario{ var encoderDecoderOperatorScenarios = []expressionScenario{
{ {
@ -13,7 +13,7 @@ var encoderDecoderOperatorScenarios = []expressionScenario{
document: `{a: {cool: "thing"}}`, document: `{a: {cool: "thing"}}`,
expression: `.b = (.a | to_json)`, expression: `.b = (.a | to_json)`,
expected: []string{ expected: []string{
`D0, P[], (doc)::{a: {cool: "thing"}, b: "{\n \"cool\": \"thing\"\n}\n"} `D0, P[], (!!map)::{a: {cool: "thing"}, b: "{\n \"cool\": \"thing\"\n}\n"}
`, `,
}, },
}, },
@ -24,7 +24,7 @@ var encoderDecoderOperatorScenarios = []expressionScenario{
document: `{a: {cool: "thing"}}`, document: `{a: {cool: "thing"}}`,
expression: `.b = (.a | to_json(0))`, expression: `.b = (.a | to_json(0))`,
expected: []string{ expected: []string{
`D0, P[], (doc)::{a: {cool: "thing"}, b: '{"cool":"thing"}'} `D0, P[], (!!map)::{a: {cool: "thing"}, b: '{"cool":"thing"}'}
`, `,
}, },
}, },
@ -35,7 +35,7 @@ var encoderDecoderOperatorScenarios = []expressionScenario{
document: `{a: {cool: "thing"}}`, document: `{a: {cool: "thing"}}`,
expression: `.b = (.a | @json)`, expression: `.b = (.a | @json)`,
expected: []string{ expected: []string{
`D0, P[], (doc)::{a: {cool: "thing"}, b: '{"cool":"thing"}'} `D0, P[], (!!map)::{a: {cool: "thing"}, b: '{"cool":"thing"}'}
`, `,
}, },
}, },
@ -54,7 +54,7 @@ var encoderDecoderOperatorScenarios = []expressionScenario{
document: `{a: {cool: "thing"}}`, document: `{a: {cool: "thing"}}`,
expression: `.b = (.a | to_props)`, expression: `.b = (.a | to_props)`,
expected: []string{ expected: []string{
`D0, P[], (doc)::{a: {cool: "thing"}, b: "cool = thing\n"} `D0, P[], (!!map)::{a: {cool: "thing"}, b: "cool = thing\n"}
`, `,
}, },
}, },
@ -63,7 +63,7 @@ var encoderDecoderOperatorScenarios = []expressionScenario{
document: `{a: {cool: "thing"}}`, document: `{a: {cool: "thing"}}`,
expression: `.b = (.a | @props)`, expression: `.b = (.a | @props)`,
expected: []string{ expected: []string{
`D0, P[], (doc)::{a: {cool: "thing"}, b: "cool = thing\n"} `D0, P[], (!!map)::{a: {cool: "thing"}, b: "cool = thing\n"}
`, `,
}, },
}, },
@ -72,7 +72,7 @@ var encoderDecoderOperatorScenarios = []expressionScenario{
document: `a: "cats=great\ndogs=cool as well"`, document: `a: "cats=great\ndogs=cool as well"`,
expression: `.a |= @propsd`, expression: `.a |= @propsd`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a:\n cats: great\n dogs: cool as well\n", "D0, P[], (!!map)::a:\n cats: great\n dogs: cool as well\n",
}, },
}, },
{ {
@ -80,7 +80,7 @@ var encoderDecoderOperatorScenarios = []expressionScenario{
document: `a: "cats,dogs\ngreat,cool as well"`, document: `a: "cats,dogs\ngreat,cool as well"`,
expression: `.a |= @csvd`, expression: `.a |= @csvd`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a:\n - cats: great\n dogs: cool as well\n", "D0, P[], (!!map)::a:\n - cats: great\n dogs: cool as well\n",
}, },
}, },
{ {
@ -88,7 +88,7 @@ var encoderDecoderOperatorScenarios = []expressionScenario{
document: `a: "cats dogs\ngreat cool as well"`, document: `a: "cats dogs\ngreat cool as well"`,
expression: `.a |= @tsvd`, expression: `.a |= @tsvd`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a:\n - cats: great\n dogs: cool as well\n", "D0, P[], (!!map)::a:\n - cats: great\n dogs: cool as well\n",
}, },
}, },
{ {
@ -122,7 +122,7 @@ var encoderDecoderOperatorScenarios = []expressionScenario{
document: `{a: {cool: "thing"}}`, document: `{a: {cool: "thing"}}`,
expression: `.b = (.a | to_yaml)`, expression: `.b = (.a | to_yaml)`,
expected: []string{ expected: []string{
`D0, P[], (doc)::{a: {cool: "thing"}, b: "{cool: \"thing\"}\n"} `D0, P[], (!!map)::{a: {cool: "thing"}, b: "{cool: \"thing\"}\n"}
`, `,
}, },
}, },
@ -131,7 +131,7 @@ var encoderDecoderOperatorScenarios = []expressionScenario{
document: `a: "foo: bar"`, document: `a: "foo: bar"`,
expression: `.b = (.a | from_yaml)`, expression: `.b = (.a | from_yaml)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: \"foo: bar\"\nb:\n foo: bar\n", "D0, P[], (!!map)::a: \"foo: bar\"\nb:\n foo: bar\n",
}, },
}, },
{ {
@ -140,7 +140,7 @@ var encoderDecoderOperatorScenarios = []expressionScenario{
document: "a: |\n foo: bar\n baz: dog\n", document: "a: |\n foo: bar\n baz: dog\n",
expression: `.a |= (from_yaml | .foo = "cat" | to_yaml)`, expression: `.a |= (from_yaml | .foo = "cat" | to_yaml)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: |\n foo: cat\n baz: dog\n", "D0, P[], (!!map)::a: |\n foo: cat\n baz: dog\n",
}, },
}, },
{ {
@ -149,7 +149,7 @@ var encoderDecoderOperatorScenarios = []expressionScenario{
document: "a: |-\n foo: bar\n baz: dog\n", document: "a: |-\n foo: bar\n baz: dog\n",
expression: `.a |= (from_yaml | .foo = "cat" | to_yaml)`, expression: `.a |= (from_yaml | .foo = "cat" | to_yaml)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: |-\n foo: cat\n baz: dog\n", "D0, P[], (!!map)::a: |-\n foo: cat\n baz: dog\n",
}, },
}, },
{ {
@ -158,7 +158,7 @@ var encoderDecoderOperatorScenarios = []expressionScenario{
document: "a: 'foo: bar'", document: "a: 'foo: bar'",
expression: `.a |= (from_yaml | .foo = "cat" | to_yaml)`, expression: `.a |= (from_yaml | .foo = "cat" | to_yaml)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: 'foo: cat'\n", "D0, P[], (!!map)::a: 'foo: cat'\n",
}, },
}, },
{ {
@ -193,7 +193,7 @@ var encoderDecoderOperatorScenarios = []expressionScenario{
document: "a: \"foo: bar\"", document: "a: \"foo: bar\"",
expression: `.a |= (from_yaml | .foo = {"a": "frog"} | to_yaml)`, expression: `.a |= (from_yaml | .foo = {"a": "frog"} | to_yaml)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: \"foo:\\n a: frog\"\n", "D0, P[], (!!map)::a: \"foo:\\n a: frog\"\n",
}, },
}, },
{ {
@ -229,7 +229,7 @@ var encoderDecoderOperatorScenarios = []expressionScenario{
document: `a: "<foo>bar</foo>"`, document: `a: "<foo>bar</foo>"`,
expression: `.b = (.a | from_xml)`, expression: `.b = (.a | from_xml)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: \"<foo>bar</foo>\"\nb:\n foo: bar\n", "D0, P[], (!!map)::a: \"<foo>bar</foo>\"\nb:\n foo: bar\n",
}, },
}, },
{ {
@ -299,7 +299,7 @@ var encoderDecoderOperatorScenarios = []expressionScenario{
document: "coolData: YTogYXBwbGUK", document: "coolData: YTogYXBwbGUK",
expression: ".coolData |= (@base64d | from_yaml)", expression: ".coolData |= (@base64d | from_yaml)",
expected: []string{ expected: []string{
"D0, P[], (doc)::coolData:\n a: apple\n", "D0, P[], (!!map)::coolData:\n a: apple\n",
}, },
}, },
{ {

View File

@ -60,7 +60,7 @@ var envOperatorScenarios = []expressionScenario{
environmentVariables: map[string]string{"pathEnv": ".a.b[0].name", "valueEnv": "moo"}, environmentVariables: map[string]string{"pathEnv": ".a.b[0].name", "valueEnv": "moo"},
expression: `eval(strenv(pathEnv)) = strenv(valueEnv)`, expression: `eval(strenv(pathEnv)) = strenv(valueEnv)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: {b: [{name: moo}, {name: cat}]}}\n", "D0, P[], (!!map)::{a: {b: [{name: moo}, {name: cat}]}}\n",
}, },
}, },
{ {
@ -136,7 +136,7 @@ var envOperatorScenarios = []expressionScenario{
document: "{v: \"${myenv}\"}", document: "{v: \"${myenv}\"}",
expression: `.v |= envsubst`, expression: `.v |= envsubst`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{v: \"cat meow\"}\n", "D0, P[], (!!map)::{v: \"cat meow\"}\n",
}, },
}, },
{ {
@ -157,7 +157,7 @@ var envOperatorScenarios = []expressionScenario{
document: "# abc\n{v: \"${myenv}\"}\n# xyz\n", document: "# abc\n{v: \"${myenv}\"}\n# xyz\n",
expression: `(.. | select(tag == "!!str")) |= envsubst`, expression: `(.. | select(tag == "!!str")) |= envsubst`,
expected: []string{ expected: []string{
"D0, P[], (doc)::# abc\n{v: \"cat meow\"}\n# xyz\n", "D0, P[], (!!map)::# abc\n{v: \"cat meow\"}\n# xyz\n",
}, },
}, },
} }

View File

@ -49,7 +49,7 @@ var equalsOperatorScenarios = []expressionScenario{
// document: "{}", // document: "{}",
// expression: "(.a == .b) as $x | .", // expression: "(.a == .b) as $x | .",
// expected: []string{ // expected: []string{
// "D0, P[], (doc)::{}\n", // "D0, P[], (!!map)::{}\n",
// }, // },
// }, // },
// { // {
@ -65,7 +65,7 @@ var equalsOperatorScenarios = []expressionScenario{
// document: "{}", // document: "{}",
// expression: "(.a != .b) as $x | .", // expression: "(.a != .b) as $x | .",
// expected: []string{ // expected: []string{
// "D0, P[], (doc)::{}\n", // "D0, P[], (!!map)::{}\n",
// }, // },
// }, // },
// { // {
@ -87,7 +87,7 @@ var equalsOperatorScenarios = []expressionScenario{
// document: "{a: {b: 10}}", // document: "{a: {b: 10}}",
// expression: "select(.d == .c)", // expression: "select(.d == .c)",
// expected: []string{ // expected: []string{
// "D0, P[], (doc)::{a: {b: 10}}\n", // "D0, P[], (!!map)::{a: {b: 10}}\n",
// }, // },
// }, // },
// { // {
@ -95,7 +95,7 @@ var equalsOperatorScenarios = []expressionScenario{
// document: "{a: {b: 10}}", // document: "{a: {b: 10}}",
// expression: "select(null == .c)", // expression: "select(null == .c)",
// expected: []string{ // expected: []string{
// "D0, P[], (doc)::{a: {b: 10}}\n", // "D0, P[], (!!map)::{a: {b: 10}}\n",
// }, // },
// }, // },
// { // {
@ -176,7 +176,7 @@ var equalsOperatorScenarios = []expressionScenario{
// document: "a: frog", // document: "a: frog",
// expression: `select(.b != "thing")`, // expression: `select(.b != "thing")`,
// expected: []string{ // expected: []string{
// "D0, P[], (doc)::a: frog\n", // "D0, P[], (!!map)::a: frog\n",
// }, // },
// }, // },
// { // {
@ -184,7 +184,7 @@ var equalsOperatorScenarios = []expressionScenario{
// document: "a: frog", // document: "a: frog",
// expression: `select(.b == .c)`, // expression: `select(.b == .c)`,
// expected: []string{ // expected: []string{
// "D0, P[], (doc)::a: frog\n", // "D0, P[], (!!map)::a: frog\n",
// }, // },
// }, // },
} }

View File

@ -27,7 +27,7 @@ var errorOperatorScenarios = []expressionScenario{
document: "name: Bob\nfavouriteAnimal: cat\n", document: "name: Bob\nfavouriteAnimal: cat\n",
expression: validationExpression, expression: validationExpression,
expected: []string{ expected: []string{
"D0, P[], (doc)::name: Bob\nfavouriteAnimal: cat\nnumPets: 3\n", "D0, P[], (!!map)::name: Bob\nfavouriteAnimal: cat\nnumPets: 3\n",
}, },
}, },
} }

View File

@ -21,7 +21,7 @@ var evalOperatorScenarios = []expressionScenario{
environmentVariables: map[string]string{"pathEnv": ".a.b[0].name", "valueEnv": "moo"}, environmentVariables: map[string]string{"pathEnv": ".a.b[0].name", "valueEnv": "moo"},
expression: `eval(strenv(pathEnv)) = strenv(valueEnv)`, expression: `eval(strenv(pathEnv)) = strenv(valueEnv)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: {b: [{name: moo}, {name: cat}]}}\n", "D0, P[], (!!map)::{a: {b: [{name: moo}, {name: cat}]}}\n",
}, },
}, },
} }

View File

@ -44,7 +44,7 @@ var fileOperatorScenarios = []expressionScenario{
document: "a: cat\nb: dog", document: "a: cat\nb: dog",
expression: `.. lineComment |= filename`, expression: `.. lineComment |= filename`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: cat # sample.yml\nb: dog # sample.yml\n", "D0, P[], (!!map)::a: cat # sample.yml\nb: dog # sample.yml\n",
}, },
}, },
} }

View File

@ -11,7 +11,7 @@ var flattenOperatorScenarios = []expressionScenario{
document: `[1, [2], [[3]]]`, document: `[1, [2], [[3]]]`,
expression: `flatten`, expression: `flatten`,
expected: []string{ expected: []string{
"D0, P[], (doc)::[1, 2, 3]\n", "D0, P[], (!!seq)::[1, 2, 3]\n",
}, },
}, },
{ {
@ -19,7 +19,7 @@ var flattenOperatorScenarios = []expressionScenario{
document: `[1, [2], [[3]]]`, document: `[1, [2], [[3]]]`,
expression: `flatten(1)`, expression: `flatten(1)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::[1, 2, [3]]\n", "D0, P[], (!!seq)::[1, 2, [3]]\n",
}, },
}, },
{ {
@ -27,7 +27,7 @@ var flattenOperatorScenarios = []expressionScenario{
document: `[[]]`, document: `[[]]`,
expression: `flatten`, expression: `flatten`,
expected: []string{ expected: []string{
"D0, P[], (doc)::[]\n", "D0, P[], (!!seq)::[]\n",
}, },
}, },
{ {
@ -35,7 +35,7 @@ var flattenOperatorScenarios = []expressionScenario{
document: `[{foo: bar}, [{foo: baz}]]`, document: `[{foo: bar}, [{foo: baz}]]`,
expression: `flatten`, expression: `flatten`,
expected: []string{ expected: []string{
"D0, P[], (doc)::[{foo: bar}, {foo: baz}]\n", "D0, P[], (!!seq)::[{foo: bar}, {foo: baz}]\n",
}, },
}, },
} }

View File

@ -18,7 +18,7 @@ var hasOperatorScenarios = []expressionScenario{
document: `a: hello`, document: `a: hello`,
expression: `has(.b) as $c | .`, expression: `has(.b) as $c | .`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: hello\n", "D0, P[], (!!map)::a: hello\n",
}, },
}, },
{ {

View File

@ -90,7 +90,7 @@ var keysOperatorScenarios = []expressionScenario{
document: "a:\n x: 3\n y: 4", document: "a:\n x: 3\n y: 4",
expression: `(.a.x | key) = "meow"`, expression: `(.a.x | key) = "meow"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a:\n meow: 3\n y: 4\n", "D0, P[], (!!map)::a:\n meow: 3\n y: 4\n",
}, },
}, },
{ {

View File

@ -10,7 +10,7 @@ var loadScenarios = []expressionScenario{
description: "Load empty file with a comment", description: "Load empty file with a comment",
expression: `load("../../examples/empty.yaml")`, expression: `load("../../examples/empty.yaml")`,
expected: []string{ expected: []string{
"D0, P[], (doc)::# comment\n\n", "D0, P[], (!!null)::# comment\n\n",
}, },
}, },
{ {
@ -19,7 +19,7 @@ var loadScenarios = []expressionScenario{
document: `- "../../examples/small.yaml"`, document: `- "../../examples/small.yaml"`,
expression: `.[] |= load(.)`, expression: `.[] |= load(.)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::- # comment\n # about things\n a: cat\n", "D0, P[], (!!seq)::- # comment\n # about things\n a: cat\n",
}, },
}, },
{ {
@ -43,7 +43,7 @@ var loadScenarios = []expressionScenario{
document: `{myFile: "../../examples/thing.yml"}`, document: `{myFile: "../../examples/thing.yml"}`,
expression: `load(.myFile)`, expression: `load(.myFile)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: apple is included\nb: cool.\n", "D0, P[], (!!map)::a: apple is included\nb: cool.\n",
}, },
}, },
{ {
@ -52,7 +52,7 @@ var loadScenarios = []expressionScenario{
document: `{something: {file: "thing.yml"}}`, document: `{something: {file: "thing.yml"}}`,
expression: `.something |= load("../../examples/" + .file)`, expression: `.something |= load("../../examples/" + .file)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{something: {a: apple is included, b: cool.}}\n", "D0, P[], (!!map)::{something: {a: apple is included, b: cool.}}\n",
}, },
}, },
{ {
@ -61,7 +61,7 @@ var loadScenarios = []expressionScenario{
document: `{something: {file: "thing.yml"}, over: {here: [{file: "thing.yml"}]}}`, document: `{something: {file: "thing.yml"}, over: {here: [{file: "thing.yml"}]}}`,
expression: `(.. | select(has("file"))) |= load("../../examples/" + .file)`, expression: `(.. | select(has("file"))) |= load("../../examples/" + .file)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{something: {a: apple is included, b: cool.}, over: {here: [{a: apple is included, b: cool.}]}}\n", "D0, P[], (!!map)::{something: {a: apple is included, b: cool.}, over: {here: [{a: apple is included, b: cool.}]}}\n",
}, },
}, },
{ {
@ -70,7 +70,7 @@ var loadScenarios = []expressionScenario{
document: `{something: {file: "thing.yml"}}`, document: `{something: {file: "thing.yml"}}`,
expression: `.something |= load_str("../../examples/" + .file)`, expression: `.something |= load_str("../../examples/" + .file)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{something: \"a: apple is included\\nb: cool.\"}\n", "D0, P[], (!!map)::{something: \"a: apple is included\\nb: cool.\"}\n",
}, },
}, },
{ {
@ -79,7 +79,7 @@ var loadScenarios = []expressionScenario{
document: "cool: things", document: "cool: things",
expression: `.more_stuff = load_xml("../../examples/small.xml")`, expression: `.more_stuff = load_xml("../../examples/small.xml")`,
expected: []string{ expected: []string{
"D0, P[], (doc)::cool: things\nmore_stuff:\n this: is some xml\n", "D0, P[], (!!map)::cool: things\nmore_stuff:\n this: is some xml\n",
}, },
}, },
{ {
@ -87,7 +87,7 @@ var loadScenarios = []expressionScenario{
document: "cool: things", document: "cool: things",
expression: `.more_stuff = load_props("../../examples/small.properties")`, expression: `.more_stuff = load_props("../../examples/small.properties")`,
expected: []string{ expected: []string{
"D0, P[], (doc)::cool: things\nmore_stuff:\n this:\n is: a properties file\n", "D0, P[], (!!map)::cool: things\nmore_stuff:\n this:\n is: a properties file\n",
}, },
}, },
{ {
@ -104,7 +104,7 @@ var loadScenarios = []expressionScenario{
document: "cool: things", document: "cool: things",
expression: `.more_stuff = load_base64("../../examples/base64.txt")`, expression: `.more_stuff = load_base64("../../examples/base64.txt")`,
expected: []string{ expected: []string{
"D0, P[], (doc)::cool: things\nmore_stuff: my secret chilli recipe is....\n", "D0, P[], (!!map)::cool: things\nmore_stuff: my secret chilli recipe is....\n",
}, },
}, },
} }

View File

@ -29,8 +29,8 @@ var mapOperatorScenarios = []expressionScenario{
document2: `{x: 10, y: 20, z: 30}`, document2: `{x: 10, y: 20, z: 30}`,
expression: `map_values(. + 1)`, expression: `map_values(. + 1)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: 2, b: 3, c: 4}\n", "D0, P[], (!!map)::{a: 2, b: 3, c: 4}\n",
"D0, P[], (doc)::{x: 11, y: 21, z: 31}\n", "D0, P[], (!!map)::{x: 11, y: 21, z: 31}\n",
}, },
}, },
{ {
@ -38,7 +38,7 @@ var mapOperatorScenarios = []expressionScenario{
document: `{a: 1, b: 2, c: 3}`, document: `{a: 1, b: 2, c: 3}`,
expression: `map_values(. + 1)`, expression: `map_values(. + 1)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: 2, b: 3, c: 4}\n", "D0, P[], (!!map)::{a: 2, b: 3, c: 4}\n",
}, },
}, },
} }

View File

@ -19,7 +19,7 @@ var moduloOperatorScenarios = []expressionScenario{
document: `{}`, document: `{}`,
expression: "(.a / .b) as $x | .", expression: "(.a / .b) as $x | .",
expected: []string{ expected: []string{
"D0, P[], (doc)::{}\n", "D0, P[], (!!map)::{}\n",
}, },
}, },
{ {
@ -28,7 +28,7 @@ var moduloOperatorScenarios = []expressionScenario{
document: `{a: 13, b: 2}`, document: `{a: 13, b: 2}`,
expression: `.a = .a % .b`, expression: `.a = .a % .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: 1, b: 2}\n", "D0, P[], (!!map)::{a: 1, b: 2}\n",
}, },
}, },
{ {
@ -37,7 +37,7 @@ var moduloOperatorScenarios = []expressionScenario{
document: `{a: 12, b: 2.5}`, document: `{a: 12, b: 2.5}`,
expression: `.a = .a % .b`, expression: `.a = .a % .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: !!float 2, b: 2.5}\n", "D0, P[], (!!map)::{a: !!float 2, b: 2.5}\n",
}, },
}, },
{ {
@ -53,7 +53,7 @@ var moduloOperatorScenarios = []expressionScenario{
document: `{a: 1.1, b: 0}`, document: `{a: 1.1, b: 0}`,
expression: `.a = .a % .b`, expression: `.a = .a % .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: !!float NaN, b: 0}\n", "D0, P[], (!!map)::{a: !!float NaN, b: 0}\n",
}, },
}, },
{ {
@ -62,7 +62,7 @@ var moduloOperatorScenarios = []expressionScenario{
document: "a: !horse 333.975\nb: !goat 299.2", document: "a: !horse 333.975\nb: !goat 299.2",
expression: `.a = .a % .b`, expression: `.a = .a % .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: !horse 34.775000000000034\nb: !goat 299.2\n", "D0, P[], (!!map)::a: !horse 34.775000000000034\nb: !goat 299.2\n",
}, },
}, },
{ {
@ -70,7 +70,7 @@ var moduloOperatorScenarios = []expressionScenario{
document: "a: 2\nb: !goat 2.3", document: "a: 2\nb: !goat 2.3",
expression: `.a = .a % .b`, expression: `.a = .a % .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: !!float 2\nb: !goat 2.3\n", "D0, P[], (!!map)::a: !!float 2\nb: !goat 2.3\n",
}, },
}, },
{ {
@ -79,7 +79,7 @@ var moduloOperatorScenarios = []expressionScenario{
document: "a: &horse [1]", document: "a: &horse [1]",
expression: `.a[1] = .a[0] % 2`, expression: `.a[1] = .a[0] % 2`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: &horse [1, 1]\n", "D0, P[], (!!map)::a: &horse [1, 1]\n",
}, },
}, },
{ {

View File

@ -171,7 +171,7 @@ var multiplyOperatorScenarios = []expressionScenario{
document: "a: 3\nb: 4", document: "a: 3\nb: 4",
expression: `.a *= .b`, expression: `.a *= .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: 12\nb: 4\n", "D0, P[], (!!map)::a: 12\nb: 4\n",
}, },
}, },
{ {
@ -435,7 +435,7 @@ var multiplyOperatorScenarios = []expressionScenario{
environmentVariables: map[string]string{"originalPath": ".myArray", "otherPath": ".newArray", "idPath": ".a"}, environmentVariables: map[string]string{"originalPath": ".myArray", "otherPath": ".newArray", "idPath": ".a"},
expression: mergeExpression, expression: mergeExpression,
expected: []string{ expected: []string{
"D0, P[], (doc)::{myArray: [{a: apple, b: appleB2}, {a: kiwi, b: kiwiB}, {a: banana, b: bananaB, c: bananaC}, {a: dingo, c: dingoC}], something: else}\n", "D0, P[], (!!map)::{myArray: [{a: apple, b: appleB2}, {a: kiwi, b: kiwiB}, {a: banana, b: bananaB, c: bananaC}, {a: dingo, c: dingoC}], something: else}\n",
}, },
}, },
{ {
@ -484,7 +484,7 @@ var multiplyOperatorScenarios = []expressionScenario{
document: "a: !horse 2\nb: !goat 3", document: "a: !horse 2\nb: !goat 3",
expression: ".a = .a * .b", expression: ".a = .a * .b",
expected: []string{ expected: []string{
"D0, P[], (doc)::a: !horse 6\nb: !goat 3\n", "D0, P[], (!!map)::a: !horse 6\nb: !goat 3\n",
}, },
}, },
{ {
@ -493,7 +493,7 @@ var multiplyOperatorScenarios = []expressionScenario{
document: "a: !horse 2.5\nb: !goat 3.5", document: "a: !horse 2.5\nb: !goat 3.5",
expression: ".a = .a * .b", expression: ".a = .a * .b",
expected: []string{ expected: []string{
"D0, P[], (doc)::a: !horse 8.75\nb: !goat 3.5\n", "D0, P[], (!!map)::a: !horse 8.75\nb: !goat 3.5\n",
}, },
}, },
{ {
@ -502,7 +502,7 @@ var multiplyOperatorScenarios = []expressionScenario{
document: "a: 2\nb: !goat 3.5", document: "a: 2\nb: !goat 3.5",
expression: ".a = .a * .b", expression: ".a = .a * .b",
expected: []string{ expected: []string{
"D0, P[], (doc)::a: !!float 7\nb: !goat 3.5\n", "D0, P[], (!!map)::a: !!float 7\nb: !goat 3.5\n",
}, },
}, },
{ {
@ -511,7 +511,7 @@ var multiplyOperatorScenarios = []expressionScenario{
document: "a: !horse [1,2]\nb: !goat [3]", document: "a: !horse [1,2]\nb: !goat [3]",
expression: ".a = .a * .b", expression: ".a = .a * .b",
expected: []string{ expected: []string{
"D0, P[], (doc)::a: !horse [3]\nb: !goat [3]\n", "D0, P[], (!!map)::a: !horse [3]\nb: !goat [3]\n",
}, },
}, },
{ {
@ -520,7 +520,7 @@ var multiplyOperatorScenarios = []expressionScenario{
document: "a: !horse {cat: meow}\nb: !goat {dog: woof}", document: "a: !horse {cat: meow}\nb: !goat {dog: woof}",
expression: ".a = .a * .b", expression: ".a = .a * .b",
expected: []string{ expected: []string{
"D0, P[], (doc)::a: !horse {cat: meow, dog: woof}\nb: !goat {dog: woof}\n", "D0, P[], (!!map)::a: !horse {cat: meow, dog: woof}\nb: !goat {dog: woof}\n",
}, },
}, },
{ {
@ -529,7 +529,7 @@ var multiplyOperatorScenarios = []expressionScenario{
document: "a: !horse {cat: meow}\nb: !goat {dog: woof}", document: "a: !horse {cat: meow}\nb: !goat {dog: woof}",
expression: ".a *=c .b", expression: ".a *=c .b",
expected: []string{ expected: []string{
"D0, P[], (doc)::a: !goat {cat: meow, dog: woof}\nb: !goat {dog: woof}\n", "D0, P[], (!!map)::a: !goat {cat: meow, dog: woof}\nb: !goat {dog: woof}\n",
}, },
}, },
{ {
@ -539,7 +539,7 @@ var multiplyOperatorScenarios = []expressionScenario{
document: "a: !horse {cat: meow}\nb: !goat {dog: woof}", document: "a: !horse {cat: meow}\nb: !goat {dog: woof}",
expression: ".a =c .a *c .b", expression: ".a =c .a *c .b",
expected: []string{ expected: []string{
"D0, P[], (doc)::a: !goat {cat: meow, dog: woof}\nb: !goat {dog: woof}\n", "D0, P[], (!!map)::a: !goat {cat: meow, dog: woof}\nb: !goat {dog: woof}\n",
}, },
}, },
{ {
@ -549,7 +549,7 @@ var multiplyOperatorScenarios = []expressionScenario{
document: "a: !horse {cat: meow}\nb: !goat {dog: woof}", document: "a: !horse {cat: meow}\nb: !goat {dog: woof}",
expression: ".a *= .b", expression: ".a *= .b",
expected: []string{ expected: []string{
"D0, P[], (doc)::a: !horse {cat: meow, dog: woof}\nb: !goat {dog: woof}\n", "D0, P[], (!!map)::a: !horse {cat: meow, dog: woof}\nb: !goat {dog: woof}\n",
}, },
}, },
{ {
@ -558,7 +558,7 @@ var multiplyOperatorScenarios = []expressionScenario{
document: "a: {cat: !horse meow}\nb: {cat: 5}", document: "a: {cat: !horse meow}\nb: {cat: 5}",
expression: ".a = .a * .b", expression: ".a = .a * .b",
expected: []string{ expected: []string{
"D0, P[], (doc)::a: {cat: !horse 5}\nb: {cat: 5}\n", "D0, P[], (!!map)::a: {cat: !horse 5}\nb: {cat: 5}\n",
}, },
}, },
{ {
@ -567,7 +567,7 @@ var multiplyOperatorScenarios = []expressionScenario{
document: "a: {a: original}\n", document: "a: {a: original}\n",
expression: `.a *=n load("../../examples/thing.yml")`, expression: `.a *=n load("../../examples/thing.yml")`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: {a: original, b: cool.}\n", "D0, P[], (!!map)::a: {a: original, b: cool.}\n",
}, },
}, },
{ {
@ -576,7 +576,7 @@ var multiplyOperatorScenarios = []expressionScenario{
document: "a: {a: original}\n", document: "a: {a: original}\n",
expression: `.a *= load("../../examples/thing.yml")`, expression: `.a *= load("../../examples/thing.yml")`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: {a: apple is included, b: cool.}\n", "D0, P[], (!!map)::a: {a: apple is included, b: cool.}\n",
}, },
}, },
{ {

View File

@ -78,7 +78,7 @@ var pathOperatorScenarios = []expressionScenario{
document: `{a: {b: cat}}`, document: `{a: {b: cat}}`,
expression: `setpath(["a", "b"]; "things")`, expression: `setpath(["a", "b"]; "things")`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: {b: things}}\n", "D0, P[], (!!map)::{a: {b: things}}\n",
}, },
}, },
{ {
@ -102,7 +102,7 @@ var pathOperatorScenarios = []expressionScenario{
document: `a: [cat, frog]`, document: `a: [cat, frog]`,
expression: `setpath(["a", 0]; "things")`, expression: `setpath(["a", 0]; "things")`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: [things, frog]\n", "D0, P[], (!!map)::a: [things, frog]\n",
}, },
}, },
{ {
@ -118,7 +118,7 @@ var pathOperatorScenarios = []expressionScenario{
document: `{a: {b: cat, c: dog, d: frog}}`, document: `{a: {b: cat, c: dog, d: frog}}`,
expression: `delpaths([["a", "c"], ["a", "d"]])`, expression: `delpaths([["a", "c"], ["a", "d"]])`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: {b: cat}}\n", "D0, P[], (!!map)::{a: {b: cat}}\n",
}, },
}, },
{ {
@ -126,7 +126,7 @@ var pathOperatorScenarios = []expressionScenario{
document: `a: [cat, frog]`, document: `a: [cat, frog]`,
expression: `delpaths([["a", 0]])`, expression: `delpaths([["a", 0]])`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: [frog]\n", "D0, P[], (!!map)::a: [frog]\n",
}, },
}, },
{ {

View File

@ -11,7 +11,7 @@ var pickOperatorScenarios = []expressionScenario{
document: "myMap: {cat: meow, dog: bark, thing: hamster, hamster: squeek}\n", document: "myMap: {cat: meow, dog: bark, thing: hamster, hamster: squeek}\n",
expression: `.myMap |= pick(["hamster", "cat", "goat"])`, expression: `.myMap |= pick(["hamster", "cat", "goat"])`,
expected: []string{ expected: []string{
"D0, P[], (doc)::myMap: {hamster: squeek, cat: meow}\n", "D0, P[], (!!map)::myMap: {hamster: squeek, cat: meow}\n",
}, },
}, },
{ {
@ -20,7 +20,7 @@ var pickOperatorScenarios = []expressionScenario{
document: "!things myMap: {cat: meow, dog: bark, thing: hamster, hamster: squeek}\n", document: "!things myMap: {cat: meow, dog: bark, thing: hamster, hamster: squeek}\n",
expression: `.myMap |= pick(["hamster", "cat", "goat"])`, expression: `.myMap |= pick(["hamster", "cat", "goat"])`,
expected: []string{ expected: []string{
"D0, P[], (doc)::!things myMap: {hamster: squeek, cat: meow}\n", "D0, P[], (!!map)::!things myMap: {hamster: squeek, cat: meow}\n",
}, },
}, },
{ {
@ -29,7 +29,7 @@ var pickOperatorScenarios = []expressionScenario{
document: "# abc\nmyMap: {cat: meow, dog: bark, thing: hamster, hamster: squeek}\n# xyz\n", document: "# abc\nmyMap: {cat: meow, dog: bark, thing: hamster, hamster: squeek}\n# xyz\n",
expression: `.myMap |= pick(["hamster", "cat", "goat"])`, expression: `.myMap |= pick(["hamster", "cat", "goat"])`,
expected: []string{ expected: []string{
"D0, P[], (doc)::# abc\nmyMap: {hamster: squeek, cat: meow}\n# xyz\n", "D0, P[], (!!map)::# abc\nmyMap: {hamster: squeek, cat: meow}\n# xyz\n",
}, },
}, },
{ {

View File

@ -18,7 +18,7 @@ var pipeOperatorScenarios = []expressionScenario{
document: `{a: cow, b: sheep, c: same}`, document: `{a: cow, b: sheep, c: same}`,
expression: `.a = "cat" | .b = "dog"`, expression: `.a = "cat" | .b = "dog"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: cat, b: dog, c: same}\n", "D0, P[], (!!map)::{a: cat, b: dog, c: same}\n",
}, },
}, },
{ {

View File

@ -25,11 +25,6 @@ func recursiveDecent(results *list.List, context Context, preferences recursiveD
for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { for el := context.MatchingNodes.Front(); el != nil; el = el.Next() {
candidate := el.Value.(*CandidateNode) candidate := el.Value.(*CandidateNode)
if candidate.Kind == DocumentNode {
results.PushBack(candidate)
candidate = candidate.unwrapDocument()
}
log.Debugf("Recursive Decent, added %v", NodeToString(candidate)) log.Debugf("Recursive Decent, added %v", NodeToString(candidate))
results.PushBack(candidate) results.PushBack(candidate)

View File

@ -10,7 +10,7 @@ var recursiveDescentOperatorScenarios = []expressionScenario{
document: `{}`, document: `{}`,
expression: `..`, expression: `..`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{}\n", "D0, P[], (!!map)::{}\n",
}, },
}, },
{ {
@ -18,7 +18,7 @@ var recursiveDescentOperatorScenarios = []expressionScenario{
document: `{}`, document: `{}`,
expression: `...`, expression: `...`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{}\n", "D0, P[], (!!map)::{}\n",
}, },
}, },
{ {
@ -26,7 +26,7 @@ var recursiveDescentOperatorScenarios = []expressionScenario{
document: `[]`, document: `[]`,
expression: `..`, expression: `..`,
expected: []string{ expected: []string{
"D0, P[], (doc)::[]\n", "D0, P[], (!!seq)::[]\n",
}, },
}, },
{ {
@ -34,7 +34,7 @@ var recursiveDescentOperatorScenarios = []expressionScenario{
document: `[]`, document: `[]`,
expression: `...`, expression: `...`,
expected: []string{ expected: []string{
"D0, P[], (doc)::[]\n", "D0, P[], (!!seq)::[]\n",
}, },
}, },
{ {
@ -42,7 +42,7 @@ var recursiveDescentOperatorScenarios = []expressionScenario{
document: `cat`, document: `cat`,
expression: `..`, expression: `..`,
expected: []string{ expected: []string{
"D0, P[], (doc)::cat\n", "D0, P[], (!!str)::cat\n",
}, },
}, },
{ {
@ -50,7 +50,7 @@ var recursiveDescentOperatorScenarios = []expressionScenario{
document: `cat`, document: `cat`,
expression: `...`, expression: `...`,
expected: []string{ expected: []string{
"D0, P[], (doc)::cat\n", "D0, P[], (!!str)::cat\n",
}, },
}, },
{ {
@ -58,7 +58,7 @@ var recursiveDescentOperatorScenarios = []expressionScenario{
document: `{a: frog}`, document: `{a: frog}`,
expression: `..`, expression: `..`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: frog}\n", "D0, P[], (!!map)::{a: frog}\n",
"D0, P[a], (!!str)::frog\n", "D0, P[a], (!!str)::frog\n",
}, },
}, },
@ -86,7 +86,7 @@ var recursiveDescentOperatorScenarios = []expressionScenario{
document: `{a: frog}`, document: `{a: frog}`,
expression: `...`, expression: `...`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: frog}\n", "D0, P[], (!!map)::{a: frog}\n",
"D0, P[a], (!!str)::a\n", "D0, P[a], (!!str)::a\n",
"D0, P[a], (!!str)::frog\n", "D0, P[a], (!!str)::frog\n",
}, },
@ -96,7 +96,7 @@ var recursiveDescentOperatorScenarios = []expressionScenario{
document: `{a: {b: apple}}`, document: `{a: {b: apple}}`,
expression: `..`, expression: `..`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: {b: apple}}\n", "D0, P[], (!!map)::{a: {b: apple}}\n",
"D0, P[a], (!!map)::{b: apple}\n", "D0, P[a], (!!map)::{b: apple}\n",
"D0, P[a b], (!!str)::apple\n", "D0, P[a b], (!!str)::apple\n",
}, },
@ -106,7 +106,7 @@ var recursiveDescentOperatorScenarios = []expressionScenario{
document: `{a: {b: apple}}`, document: `{a: {b: apple}}`,
expression: `...`, expression: `...`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: {b: apple}}\n", "D0, P[], (!!map)::{a: {b: apple}}\n",
"D0, P[a], (!!str)::a\n", "D0, P[a], (!!str)::a\n",
"D0, P[a], (!!map)::{b: apple}\n", "D0, P[a], (!!map)::{b: apple}\n",
"D0, P[a b], (!!str)::b\n", "D0, P[a b], (!!str)::b\n",
@ -118,7 +118,7 @@ var recursiveDescentOperatorScenarios = []expressionScenario{
document: `[1,2,3]`, document: `[1,2,3]`,
expression: `..`, expression: `..`,
expected: []string{ expected: []string{
"D0, P[], (doc)::[1, 2, 3]\n", "D0, P[], (!!seq)::[1, 2, 3]\n",
"D0, P[0], (!!int)::1\n", "D0, P[0], (!!int)::1\n",
"D0, P[1], (!!int)::2\n", "D0, P[1], (!!int)::2\n",
"D0, P[2], (!!int)::3\n", "D0, P[2], (!!int)::3\n",
@ -129,7 +129,7 @@ var recursiveDescentOperatorScenarios = []expressionScenario{
document: `[1,2,3]`, document: `[1,2,3]`,
expression: `...`, expression: `...`,
expected: []string{ expected: []string{
"D0, P[], (doc)::[1, 2, 3]\n", "D0, P[], (!!seq)::[1, 2, 3]\n",
"D0, P[0], (!!int)::1\n", "D0, P[0], (!!int)::1\n",
"D0, P[1], (!!int)::2\n", "D0, P[1], (!!int)::2\n",
"D0, P[2], (!!int)::3\n", "D0, P[2], (!!int)::3\n",
@ -140,7 +140,7 @@ var recursiveDescentOperatorScenarios = []expressionScenario{
document: `[{a: cat},2,true]`, document: `[{a: cat},2,true]`,
expression: `..`, expression: `..`,
expected: []string{ expected: []string{
"D0, P[], (doc)::[{a: cat}, 2, true]\n", "D0, P[], (!!seq)::[{a: cat}, 2, true]\n",
"D0, P[0], (!!map)::{a: cat}\n", "D0, P[0], (!!map)::{a: cat}\n",
"D0, P[0 a], (!!str)::cat\n", "D0, P[0 a], (!!str)::cat\n",
"D0, P[1], (!!int)::2\n", "D0, P[1], (!!int)::2\n",
@ -152,7 +152,7 @@ var recursiveDescentOperatorScenarios = []expressionScenario{
document: `[{a: cat},2,true]`, document: `[{a: cat},2,true]`,
expression: `...`, expression: `...`,
expected: []string{ expected: []string{
"D0, P[], (doc)::[{a: cat}, 2, true]\n", "D0, P[], (!!seq)::[{a: cat}, 2, true]\n",
"D0, P[0], (!!map)::{a: cat}\n", "D0, P[0], (!!map)::{a: cat}\n",
"D0, P[0 a], (!!str)::a\n", "D0, P[0 a], (!!str)::a\n",
"D0, P[0 a], (!!str)::cat\n", "D0, P[0 a], (!!str)::cat\n",
@ -173,7 +173,7 @@ var recursiveDescentOperatorScenarios = []expressionScenario{
document: `{a: &cat {c: frog}, b: *cat}`, document: `{a: &cat {c: frog}, b: *cat}`,
expression: `...`, expression: `...`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: &cat {c: frog}, b: *cat}\n", "D0, P[], (!!map)::{a: &cat {c: frog}, b: *cat}\n",
"D0, P[a], (!!str)::a\n", "D0, P[a], (!!str)::a\n",
"D0, P[a], (!!map)::&cat {c: frog}\n", "D0, P[a], (!!map)::&cat {c: frog}\n",
"D0, P[a c], (!!str)::c\n", "D0, P[a c], (!!str)::c\n",

View File

@ -10,7 +10,7 @@ var selectOperatorScenarios = []expressionScenario{
document: `cat`, document: `cat`,
expression: `select(false, true)`, expression: `select(false, true)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::cat\n", "D0, P[], (!!str)::cat\n",
}, },
}, },
{ {
@ -18,7 +18,7 @@ var selectOperatorScenarios = []expressionScenario{
document: `cat`, document: `cat`,
expression: `select(true, false)`, expression: `select(true, false)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::cat\n", "D0, P[], (!!str)::cat\n",
}, },
}, },
{ {
@ -71,8 +71,8 @@ var selectOperatorScenarios = []expressionScenario{
document2: "b: world", document2: "b: world",
expression: `select(.a == "hello" or .b == "world")`, expression: `select(.a == "hello" or .b == "world")`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: hello\n", "D0, P[], (!!map)::a: hello\n",
"D0, P[], (doc)::b: world\n", "D0, P[], (!!map)::b: world\n",
}, },
}, },
{ {
@ -81,7 +81,7 @@ var selectOperatorScenarios = []expressionScenario{
document: `[{animal: cat, legs: {cool: true}}, {animal: fish}]`, document: `[{animal: cat, legs: {cool: true}}, {animal: fish}]`,
expression: `(.[] | select(.legs.cool == true).canWalk) = true | (.[] | .alive.things) = "yes"`, expression: `(.[] | select(.legs.cool == true).canWalk) = true | (.[] | .alive.things) = "yes"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::[{animal: cat, legs: {cool: true}, canWalk: true, alive: {things: yes}}, {animal: fish, alive: {things: yes}}]\n", "D0, P[], (!!seq)::[{animal: cat, legs: {cool: true}, canWalk: true, alive: {things: yes}}, {animal: fish, alive: {things: yes}}]\n",
}, },
}, },
{ {
@ -121,7 +121,7 @@ var selectOperatorScenarios = []expressionScenario{
document: `a: { things: cat, bob: goat, horse: dog }`, document: `a: { things: cat, bob: goat, horse: dog }`,
expression: `(.a.[] | select(. == "cat" or . == "goat")) |= "rabbit"`, expression: `(.a.[] | select(. == "cat" or . == "goat")) |= "rabbit"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: {things: rabbit, bob: rabbit, horse: dog}\n", "D0, P[], (!!map)::a: {things: rabbit, bob: rabbit, horse: dog}\n",
}, },
}, },
{ {

View File

@ -17,7 +17,7 @@ var shuffleOperatorScenarios = []expressionScenario{
document: "cool: [1, 2, 3, 4, 5]", document: "cool: [1, 2, 3, 4, 5]",
expression: `.cool |= shuffle`, expression: `.cool |= shuffle`,
expected: []string{ expected: []string{
"D0, P[], (doc)::cool: [5, 2, 4, 1, 3]\n", "D0, P[], (!!map)::cool: [5, 2, 4, 1, 3]\n",
}, },
}, },
} }

View File

@ -10,7 +10,7 @@ var sortKeysOperatorScenarios = []expressionScenario{
document: `{c: frog, a: blah, b: bing}`, document: `{c: frog, a: blah, b: bing}`,
expression: `sort_keys(.)`, expression: `sort_keys(.)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: blah, b: bing, c: frog}\n", "D0, P[], (!!map)::{a: blah, b: bing, c: frog}\n",
}, },
}, },
{ {
@ -18,7 +18,7 @@ var sortKeysOperatorScenarios = []expressionScenario{
document: `{c: frog}`, document: `{c: frog}`,
expression: `sort_keys(.d)`, expression: `sort_keys(.d)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{c: frog}\n", "D0, P[], (!!map)::{c: frog}\n",
}, },
}, },
{ {
@ -27,7 +27,7 @@ var sortKeysOperatorScenarios = []expressionScenario{
document: `{bParent: {c: dog, array: [3,1,2]}, aParent: {z: donkey, x: [{c: yum, b: delish}, {b: ew, a: apple}]}}`, document: `{bParent: {c: dog, array: [3,1,2]}, aParent: {z: donkey, x: [{c: yum, b: delish}, {b: ew, a: apple}]}}`,
expression: `sort_keys(..)`, expression: `sort_keys(..)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{aParent: {x: [{b: delish, c: yum}, {a: apple, b: ew}], z: donkey}, bParent: {array: [3, 1, 2], c: dog}}\n", "D0, P[], (!!map)::{aParent: {x: [{b: delish, c: yum}, {a: apple, b: ew}], z: donkey}, bParent: {array: [3, 1, 2], c: dog}}\n",
}, },
}, },
} }

View File

@ -51,7 +51,7 @@ var sortByOperatorScenarios = []expressionScenario{
document: "cool: [{a: banana},{a: cat},{a: apple}]", document: "cool: [{a: banana},{a: cat},{a: apple}]",
expression: `.cool |= sort_by(.a)`, expression: `.cool |= sort_by(.a)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::cool: [{a: apple}, {a: banana}, {a: cat}]\n", "D0, P[], (!!map)::cool: [{a: apple}, {a: banana}, {a: cat}]\n",
}, },
}, },
{ {
@ -60,7 +60,7 @@ var sortByOperatorScenarios = []expressionScenario{
document: "cool: [{b: banana},{a: banana},{c: banana}]", document: "cool: [{b: banana},{a: banana},{c: banana}]",
expression: `.cool |= sort_by(keys | .[0])`, expression: `.cool |= sort_by(keys | .[0])`,
expected: []string{ expected: []string{
"D0, P[], (doc)::cool: [{a: banana}, {b: banana}, {c: banana}]\n", "D0, P[], (!!map)::cool: [{a: banana}, {b: banana}, {c: banana}]\n",
}, },
}, },
{ {

View File

@ -209,7 +209,7 @@ var stringsOperatorScenarios = []expressionScenario{
document: `a: dogs are great`, document: `a: dogs are great`,
expression: `.a |= sub("dogs", "cats")`, expression: `.a |= sub("dogs", "cats")`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: cats are great\n", "D0, P[], (!!map)::a: cats are great\n",
}, },
}, },
{ {
@ -218,7 +218,7 @@ var stringsOperatorScenarios = []expressionScenario{
document: "a: cat\nb: heat", document: "a: cat\nb: heat",
expression: `.[] |= sub("(a)", "${1}r")`, expression: `.[] |= sub("(a)", "${1}r")`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: cart\nb: heart\n", "D0, P[], (!!map)::a: cart\nb: heart\n",
}, },
}, },
{ {
@ -227,7 +227,7 @@ var stringsOperatorScenarios = []expressionScenario{
document: "a: !horse cat\nb: !goat heat", document: "a: !horse cat\nb: !goat heat",
expression: `.[] |= sub("(a)", "${1}r")`, expression: `.[] |= sub("(a)", "${1}r")`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: !horse cart\nb: !goat heart\n", "D0, P[], (!!map)::a: !horse cart\nb: !goat heart\n",
}, },
}, },
{ {

View File

@ -10,7 +10,7 @@ var styleOperatorScenarios = []expressionScenario{
document: `a: {b: thing, c: something}`, document: `a: {b: thing, c: something}`,
expression: `.a.b = "new" | .a.b style="double"`, expression: `.a.b = "new" | .a.b style="double"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: {b: \"new\", c: something}\n", "D0, P[], (!!map)::a: {b: \"new\", c: something}\n",
}, },
}, },
{ {
@ -18,7 +18,7 @@ var styleOperatorScenarios = []expressionScenario{
document: `a: {b: thing, c: something}`, document: `a: {b: thing, c: something}`,
expression: `with(.a.b ; . = "new" | . style="double")`, expression: `with(.a.b ; . = "new" | . style="double")`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: {b: \"new\", c: something}\n", "D0, P[], (!!map)::a: {b: \"new\", c: something}\n",
}, },
}, },
{ {
@ -26,7 +26,7 @@ var styleOperatorScenarios = []expressionScenario{
document: `{a: cat, b: 5, c: 3.2, e: true}`, document: `{a: cat, b: 5, c: 3.2, e: true}`,
expression: `.. style="tagged"`, expression: `.. style="tagged"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::!!map\na: !!str cat\nb: !!int 5\nc: !!float 3.2\ne: !!bool true\n", "D0, P[], (!!map)::!!map\na: !!str cat\nb: !!int 5\nc: !!float 3.2\ne: !!bool true\n",
}, },
}, },
{ {
@ -34,7 +34,7 @@ var styleOperatorScenarios = []expressionScenario{
document: `{a: cat, b: 5, c: 3.2, e: true}`, document: `{a: cat, b: 5, c: 3.2, e: true}`,
expression: `.. style="double"`, expression: `.. style="double"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: \"cat\"\nb: \"5\"\nc: \"3.2\"\ne: \"true\"\n", "D0, P[], (!!map)::a: \"cat\"\nb: \"5\"\nc: \"3.2\"\ne: \"true\"\n",
}, },
}, },
{ {
@ -42,7 +42,7 @@ var styleOperatorScenarios = []expressionScenario{
document: `{a: cat, b: 5, c: 3.2, e: true}`, document: `{a: cat, b: 5, c: 3.2, e: true}`,
expression: `... style="double"`, expression: `... style="double"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::\"a\": \"cat\"\n\"b\": \"5\"\n\"c\": \"3.2\"\n\"e\": \"true\"\n", "D0, P[], (!!map)::\"a\": \"cat\"\n\"b\": \"5\"\n\"c\": \"3.2\"\n\"e\": \"true\"\n",
}, },
}, },
{ {
@ -50,7 +50,7 @@ var styleOperatorScenarios = []expressionScenario{
document: "bing: &foo frog\na:\n c: cat\n <<: [*foo]", document: "bing: &foo frog\na:\n c: cat\n <<: [*foo]",
expression: `(... | select(tag=="!!str")) style="single"`, expression: `(... | select(tag=="!!str")) style="single"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::'bing': &foo 'frog'\n'a':\n 'c': 'cat'\n !!merge <<: [*foo]\n", "D0, P[], (!!map)::'bing': &foo 'frog'\n'a':\n 'c': 'cat'\n !!merge <<: [*foo]\n",
}, },
}, },
{ {
@ -58,7 +58,7 @@ var styleOperatorScenarios = []expressionScenario{
document: `{a: cat, b: 5, c: 3.2, e: true}`, document: `{a: cat, b: 5, c: 3.2, e: true}`,
expression: `.. style="single"`, expression: `.. style="single"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: 'cat'\nb: '5'\nc: '3.2'\ne: 'true'\n", "D0, P[], (!!map)::a: 'cat'\nb: '5'\nc: '3.2'\ne: 'true'\n",
}, },
}, },
{ {
@ -66,7 +66,7 @@ var styleOperatorScenarios = []expressionScenario{
document: `{a: cat, b: 5, c: 3.2, e: true}`, document: `{a: cat, b: 5, c: 3.2, e: true}`,
expression: `.. style="literal"`, expression: `.. style="literal"`,
expected: []string{ expected: []string{
`D0, P[], (doc)::a: |- `D0, P[], (!!map)::a: |-
cat cat
b: |- b: |-
5 5
@ -82,7 +82,7 @@ e: |-
document: `{a: cat, b: 5, c: 3.2, e: true}`, document: `{a: cat, b: 5, c: 3.2, e: true}`,
expression: `.. style="folded"`, expression: `.. style="folded"`,
expected: []string{ expected: []string{
`D0, P[], (doc)::a: >- `D0, P[], (!!map)::a: >-
cat cat
b: >- b: >-
5 5
@ -98,7 +98,7 @@ e: >-
document: `{a: cat, b: 5, c: 3.2, e: true}`, document: `{a: cat, b: 5, c: 3.2, e: true}`,
expression: `.. style="flow"`, expression: `.. style="flow"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: cat, b: 5, c: 3.2, e: true}\n", "D0, P[], (!!map)::{a: cat, b: 5, c: 3.2, e: true}\n",
}, },
}, },
{ {
@ -107,7 +107,7 @@ e: >-
document: `{a: cat, "b": 5, 'c': 3.2, "e": true}`, document: `{a: cat, "b": 5, 'c': 3.2, "e": true}`,
expression: `... style=""`, expression: `... style=""`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: cat\nb: 5\nc: 3.2\ne: true\n", "D0, P[], (!!map)::a: cat\nb: 5\nc: 3.2\ne: true\n",
}, },
}, },
{ {
@ -115,7 +115,7 @@ e: >-
document: `{a: single, b: double}`, document: `{a: single, b: double}`,
expression: `.[] style |= .`, expression: `.[] style |= .`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: 'single', b: \"double\"}\n", "D0, P[], (!!map)::{a: 'single', b: \"double\"}\n",
}, },
}, },
{ {
@ -123,7 +123,7 @@ e: >-
document: `{a: cat, b: double}`, document: `{a: cat, b: double}`,
expression: `.a style=.b`, expression: `.a style=.b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: \"cat\", b: double}\n", "D0, P[], (!!map)::{a: \"cat\", b: double}\n",
}, },
}, },
{ {

View File

@ -10,7 +10,7 @@ var subtractOperatorScenarios = []expressionScenario{
document: `{}`, document: `{}`,
expression: "(.a - .b) as $x | .", expression: "(.a - .b) as $x | .",
expected: []string{ expected: []string{
"D0, P[], (doc)::{}\n", "D0, P[], (!!map)::{}\n",
}, },
}, },
{ {
@ -64,7 +64,7 @@ var subtractOperatorScenarios = []expressionScenario{
document: `{a: 3, b: 4.5}`, document: `{a: 3, b: 4.5}`,
expression: `.a = .a - .b`, expression: `.a = .a - .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: -1.5, b: 4.5}\n", "D0, P[], (!!map)::{a: -1.5, b: 4.5}\n",
}, },
}, },
{ {
@ -73,7 +73,7 @@ var subtractOperatorScenarios = []expressionScenario{
document: `{a: 3, b: 4}`, document: `{a: 3, b: 4}`,
expression: `.a = .a - .b`, expression: `.a = .a - .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: -1, b: 4}\n", "D0, P[], (!!map)::{a: -1, b: 4}\n",
}, },
}, },
{ {
@ -81,7 +81,7 @@ var subtractOperatorScenarios = []expressionScenario{
document: `{a: 3, b: 5}`, document: `{a: 3, b: 5}`,
expression: `.[] -= 1`, expression: `.[] -= 1`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: 2, b: 4}\n", "D0, P[], (!!map)::{a: 2, b: 4}\n",
}, },
}, },
{ {
@ -90,7 +90,7 @@ var subtractOperatorScenarios = []expressionScenario{
document: `a: 2021-01-01T03:10:00Z`, document: `a: 2021-01-01T03:10:00Z`,
expression: `.a -= "3h10m"`, expression: `.a -= "3h10m"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: 2021-01-01T00:00:00Z\n", "D0, P[], (!!map)::a: 2021-01-01T00:00:00Z\n",
}, },
}, },
{ {
@ -99,7 +99,7 @@ var subtractOperatorScenarios = []expressionScenario{
document: `a: 2021-01-01`, document: `a: 2021-01-01`,
expression: `.a -= "24h"`, expression: `.a -= "24h"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: 2020-12-31T00:00:00Z\n", "D0, P[], (!!map)::a: 2020-12-31T00:00:00Z\n",
}, },
}, },
{ {
@ -108,7 +108,7 @@ var subtractOperatorScenarios = []expressionScenario{
document: `a: Saturday, 15-Dec-01 at 6:00AM GMT`, document: `a: Saturday, 15-Dec-01 at 6:00AM GMT`,
expression: `with_dtf("Monday, 02-Jan-06 at 3:04PM MST", .a -= "3h1m")`, expression: `with_dtf("Monday, 02-Jan-06 at 3:04PM MST", .a -= "3h1m")`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: Saturday, 15-Dec-01 at 2:59AM GMT\n", "D0, P[], (!!map)::a: Saturday, 15-Dec-01 at 2:59AM GMT\n",
}, },
}, },
{ {
@ -118,7 +118,7 @@ var subtractOperatorScenarios = []expressionScenario{
document: `a: !cat Saturday, 15-Dec-01 at 6:00AM GMT`, document: `a: !cat Saturday, 15-Dec-01 at 6:00AM GMT`,
expression: `with_dtf("Monday, 02-Jan-06 at 3:04PM MST", .a -= "3h1m")`, expression: `with_dtf("Monday, 02-Jan-06 at 3:04PM MST", .a -= "3h1m")`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: !cat Saturday, 15-Dec-01 at 2:59AM GMT\n", "D0, P[], (!!map)::a: !cat Saturday, 15-Dec-01 at 2:59AM GMT\n",
}, },
}, },
{ {
@ -127,7 +127,7 @@ var subtractOperatorScenarios = []expressionScenario{
document: "a: !horse 2\nb: !goat 1", document: "a: !horse 2\nb: !goat 1",
expression: `.a -= .b`, expression: `.a -= .b`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: !horse 1\nb: !goat 1\n", "D0, P[], (!!map)::a: !horse 1\nb: !goat 1\n",
}, },
}, },
{ {

View File

@ -54,7 +54,7 @@ var tagOperatorScenarios = []expressionScenario{
document: `32`, document: `32`,
expression: `. tag= "!!str"`, expression: `. tag= "!!str"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::\"32\"\n", "D0, P[], (!!str)::32\n",
}, },
}, },
{ {
@ -62,7 +62,7 @@ var tagOperatorScenarios = []expressionScenario{
document: `{a: str}`, document: `{a: str}`,
expression: `.a tag = "!!mikefarah"`, expression: `.a tag = "!!mikefarah"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: !!mikefarah str}\n", "D0, P[], (!!map)::{a: !!mikefarah str}\n",
}, },
}, },
{ {
@ -71,7 +71,7 @@ var tagOperatorScenarios = []expressionScenario{
document: `{a: str}`, document: `{a: str}`,
expression: `.a type = "!!mikefarah"`, expression: `.a type = "!!mikefarah"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: !!mikefarah str}\n", "D0, P[], (!!map)::{a: !!mikefarah str}\n",
}, },
}, },
{ {
@ -79,7 +79,7 @@ var tagOperatorScenarios = []expressionScenario{
document: `{a: cat, b: 5, c: 3.2, e: true}`, document: `{a: cat, b: 5, c: 3.2, e: true}`,
expression: `(.. | select(tag == "!!int")) tag= "!!str"`, expression: `(.. | select(tag == "!!int")) tag= "!!str"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: cat, b: \"5\", c: 3.2, e: true}\n", "D0, P[], (!!map)::{a: cat, b: \"5\", c: 3.2, e: true}\n",
}, },
}, },
{ {
@ -87,7 +87,7 @@ var tagOperatorScenarios = []expressionScenario{
document: `{a: "!!frog", b: "!!customTag"}`, document: `{a: "!!frog", b: "!!customTag"}`,
expression: `.[] tag |= .`, expression: `.[] tag |= .`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{a: !!frog \"!!frog\", b: !!customTag \"!!customTag\"}\n", "D0, P[], (!!map)::{a: !!frog \"!!frog\", b: !!customTag \"!!customTag\"}\n",
}, },
}, },
} }

View File

@ -64,10 +64,6 @@ func traverse(context Context, matchingNode *CandidateNode, operation *Operation
log.Debug("its an alias!") log.Debug("its an alias!")
matchingNode = matchingNode.Alias matchingNode = matchingNode.Alias
return traverse(context, matchingNode, operation) return traverse(context, matchingNode, operation)
case DocumentNode:
log.Debug("digging into doc node")
return traverse(context, matchingNode.Content[0], operation)
default: default:
return list.New(), nil return list.New(), nil
} }
@ -146,8 +142,6 @@ func traverseArrayIndices(context Context, matchingNode *CandidateNode, indicesT
return traverseArrayWithIndices(matchingNode, indicesToTraverse, prefs) return traverseArrayWithIndices(matchingNode, indicesToTraverse, prefs)
} else if matchingNode.Kind == MappingNode { } else if matchingNode.Kind == MappingNode {
return traverseMapWithIndices(context, matchingNode, indicesToTraverse, prefs) return traverseMapWithIndices(context, matchingNode, indicesToTraverse, prefs)
} else if matchingNode.Kind == DocumentNode {
return traverseArrayIndices(context, matchingNode.Content[0], indicesToTraverse, prefs)
} }
log.Debugf("OperatorArrayTraverse skipping %v as its a %v", matchingNode, matchingNode.Tag) log.Debugf("OperatorArrayTraverse skipping %v as its a %v", matchingNode, matchingNode.Tag)
return list.New(), nil return list.New(), nil

View File

@ -86,7 +86,7 @@ var traversePathOperatorScenarios = []expressionScenario{
document: `blah: {}`, document: `blah: {}`,
expression: `.blah.cat = "cool"`, expression: `.blah.cat = "cool"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::blah:\n cat: cool\n", "D0, P[], (!!map)::blah:\n cat: cool\n",
}, },
}, },
{ {
@ -94,7 +94,7 @@ var traversePathOperatorScenarios = []expressionScenario{
document: `blah: []`, document: `blah: []`,
expression: `.blah.0 = "cool"`, expression: `.blah.0 = "cool"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::blah:\n - cool\n", "D0, P[], (!!map)::blah:\n - cool\n",
}, },
}, },
{ {
@ -184,7 +184,7 @@ var traversePathOperatorScenarios = []expressionScenario{
document: `c: dog`, document: `c: dog`,
expression: `.[.a.b] as $x | .`, expression: `.[.a.b] as $x | .`,
expected: []string{ expected: []string{
"D0, P[], (doc)::c: dog\n", "D0, P[], (!!map)::c: dog\n",
}, },
}, },
{ {
@ -302,15 +302,7 @@ var traversePathOperatorScenarios = []expressionScenario{
document: `{a: &cat {c: frog}, b: *cat}`, document: `{a: &cat {c: frog}, b: *cat}`,
expression: `.b[]`, expression: `.b[]`,
expected: []string{ expected: []string{
"D0, P[b c], (!!str)::frog\n", "D0, P[a c], (!!str)::frog\n",
},
},
{
skipDoc: true,
document: `{a: &cat {c: frog}, b: *cat}`,
expression: `.b[]`,
expected: []string{
"D0, P[b c], (!!str)::frog\n",
}, },
}, },
{ {
@ -318,7 +310,7 @@ var traversePathOperatorScenarios = []expressionScenario{
document: `{a: &cat {c: frog}, b: *cat}`, document: `{a: &cat {c: frog}, b: *cat}`,
expression: `.b.c`, expression: `.b.c`,
expected: []string{ expected: []string{
"D0, P[b c], (!!str)::frog\n", "D0, P[a c], (!!str)::frog\n",
}, },
}, },
{ {
@ -367,7 +359,7 @@ var traversePathOperatorScenarios = []expressionScenario{
document: mergeDocSample, document: mergeDocSample,
expression: `.foobar.a`, expression: `.foobar.a`,
expected: []string{ expected: []string{
"D0, P[foobar a], (!!str)::foo_a\n", "D0, P[foo a], (!!str)::foo_a\n",
}, },
}, },
{ {
@ -375,7 +367,7 @@ var traversePathOperatorScenarios = []expressionScenario{
document: mergeDocSample, document: mergeDocSample,
expression: `.foobar.c`, expression: `.foobar.c`,
expected: []string{ expected: []string{
"D0, P[foobar c], (!!str)::foo_c\n", "D0, P[foo c], (!!str)::foo_c\n",
}, },
}, },
{ {
@ -391,18 +383,8 @@ var traversePathOperatorScenarios = []expressionScenario{
document: mergeDocSample, document: mergeDocSample,
expression: `.foobar[]`, expression: `.foobar[]`,
expected: []string{ expected: []string{
"D0, P[foobar c], (!!str)::foo_c\n", "D0, P[foo c], (!!str)::foo_c\n",
"D0, P[foobar a], (!!str)::foo_a\n", "D0, P[foo a], (!!str)::foo_a\n",
"D0, P[foobar thing], (!!str)::foobar_thing\n",
},
},
{
skipDoc: true,
document: mergeDocSample,
expression: `.foobar[]`,
expected: []string{
"D0, P[foobar c], (!!str)::foo_c\n",
"D0, P[foobar a], (!!str)::foo_a\n",
"D0, P[foobar thing], (!!str)::foobar_thing\n", "D0, P[foobar thing], (!!str)::foobar_thing\n",
}, },
}, },
@ -419,7 +401,7 @@ var traversePathOperatorScenarios = []expressionScenario{
document: mergeDocSample, document: mergeDocSample,
expression: `.foobarList.a`, expression: `.foobarList.a`,
expected: []string{ expected: []string{
"D0, P[foobarList a], (!!str)::foo_a\n", "D0, P[foo a], (!!str)::foo_a\n",
}, },
}, },
{ {
@ -428,7 +410,7 @@ var traversePathOperatorScenarios = []expressionScenario{
document: mergeDocSample, document: mergeDocSample,
expression: `.foobarList.thing`, expression: `.foobarList.thing`,
expected: []string{ expected: []string{
"D0, P[foobarList thing], (!!str)::bar_thing\n", "D0, P[bar thing], (!!str)::bar_thing\n",
}, },
}, },
{ {
@ -444,7 +426,7 @@ var traversePathOperatorScenarios = []expressionScenario{
document: mergeDocSample, document: mergeDocSample,
expression: `.foobarList.b`, expression: `.foobarList.b`,
expected: []string{ expected: []string{
"D0, P[foobarList b], (!!str)::bar_b\n", "D0, P[bar b], (!!str)::bar_b\n",
}, },
}, },
{ {
@ -452,20 +434,9 @@ var traversePathOperatorScenarios = []expressionScenario{
document: mergeDocSample, document: mergeDocSample,
expression: `.foobarList[]`, expression: `.foobarList[]`,
expected: []string{ expected: []string{
"D0, P[foobarList b], (!!str)::bar_b\n", "D0, P[bar b], (!!str)::bar_b\n",
"D0, P[foobarList a], (!!str)::foo_a\n", "D0, P[foo a], (!!str)::foo_a\n",
"D0, P[foobarList thing], (!!str)::bar_thing\n", "D0, P[bar thing], (!!str)::bar_thing\n",
"D0, P[foobarList c], (!!str)::foobarList_c\n",
},
},
{
skipDoc: true,
document: mergeDocSample,
expression: `.foobarList[]`,
expected: []string{
"D0, P[foobarList b], (!!str)::bar_b\n",
"D0, P[foobarList a], (!!str)::foo_a\n",
"D0, P[foobarList thing], (!!str)::bar_thing\n",
"D0, P[foobarList c], (!!str)::foobarList_c\n", "D0, P[foobarList c], (!!str)::foobarList_c\n",
}, },
}, },
@ -518,15 +489,7 @@ var traversePathOperatorScenarios = []expressionScenario{
document: `{a: [a,b,c]}`, document: `{a: [a,b,c]}`,
expression: `.a[-1]`, expression: `.a[-1]`,
expected: []string{ expected: []string{
"D0, P[a -1], (!!str)::c\n", "D0, P[a 2], (!!str)::c\n",
},
},
{
skipDoc: true,
document: `{a: [a,b,c]}`,
expression: `.a[-1]`,
expected: []string{
"D0, P[a -1], (!!str)::c\n",
}, },
}, },
{ {
@ -534,15 +497,7 @@ var traversePathOperatorScenarios = []expressionScenario{
document: `{a: [a,b,c]}`, document: `{a: [a,b,c]}`,
expression: `.a[-2]`, expression: `.a[-2]`,
expected: []string{ expected: []string{
"D0, P[a -2], (!!str)::b\n", "D0, P[a 1], (!!str)::b\n",
},
},
{
skipDoc: true,
document: `{a: [a,b,c]}`,
expression: `.a[-2]`,
expected: []string{
"D0, P[a -2], (!!str)::b\n",
}, },
}, },
{ {

View File

@ -10,7 +10,7 @@ var unionOperatorScenarios = []expressionScenario{
document: "{}", document: "{}",
expression: `(.a, .b.c) as $x | .`, expression: `(.a, .b.c) as $x | .`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{}\n", "D0, P[], (!!map)::{}\n",
}, },
}, },
{ {

View File

@ -10,7 +10,7 @@ var variableOperatorScenarios = []expressionScenario{
document: `{}`, document: `{}`,
expression: `.a.b as $foo | .`, expression: `.a.b as $foo | .`,
expected: []string{ expected: []string{
"D0, P[], (doc)::{}\n", "D0, P[], (!!map)::{}\n",
}, },
}, },
{ {
@ -76,7 +76,7 @@ var variableOperatorScenarios = []expressionScenario{
document: "a: a_value\nb: b_value", document: "a: a_value\nb: b_value",
expression: `.a as $x | .b as $y | .b = $x | .a = $y`, expression: `.a as $x | .b as $y | .b = $x | .a = $y`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: b_value\nb: a_value\n", "D0, P[], (!!map)::a: b_value\nb: a_value\n",
}, },
}, },
{ {
@ -85,7 +85,7 @@ var variableOperatorScenarios = []expressionScenario{
document: `a: {b: thing, c: something}`, document: `a: {b: thing, c: something}`,
expression: `.a.b ref $x | $x = "new" | $x style="double"`, expression: `.a.b ref $x | $x = "new" | $x style="double"`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: {b: \"new\", c: something}\n", "D0, P[], (!!map)::a: {b: \"new\", c: something}\n",
}, },
}, },
} }

View File

@ -8,7 +8,7 @@ var withOperatorScenarios = []expressionScenario{
document: `a: {deeply: {nested: value}}`, document: `a: {deeply: {nested: value}}`,
expression: `with(.a.deeply.nested; . = "newValue" | . style="single")`, expression: `with(.a.deeply.nested; . = "newValue" | . style="single")`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: {deeply: {nested: 'newValue'}}\n", "D0, P[], (!!map)::a: {deeply: {nested: 'newValue'}}\n",
}, },
}, },
{ {
@ -16,7 +16,7 @@ var withOperatorScenarios = []expressionScenario{
document: `a: {deeply: {nested: value, other: thing}}`, document: `a: {deeply: {nested: value, other: thing}}`,
expression: `with(.a.deeply; .nested = "newValue" | .other= "newThing")`, expression: `with(.a.deeply; .nested = "newValue" | .other= "newThing")`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: {deeply: {nested: newValue, other: newThing}}\n", "D0, P[], (!!map)::a: {deeply: {nested: newValue, other: newThing}}\n",
}, },
}, },
{ {
@ -25,7 +25,7 @@ var withOperatorScenarios = []expressionScenario{
document: `myArray: [{a: apple},{a: banana}]`, document: `myArray: [{a: apple},{a: banana}]`,
expression: `with(.myArray[]; .b = .a + " yum")`, expression: `with(.myArray[]; .b = .a + " yum")`,
expected: []string{ expected: []string{
"D0, P[], (doc)::myArray: [{a: apple, b: apple yum}, {a: banana, b: banana yum}]\n", "D0, P[], (!!map)::myArray: [{a: apple, b: apple yum}, {a: banana, b: banana yum}]\n",
}, },
}, },
{ {
@ -35,7 +35,7 @@ var withOperatorScenarios = []expressionScenario{
document: `myArray: [{a: apple},{a: banana}]`, document: `myArray: [{a: apple},{a: banana}]`,
expression: `with(.myArray[]; .a += .a)`, expression: `with(.myArray[]; .a += .a)`,
expected: []string{ expected: []string{
"D0, P[], (doc)::myArray: [{a: appleapple}, {a: bananabanana}]\n", "D0, P[], (!!map)::myArray: [{a: appleapple}, {a: bananabanana}]\n",
}, },
}, },
} }

View File

@ -140,9 +140,7 @@ func resultToString(t *testing.T, n *CandidateNode) string {
} }
tag := n.Tag tag := n.Tag
if n.Kind == DocumentNode { if n.Kind == AliasNode {
tag = "doc"
} else if n.Kind == AliasNode {
tag = "alias" tag = "alias"
} }
return fmt.Sprintf(`D%v, P%v, (%v)::%v`, n.GetDocument(), n.GetPath(), tag, valueBuffer.String()) return fmt.Sprintf(`D%v, P%v, (%v)::%v`, n.GetDocument(), n.GetPath(), tag, valueBuffer.String())

View File

@ -31,13 +31,7 @@ func (s *streamEvaluator) EvaluateNew(expression string, printer Printer) error
if err != nil { if err != nil {
return err return err
} }
candidateNode := &CandidateNode{ candidateNode := createScalarNode(nil, "")
document: 0,
filename: "",
Kind: DocumentNode,
Content: []*CandidateNode{createScalarNode(nil, "")},
fileIndex: 0,
}
inputList := list.New() inputList := list.New()
inputList.PushBack(candidateNode) inputList.PushBack(candidateNode)

View File

@ -61,7 +61,7 @@ var yamlParseScenarios = []expressionScenario{
{ {
document: `a: hello # things`, document: `a: hello # things`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: hello # things\n", "D0, P[], (!!map)::a: hello # things\n",
}, },
}, },
{ {
@ -74,13 +74,13 @@ var yamlParseScenarios = []expressionScenario{
{ {
document: `a: [1,2]`, document: `a: [1,2]`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: [1, 2]\n", "D0, P[], (!!map)::a: [1, 2]\n",
}, },
}, },
{ {
document: `a: !horse [a]`, document: `a: !horse [a]`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: !horse [a]\n", "D0, P[], (!!map)::a: !horse [a]\n",
}, },
}, },
} }