cue: fix bug in Default
Change-Id: I5b3ec0c3e99029bdd86d5b70201182159f686953
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/2040
Reviewed-by: Marcel van Lohuizen <mpvl@google.com>
diff --git a/cue/types.go b/cue/types.go
index a44aa61..1df3477 100644
--- a/cue/types.go
+++ b/cue/types.go
@@ -526,8 +526,9 @@
if v.path == nil {
return v, false
}
- x := v.ctx().manifest(v.path.v)
- if x != v.path.v {
+ u := v.path.v.evalPartial(v.ctx())
+ x := v.ctx().manifest(u)
+ if x != u {
return remakeValue(v, x), true
}
return v, false
diff --git a/cue/types_test.go b/cue/types_test.go
index 36e6acc..dbabb38 100644
--- a/cue/types_test.go
+++ b/cue/types_test.go
@@ -683,31 +683,45 @@
value string
def string
val string
- err string
+ ok bool
}{{
value: `number | *1`,
def: "1",
val: "number",
+ ok: true,
}, {
value: `1 | 2 | *3`,
def: "3",
val: "1|2|3",
+ ok: true,
}, {
value: `*{a:1,b:2}|{a:1}|{b:2}`,
def: "<0>{a: 1, b: 2}",
val: "<0>{a: 1}|<0>{b: 2}",
+ ok: true,
+ }, {
+ value: `{a:1}&{b:2}`,
+ def: `<0>{a: 1, b: 2}`,
+ val: ``,
+ ok: false,
}}
for _, tc := range testCases {
t.Run(tc.value, func(t *testing.T) {
v := getInstance(t, "a: "+tc.value).Lookup("a")
- _, val := v.Expr()
- d, _ := v.Default()
+ d, ok := v.Default()
+ if ok != tc.ok {
+ t.Errorf("hasDefault: got %v; want %v", ok, tc.ok)
+ }
if got := fmt.Sprint(d); got != tc.def {
t.Errorf("default: got %v; want %v", got, tc.def)
}
+ op, val := v.Expr()
+ if op != OrOp {
+ return
+ }
vars := []string{}
for _, v := range val {
vars = append(vars, fmt.Sprint(v))