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  }