@@ -1160,7 +1160,7 @@ func TestExpr_call_floatarg_func_with_int(t *testing.T) {
1160
1160
}
1161
1161
}
1162
1162
1163
- func TestConstExpr_error (t * testing.T ) {
1163
+ func TestConstExpr_error_panic (t * testing.T ) {
1164
1164
env := map [string ]interface {}{
1165
1165
"divide" : func (a , b int ) int { return a / b },
1166
1166
}
@@ -1174,6 +1174,31 @@ func TestConstExpr_error(t *testing.T) {
1174
1174
require .Equal (t , "compile error: integer divide by zero (1:5)\n | 1 + divide(1, 0)\n | ....^" , err .Error ())
1175
1175
}
1176
1176
1177
+ type divideError struct { Message string }
1178
+
1179
+ func (e divideError ) Error () string {
1180
+ return e .Message
1181
+ }
1182
+ func TestConstExpr_error_as_error (t * testing.T ) {
1183
+ env := map [string ]interface {}{
1184
+ "divide" : func (a , b int ) (int , error ) {
1185
+ if b == 0 {
1186
+ return 0 , divideError {"integer divide by zero" }
1187
+ }
1188
+ return a / b , nil
1189
+ },
1190
+ }
1191
+
1192
+ _ , err := expr .Compile (
1193
+ `1 + divide(1, 0)` ,
1194
+ expr .Env (env ),
1195
+ expr .ConstExpr ("divide" ),
1196
+ )
1197
+ require .Error (t , err )
1198
+ require .Equal (t , "integer divide by zero" , err .Error ())
1199
+ require .IsType (t , divideError {}, err )
1200
+ }
1201
+
1177
1202
func TestConstExpr_error_wrong_type (t * testing.T ) {
1178
1203
env := map [string ]interface {}{
1179
1204
"divide" : 0 ,
0 commit comments