@@ -22,6 +22,7 @@ import (
22
22
"cuelang.org/go/cue/ast"
23
23
"cuelang.org/go/cue/errors"
24
24
"cuelang.org/go/cue/format"
25
+ "cuelang.org/go/cue/parser"
25
26
"cuelang.org/go/internal"
26
27
"cuelang.org/go/internal/core/adt"
27
28
"cuelang.org/go/internal/core/compile"
@@ -76,54 +77,81 @@ func formatNode(t *testing.T, n ast.Node) []byte {
76
77
// different from parsed or evaluated CUE, such as having Vertex values.
77
78
func TestGenerated (t * testing.T ) {
78
79
testCases := []struct {
79
- in interface {}
80
- value string
81
- typ string
80
+ in func (ctx * adt.OpContext ) (adt.Expr , error )
81
+ out string
82
82
}{{
83
- in : & C {
84
- Terminals : []* A {
85
- {Name : "Name" , Description : "Desc" },
86
- },
83
+ in : func (ctx * adt.OpContext ) (adt.Expr , error ) {
84
+ in := & C {
85
+ Terminals : []* A {{Name : "Name" , Description : "Desc" }},
86
+ }
87
+ return convert .GoValueToValue (ctx , in , false ), nil
88
+ },
89
+ out : `{Terminals: [{Description: "Desc", Name: "Name"}]}` ,
90
+ }, {
91
+ in : func (ctx * adt.OpContext ) (adt.Expr , error ) {
92
+ in := & C {
93
+ Terminals : []* A {{Name : "Name" , Description : "Desc" }},
94
+ }
95
+ return convert .GoTypeToExpr (ctx , in )
96
+ },
97
+ out : `*null|{Terminals?: *null|[...*null|{Name: string, Description: string}]}` ,
98
+ }, {
99
+ in : func (ctx * adt.OpContext ) (adt.Expr , error ) {
100
+ in := []* A {{Name : "Name" , Description : "Desc" }}
101
+ return convert .GoValueToValue (ctx , in , false ), nil
87
102
},
88
- value : `{Terminals: [{Description: "Desc", Name: "Name"}]}` ,
89
- typ : `*null|{Terminals?: *null|[...*null|{Name: string, Description: string}]}` ,
103
+ out : `[{Name: "Name", Description: "Desc"}]` ,
90
104
}, {
91
- in : []* A {
92
- {Name : "Name" , Description : "Desc" },
105
+ in : func (ctx * adt.OpContext ) (adt.Expr , error ) {
106
+ in := []* A {{Name : "Name" , Description : "Desc" }}
107
+ return convert .GoTypeToExpr (ctx , in )
108
+ },
109
+ out : `*null|[...*null|{Name: string, Description: string}]` ,
110
+ }, {
111
+ in : func (ctx * adt.OpContext ) (adt.Expr , error ) {
112
+ expr , err := parser .ParseExpr ("test" , `{
113
+ x: Guide.#Terminal
114
+ Guide: {}
115
+ }` )
116
+ if err != nil {
117
+ return nil , err
118
+ }
119
+ c , err := compile .Expr (nil , ctx , expr )
120
+ if err != nil {
121
+ return nil , err
122
+ }
123
+ root := & adt.Vertex {}
124
+ root .AddConjunct (c )
125
+ root .Finalize (ctx )
126
+
127
+ // Simulate Value.Unify of Lookup("x") and Lookup("Guide").
128
+ n := & adt.Vertex {}
129
+ n .AddConjunct (adt .MakeRootConjunct (nil , root .Arcs [0 ]))
130
+ n .AddConjunct (adt .MakeRootConjunct (nil , root .Arcs [1 ]))
131
+ n .Finalize (ctx )
132
+
133
+ return n , nil
93
134
},
94
- value : `[{Name: "Name", Description: "Desc"}]` ,
95
- typ : `*null|[...*null|{Name: string, Description: string}]` ,
135
+ out : `<[l2// x: undefined field #Terminal] _|_>` ,
96
136
}}
97
137
for _ , tc := range testCases {
98
138
t .Run ("" , func (t * testing.T ) {
99
139
r := runtime .New ()
100
140
e := eval .New (r )
101
141
ctx := adt .NewContext (r , e , & adt.Vertex {})
102
142
103
- v := convert .GoValueToValue (ctx , tc .in , false )
104
-
105
- expr , err := export .Expr (ctx , v )
106
- if err != nil {
107
- t .Fatal (err )
108
- }
109
- got := internal .DebugStr (expr )
110
- if got != tc .value {
111
- t .Errorf ("value: got: %s\n want: %s" , got , tc .value )
112
- }
113
-
114
- x , err := convert .GoTypeToExpr (ctx , tc .in )
143
+ v , err := tc .in (ctx )
115
144
if err != nil {
116
- t .Fatal (err )
145
+ t .Fatal ("failed test case: " , err )
117
146
}
118
- expr , err = export .Expr (ctx , x )
147
+ expr , err : = export .Expr (ctx , v )
119
148
if err != nil {
120
- t .Fatal (err )
149
+ t .Fatal ("failed export: " , err )
121
150
}
122
- got = internal .DebugStr (expr )
123
- if got != tc .typ {
124
- t .Errorf ("type: got: %s\n want: %s" , got , tc .typ )
151
+ got : = internal .DebugStr (expr )
152
+ if got != tc .out {
153
+ t .Errorf ("got: %s\n want: %s" , got , tc .out )
125
154
}
126
-
127
155
})
128
156
}
129
157
}
0 commit comments