@@ -14319,3 +14319,221 @@ func TestValidateFn(t *testing.T) {
1431914319		Equal (t , fe .Tag (), "validateFn" )
1432014320	})
1432114321}
14322+ 
14323+ type  ValuerTypeWithPointerReceiver [T  any ] struct  {
14324+ 	Data  T 
14325+ }
14326+ 
14327+ func  (t  * ValuerTypeWithPointerReceiver [T ]) ValidatorValue () any  {
14328+ 	return  t .Data 
14329+ }
14330+ 
14331+ type  ValuerTypeWithValueReceiver [T  any ] struct  {
14332+ 	Data  T 
14333+ }
14334+ 
14335+ func  (t  ValuerTypeWithValueReceiver [T ]) ValidatorValue () any  {
14336+ 	return  t .Data 
14337+ }
14338+ 
14339+ func  TestValuerInterface (t  * testing.T ) {
14340+ 	t .Run ("parent as Valuer (not called)" , func (t  * testing.T ) {
14341+ 		errs  :=  New ().Struct (& ValuerTypeWithPointerReceiver [SubTest ]{})
14342+ 		AssertError (t , errs ,
14343+ 			"ValuerTypeWithPointerReceiver[github.com/go-playground/validator/v10.SubTest].Data.Test" ,
14344+ 			"ValuerTypeWithPointerReceiver[github.com/go-playground/validator/v10.SubTest].Data.Test" ,
14345+ 			"Test" , "Test" , "required" )
14346+ 	})
14347+ 	t .Run ("pointer parent, pointer nested, pointer receiver (called)" , func (t  * testing.T ) {
14348+ 		type  Parent  struct  {
14349+ 			Nested  * ValuerTypeWithPointerReceiver [SubTest ] `validate:"required"` 
14350+ 		}
14351+ 
14352+ 		errs  :=  New ().Struct (& Parent {})
14353+ 		AssertError (t , errs , "Parent.Nested" , "Parent.Nested" , "Nested" , "Nested" , "required" )
14354+ 
14355+ 		errs  =  New ().Struct (& Parent {
14356+ 			Nested : & ValuerTypeWithPointerReceiver [SubTest ]{},
14357+ 		})
14358+ 		AssertError (t , errs , "Parent.Nested.Test" , "Parent.Nested.Test" , "Test" , "Test" , "required" )
14359+ 
14360+ 		errs  =  New ().Struct (& Parent {
14361+ 			Nested : & ValuerTypeWithPointerReceiver [SubTest ]{
14362+ 				Data : SubTest {
14363+ 					Test : "Test" ,
14364+ 				},
14365+ 			},
14366+ 		})
14367+ 		if  errs  !=  nil  {
14368+ 			t .Fatalf ("Expected no error, got: %v" , errs )
14369+ 		}
14370+ 	})
14371+ 	t .Run ("pointer parent, pointer nested, value receiver (called)" , func (t  * testing.T ) {
14372+ 		type  Parent  struct  {
14373+ 			Nested  * ValuerTypeWithValueReceiver [SubTest ] `validate:"required"` 
14374+ 		}
14375+ 
14376+ 		errs  :=  New ().Struct (& Parent {})
14377+ 		AssertError (t , errs , "Parent.Nested" , "Parent.Nested" , "Nested" , "Nested" , "required" )
14378+ 
14379+ 		errs  =  New ().Struct (& Parent {
14380+ 			Nested : & ValuerTypeWithValueReceiver [SubTest ]{},
14381+ 		})
14382+ 		AssertError (t , errs , "Parent.Nested.Test" , "Parent.Nested.Test" , "Test" , "Test" , "required" )
14383+ 
14384+ 		errs  =  New ().Struct (& Parent {
14385+ 			Nested : & ValuerTypeWithValueReceiver [SubTest ]{
14386+ 				Data : SubTest {
14387+ 					Test : "Test" ,
14388+ 				},
14389+ 			},
14390+ 		})
14391+ 		if  errs  !=  nil  {
14392+ 			t .Fatalf ("Expected no error, got: %v" , errs )
14393+ 		}
14394+ 	})
14395+ 	t .Run ("pointer parent, value nested, pointer receiver (not called)" , func (t  * testing.T ) {
14396+ 		type  Parent  struct  {
14397+ 			Nested  ValuerTypeWithPointerReceiver [SubTest ] `validate:"required"` 
14398+ 		}
14399+ 
14400+ 		errs  :=  New ().Struct (& Parent {})
14401+ 		AssertError (t , errs , "Parent.Nested.Data.Test" , "Parent.Nested.Data.Test" , "Test" , "Test" , "required" )
14402+ 
14403+ 		errs  =  New ().Struct (& Parent {
14404+ 			Nested : ValuerTypeWithPointerReceiver [SubTest ]{},
14405+ 		})
14406+ 		AssertError (t , errs , "Parent.Nested.Data.Test" , "Parent.Nested.Data.Test" , "Test" , "Test" , "required" )
14407+ 
14408+ 		errs  =  New ().Struct (& Parent {
14409+ 			Nested : ValuerTypeWithPointerReceiver [SubTest ]{
14410+ 				Data : SubTest {
14411+ 					Test : "Test" ,
14412+ 				},
14413+ 			},
14414+ 		})
14415+ 		if  errs  !=  nil  {
14416+ 			t .Fatalf ("Expected no error, got: %v" , errs )
14417+ 		}
14418+ 	})
14419+ 	t .Run ("pointer parent, value nested, value receiver (called)" , func (t  * testing.T ) {
14420+ 		type  Parent  struct  {
14421+ 			Nested  ValuerTypeWithValueReceiver [SubTest ] `validate:"required"` 
14422+ 		}
14423+ 
14424+ 		errs  :=  New ().Struct (& Parent {})
14425+ 		AssertError (t , errs , "Parent.Nested.Test" , "Parent.Nested.Test" , "Test" , "Test" , "required" )
14426+ 
14427+ 		errs  =  New ().Struct (& Parent {
14428+ 			Nested : ValuerTypeWithValueReceiver [SubTest ]{},
14429+ 		})
14430+ 		AssertError (t , errs , "Parent.Nested.Test" , "Parent.Nested.Test" , "Test" , "Test" , "required" )
14431+ 
14432+ 		errs  =  New ().Struct (& Parent {
14433+ 			Nested : ValuerTypeWithValueReceiver [SubTest ]{
14434+ 				Data : SubTest {
14435+ 					Test : "Test" ,
14436+ 				},
14437+ 			},
14438+ 		})
14439+ 		if  errs  !=  nil  {
14440+ 			t .Fatalf ("Expected no error, got: %v" , errs )
14441+ 		}
14442+ 	})
14443+ 	t .Run ("value parent, pointer nested, pointer receiver (called)" , func (t  * testing.T ) {
14444+ 		type  Parent  struct  {
14445+ 			Nested  * ValuerTypeWithPointerReceiver [SubTest ] `validate:"required"` 
14446+ 		}
14447+ 
14448+ 		errs  :=  New ().Struct (Parent {})
14449+ 		AssertError (t , errs , "Parent.Nested" , "Parent.Nested" , "Nested" , "Nested" , "required" )
14450+ 
14451+ 		errs  =  New ().Struct (Parent {
14452+ 			Nested : & ValuerTypeWithPointerReceiver [SubTest ]{},
14453+ 		})
14454+ 		AssertError (t , errs , "Parent.Nested.Test" , "Parent.Nested.Test" , "Test" , "Test" , "required" )
14455+ 
14456+ 		errs  =  New ().Struct (Parent {
14457+ 			Nested : & ValuerTypeWithPointerReceiver [SubTest ]{
14458+ 				Data : SubTest {
14459+ 					Test : "Test" ,
14460+ 				},
14461+ 			},
14462+ 		})
14463+ 		if  errs  !=  nil  {
14464+ 			t .Fatalf ("Expected no error, got: %v" , errs )
14465+ 		}
14466+ 	})
14467+ 	t .Run ("value parent, pointer nested, value receiver (called)" , func (t  * testing.T ) {
14468+ 		type  Parent  struct  {
14469+ 			Nested  * ValuerTypeWithValueReceiver [SubTest ] `validate:"required"` 
14470+ 		}
14471+ 
14472+ 		errs  :=  New ().Struct (Parent {})
14473+ 		AssertError (t , errs , "Parent.Nested" , "Parent.Nested" , "Nested" , "Nested" , "required" )
14474+ 
14475+ 		errs  =  New ().Struct (Parent {
14476+ 			Nested : & ValuerTypeWithValueReceiver [SubTest ]{},
14477+ 		})
14478+ 		AssertError (t , errs , "Parent.Nested.Test" , "Parent.Nested.Test" , "Test" , "Test" , "required" )
14479+ 
14480+ 		errs  =  New ().Struct (Parent {
14481+ 			Nested : & ValuerTypeWithValueReceiver [SubTest ]{
14482+ 				Data : SubTest {
14483+ 					Test : "Test" ,
14484+ 				},
14485+ 			},
14486+ 		})
14487+ 		if  errs  !=  nil  {
14488+ 			t .Fatalf ("Expected no error, got: %v" , errs )
14489+ 		}
14490+ 	})
14491+ 	t .Run ("value parent, value nested, pointer receiver (not called)" , func (t  * testing.T ) {
14492+ 		type  Parent  struct  {
14493+ 			Nested  ValuerTypeWithPointerReceiver [SubTest ] `validate:"required"` 
14494+ 		}
14495+ 
14496+ 		errs  :=  New ().Struct (Parent {})
14497+ 		AssertError (t , errs , "Parent.Nested.Data.Test" , "Parent.Nested.Data.Test" , "Test" , "Test" , "required" )
14498+ 
14499+ 		errs  =  New ().Struct (Parent {
14500+ 			Nested : ValuerTypeWithPointerReceiver [SubTest ]{},
14501+ 		})
14502+ 		AssertError (t , errs , "Parent.Nested.Data.Test" , "Parent.Nested.Data.Test" , "Test" , "Test" , "required" )
14503+ 
14504+ 		errs  =  New ().Struct (Parent {
14505+ 			Nested : ValuerTypeWithPointerReceiver [SubTest ]{
14506+ 				Data : SubTest {
14507+ 					Test : "Test" ,
14508+ 				},
14509+ 			},
14510+ 		})
14511+ 		if  errs  !=  nil  {
14512+ 			t .Fatalf ("Expected no error, got: %v" , errs )
14513+ 		}
14514+ 	})
14515+ 	t .Run ("value parent, value nested, value receiver (called)" , func (t  * testing.T ) {
14516+ 		type  Parent  struct  {
14517+ 			Nested  ValuerTypeWithValueReceiver [SubTest ] `validate:"required"` 
14518+ 		}
14519+ 
14520+ 		errs  :=  New ().Struct (Parent {})
14521+ 		AssertError (t , errs , "Parent.Nested.Test" , "Parent.Nested.Test" , "Test" , "Test" , "required" )
14522+ 
14523+ 		errs  =  New ().Struct (Parent {
14524+ 			Nested : ValuerTypeWithValueReceiver [SubTest ]{},
14525+ 		})
14526+ 		AssertError (t , errs , "Parent.Nested.Test" , "Parent.Nested.Test" , "Test" , "Test" , "required" )
14527+ 
14528+ 		errs  =  New ().Struct (Parent {
14529+ 			Nested : ValuerTypeWithValueReceiver [SubTest ]{
14530+ 				Data : SubTest {
14531+ 					Test : "Test" ,
14532+ 				},
14533+ 			},
14534+ 		})
14535+ 		if  errs  !=  nil  {
14536+ 			t .Fatalf ("Expected no error, got: %v" , errs )
14537+ 		}
14538+ 	})
14539+ }
0 commit comments