github.com/bytedance/go-tagexpr/v2@v2.9.8/spec_range_test.go (about) 1 package tagexpr_test 2 3 import ( 4 "testing" 5 6 "github.com/bytedance/go-tagexpr/v2" 7 "github.com/stretchr/testify/assert" 8 ) 9 10 func TestIssue12(t *testing.T) { 11 var vm = tagexpr.New("te") 12 type I int 13 type S struct { 14 F []I `te:"range($, '>'+sprintf('%v:%v', #k, #v+2+len($)))"` 15 Fs [][]I `te:"range($, range(#v, '>'+sprintf('%v:%v', #k, #v+2+##)))"` 16 M map[string]I `te:"range($, '>'+sprintf('%s:%v', #k, #v+2+##))"` 17 MFs []map[string][]I `te:"range($, range(#v, range(#v, '>'+sprintf('%v:%v', #k, #v+2+##))))"` 18 MFs2 []map[string][]I `te:"range($, range(#v, range(#v, '>'+sprintf('%v:%v', #k, #v+2+##))))"` 19 } 20 a := []I{2, 3} 21 r := vm.MustRun(S{ 22 F: a, 23 Fs: [][]I{a}, 24 M: map[string]I{"m0": 2, "m1": 3}, 25 MFs: []map[string][]I{{"m": a}}, 26 MFs2: []map[string][]I{}, 27 }) 28 assert.Equal(t, []interface{}{">0:6", ">1:7"}, r.Eval("F")) 29 assert.Equal(t, []interface{}{[]interface{}{">0:6", ">1:7"}}, r.Eval("Fs")) 30 assert.Equal(t, []interface{}{">m0:6", ">m1:7"}, r.Eval("M")) 31 assert.Equal(t, []interface{}{[]interface{}{[]interface{}{">0:6", ">1:7"}}}, r.Eval("MFs")) 32 assert.Equal(t, []interface{}{}, r.Eval("MFs2")) 33 assert.Equal(t, true, r.EvalBool("MFs2")) 34 }