| 2293 | } |
| 2294 | |
| 2295 | func TestEnv_keyword_with_custom_functions(t *testing.T) { |
| 2296 | fn := expr.Function("fn", func(params ...any) (any, error) { |
| 2297 | return "ok", nil |
| 2298 | }) |
| 2299 | |
| 2300 | var tests = []struct { |
| 2301 | code string |
| 2302 | error bool |
| 2303 | }{ |
| 2304 | {`fn()`, false}, |
| 2305 | {`$env.fn()`, true}, |
| 2306 | {`$env["fn"]`, true}, |
| 2307 | } |
| 2308 | |
| 2309 | for _, tt := range tests { |
| 2310 | t.Run(tt.code, func(t *testing.T) { |
| 2311 | _, err := expr.Compile(tt.code, expr.Env(mock.Env{}), fn) |
| 2312 | if tt.error { |
| 2313 | require.Error(t, err) |
| 2314 | } else { |
| 2315 | require.NoError(t, err) |
| 2316 | } |
| 2317 | }) |
| 2318 | } |
| 2319 | } |
| 2320 | |
| 2321 | func TestIssue401(t *testing.T) { |
| 2322 | program, err := expr.Compile("(a - b + c) / d", expr.AllowUndefinedVariables()) |