@@ -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