@ -1,6 +1,7 @@
package validator
import (
"encoding/json"
"fmt"
"path"
"reflect"
@ -231,6 +232,112 @@ func AssertMapFieldError(t *testing.T, s map[string]*FieldError, field string, e
EqualSkip ( t , 2 , val . Tag , expectedTag )
}
func TestExistsValidation ( t * testing . T ) {
jsonText := "{ \"truthiness2\": true }"
type Thing struct {
Truthiness * bool ` json:"truthiness" validate:"exists,required" `
}
var ting Thing
err := json . Unmarshal ( [ ] byte ( jsonText ) , & ting )
Equal ( t , err , nil )
NotEqual ( t , ting , nil )
Equal ( t , ting . Truthiness , nil )
errs := validate . Struct ( ting )
NotEqual ( t , errs , nil )
AssertFieldError ( t , errs , "Truthiness" , "exists" )
jsonText = "{ \"truthiness\": true }"
err = json . Unmarshal ( [ ] byte ( jsonText ) , & ting )
Equal ( t , err , nil )
NotEqual ( t , ting , nil )
Equal ( t , ting . Truthiness , true )
errs = validate . Struct ( ting )
Equal ( t , errs , nil )
}
func TestSliceMapArrayChanFuncPtrInterfaceRequiredValidation ( t * testing . T ) {
var m map [ string ] string
errs := validate . Field ( m , "required" )
NotEqual ( t , errs , nil )
// AssertError(t, errs, "", "", "required")
m = map [ string ] string { }
errs = validate . Field ( m , "required" )
Equal ( t , errs , nil )
var arr [ 5 ] string
errs = validate . Field ( arr , "required" )
NotEqual ( t , errs , nil )
// AssertError(t, errs, "", "", "required")
arr [ 0 ] = "ok"
errs = validate . Field ( arr , "required" )
Equal ( t , errs , nil )
var s [ ] string
errs = validate . Field ( s , "required" )
NotEqual ( t , errs , nil )
// AssertError(t, errs, "", "", "required")
s = [ ] string { }
errs = validate . Field ( s , "required" )
Equal ( t , errs , nil )
var c chan string
errs = validate . Field ( c , "required" )
NotEqual ( t , errs , nil )
// AssertError(t, errs, "", "", "required")
c = make ( chan string )
errs = validate . Field ( c , "required" )
Equal ( t , errs , nil )
var tst * int
errs = validate . Field ( tst , "required" )
NotEqual ( t , errs , nil )
// AssertError(t, errs, "", "", "required")
one := 1
tst = & one
errs = validate . Field ( tst , "required" )
Equal ( t , errs , nil )
var iface interface { }
errs = validate . Field ( iface , "required" )
NotEqual ( t , errs , nil )
// AssertError(t, errs, "", "", "required")
errs = validate . Field ( iface , "omitempty,required" )
Equal ( t , errs , nil )
errs = validate . Field ( iface , "" )
Equal ( t , errs , nil )
errs = validate . Field ( iface , "len=1" )
NotEqual ( t , errs , nil )
var f func ( string )
errs = validate . Field ( f , "required" )
NotEqual ( t , errs , nil )
// AssertError(t, errs, "", "", "required")
f = func ( name string ) { }
errs = validate . Field ( f , "required" )
Equal ( t , errs , nil )
}
func TestBadKeyValidation ( t * testing . T ) {
type Test struct {
Name string ` validate:"required, " `
@ -255,7 +362,7 @@ func TestFlattenValidation(t *testing.T) {
var errStructPtrArray [ ] [ ] * Inner
errStructPtrArray = append ( errStructPtrArray , [ ] * Inner { & Inner { "ok" } , & Inner { "" } , & Inner { "ok" } } )
errStructPtrArray = append ( errStructPtrArray , [ ] * Inner { { "ok" } , { "" } , { "ok" } } )
tmsp := & TestMultiDimensionalStructsPtr {
Errs : errStructPtrArray ,
@ -289,7 +396,7 @@ func TestFlattenValidation(t *testing.T) {
Equal ( t , structErrFlatten . Tag , "required" )
errStructPtrArray = [ ] [ ] * Inner { }
errStructPtrArray = append ( errStructPtrArray , [ ] * Inner { & Inner { "ok" } , nil , & Inner { "ok" } } )
errStructPtrArray = append ( errStructPtrArray , [ ] * Inner { { "ok" } , nil , { "ok" } } )
tmsp = & TestMultiDimensionalStructsPtr {
Errs : errStructPtrArray ,
@ -321,7 +428,7 @@ func TestFlattenValidation(t *testing.T) {
Errs map [ int ] * Inner ` validate:"gt=0,dive,required" `
}
mip := map [ int ] * Inner { 0 : & Inner { "ok" } , 3 : & Inner { "" } , 4 : & Inner { "ok" } }
mip := map [ int ] * Inner { 0 : { "ok" } , 3 : { "" } , 4 : { "ok" } }
msp := & TestMapStructPtr {
Errs : mip ,
@ -353,7 +460,7 @@ func TestFlattenValidation(t *testing.T) {
Equal ( t , flatErrs . Field , "Name" )
Equal ( t , flatErrs . Tag , "required" )
mip2 := map [ int ] * Inner { 0 : & Inner { "ok" } , 3 : nil , 4 : & Inner { "ok" } }
mip2 := map [ int ] * Inner { 0 : { "ok" } , 3 : nil , 4 : { "ok" } }
msp2 := & TestMapStructPtr {
Errs : mip2 ,
@ -384,7 +491,7 @@ func TestFlattenValidation(t *testing.T) {
Errs map [ int ] [ ] string ` validate:"gt=0,dive,dive,required" `
}
mias := map [ int ] [ ] string { 0 : [ ] string { "ok" } , 3 : [ ] string { "ok" , "" } , 4 : [ ] string { "ok" } }
mias := map [ int ] [ ] string { 0 : { "ok" } , 3 : { "ok" , "" } , 4 : { "ok" } }
mia := & TestMapInnerArrayStruct {
Errs : mias ,
@ -551,9 +658,9 @@ func TestInterfaceErrValidation(t *testing.T) {
var errStructPtr2Array [ ] [ ] * Inner
errStructPtr2Array = append ( errStructPtr2Array , [ ] * Inner { & Inner { "ok" } , & Inner { "" } , & Inner { "" } } )
errStructPtr2Array = append ( errStructPtr2Array , [ ] * Inner { & Inner { "ok" } , & Inner { "" } , & Inner { "" } } )
errStructPtr2Array = append ( errStructPtr2Array , [ ] * Inner { & Inner { "ok" } , & Inner { "" } , nil } )
errStructPtr2Array = append ( errStructPtr2Array , [ ] * Inner { { "ok" } , { "" } , { "" } } )
errStructPtr2Array = append ( errStructPtr2Array , [ ] * Inner { { "ok" } , { "" } , { "" } } )
errStructPtr2Array = append ( errStructPtr2Array , [ ] * Inner { { "ok" } , { "" } , nil } )
tmsp2 := & TestMultiDimensionalStructsPtr2 {
Errs : errStructPtr2Array ,
@ -660,7 +767,7 @@ func TestMapDiveValidation(t *testing.T) {
Errs map [ int ] Inner ` validate:"gt=0,dive" `
}
mi := map [ int ] Inner { 0 : Inner { "ok" } , 3 : Inner { "" } , 4 : Inner { "ok" } }
mi := map [ int ] Inner { 0 : { "ok" } , 3 : { "" } , 4 : { "ok" } }
ms := & TestMapStruct {
Errs : mi ,
@ -721,7 +828,7 @@ func TestMapDiveValidation(t *testing.T) {
Errs map [ int ] * Inner ` validate:"gt=0,dive,required" `
}
mip := map [ int ] * Inner { 0 : & Inner { "ok" } , 3 : nil , 4 : & Inner { "ok" } }
mip := map [ int ] * Inner { 0 : { "ok" } , 3 : nil , 4 : { "ok" } }
msp := & TestMapStructPtr {
Errs : mip ,
@ -748,7 +855,7 @@ func TestMapDiveValidation(t *testing.T) {
Errs map [ int ] * Inner ` validate:"gt=0,dive,omitempty,required" `
}
mip2 := map [ int ] * Inner { 0 : & Inner { "ok" } , 3 : nil , 4 : & Inner { "ok" } }
mip2 := map [ int ] * Inner { 0 : { "ok" } , 3 : nil , 4 : { "ok" } }
msp2 := & TestMapStructPtr2 {
Errs : mip2 ,
@ -887,8 +994,8 @@ func TestArrayDiveValidation(t *testing.T) {
var errStructArray [ ] [ ] Inner
errStructArray = append ( errStructArray , [ ] Inner { Inner { "ok" } , Inner { "" } , Inner { "" } } )
errStructArray = append ( errStructArray , [ ] Inner { Inner { "ok" } , Inner { "" } , Inner { "" } } )
errStructArray = append ( errStructArray , [ ] Inner { { "ok" } , { "" } , { "" } } )
errStructArray = append ( errStructArray , [ ] Inner { { "ok" } , { "" } , { "" } } )
tms := & TestMultiDimensionalStructs {
Errs : errStructArray ,
@ -925,9 +1032,9 @@ func TestArrayDiveValidation(t *testing.T) {
var errStructPtrArray [ ] [ ] * Inner
errStructPtrArray = append ( errStructPtrArray , [ ] * Inner { & Inner { "ok" } , & Inner { "" } , & Inner { "" } } )
errStructPtrArray = append ( errStructPtrArray , [ ] * Inner { & Inner { "ok" } , & Inner { "" } , & Inner { "" } } )
errStructPtrArray = append ( errStructPtrArray , [ ] * Inner { & Inner { "ok" } , & Inner { "" } , nil } )
errStructPtrArray = append ( errStructPtrArray , [ ] * Inner { { "ok" } , { "" } , { "" } } )
errStructPtrArray = append ( errStructPtrArray , [ ] * Inner { { "ok" } , { "" } , { "" } } )
errStructPtrArray = append ( errStructPtrArray , [ ] * Inner { { "ok" } , { "" } , nil } )
tmsp := & TestMultiDimensionalStructsPtr {
Errs : errStructPtrArray ,
@ -979,9 +1086,9 @@ func TestArrayDiveValidation(t *testing.T) {
var errStructPtr2Array [ ] [ ] * Inner
errStructPtr2Array = append ( errStructPtr2Array , [ ] * Inner { & Inner { "ok" } , & Inner { "" } , & Inner { "" } } )
errStructPtr2Array = append ( errStructPtr2Array , [ ] * Inner { & Inner { "ok" } , & Inner { "" } , & Inner { "" } } )
errStructPtr2Array = append ( errStructPtr2Array , [ ] * Inner { & Inner { "ok" } , & Inner { "" } , nil } )
errStructPtr2Array = append ( errStructPtr2Array , [ ] * Inner { { "ok" } , { "" } , { "" } } )
errStructPtr2Array = append ( errStructPtr2Array , [ ] * Inner { { "ok" } , { "" } , { "" } } )
errStructPtr2Array = append ( errStructPtr2Array , [ ] * Inner { { "ok" } , { "" } , nil } )
tmsp2 := & TestMultiDimensionalStructsPtr2 {
Errs : errStructPtr2Array ,
@ -1025,9 +1132,9 @@ func TestArrayDiveValidation(t *testing.T) {
var errStructPtr3Array [ ] [ ] * Inner
errStructPtr3Array = append ( errStructPtr3Array , [ ] * Inner { & Inner { "ok" } , & Inner { "" } , & Inner { "" } } )
errStructPtr3Array = append ( errStructPtr3Array , [ ] * Inner { & Inner { "ok" } , & Inner { "" } , & Inner { "" } } )
errStructPtr3Array = append ( errStructPtr3Array , [ ] * Inner { & Inner { "ok" } , & Inner { "" } , nil } )
errStructPtr3Array = append ( errStructPtr3Array , [ ] * Inner { { "ok" } , { "" } , { "" } } )
errStructPtr3Array = append ( errStructPtr3Array , [ ] * Inner { { "ok" } , { "" } , { "" } } )
errStructPtr3Array = append ( errStructPtr3Array , [ ] * Inner { { "ok" } , { "" } , nil } )
tmsp3 := & TestMultiDimensionalStructsPtr3 {
Errs : errStructPtr3Array ,
@ -3735,14 +3842,14 @@ func TestStructSliceValidation(t *testing.T) {
Min : [ ] int { 1 , 2 } ,
Max : [ ] int { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 } ,
MinMax : [ ] int { 1 , 2 , 3 , 4 , 5 } ,
OmitEmpty : [ ] int { } ,
OmitEmpty : nil ,
}
err := validate . Struct ( tSuccess )
Equal ( t , err , nil )
tFail := & TestSlice {
Required : [ ] int { } ,
Required : nil ,
Len : [ ] int { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , 1 } ,
Min : [ ] int { } ,
Max : [ ] int { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , 1 } ,
@ -3810,7 +3917,7 @@ func TestPoolObjectMaxSizeValidation(t *testing.T) {
Min : [ ] int { 1 , 2 } ,
Max : [ ] int { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 } ,
MinMax : [ ] int { 1 , 2 , 3 , 4 , 5 } ,
OmitEmpty : [ ] int { } ,
OmitEmpty : nil ,
}
for i := 0 ; i < 2 ; i ++ {