@@ -213,59 +213,60 @@ func TestParse(t *testing.T) {
213
213
}
214
214
}
215
215
216
+ const errorTests = `
217
+ foo.
218
+ unexpected end of expression (1:4)
219
+ | foo.
220
+ | ...^
221
+
222
+ a+
223
+ unexpected token EOF (1:2)
224
+ | a+
225
+ | .^
226
+
227
+ a ? (1+2) c
228
+ unexpected token Identifier("c") (1:11)
229
+ | a ? (1+2) c
230
+ | ..........^
231
+
232
+ [a b]
233
+ unexpected token Identifier("b") (1:4)
234
+ | [a b]
235
+ | ...^
236
+
237
+ foo.bar(a b)
238
+ unexpected token Identifier("b") (1:11)
239
+ | foo.bar(a b)
240
+ | ..........^
241
+
242
+ {-}
243
+ a map key must be a quoted string, a number, a identifier, or an expression enclosed in parentheses (unexpected token Operator("-")) (1:2)
244
+ | {-}
245
+ | .^
246
+
247
+ a matches 'a:)b'
248
+ error parsing regexp: unexpected ): ` + "`a:)b`" + ` (1:16)
249
+ | a matches 'a:)b'
250
+ | ...............^
251
+
252
+ foo({.bar})
253
+ a map key must be a quoted string, a number, a identifier, or an expression enclosed in parentheses (unexpected token Operator(".")) (1:6)
254
+ | foo({.bar})
255
+ | .....^
256
+ `
257
+
216
258
func TestParse_error (t * testing.T ) {
217
- var parseErrorTests = []struct {
218
- input string
219
- err string
220
- }{
221
- {
222
- "foo." ,
223
- "syntax error: missing Identifier at" ,
224
- },
225
- {
226
- "a+" ,
227
- "syntax error: mismatched input '<EOF>'" ,
228
- },
229
- {
230
- "a ? (1+2) c" ,
231
- "syntax error: missing ':' at 'c'" ,
232
- },
233
- {
234
- "[a b]" ,
235
- "syntax error: extraneous input 'b' expecting {']', ','}" ,
236
- },
237
- {
238
- "foo.bar(a b)" ,
239
- "syntax error: extraneous input 'b' expecting ')'" ,
240
- },
241
- {
242
- "{-}" ,
243
- "syntax error: no viable alternative at input '{-'" ,
244
- },
245
- {
246
- "a matches 'a)(b'" ,
247
- "error parsing regexp: unexpected )" ,
248
- },
249
- {
250
- `a matches "*"` ,
251
- "error parsing regexp: missing argument to repetition operator: `*` (1:11)\n | a matches \" *\" \n | ..........^" ,
252
- },
253
- {
254
- `.foo` ,
255
- "parse error: dot property accessor can be only inside closure" ,
256
- },
257
- {
258
- `foo({.bar})` ,
259
- "syntax error: no viable alternative at input '{.'" ,
260
- },
261
- }
262
- for _ , test := range parseErrorTests {
263
- _ , err := parser .Parse (test .input )
259
+ tests := strings .Split (strings .Trim (errorTests , "\n " ), "\n \n " )
260
+ for _ , test := range tests {
261
+ input := strings .SplitN (test , "\n " , 2 )
262
+ if len (input ) != 2 {
263
+ t .Errorf ("syntax error in test: %q" , test )
264
+ break
265
+ }
266
+ _ , err := parser .Parse (input [0 ])
264
267
if err == nil {
265
268
err = fmt .Errorf ("<nil>" )
266
269
}
267
- if ! strings .Contains (err .Error (), test .err ) || test .err == "" {
268
- assert .Equal (t , test .err , err .Error (), test .input )
269
- }
270
+ assert .Equal (t , input [1 ], err .Error (), input [0 ])
270
271
}
271
272
}
0 commit comments