@@ -3,6 +3,7 @@ package deref_test
33import (
44 "context"
55 "testing"
6+ "time"
67
78 "github.com/expr-lang/expr/internal/testify/assert"
89 "github.com/expr-lang/expr/internal/testify/require"
@@ -253,3 +254,69 @@ func TestDeref_fetch_from_interface_mix_pointer(t *testing.T) {
253254 assert .NoError (t , err )
254255 assert .Equal (t , "waldo" , res )
255256}
257+
258+ func TestDeref_func_args (t * testing.T ) {
259+ i := 20
260+ env := map [string ]any {
261+ "var" : & i ,
262+ "fn" : func (p int ) int {
263+ return p + 1
264+ },
265+ }
266+
267+ program , err := expr .Compile (`fn(var) + fn(var + 0)` , expr .Env (env ))
268+ require .NoError (t , err )
269+
270+ out , err := expr .Run (program , env )
271+ require .NoError (t , err )
272+ require .Equal (t , 42 , out )
273+ }
274+
275+ func TestDeref_struct_func_args (t * testing.T ) {
276+ n , _ := time .Parse (time .RFC3339 , "2024-05-12T18:30:00+00:00" )
277+ duration := 30 * time .Minute
278+ env := map [string ]any {
279+ "time" : n ,
280+ "duration" : & duration ,
281+ }
282+
283+ program , err := expr .Compile (`time.Add(duration).Format('2006-01-02T15:04:05Z07:00')` , expr .Env (env ))
284+ require .NoError (t , err )
285+
286+ out , err := expr .Run (program , env )
287+ require .NoError (t , err )
288+ require .Equal (t , "2024-05-12T19:00:00Z" , out )
289+ }
290+
291+ func TestDeref_ignore_func_args (t * testing.T ) {
292+ f := foo (1 )
293+ env := map [string ]any {
294+ "foo" : & f ,
295+ "fn" : func (f * foo ) int {
296+ return f .Bar ()
297+ },
298+ }
299+
300+ program , err := expr .Compile (`fn(foo)` , expr .Env (env ))
301+ require .NoError (t , err )
302+
303+ out , err := expr .Run (program , env )
304+ require .NoError (t , err )
305+ require .Equal (t , 42 , out )
306+ }
307+
308+ func TestDeref_ignore_struct_func_args (t * testing.T ) {
309+ n := time .Now ()
310+ location , _ := time .LoadLocation ("UTC" )
311+ env := map [string ]any {
312+ "time" : n ,
313+ "location" : location ,
314+ }
315+
316+ program , err := expr .Compile (`time.In(location).Location().String()` , expr .Env (env ))
317+ require .NoError (t , err )
318+
319+ out , err := expr .Run (program , env )
320+ require .NoError (t , err )
321+ require .Equal (t , "UTC" , out )
322+ }
0 commit comments