-
Notifications
You must be signed in to change notification settings - Fork 78
Expand file tree
/
Copy pathop_grab_bracket_test.go
More file actions
100 lines (90 loc) · 2.18 KB
/
Copy pathop_grab_bracket_test.go
File metadata and controls
100 lines (90 loc) · 2.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package spruce
import (
"os"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)
var _ = Describe("Grab Operator: dynamic bracket-notation lookup", func() {
op := GrabOperator{}
dynRef := func(s string) *Expr {
return &Expr{Type: Reference, Reference: cursor(s), BracketedNodes: bracketsOf(s)}
}
It("can grab a value using a dynamic bracket reference", func() {
ev := &Evaluator{
Tree: opYAML(`key:
subkey: found it
other: value 2
lookup: subkey
`),
}
r, err := op.Run(ev, []*Expr{
dynRef("key[lookup]"),
})
Expect(err).NotTo(HaveOccurred())
Expect(r).NotTo(BeNil())
Expect(r.Type).To(Equal(Replace))
Expect(r.Value.(string)).To(Equal("found it"))
})
It("can grab a value using a nested path in a bracket reference", func() {
ev := &Evaluator{
Tree: opYAML(`key:
subkey: found it
meta:
which: subkey
`),
}
r, err := op.Run(ev, []*Expr{
dynRef("key[meta.which]"),
})
Expect(err).NotTo(HaveOccurred())
Expect(r).NotTo(BeNil())
Expect(r.Type).To(Equal(Replace))
Expect(r.Value.(string)).To(Equal("found it"))
})
It("returns error when the bracket key reference resolves to a non-scalar", func() {
ev := &Evaluator{
Tree: opYAML(`key:
subkey: found it
lookup:
nested: subkey
`),
}
_, err := op.Run(ev, []*Expr{
dynRef("key[lookup]"),
})
Expect(err).To(HaveOccurred())
})
It("can grab a value using a numeric-valued bracket reference", func() {
ev := &Evaluator{
Tree: opYAML(`versions:
"1": first
"2": second
pick: 2
`),
}
r, err := op.Run(ev, []*Expr{
dynRef("versions[pick]"),
})
Expect(err).NotTo(HaveOccurred())
Expect(r).NotTo(BeNil())
Expect(r.Type).To(Equal(Replace))
Expect(r.Value.(string)).To(Equal("second"))
})
It("can grab a value using an environment variable in a bracket reference", func() {
os.Setenv("BRACKET_SUB_KEY", "subkey")
defer os.Unsetenv("BRACKET_SUB_KEY")
ev := &Evaluator{
Tree: opYAML(`key:
subkey: found it
other: value 2
`),
}
r, err := op.Run(ev, []*Expr{
dynRef("key[$BRACKET_SUB_KEY]"),
})
Expect(err).NotTo(HaveOccurred())
Expect(r).NotTo(BeNil())
Expect(r.Type).To(Equal(Replace))
Expect(r.Value.(string)).To(Equal("found it"))
})
})