@@ -226,10 +226,11 @@ func Test(t *testing.T) {
226226 t .Fatalf ("Eval Serial: %d, selector: %q, got: %v, expect: %v" , i , selector , val , value )
227227 }
228228 }
229- tagExpr .Range (func (path string , es ExprSelector , eval func () interface {}) error {
229+ tagExpr .Range (func (eh * ExprHandler ) error {
230+ es := eh .ExprSelector ()
230231 t .Logf ("Range selector: %s, field: %q exprName: %q" , es , es .Field (), es .Name ())
231232 value := c .tests [es .String ()]
232- val := eval ()
233+ val := eh . Eval ()
233234 if ! reflect .DeepEqual (val , value ) {
234235 t .Fatalf ("Range NO: %d, selector: %q, got: %v, expect: %v" , i , es , val , value )
235236 }
@@ -542,10 +543,11 @@ func TestOperator(t *testing.T) {
542543 t .Fatalf ("Eval NO: %d, selector: %q, got: %v, expect: %v" , i , selector , val , value )
543544 }
544545 }
545- tagExpr .Range (func (path string , es ExprSelector , eval func () interface {}) error {
546+ tagExpr .Range (func (eh * ExprHandler ) error {
547+ es := eh .ExprSelector ()
546548 t .Logf ("Range selector: %s, field: %q exprName: %q" , es , es .Field (), es .Name ())
547549 value := c .tests [es .String ()]
548- val := eval ()
550+ val := eh . Eval ()
549551 if ! reflect .DeepEqual (val , value ) {
550552 t .Fatalf ("Range NO: %d, selector: %q, got: %v, expect: %v" , i , es , val , value )
551553 }
@@ -575,9 +577,10 @@ func TestStruct(t *testing.T) {
575577 assert .Equal (t , "xxx" , expr .EvalString ("B.C3" ))
576578 assert .Equal (t , "xxx" , expr .EvalString ("B.C" ))
577579 assert .Equal (t , "xxx" , expr .EvalString ("B.C.D.X" ))
578- expr .Range (func (path string , es ExprSelector , eval func () interface {}) error {
579- t .Logf ("Range selector: %s, field: %q exprName: %q" , path , es .Field (), es .Name ())
580- if eval ().(string ) != "xxx" {
580+ expr .Range (func (eh * ExprHandler ) error {
581+ es := eh .ExprSelector ()
582+ t .Logf ("Range selector: %s, field: %q exprName: %q" , es , es .Field (), es .Name ())
583+ if eh .Eval ().(string ) != "xxx" {
581584 t .FailNow ()
582585 }
583586 return nil
@@ -669,8 +672,9 @@ func TestStruct3(t *testing.T) {
669672 if expr .EvalString ("XBlock.BlockType" ) != "BlockType" {
670673 t .Fatal (expr .EvalString ("XBlock.BlockType" ))
671674 }
672- err := expr .Range (func (path string , es ExprSelector , eval func () interface {}) error {
673- t .Logf ("Range selector: %s, field: %q exprName: %q, eval: %v" , path , es .Field (), es .Name (), eval ())
675+ err := expr .Range (func (eh * ExprHandler ) error {
676+ es := eh .ExprSelector ()
677+ t .Logf ("Range selector: %s, field: %q exprName: %q, eval: %v" , eh .Path (), es .Field (), es .Name (), eh .Eval ())
674678 return nil
675679 })
676680 assert .NoError (t , err )
@@ -685,10 +689,10 @@ func TestNilField(t *testing.T) {
685689 }
686690 vm := New ("tagexpr" )
687691 te := vm .MustRun (P {})
688- te .Range (func (path string , es ExprSelector , eval func () interface {} ) error {
689- r := eval ()
692+ te .Range (func (eh * ExprHandler ) error {
693+ r := eh . Eval ()
690694 if r != nil {
691- t .Fatal (path , r )
695+ t .Fatal (eh . Path () , r )
692696 }
693697 return nil
694698 })
@@ -701,10 +705,10 @@ func TestNilField(t *testing.T) {
701705 Nil1 : new (int ),
702706 Nil2 : new (int ),
703707 }
704- vm .MustRun (g ).Range (func (path string , es ExprSelector , eval func () interface {} ) error {
705- r , ok := eval ().(bool )
708+ vm .MustRun (g ).Range (func (eh * ExprHandler ) error {
709+ r , ok := eh . Eval ().(bool )
706710 if ! ok || ! r {
707- t .Fatal (path , r )
711+ t .Fatal (eh . Path () , r )
708712 }
709713 return nil
710714 })
@@ -733,12 +737,12 @@ func TestNilField(t *testing.T) {
733737 SI : []interface {}{& M {X : "nn" }},
734738 }
735739 var cnt int
736- vm .MustRun (n ).Range (func (path string , es ExprSelector , eval func () interface {} ) error {
737- r , ok := eval ().(bool )
740+ vm .MustRun (n ).Range (func (eh * ExprHandler ) error {
741+ r , ok := eh . Eval ().(bool )
738742 if ! ok || ! r {
739- t .Fatal (path , r )
743+ t .Fatal (eh . Path () , r )
740744 }
741- t .Log ("path:" , path , "es:" , es , "val:" , r )
745+ t .Log ("path:" , eh . Path () , "es:" , eh . ExprSelector () , "val:" , r )
742746 cnt ++
743747 return nil
744748 })
@@ -781,11 +785,11 @@ func TestDeepNested(t *testing.T) {
781785 expectValue := [... ]interface {}{"I:address" , nil , "A:address" , nil , "X:address" }
782786 var i int
783787 vm := New ("tagexpr" )
784- vm .MustRun (data ).Range (func (path string , es ExprSelector , eval func () interface {} ) error {
785- assert .Equal (t , expectKey [i ], path )
786- assert .Equal (t , expectValue [i ], eval ())
788+ vm .MustRun (data ).Range (func (eh * ExprHandler ) error {
789+ assert .Equal (t , expectKey [i ], eh . Path () )
790+ assert .Equal (t , expectValue [i ], eh . Eval ())
787791 i ++
788- t .Log (path , es , eval ())
792+ t .Log (eh . Path (), eh . ExprSelector (), eh . Eval ())
789793 return nil
790794 })
791795 assert .Equal (t , 5 , i )
@@ -809,16 +813,16 @@ func TestIssue3(t *testing.T) {
809813 },
810814 }
811815 vm := New ("vd" )
812- err := vm .MustRun (a ).Range (func (path string , es ExprSelector , eval func () interface {} ) error {
813- switch path {
816+ err := vm .MustRun (a ).Range (func (eh * ExprHandler ) error {
817+ switch eh . Path () {
814818 case "F1.Index" :
815- assert .Equal (t , float64 (1 ), eval (), path )
819+ assert .Equal (t , float64 (1 ), eh . Eval (), eh . Path () )
816820 case "F2.Index" :
817- assert .Equal (t , nil , eval (), path )
821+ assert .Equal (t , nil , eh . Eval (), eh . Path () )
818822 case "F1.P" :
819- assert .Equal (t , true , eval (), path )
823+ assert .Equal (t , true , eh . Eval (), eh . Path () )
820824 case "F2.P" :
821- assert .Equal (t , false , eval (), path )
825+ assert .Equal (t , false , eh . Eval (), eh . Path () )
822826 }
823827 return nil
824828 })
0 commit comments