File tree 3 files changed +38
-10
lines changed
3 files changed +38
-10
lines changed Original file line number Diff line number Diff line change @@ -11,23 +11,22 @@ type evaluator interface {
11
11
}
12
12
13
13
// Eval parses and evaluates given input.
14
- func Eval (input string , env interface {}) (node interface {}, err error ) {
15
- defer func () {
16
- if r := recover (); r != nil {
17
- err = fmt .Errorf ("%v" , r )
18
- }
19
- }()
20
-
21
- node , err = Parse (input )
22
-
14
+ func Eval (input string , env interface {}) (interface {}, error ) {
15
+ node , err := Parse (input )
23
16
if err != nil {
24
17
return nil , err
25
18
}
26
19
return Run (node , env )
27
20
}
28
21
29
22
// Run evaluates given ast.
30
- func Run (node Node , env interface {}) (interface {}, error ) {
23
+ func Run (node Node , env interface {}) (out interface {}, err error ) {
24
+ defer func () {
25
+ if r := recover (); r != nil {
26
+ err = fmt .Errorf ("%v" , r )
27
+ }
28
+ }()
29
+
31
30
if e , ok := node .(evaluator ); ok {
32
31
return e .eval (env )
33
32
}
Original file line number Diff line number Diff line change @@ -429,3 +429,20 @@ func TestEvalComplex(t *testing.T) {
429
429
t .Fatalf ("TestEvalComplex:\n got\n \t %#v\n expected:\n \t %#v" , actual , expected )
430
430
}
431
431
}
432
+
433
+ func TestEvalRunPanic (t * testing.T ) {
434
+ node , err := Parse ("foo()" )
435
+ if err != nil {
436
+ t .Fatal (err )
437
+ }
438
+
439
+ _ , err = Run (node , map [string ]interface {}{"foo" : nil })
440
+ if err == nil {
441
+ err = fmt .Errorf ("<nil>" )
442
+ }
443
+
444
+ expected := "reflect: call of reflect.Value.Call on zero Value"
445
+ if err .Error () != expected {
446
+ t .Errorf ("\n got\n \t %+v\n expected\n \t %v" , err .Error (), expected )
447
+ }
448
+ }
Original file line number Diff line number Diff line change @@ -179,3 +179,15 @@ func TestParseError(t *testing.T) {
179
179
}
180
180
}
181
181
}
182
+
183
+ func TestParseErrorPosition (t * testing.T ) {
184
+ _ , err := Parse ("foo() + bar(**)" )
185
+ if err == nil {
186
+ err = fmt .Errorf ("<nil>" )
187
+ }
188
+
189
+ expected := "unexpected token operator(**)\n foo() + bar(**)\n ------------^"
190
+ if err .Error () != expected {
191
+ t .Errorf ("\n got\n \t %+v\n expected\n \t %v" , err .Error (), expected )
192
+ }
193
+ }
You can’t perform that action at this time.
0 commit comments