1-- in.cue --
2import "encoding/yaml"
3
4#test: {
5 fn: _
6
7 data1: "a: 2"
8 t1: [string]: data1
9 t1: ok1: fn({a!: int} | {b!: int}) // TODO: filter unsatisfied required fields.
10 t1: ok2: fn(close({a: int}) | close({b: int}))
11
12 #A: {a: int}
13 #B: {b: int}
14 t1: ok3: fn(#A | #B)
15
16 data2: "'foo'"
17 t2: [string]: data2
18 t2: ok1: fn(*int | string)
19 t2: ok2: fn(string)
20}
21
22validate: #test & {
23 fn: yaml.Validate
24
25 // TODO: fix this test: the second disjunct should be eliminated, so there
26 // should not be a concreteness error.
27 t1: _
28}
29
30validatePartial: #test & {
31 fn: yaml.ValidatePartial
32}
33
34invalidDisjuntion: yaml.Validate("a: 3", {a: 1 | 2})
35-- out/yaml --
36Errors:
37validate.t1.ok1: invalid value "a: 2" (does not satisfy encoding/yaml.Validate): error in call to encoding/yaml.Validate: incomplete value {a:2} | {a:2,b!:int}:
38 ./in.cue:8:11
39 ./in.cue:6:9
40 ./in.cue:7:16
41invalidDisjuntion: error in call to encoding/yaml.Validate: 2 errors in empty disjunction::
42 ./in.cue:33:20
43
44Result:
45import "encoding/yaml"
46
47#test: {
48 fn: _
49 data1: "a: 2"
50 t1: {
51 ok1: data1 & fn({
52 a!: int
53 } | {
54 b!: int
55 })
56 ok2: data1 & fn(close({
57 a: int
58 }) | close({
59 b: int
60 }))
61 ok3: data1 & fn(#A | #B)
62 }
63 #A: {
64 a: int
65 }
66 #B: {
67 b: int
68 }
69 data2: "'foo'"
70 t2: {
71 ok1: data2 & fn(*int | string)
72 ok2: data2 & fn(string)
73 }
74}
75validate: {
76 fn: yaml.Validate
77 data1: "a: 2"
78
79 // TODO: fix this test: the second disjunct should be eliminated, so there
80 // should not be a concreteness error.
81 t1: {
82 ok1: _|_ // validate.t1.ok1: invalid value "a: 2" (does not satisfy encoding/yaml.Validate): validate.t1.ok1: error in call to encoding/yaml.Validate: validate.t1.ok1: incomplete value {a:2} | {a:2,b!:int}
83 ok2: "a: 2"
84 ok3: "a: 2"
85 }
86 #A: {
87 a: int
88 }
89 #B: {
90 b: int
91 }
92 data2: "'foo'"
93 t2: {
94 ok1: "'foo'"
95 ok2: "'foo'"
96 }
97}
98validatePartial: {
99 fn: yaml.ValidatePartial
100 data1: "a: 2"
101 t1: {
102 ok1: "a: 2"
103 ok2: "a: 2"
104 ok3: "a: 2"
105 }
106 #A: {
107 a: int
108 }
109 #B: {
110 b: int
111 }
112 data2: "'foo'"
113 t2: {
114 ok1: "'foo'"
115 ok2: "'foo'"
116 }
117}
118invalidDisjuntion: _|_ // invalidDisjuntion: error in call to encoding/yaml.Validate: invalidDisjuntion.a: 2 errors in empty disjunction: (and 2 more errors)