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