修改包路径
This commit is contained in:
		
							parent
							
								
									6c11643996
								
							
						
					
					
						commit
						3666a2c3fe
					
				|  | @ -1,39 +0,0 @@ | ||||||
| package main |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"fmt" |  | ||||||
| 
 |  | ||||||
| 	"git.ningdatech.com/ningda/gin_valid/go-playground/validator/v10" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| // MyStruct ..
 |  | ||||||
| type MyStruct struct { |  | ||||||
| 	String string `validate:"is-awesome"` |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // use a single instance of Validate, it caches struct info
 |  | ||||||
| var validate *validator.Validate |  | ||||||
| 
 |  | ||||||
| func main() { |  | ||||||
| 
 |  | ||||||
| 	validate = validator.New() |  | ||||||
| 	validate.RegisterValidation("is-awesome", ValidateMyVal) |  | ||||||
| 
 |  | ||||||
| 	s := MyStruct{String: "awesome"} |  | ||||||
| 
 |  | ||||||
| 	err := validate.Struct(s) |  | ||||||
| 	if err != nil { |  | ||||||
| 		fmt.Printf("Err(s):\n%+v\n", err) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	s.String = "not awesome" |  | ||||||
| 	err = validate.Struct(s) |  | ||||||
| 	if err != nil { |  | ||||||
| 		fmt.Printf("Err(s):\n%+v\n", err) |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // ValidateMyVal implements validator.Func
 |  | ||||||
| func ValidateMyVal(fl validator.FieldLevel) bool { |  | ||||||
| 	return fl.Field().String() == "awesome" |  | ||||||
| } |  | ||||||
|  | @ -1,51 +0,0 @@ | ||||||
| package main |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"database/sql" |  | ||||||
| 	"database/sql/driver" |  | ||||||
| 	"fmt" |  | ||||||
| 	"reflect" |  | ||||||
| 
 |  | ||||||
| 	"git.ningdatech.com/ningda/gin_valid/go-playground/validator/v10" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| // DbBackedUser User struct
 |  | ||||||
| type DbBackedUser struct { |  | ||||||
| 	Name sql.NullString `validate:"required"` |  | ||||||
| 	Age  sql.NullInt64  `validate:"required"` |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // use a single instance of Validate, it caches struct info
 |  | ||||||
| var validate *validator.Validate |  | ||||||
| 
 |  | ||||||
| func main() { |  | ||||||
| 
 |  | ||||||
| 	validate = validator.New() |  | ||||||
| 
 |  | ||||||
| 	// register all sql.Null* types to use the ValidateValuer CustomTypeFunc
 |  | ||||||
| 	validate.RegisterCustomTypeFunc(ValidateValuer, sql.NullString{}, sql.NullInt64{}, sql.NullBool{}, sql.NullFloat64{}) |  | ||||||
| 
 |  | ||||||
| 	// build object for validation
 |  | ||||||
| 	x := DbBackedUser{Name: sql.NullString{String: "", Valid: true}, Age: sql.NullInt64{Int64: 0, Valid: false}} |  | ||||||
| 
 |  | ||||||
| 	err := validate.Struct(x) |  | ||||||
| 
 |  | ||||||
| 	if err != nil { |  | ||||||
| 		fmt.Printf("Err(s):\n%+v\n", err) |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // ValidateValuer implements validator.CustomTypeFunc
 |  | ||||||
| func ValidateValuer(field reflect.Value) interface{} { |  | ||||||
| 
 |  | ||||||
| 	if valuer, ok := field.Interface().(driver.Valuer); ok { |  | ||||||
| 
 |  | ||||||
| 		val, err := valuer.Value() |  | ||||||
| 		if err == nil { |  | ||||||
| 			return val |  | ||||||
| 		} |  | ||||||
| 		// handle the error how you want
 |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  | @ -1,39 +0,0 @@ | ||||||
| package main |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"fmt" |  | ||||||
| 
 |  | ||||||
| 	"git.ningdatech.com/ningda/gin_valid/go-playground/validator/v10" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| // Test ...
 |  | ||||||
| type Test struct { |  | ||||||
| 	Array []string          `validate:"required,gt=0,dive,required"` |  | ||||||
| 	Map   map[string]string `validate:"required,gt=0,dive,keys,keymax,endkeys,required,max=1000"` |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // use a single instance of Validate, it caches struct info
 |  | ||||||
| var validate *validator.Validate |  | ||||||
| 
 |  | ||||||
| func main() { |  | ||||||
| 
 |  | ||||||
| 	validate = validator.New() |  | ||||||
| 
 |  | ||||||
| 	// registering alias so we can see the differences between
 |  | ||||||
| 	// map key, value validation errors
 |  | ||||||
| 	validate.RegisterAlias("keymax", "max=10") |  | ||||||
| 
 |  | ||||||
| 	var test Test |  | ||||||
| 
 |  | ||||||
| 	val(test) |  | ||||||
| 
 |  | ||||||
| 	test.Array = []string{""} |  | ||||||
| 	test.Map = map[string]string{"test > than 10": ""} |  | ||||||
| 	val(test) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func val(test Test) { |  | ||||||
| 	fmt.Println("testing") |  | ||||||
| 	err := validate.Struct(test) |  | ||||||
| 	fmt.Println(err) |  | ||||||
| } |  | ||||||
|  | @ -1,10 +0,0 @@ | ||||||
| package main |  | ||||||
| 
 |  | ||||||
| import "github.com/gin-gonic/gin/binding" |  | ||||||
| 
 |  | ||||||
| func main() { |  | ||||||
| 
 |  | ||||||
| 	binding.Validator = new(defaultValidator) |  | ||||||
| 
 |  | ||||||
| 	// regular gin logic
 |  | ||||||
| } |  | ||||||
|  | @ -1,55 +0,0 @@ | ||||||
| package main |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"reflect" |  | ||||||
| 	"sync" |  | ||||||
| 
 |  | ||||||
| 	"git.ningdatech.com/ningda/gin_valid/go-playground/validator/v10" |  | ||||||
| 	"github.com/gin-gonic/gin/binding" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| type defaultValidator struct { |  | ||||||
| 	once     sync.Once |  | ||||||
| 	validate *validator.Validate |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| var _ binding.StructValidator = &defaultValidator{} |  | ||||||
| 
 |  | ||||||
| func (v *defaultValidator) ValidateStruct(obj interface{}) error { |  | ||||||
| 
 |  | ||||||
| 	if kindOfData(obj) == reflect.Struct { |  | ||||||
| 
 |  | ||||||
| 		v.lazyinit() |  | ||||||
| 
 |  | ||||||
| 		if err := v.validate.Struct(obj); err != nil { |  | ||||||
| 			return err |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (v *defaultValidator) Engine() interface{} { |  | ||||||
| 	v.lazyinit() |  | ||||||
| 	return v.validate |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (v *defaultValidator) lazyinit() { |  | ||||||
| 	v.once.Do(func() { |  | ||||||
| 		v.validate = validator.New() |  | ||||||
| 		v.validate.SetTagName("binding") |  | ||||||
| 
 |  | ||||||
| 		// add any custom validations etc. here
 |  | ||||||
| 	}) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func kindOfData(data interface{}) reflect.Kind { |  | ||||||
| 
 |  | ||||||
| 	value := reflect.ValueOf(data) |  | ||||||
| 	valueType := value.Kind() |  | ||||||
| 
 |  | ||||||
| 	if valueType == reflect.Ptr { |  | ||||||
| 		valueType = value.Elem().Kind() |  | ||||||
| 	} |  | ||||||
| 	return valueType |  | ||||||
| } |  | ||||||
|  | @ -1,101 +0,0 @@ | ||||||
| package main |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"fmt" |  | ||||||
| 
 |  | ||||||
| 	"git.ningdatech.com/ningda/gin_valid/go-playground/validator/v10" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| // User contains user information
 |  | ||||||
| type User struct { |  | ||||||
| 	FirstName      string     `validate:"required"` |  | ||||||
| 	LastName       string     `validate:"required"` |  | ||||||
| 	Age            uint8      `validate:"gte=0,lte=130"` |  | ||||||
| 	Email          string     `validate:"required,email"` |  | ||||||
| 	FavouriteColor string     `validate:"iscolor"`                // alias for 'hexcolor|rgb|rgba|hsl|hsla'
 |  | ||||||
| 	Addresses      []*Address `validate:"required,dive,required"` // a person can have a home and cottage...
 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Address houses a users address information
 |  | ||||||
| type Address struct { |  | ||||||
| 	Street string `validate:"required"` |  | ||||||
| 	City   string `validate:"required"` |  | ||||||
| 	Planet string `validate:"required"` |  | ||||||
| 	Phone  string `validate:"required"` |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // use a single instance of Validate, it caches struct info
 |  | ||||||
| var validate *validator.Validate |  | ||||||
| 
 |  | ||||||
| func main() { |  | ||||||
| 
 |  | ||||||
| 	validate = validator.New() |  | ||||||
| 
 |  | ||||||
| 	validateStruct() |  | ||||||
| 	validateVariable() |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func validateStruct() { |  | ||||||
| 
 |  | ||||||
| 	address := &Address{ |  | ||||||
| 		Street: "Eavesdown Docks", |  | ||||||
| 		Planet: "Persphone", |  | ||||||
| 		Phone:  "none", |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	user := &User{ |  | ||||||
| 		FirstName:      "Badger", |  | ||||||
| 		LastName:       "Smith", |  | ||||||
| 		Age:            135, |  | ||||||
| 		Email:          "Badger.Smith@gmail.com", |  | ||||||
| 		FavouriteColor: "#000-", |  | ||||||
| 		Addresses:      []*Address{address}, |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// returns nil or ValidationErrors ( []FieldError )
 |  | ||||||
| 	err := validate.Struct(user) |  | ||||||
| 	if err != nil { |  | ||||||
| 
 |  | ||||||
| 		// this check is only needed when your code could produce
 |  | ||||||
| 		// an invalid value for validation such as interface with nil
 |  | ||||||
| 		// value most including myself do not usually have code like this.
 |  | ||||||
| 		if _, ok := err.(*validator.InvalidValidationError); ok { |  | ||||||
| 			fmt.Println(err) |  | ||||||
| 			return |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		for _, err := range err.(validator.ValidationErrors) { |  | ||||||
| 
 |  | ||||||
| 			fmt.Println(err.Namespace()) |  | ||||||
| 			fmt.Println(err.Field()) |  | ||||||
| 			fmt.Println(err.StructNamespace()) |  | ||||||
| 			fmt.Println(err.StructField()) |  | ||||||
| 			fmt.Println(err.Tag()) |  | ||||||
| 			fmt.Println(err.ActualTag()) |  | ||||||
| 			fmt.Println(err.Kind()) |  | ||||||
| 			fmt.Println(err.Type()) |  | ||||||
| 			fmt.Println(err.Value()) |  | ||||||
| 			fmt.Println(err.Param()) |  | ||||||
| 			fmt.Println() |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		// from here you can create your own error messages in whatever language you wish
 |  | ||||||
| 		return |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// save user to database
 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func validateVariable() { |  | ||||||
| 
 |  | ||||||
| 	myEmail := "joeybloggs.gmail.com" |  | ||||||
| 
 |  | ||||||
| 	errs := validate.Var(myEmail, "required,email") |  | ||||||
| 
 |  | ||||||
| 	if errs != nil { |  | ||||||
| 		fmt.Println(errs) // output: Key: "" Error:Field validation for "" failed on the "email" tag
 |  | ||||||
| 		return |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// email ok, move on
 |  | ||||||
| } |  | ||||||
|  | @ -1,120 +0,0 @@ | ||||||
| package main |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"fmt" |  | ||||||
| 	"reflect" |  | ||||||
| 	"strings" |  | ||||||
| 
 |  | ||||||
| 	"git.ningdatech.com/ningda/gin_valid/go-playground/validator/v10" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| // User contains user information
 |  | ||||||
| type User struct { |  | ||||||
| 	FirstName      string     `json:"fname"` |  | ||||||
| 	LastName       string     `json:"lname"` |  | ||||||
| 	Age            uint8      `validate:"gte=0,lte=130"` |  | ||||||
| 	Email          string     `json:"e-mail" validate:"required,email"` |  | ||||||
| 	FavouriteColor string     `validate:"hexcolor|rgb|rgba"` |  | ||||||
| 	Addresses      []*Address `validate:"required,dive,required"` // a person can have a home and cottage...
 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Address houses a users address information
 |  | ||||||
| type Address struct { |  | ||||||
| 	Street string `validate:"required"` |  | ||||||
| 	City   string `validate:"required"` |  | ||||||
| 	Planet string `validate:"required"` |  | ||||||
| 	Phone  string `validate:"required"` |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // use a single instance of Validate, it caches struct info
 |  | ||||||
| var validate *validator.Validate |  | ||||||
| 
 |  | ||||||
| func main() { |  | ||||||
| 
 |  | ||||||
| 	validate = validator.New() |  | ||||||
| 
 |  | ||||||
| 	// register function to get tag name from json tags.
 |  | ||||||
| 	validate.RegisterTagNameFunc(func(fld reflect.StructField) string { |  | ||||||
| 		name := strings.SplitN(fld.Tag.Get("json"), ",", 2)[0] |  | ||||||
| 		if name == "-" { |  | ||||||
| 			return "" |  | ||||||
| 		} |  | ||||||
| 		return name |  | ||||||
| 	}) |  | ||||||
| 
 |  | ||||||
| 	// register validation for 'User'
 |  | ||||||
| 	// NOTE: only have to register a non-pointer type for 'User', validator
 |  | ||||||
| 	// interanlly dereferences during it's type checks.
 |  | ||||||
| 	validate.RegisterStructValidation(UserStructLevelValidation, User{}) |  | ||||||
| 
 |  | ||||||
| 	// build 'User' info, normally posted data etc...
 |  | ||||||
| 	address := &Address{ |  | ||||||
| 		Street: "Eavesdown Docks", |  | ||||||
| 		Planet: "Persphone", |  | ||||||
| 		Phone:  "none", |  | ||||||
| 		City:   "Unknown", |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	user := &User{ |  | ||||||
| 		FirstName:      "", |  | ||||||
| 		LastName:       "", |  | ||||||
| 		Age:            45, |  | ||||||
| 		Email:          "Badger.Smith@gmail", |  | ||||||
| 		FavouriteColor: "#000", |  | ||||||
| 		Addresses:      []*Address{address}, |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// returns InvalidValidationError for bad validation input, nil or ValidationErrors ( []FieldError )
 |  | ||||||
| 	err := validate.Struct(user) |  | ||||||
| 	if err != nil { |  | ||||||
| 
 |  | ||||||
| 		// this check is only needed when your code could produce
 |  | ||||||
| 		// an invalid value for validation such as interface with nil
 |  | ||||||
| 		// value most including myself do not usually have code like this.
 |  | ||||||
| 		if _, ok := err.(*validator.InvalidValidationError); ok { |  | ||||||
| 			fmt.Println(err) |  | ||||||
| 			return |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		for _, err := range err.(validator.ValidationErrors) { |  | ||||||
| 
 |  | ||||||
| 			fmt.Println(err.Namespace()) // can differ when a custom TagNameFunc is registered or
 |  | ||||||
| 			fmt.Println(err.Field())     // by passing alt name to ReportError like below
 |  | ||||||
| 			fmt.Println(err.StructNamespace()) |  | ||||||
| 			fmt.Println(err.StructField()) |  | ||||||
| 			fmt.Println(err.Tag()) |  | ||||||
| 			fmt.Println(err.ActualTag()) |  | ||||||
| 			fmt.Println(err.Kind()) |  | ||||||
| 			fmt.Println(err.Type()) |  | ||||||
| 			fmt.Println(err.Value()) |  | ||||||
| 			fmt.Println(err.Param()) |  | ||||||
| 			fmt.Println() |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		// from here you can create your own error messages in whatever language you wish
 |  | ||||||
| 		return |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// save user to database
 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // UserStructLevelValidation contains custom struct level validations that don't always
 |  | ||||||
| // make sense at the field validation level. For Example this function validates that either
 |  | ||||||
| // FirstName or LastName exist; could have done that with a custom field validation but then
 |  | ||||||
| // would have had to add it to both fields duplicating the logic + overhead, this way it's
 |  | ||||||
| // only validated once.
 |  | ||||||
| //
 |  | ||||||
| // NOTE: you may ask why wouldn't I just do this outside of validator, because doing this way
 |  | ||||||
| // hooks right into validator and you can combine with validation tags and still have a
 |  | ||||||
| // common error output format.
 |  | ||||||
| func UserStructLevelValidation(sl validator.StructLevel) { |  | ||||||
| 
 |  | ||||||
| 	user := sl.Current().Interface().(User) |  | ||||||
| 
 |  | ||||||
| 	if len(user.FirstName) == 0 && len(user.LastName) == 0 { |  | ||||||
| 		sl.ReportError(user.FirstName, "fname", "FirstName", "fnameorlname", "") |  | ||||||
| 		sl.ReportError(user.LastName, "lname", "LastName", "fnameorlname", "") |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// plus can do more, even with different tag than "fnameorlname"
 |  | ||||||
| } |  | ||||||
|  | @ -1,129 +0,0 @@ | ||||||
| package main |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"fmt" |  | ||||||
| 
 |  | ||||||
| 	"git.ningdatech.com/ningda/gin_valid/go-playground/locales/en" |  | ||||||
| 	ut "git.ningdatech.com/ningda/gin_valid/go-playground/universal-translator" |  | ||||||
| 	"git.ningdatech.com/ningda/gin_valid/go-playground/validator/v10" |  | ||||||
| 	en_translations "git.ningdatech.com/ningda/gin_valid/go-playground/validator/v10/translations/en" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| // User contains user information
 |  | ||||||
| type User struct { |  | ||||||
| 	FirstName      string     `validate:"required"` |  | ||||||
| 	LastName       string     `validate:"required"` |  | ||||||
| 	Age            uint8      `validate:"gte=0,lte=130"` |  | ||||||
| 	Email          string     `validate:"required,email"` |  | ||||||
| 	FavouriteColor string     `validate:"iscolor"`                // alias for 'hexcolor|rgb|rgba|hsl|hsla'
 |  | ||||||
| 	Addresses      []*Address `validate:"required,dive,required"` // a person can have a home and cottage...
 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Address houses a users address information
 |  | ||||||
| type Address struct { |  | ||||||
| 	Street string `validate:"required"` |  | ||||||
| 	City   string `validate:"required"` |  | ||||||
| 	Planet string `validate:"required"` |  | ||||||
| 	Phone  string `validate:"required"` |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // use a single instance , it caches struct info
 |  | ||||||
| var ( |  | ||||||
| 	uni      *ut.UniversalTranslator |  | ||||||
| 	validate *validator.Validate |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func main() { |  | ||||||
| 
 |  | ||||||
| 	// NOTE: ommitting allot of error checking for brevity
 |  | ||||||
| 
 |  | ||||||
| 	en := en.New() |  | ||||||
| 	uni = ut.New(en, en) |  | ||||||
| 
 |  | ||||||
| 	// this is usually know or extracted from http 'Accept-Language' header
 |  | ||||||
| 	// also see uni.FindTranslator(...)
 |  | ||||||
| 	trans, _ := uni.GetTranslator("en") |  | ||||||
| 
 |  | ||||||
| 	validate = validator.New() |  | ||||||
| 	en_translations.RegisterDefaultTranslations(validate, trans) |  | ||||||
| 
 |  | ||||||
| 	translateAll(trans) |  | ||||||
| 	translateIndividual(trans) |  | ||||||
| 	translateOverride(trans) // yep you can specify your own in whatever locale you want!
 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func translateAll(trans ut.Translator) { |  | ||||||
| 
 |  | ||||||
| 	type User struct { |  | ||||||
| 		Username string `validate:"required"` |  | ||||||
| 		Tagline  string `validate:"required,lt=10"` |  | ||||||
| 		Tagline2 string `validate:"required,gt=1"` |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	user := User{ |  | ||||||
| 		Username: "Joeybloggs", |  | ||||||
| 		Tagline:  "This tagline is way too long.", |  | ||||||
| 		Tagline2: "1", |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	err := validate.Struct(user) |  | ||||||
| 	if err != nil { |  | ||||||
| 
 |  | ||||||
| 		// translate all error at once
 |  | ||||||
| 		errs := err.(validator.ValidationErrors) |  | ||||||
| 
 |  | ||||||
| 		// returns a map with key = namespace & value = translated error
 |  | ||||||
| 		// NOTICE: 2 errors are returned and you'll see something surprising
 |  | ||||||
| 		// translations are i18n aware!!!!
 |  | ||||||
| 		// eg. '10 characters' vs '1 character'
 |  | ||||||
| 		fmt.Println(errs.Translate(trans)) |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func translateIndividual(trans ut.Translator) { |  | ||||||
| 
 |  | ||||||
| 	type User struct { |  | ||||||
| 		Username string `validate:"required"` |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	var user User |  | ||||||
| 
 |  | ||||||
| 	err := validate.Struct(user) |  | ||||||
| 	if err != nil { |  | ||||||
| 
 |  | ||||||
| 		errs := err.(validator.ValidationErrors) |  | ||||||
| 
 |  | ||||||
| 		for _, e := range errs { |  | ||||||
| 			// can translate each error one at a time.
 |  | ||||||
| 			fmt.Println(e.Translate(trans)) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func translateOverride(trans ut.Translator) { |  | ||||||
| 
 |  | ||||||
| 	validate.RegisterTranslation("required", trans, func(ut ut.Translator) error { |  | ||||||
| 		return ut.Add("required", "{0} must have a value!", true) // see universal-translator for details
 |  | ||||||
| 	}, func(ut ut.Translator, fe validator.FieldError) string { |  | ||||||
| 		t, _ := ut.T("required", fe.Field()) |  | ||||||
| 
 |  | ||||||
| 		return t |  | ||||||
| 	}) |  | ||||||
| 
 |  | ||||||
| 	type User struct { |  | ||||||
| 		Username string `validate:"required"` |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	var user User |  | ||||||
| 
 |  | ||||||
| 	err := validate.Struct(user) |  | ||||||
| 	if err != nil { |  | ||||||
| 
 |  | ||||||
| 		errs := err.(validator.ValidationErrors) |  | ||||||
| 
 |  | ||||||
| 		for _, e := range errs { |  | ||||||
| 			// can translate each error one at a time.
 |  | ||||||
| 			fmt.Println(e.Translate(trans)) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  | @ -1,676 +0,0 @@ | ||||||
| package en |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"testing" |  | ||||||
| 	"time" |  | ||||||
| 
 |  | ||||||
| 	. "git.ningdatech.com/ningda/gin_valid/go-playground/assert/v2" |  | ||||||
| 	english "git.ningdatech.com/ningda/gin_valid/go-playground/locales/en" |  | ||||||
| 	ut "git.ningdatech.com/ningda/gin_valid/go-playground/universal-translator" |  | ||||||
| 	"git.ningdatech.com/ningda/gin_valid/go-playground/validator/v10" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func TestTranslations(t *testing.T) { |  | ||||||
| 
 |  | ||||||
| 	eng := english.New() |  | ||||||
| 	uni := ut.New(eng, eng) |  | ||||||
| 	trans, _ := uni.GetTranslator("en") |  | ||||||
| 
 |  | ||||||
| 	validate := validator.New() |  | ||||||
| 
 |  | ||||||
| 	err := RegisterDefaultTranslations(validate, trans) |  | ||||||
| 	Equal(t, err, nil) |  | ||||||
| 
 |  | ||||||
| 	type Inner struct { |  | ||||||
| 		EqCSFieldString  string |  | ||||||
| 		NeCSFieldString  string |  | ||||||
| 		GtCSFieldString  string |  | ||||||
| 		GteCSFieldString string |  | ||||||
| 		LtCSFieldString  string |  | ||||||
| 		LteCSFieldString string |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	type Test struct { |  | ||||||
| 		Inner             Inner |  | ||||||
| 		RequiredString    string            `validate:"required"` |  | ||||||
| 		RequiredNumber    int               `validate:"required"` |  | ||||||
| 		RequiredMultiple  []string          `validate:"required"` |  | ||||||
| 		LenString         string            `validate:"len=1"` |  | ||||||
| 		LenNumber         float64           `validate:"len=1113.00"` |  | ||||||
| 		LenMultiple       []string          `validate:"len=7"` |  | ||||||
| 		MinString         string            `validate:"min=1"` |  | ||||||
| 		MinNumber         float64           `validate:"min=1113.00"` |  | ||||||
| 		MinMultiple       []string          `validate:"min=7"` |  | ||||||
| 		MaxString         string            `validate:"max=3"` |  | ||||||
| 		MaxNumber         float64           `validate:"max=1113.00"` |  | ||||||
| 		MaxMultiple       []string          `validate:"max=7"` |  | ||||||
| 		EqString          string            `validate:"eq=3"` |  | ||||||
| 		EqNumber          float64           `validate:"eq=2.33"` |  | ||||||
| 		EqMultiple        []string          `validate:"eq=7"` |  | ||||||
| 		NeString          string            `validate:"ne="` |  | ||||||
| 		NeNumber          float64           `validate:"ne=0.00"` |  | ||||||
| 		NeMultiple        []string          `validate:"ne=0"` |  | ||||||
| 		LtString          string            `validate:"lt=3"` |  | ||||||
| 		LtNumber          float64           `validate:"lt=5.56"` |  | ||||||
| 		LtMultiple        []string          `validate:"lt=2"` |  | ||||||
| 		LtTime            time.Time         `validate:"lt"` |  | ||||||
| 		LteString         string            `validate:"lte=3"` |  | ||||||
| 		LteNumber         float64           `validate:"lte=5.56"` |  | ||||||
| 		LteMultiple       []string          `validate:"lte=2"` |  | ||||||
| 		LteTime           time.Time         `validate:"lte"` |  | ||||||
| 		GtString          string            `validate:"gt=3"` |  | ||||||
| 		GtNumber          float64           `validate:"gt=5.56"` |  | ||||||
| 		GtMultiple        []string          `validate:"gt=2"` |  | ||||||
| 		GtTime            time.Time         `validate:"gt"` |  | ||||||
| 		GteString         string            `validate:"gte=3"` |  | ||||||
| 		GteNumber         float64           `validate:"gte=5.56"` |  | ||||||
| 		GteMultiple       []string          `validate:"gte=2"` |  | ||||||
| 		GteTime           time.Time         `validate:"gte"` |  | ||||||
| 		EqFieldString     string            `validate:"eqfield=MaxString"` |  | ||||||
| 		EqCSFieldString   string            `validate:"eqcsfield=Inner.EqCSFieldString"` |  | ||||||
| 		NeCSFieldString   string            `validate:"necsfield=Inner.NeCSFieldString"` |  | ||||||
| 		GtCSFieldString   string            `validate:"gtcsfield=Inner.GtCSFieldString"` |  | ||||||
| 		GteCSFieldString  string            `validate:"gtecsfield=Inner.GteCSFieldString"` |  | ||||||
| 		LtCSFieldString   string            `validate:"ltcsfield=Inner.LtCSFieldString"` |  | ||||||
| 		LteCSFieldString  string            `validate:"ltecsfield=Inner.LteCSFieldString"` |  | ||||||
| 		NeFieldString     string            `validate:"nefield=EqFieldString"` |  | ||||||
| 		GtFieldString     string            `validate:"gtfield=MaxString"` |  | ||||||
| 		GteFieldString    string            `validate:"gtefield=MaxString"` |  | ||||||
| 		LtFieldString     string            `validate:"ltfield=MaxString"` |  | ||||||
| 		LteFieldString    string            `validate:"ltefield=MaxString"` |  | ||||||
| 		AlphaString       string            `validate:"alpha"` |  | ||||||
| 		AlphanumString    string            `validate:"alphanum"` |  | ||||||
| 		NumericString     string            `validate:"numeric"` |  | ||||||
| 		NumberString      string            `validate:"number"` |  | ||||||
| 		HexadecimalString string            `validate:"hexadecimal"` |  | ||||||
| 		HexColorString    string            `validate:"hexcolor"` |  | ||||||
| 		RGBColorString    string            `validate:"rgb"` |  | ||||||
| 		RGBAColorString   string            `validate:"rgba"` |  | ||||||
| 		HSLColorString    string            `validate:"hsl"` |  | ||||||
| 		HSLAColorString   string            `validate:"hsla"` |  | ||||||
| 		Email             string            `validate:"email"` |  | ||||||
| 		URL               string            `validate:"url"` |  | ||||||
| 		URI               string            `validate:"uri"` |  | ||||||
| 		Base64            string            `validate:"base64"` |  | ||||||
| 		Contains          string            `validate:"contains=purpose"` |  | ||||||
| 		ContainsAny       string            `validate:"containsany=!@#$"` |  | ||||||
| 		Excludes          string            `validate:"excludes=text"` |  | ||||||
| 		ExcludesAll       string            `validate:"excludesall=!@#$"` |  | ||||||
| 		ExcludesRune      string            `validate:"excludesrune=☻"` |  | ||||||
| 		ISBN              string            `validate:"isbn"` |  | ||||||
| 		ISBN10            string            `validate:"isbn10"` |  | ||||||
| 		ISBN13            string            `validate:"isbn13"` |  | ||||||
| 		UUID              string            `validate:"uuid"` |  | ||||||
| 		UUID3             string            `validate:"uuid3"` |  | ||||||
| 		UUID4             string            `validate:"uuid4"` |  | ||||||
| 		UUID5             string            `validate:"uuid5"` |  | ||||||
| 		ASCII             string            `validate:"ascii"` |  | ||||||
| 		PrintableASCII    string            `validate:"printascii"` |  | ||||||
| 		MultiByte         string            `validate:"multibyte"` |  | ||||||
| 		DataURI           string            `validate:"datauri"` |  | ||||||
| 		Latitude          string            `validate:"latitude"` |  | ||||||
| 		Longitude         string            `validate:"longitude"` |  | ||||||
| 		SSN               string            `validate:"ssn"` |  | ||||||
| 		IP                string            `validate:"ip"` |  | ||||||
| 		IPv4              string            `validate:"ipv4"` |  | ||||||
| 		IPv6              string            `validate:"ipv6"` |  | ||||||
| 		CIDR              string            `validate:"cidr"` |  | ||||||
| 		CIDRv4            string            `validate:"cidrv4"` |  | ||||||
| 		CIDRv6            string            `validate:"cidrv6"` |  | ||||||
| 		TCPAddr           string            `validate:"tcp_addr"` |  | ||||||
| 		TCPAddrv4         string            `validate:"tcp4_addr"` |  | ||||||
| 		TCPAddrv6         string            `validate:"tcp6_addr"` |  | ||||||
| 		UDPAddr           string            `validate:"udp_addr"` |  | ||||||
| 		UDPAddrv4         string            `validate:"udp4_addr"` |  | ||||||
| 		UDPAddrv6         string            `validate:"udp6_addr"` |  | ||||||
| 		IPAddr            string            `validate:"ip_addr"` |  | ||||||
| 		IPAddrv4          string            `validate:"ip4_addr"` |  | ||||||
| 		IPAddrv6          string            `validate:"ip6_addr"` |  | ||||||
| 		UinxAddr          string            `validate:"unix_addr"` // can't fail from within Go's net package currently, but maybe in the future
 |  | ||||||
| 		MAC               string            `validate:"mac"` |  | ||||||
| 		IsColor           string            `validate:"iscolor"` |  | ||||||
| 		StrPtrMinLen      *string           `validate:"min=10"` |  | ||||||
| 		StrPtrMaxLen      *string           `validate:"max=1"` |  | ||||||
| 		StrPtrLen         *string           `validate:"len=2"` |  | ||||||
| 		StrPtrLt          *string           `validate:"lt=1"` |  | ||||||
| 		StrPtrLte         *string           `validate:"lte=1"` |  | ||||||
| 		StrPtrGt          *string           `validate:"gt=10"` |  | ||||||
| 		StrPtrGte         *string           `validate:"gte=10"` |  | ||||||
| 		OneOfString       string            `validate:"oneof=red green"` |  | ||||||
| 		OneOfInt          int               `validate:"oneof=5 63"` |  | ||||||
| 		UniqueSlice       []string          `validate:"unique"` |  | ||||||
| 		UniqueArray       [3]string         `validate:"unique"` |  | ||||||
| 		UniqueMap         map[string]string `validate:"unique"` |  | ||||||
| 		JSONString        string            `validate:"json"` |  | ||||||
| 		LowercaseString   string            `validate:"lowercase"` |  | ||||||
| 		UppercaseString   string            `validate:"uppercase"` |  | ||||||
| 		Datetime          string            `validate:"datetime=2006-01-02"` |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	var test Test |  | ||||||
| 
 |  | ||||||
| 	test.Inner.EqCSFieldString = "1234" |  | ||||||
| 	test.Inner.GtCSFieldString = "1234" |  | ||||||
| 	test.Inner.GteCSFieldString = "1234" |  | ||||||
| 
 |  | ||||||
| 	test.MaxString = "1234" |  | ||||||
| 	test.MaxNumber = 2000 |  | ||||||
| 	test.MaxMultiple = make([]string, 9) |  | ||||||
| 
 |  | ||||||
| 	test.LtString = "1234" |  | ||||||
| 	test.LtNumber = 6 |  | ||||||
| 	test.LtMultiple = make([]string, 3) |  | ||||||
| 	test.LtTime = time.Now().Add(time.Hour * 24) |  | ||||||
| 
 |  | ||||||
| 	test.LteString = "1234" |  | ||||||
| 	test.LteNumber = 6 |  | ||||||
| 	test.LteMultiple = make([]string, 3) |  | ||||||
| 	test.LteTime = time.Now().Add(time.Hour * 24) |  | ||||||
| 
 |  | ||||||
| 	test.LtFieldString = "12345" |  | ||||||
| 	test.LteFieldString = "12345" |  | ||||||
| 
 |  | ||||||
| 	test.LtCSFieldString = "1234" |  | ||||||
| 	test.LteCSFieldString = "1234" |  | ||||||
| 
 |  | ||||||
| 	test.AlphaString = "abc3" |  | ||||||
| 	test.AlphanumString = "abc3!" |  | ||||||
| 	test.NumericString = "12E.00" |  | ||||||
| 	test.NumberString = "12E" |  | ||||||
| 
 |  | ||||||
| 	test.Excludes = "this is some test text" |  | ||||||
| 	test.ExcludesAll = "This is Great!" |  | ||||||
| 	test.ExcludesRune = "Love it ☻" |  | ||||||
| 
 |  | ||||||
| 	test.ASCII = "カタカナ" |  | ||||||
| 	test.PrintableASCII = "カタカナ" |  | ||||||
| 
 |  | ||||||
| 	test.MultiByte = "1234feerf" |  | ||||||
| 
 |  | ||||||
| 	test.LowercaseString = "ABCDEFG" |  | ||||||
| 	test.UppercaseString = "abcdefg" |  | ||||||
| 
 |  | ||||||
| 	s := "toolong" |  | ||||||
| 	test.StrPtrMaxLen = &s |  | ||||||
| 	test.StrPtrLen = &s |  | ||||||
| 
 |  | ||||||
| 	test.UniqueSlice = []string{"1234", "1234"} |  | ||||||
| 	test.UniqueMap = map[string]string{"key1": "1234", "key2": "1234"} |  | ||||||
| 	test.Datetime = "2008-Feb-01" |  | ||||||
| 
 |  | ||||||
| 	err = validate.Struct(test) |  | ||||||
| 	NotEqual(t, err, nil) |  | ||||||
| 
 |  | ||||||
| 	errs, ok := err.(validator.ValidationErrors) |  | ||||||
| 	Equal(t, ok, true) |  | ||||||
| 
 |  | ||||||
| 	tests := []struct { |  | ||||||
| 		ns       string |  | ||||||
| 		expected string |  | ||||||
| 	}{ |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IsColor", |  | ||||||
| 			expected: "IsColor must be a valid color", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MAC", |  | ||||||
| 			expected: "MAC must contain a valid MAC address", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddr", |  | ||||||
| 			expected: "IPAddr must be a resolvable IP address", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddrv4", |  | ||||||
| 			expected: "IPAddrv4 must be a resolvable IPv4 address", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddrv6", |  | ||||||
| 			expected: "IPAddrv6 must be a resolvable IPv6 address", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddr", |  | ||||||
| 			expected: "UDPAddr must be a valid UDP address", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddrv4", |  | ||||||
| 			expected: "UDPAddrv4 must be a valid IPv4 UDP address", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddrv6", |  | ||||||
| 			expected: "UDPAddrv6 must be a valid IPv6 UDP address", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddr", |  | ||||||
| 			expected: "TCPAddr must be a valid TCP address", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddrv4", |  | ||||||
| 			expected: "TCPAddrv4 must be a valid IPv4 TCP address", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddrv6", |  | ||||||
| 			expected: "TCPAddrv6 must be a valid IPv6 TCP address", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDR", |  | ||||||
| 			expected: "CIDR must contain a valid CIDR notation", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDRv4", |  | ||||||
| 			expected: "CIDRv4 must contain a valid CIDR notation for an IPv4 address", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDRv6", |  | ||||||
| 			expected: "CIDRv6 must contain a valid CIDR notation for an IPv6 address", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.SSN", |  | ||||||
| 			expected: "SSN must be a valid SSN number", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IP", |  | ||||||
| 			expected: "IP must be a valid IP address", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPv4", |  | ||||||
| 			expected: "IPv4 must be a valid IPv4 address", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPv6", |  | ||||||
| 			expected: "IPv6 must be a valid IPv6 address", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.DataURI", |  | ||||||
| 			expected: "DataURI must contain a valid Data URI", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Latitude", |  | ||||||
| 			expected: "Latitude must contain valid latitude coordinates", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Longitude", |  | ||||||
| 			expected: "Longitude must contain a valid longitude coordinates", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MultiByte", |  | ||||||
| 			expected: "MultiByte must contain multibyte characters", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ASCII", |  | ||||||
| 			expected: "ASCII must contain only ascii characters", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.PrintableASCII", |  | ||||||
| 			expected: "PrintableASCII must contain only printable ascii characters", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID", |  | ||||||
| 			expected: "UUID must be a valid UUID", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID3", |  | ||||||
| 			expected: "UUID3 must be a valid version 3 UUID", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID4", |  | ||||||
| 			expected: "UUID4 must be a valid version 4 UUID", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID5", |  | ||||||
| 			expected: "UUID5 must be a valid version 5 UUID", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN", |  | ||||||
| 			expected: "ISBN must be a valid ISBN number", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN10", |  | ||||||
| 			expected: "ISBN10 must be a valid ISBN-10 number", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN13", |  | ||||||
| 			expected: "ISBN13 must be a valid ISBN-13 number", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Excludes", |  | ||||||
| 			expected: "Excludes cannot contain the text 'text'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ExcludesAll", |  | ||||||
| 			expected: "ExcludesAll cannot contain any of the following characters '!@#$'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ExcludesRune", |  | ||||||
| 			expected: "ExcludesRune cannot contain the following '☻'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ContainsAny", |  | ||||||
| 			expected: "ContainsAny must contain at least one of the following characters '!@#$'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Contains", |  | ||||||
| 			expected: "Contains must contain the text 'purpose'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Base64", |  | ||||||
| 			expected: "Base64 must be a valid Base64 string", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Email", |  | ||||||
| 			expected: "Email must be a valid email address", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.URL", |  | ||||||
| 			expected: "URL must be a valid URL", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.URI", |  | ||||||
| 			expected: "URI must be a valid URI", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RGBColorString", |  | ||||||
| 			expected: "RGBColorString must be a valid RGB color", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RGBAColorString", |  | ||||||
| 			expected: "RGBAColorString must be a valid RGBA color", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HSLColorString", |  | ||||||
| 			expected: "HSLColorString must be a valid HSL color", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HSLAColorString", |  | ||||||
| 			expected: "HSLAColorString must be a valid HSLA color", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HexadecimalString", |  | ||||||
| 			expected: "HexadecimalString must be a valid hexadecimal", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HexColorString", |  | ||||||
| 			expected: "HexColorString must be a valid HEX color", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NumberString", |  | ||||||
| 			expected: "NumberString must be a valid number", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NumericString", |  | ||||||
| 			expected: "NumericString must be a valid numeric value", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.AlphanumString", |  | ||||||
| 			expected: "AlphanumString can only contain alphanumeric characters", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.AlphaString", |  | ||||||
| 			expected: "AlphaString can only contain alphabetic characters", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtFieldString", |  | ||||||
| 			expected: "LtFieldString must be less than MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteFieldString", |  | ||||||
| 			expected: "LteFieldString must be less than or equal to MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtFieldString", |  | ||||||
| 			expected: "GtFieldString must be greater than MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteFieldString", |  | ||||||
| 			expected: "GteFieldString must be greater than or equal to MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeFieldString", |  | ||||||
| 			expected: "NeFieldString cannot be equal to EqFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtCSFieldString", |  | ||||||
| 			expected: "LtCSFieldString must be less than Inner.LtCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteCSFieldString", |  | ||||||
| 			expected: "LteCSFieldString must be less than or equal to Inner.LteCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtCSFieldString", |  | ||||||
| 			expected: "GtCSFieldString must be greater than Inner.GtCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteCSFieldString", |  | ||||||
| 			expected: "GteCSFieldString must be greater than or equal to Inner.GteCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeCSFieldString", |  | ||||||
| 			expected: "NeCSFieldString cannot be equal to Inner.NeCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqCSFieldString", |  | ||||||
| 			expected: "EqCSFieldString must be equal to Inner.EqCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqFieldString", |  | ||||||
| 			expected: "EqFieldString must be equal to MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteString", |  | ||||||
| 			expected: "GteString must be at least 3 characters in length", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteNumber", |  | ||||||
| 			expected: "GteNumber must be 5.56 or greater", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteMultiple", |  | ||||||
| 			expected: "GteMultiple must contain at least 2 items", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteTime", |  | ||||||
| 			expected: "GteTime must be greater than or equal to the current Date & Time", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtString", |  | ||||||
| 			expected: "GtString must be greater than 3 characters in length", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtNumber", |  | ||||||
| 			expected: "GtNumber must be greater than 5.56", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtMultiple", |  | ||||||
| 			expected: "GtMultiple must contain more than 2 items", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtTime", |  | ||||||
| 			expected: "GtTime must be greater than the current Date & Time", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteString", |  | ||||||
| 			expected: "LteString must be at maximum 3 characters in length", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteNumber", |  | ||||||
| 			expected: "LteNumber must be 5.56 or less", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteMultiple", |  | ||||||
| 			expected: "LteMultiple must contain at maximum 2 items", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteTime", |  | ||||||
| 			expected: "LteTime must be less than or equal to the current Date & Time", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtString", |  | ||||||
| 			expected: "LtString must be less than 3 characters in length", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtNumber", |  | ||||||
| 			expected: "LtNumber must be less than 5.56", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtMultiple", |  | ||||||
| 			expected: "LtMultiple must contain less than 2 items", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtTime", |  | ||||||
| 			expected: "LtTime must be less than the current Date & Time", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeString", |  | ||||||
| 			expected: "NeString should not be equal to ", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeNumber", |  | ||||||
| 			expected: "NeNumber should not be equal to 0.00", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeMultiple", |  | ||||||
| 			expected: "NeMultiple should not be equal to 0", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqString", |  | ||||||
| 			expected: "EqString is not equal to 3", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqNumber", |  | ||||||
| 			expected: "EqNumber is not equal to 2.33", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqMultiple", |  | ||||||
| 			expected: "EqMultiple is not equal to 7", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxString", |  | ||||||
| 			expected: "MaxString must be a maximum of 3 characters in length", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxNumber", |  | ||||||
| 			expected: "MaxNumber must be 1,113.00 or less", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxMultiple", |  | ||||||
| 			expected: "MaxMultiple must contain at maximum 7 items", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinString", |  | ||||||
| 			expected: "MinString must be at least 1 character in length", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinNumber", |  | ||||||
| 			expected: "MinNumber must be 1,113.00 or greater", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinMultiple", |  | ||||||
| 			expected: "MinMultiple must contain at least 7 items", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenString", |  | ||||||
| 			expected: "LenString must be 1 character in length", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenNumber", |  | ||||||
| 			expected: "LenNumber must be equal to 1,113.00", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenMultiple", |  | ||||||
| 			expected: "LenMultiple must contain 7 items", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredString", |  | ||||||
| 			expected: "RequiredString is a required field", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredNumber", |  | ||||||
| 			expected: "RequiredNumber is a required field", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredMultiple", |  | ||||||
| 			expected: "RequiredMultiple is a required field", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrMinLen", |  | ||||||
| 			expected: "StrPtrMinLen must be at least 10 characters in length", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrMaxLen", |  | ||||||
| 			expected: "StrPtrMaxLen must be a maximum of 1 character in length", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLen", |  | ||||||
| 			expected: "StrPtrLen must be 2 characters in length", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLt", |  | ||||||
| 			expected: "StrPtrLt must be less than 1 character in length", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLte", |  | ||||||
| 			expected: "StrPtrLte must be at maximum 1 character in length", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrGt", |  | ||||||
| 			expected: "StrPtrGt must be greater than 10 characters in length", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrGte", |  | ||||||
| 			expected: "StrPtrGte must be at least 10 characters in length", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.OneOfString", |  | ||||||
| 			expected: "OneOfString must be one of [red green]", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.OneOfInt", |  | ||||||
| 			expected: "OneOfInt must be one of [5 63]", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UniqueSlice", |  | ||||||
| 			expected: "UniqueSlice must contain unique values", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UniqueArray", |  | ||||||
| 			expected: "UniqueArray must contain unique values", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UniqueMap", |  | ||||||
| 			expected: "UniqueMap must contain unique values", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.JSONString", |  | ||||||
| 			expected: "JSONString must be a valid json string", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LowercaseString", |  | ||||||
| 			expected: "LowercaseString must be a lowercase string", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UppercaseString", |  | ||||||
| 			expected: "UppercaseString must be an uppercase string", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Datetime", |  | ||||||
| 			expected: "Datetime does not match the 2006-01-02 format", |  | ||||||
| 		}, |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	for _, tt := range tests { |  | ||||||
| 
 |  | ||||||
| 		var fe validator.FieldError |  | ||||||
| 
 |  | ||||||
| 		for _, e := range errs { |  | ||||||
| 			if tt.ns == e.Namespace() { |  | ||||||
| 				fe = e |  | ||||||
| 				break |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		NotEqual(t, fe, nil) |  | ||||||
| 		Equal(t, tt.expected, fe.Translate(trans)) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -1,652 +0,0 @@ | ||||||
| package es |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"testing" |  | ||||||
| 	"time" |  | ||||||
| 
 |  | ||||||
| 	. "git.ningdatech.com/ningda/gin_valid/go-playground/assert/v2" |  | ||||||
| 	spanish "git.ningdatech.com/ningda/gin_valid/go-playground/locales/es" |  | ||||||
| 	ut "git.ningdatech.com/ningda/gin_valid/go-playground/universal-translator" |  | ||||||
| 	"git.ningdatech.com/ningda/gin_valid/go-playground/validator/v10" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func TestTranslations(t *testing.T) { |  | ||||||
| 
 |  | ||||||
| 	spa := spanish.New() |  | ||||||
| 	uni := ut.New(spa, spa) |  | ||||||
| 	trans, _ := uni.GetTranslator("es") |  | ||||||
| 
 |  | ||||||
| 	validate := validator.New() |  | ||||||
| 
 |  | ||||||
| 	err := RegisterDefaultTranslations(validate, trans) |  | ||||||
| 	Equal(t, err, nil) |  | ||||||
| 
 |  | ||||||
| 	type Inner struct { |  | ||||||
| 		EqCSFieldString  string |  | ||||||
| 		NeCSFieldString  string |  | ||||||
| 		GtCSFieldString  string |  | ||||||
| 		GteCSFieldString string |  | ||||||
| 		LtCSFieldString  string |  | ||||||
| 		LteCSFieldString string |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	type Test struct { |  | ||||||
| 		Inner             Inner |  | ||||||
| 		RequiredString    string            `validate:"required"` |  | ||||||
| 		RequiredNumber    int               `validate:"required"` |  | ||||||
| 		RequiredMultiple  []string          `validate:"required"` |  | ||||||
| 		LenString         string            `validate:"len=1"` |  | ||||||
| 		LenNumber         float64           `validate:"len=1113.00"` |  | ||||||
| 		LenMultiple       []string          `validate:"len=7"` |  | ||||||
| 		MinString         string            `validate:"min=1"` |  | ||||||
| 		MinNumber         float64           `validate:"min=1113.00"` |  | ||||||
| 		MinMultiple       []string          `validate:"min=7"` |  | ||||||
| 		MaxString         string            `validate:"max=3"` |  | ||||||
| 		MaxNumber         float64           `validate:"max=1113.00"` |  | ||||||
| 		MaxMultiple       []string          `validate:"max=7"` |  | ||||||
| 		EqString          string            `validate:"eq=3"` |  | ||||||
| 		EqNumber          float64           `validate:"eq=2.33"` |  | ||||||
| 		EqMultiple        []string          `validate:"eq=7"` |  | ||||||
| 		NeString          string            `validate:"ne="` |  | ||||||
| 		NeNumber          float64           `validate:"ne=0.00"` |  | ||||||
| 		NeMultiple        []string          `validate:"ne=0"` |  | ||||||
| 		LtString          string            `validate:"lt=3"` |  | ||||||
| 		LtNumber          float64           `validate:"lt=5.56"` |  | ||||||
| 		LtMultiple        []string          `validate:"lt=2"` |  | ||||||
| 		LtTime            time.Time         `validate:"lt"` |  | ||||||
| 		LteString         string            `validate:"lte=3"` |  | ||||||
| 		LteNumber         float64           `validate:"lte=5.56"` |  | ||||||
| 		LteMultiple       []string          `validate:"lte=2"` |  | ||||||
| 		LteTime           time.Time         `validate:"lte"` |  | ||||||
| 		GtString          string            `validate:"gt=3"` |  | ||||||
| 		GtNumber          float64           `validate:"gt=5.56"` |  | ||||||
| 		GtMultiple        []string          `validate:"gt=2"` |  | ||||||
| 		GtTime            time.Time         `validate:"gt"` |  | ||||||
| 		GteString         string            `validate:"gte=3"` |  | ||||||
| 		GteNumber         float64           `validate:"gte=5.56"` |  | ||||||
| 		GteMultiple       []string          `validate:"gte=2"` |  | ||||||
| 		GteTime           time.Time         `validate:"gte"` |  | ||||||
| 		EqFieldString     string            `validate:"eqfield=MaxString"` |  | ||||||
| 		EqCSFieldString   string            `validate:"eqcsfield=Inner.EqCSFieldString"` |  | ||||||
| 		NeCSFieldString   string            `validate:"necsfield=Inner.NeCSFieldString"` |  | ||||||
| 		GtCSFieldString   string            `validate:"gtcsfield=Inner.GtCSFieldString"` |  | ||||||
| 		GteCSFieldString  string            `validate:"gtecsfield=Inner.GteCSFieldString"` |  | ||||||
| 		LtCSFieldString   string            `validate:"ltcsfield=Inner.LtCSFieldString"` |  | ||||||
| 		LteCSFieldString  string            `validate:"ltecsfield=Inner.LteCSFieldString"` |  | ||||||
| 		NeFieldString     string            `validate:"nefield=EqFieldString"` |  | ||||||
| 		GtFieldString     string            `validate:"gtfield=MaxString"` |  | ||||||
| 		GteFieldString    string            `validate:"gtefield=MaxString"` |  | ||||||
| 		LtFieldString     string            `validate:"ltfield=MaxString"` |  | ||||||
| 		LteFieldString    string            `validate:"ltefield=MaxString"` |  | ||||||
| 		AlphaString       string            `validate:"alpha"` |  | ||||||
| 		AlphanumString    string            `validate:"alphanum"` |  | ||||||
| 		NumericString     string            `validate:"numeric"` |  | ||||||
| 		NumberString      string            `validate:"number"` |  | ||||||
| 		HexadecimalString string            `validate:"hexadecimal"` |  | ||||||
| 		HexColorString    string            `validate:"hexcolor"` |  | ||||||
| 		RGBColorString    string            `validate:"rgb"` |  | ||||||
| 		RGBAColorString   string            `validate:"rgba"` |  | ||||||
| 		HSLColorString    string            `validate:"hsl"` |  | ||||||
| 		HSLAColorString   string            `validate:"hsla"` |  | ||||||
| 		Email             string            `validate:"email"` |  | ||||||
| 		URL               string            `validate:"url"` |  | ||||||
| 		URI               string            `validate:"uri"` |  | ||||||
| 		Base64            string            `validate:"base64"` |  | ||||||
| 		Contains          string            `validate:"contains=purpose"` |  | ||||||
| 		ContainsAny       string            `validate:"containsany=!@#$"` |  | ||||||
| 		Excludes          string            `validate:"excludes=text"` |  | ||||||
| 		ExcludesAll       string            `validate:"excludesall=!@#$"` |  | ||||||
| 		ExcludesRune      string            `validate:"excludesrune=☻"` |  | ||||||
| 		ISBN              string            `validate:"isbn"` |  | ||||||
| 		ISBN10            string            `validate:"isbn10"` |  | ||||||
| 		ISBN13            string            `validate:"isbn13"` |  | ||||||
| 		UUID              string            `validate:"uuid"` |  | ||||||
| 		UUID3             string            `validate:"uuid3"` |  | ||||||
| 		UUID4             string            `validate:"uuid4"` |  | ||||||
| 		UUID5             string            `validate:"uuid5"` |  | ||||||
| 		ASCII             string            `validate:"ascii"` |  | ||||||
| 		PrintableASCII    string            `validate:"printascii"` |  | ||||||
| 		MultiByte         string            `validate:"multibyte"` |  | ||||||
| 		DataURI           string            `validate:"datauri"` |  | ||||||
| 		Latitude          string            `validate:"latitude"` |  | ||||||
| 		Longitude         string            `validate:"longitude"` |  | ||||||
| 		SSN               string            `validate:"ssn"` |  | ||||||
| 		IP                string            `validate:"ip"` |  | ||||||
| 		IPv4              string            `validate:"ipv4"` |  | ||||||
| 		IPv6              string            `validate:"ipv6"` |  | ||||||
| 		CIDR              string            `validate:"cidr"` |  | ||||||
| 		CIDRv4            string            `validate:"cidrv4"` |  | ||||||
| 		CIDRv6            string            `validate:"cidrv6"` |  | ||||||
| 		TCPAddr           string            `validate:"tcp_addr"` |  | ||||||
| 		TCPAddrv4         string            `validate:"tcp4_addr"` |  | ||||||
| 		TCPAddrv6         string            `validate:"tcp6_addr"` |  | ||||||
| 		UDPAddr           string            `validate:"udp_addr"` |  | ||||||
| 		UDPAddrv4         string            `validate:"udp4_addr"` |  | ||||||
| 		UDPAddrv6         string            `validate:"udp6_addr"` |  | ||||||
| 		IPAddr            string            `validate:"ip_addr"` |  | ||||||
| 		IPAddrv4          string            `validate:"ip4_addr"` |  | ||||||
| 		IPAddrv6          string            `validate:"ip6_addr"` |  | ||||||
| 		UinxAddr          string            `validate:"unix_addr"` // can't fail from within Go's net package currently, but maybe in the future
 |  | ||||||
| 		MAC               string            `validate:"mac"` |  | ||||||
| 		IsColor           string            `validate:"iscolor"` |  | ||||||
| 		StrPtrMinLen      *string           `validate:"min=10"` |  | ||||||
| 		StrPtrMaxLen      *string           `validate:"max=1"` |  | ||||||
| 		StrPtrLen         *string           `validate:"len=2"` |  | ||||||
| 		StrPtrLt          *string           `validate:"lt=1"` |  | ||||||
| 		StrPtrLte         *string           `validate:"lte=1"` |  | ||||||
| 		StrPtrGt          *string           `validate:"gt=10"` |  | ||||||
| 		StrPtrGte         *string           `validate:"gte=10"` |  | ||||||
| 		OneOfString       string            `validate:"oneof=red green"` |  | ||||||
| 		OneOfInt          int               `validate:"oneof=5 63"` |  | ||||||
| 		UniqueSlice       []string          `validate:"unique"` |  | ||||||
| 		UniqueArray       [3]string         `validate:"unique"` |  | ||||||
| 		UniqueMap         map[string]string `validate:"unique"` |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	var test Test |  | ||||||
| 
 |  | ||||||
| 	test.Inner.EqCSFieldString = "1234" |  | ||||||
| 	test.Inner.GtCSFieldString = "1234" |  | ||||||
| 	test.Inner.GteCSFieldString = "1234" |  | ||||||
| 
 |  | ||||||
| 	test.MaxString = "1234" |  | ||||||
| 	test.MaxNumber = 2000 |  | ||||||
| 	test.MaxMultiple = make([]string, 9) |  | ||||||
| 
 |  | ||||||
| 	test.LtString = "1234" |  | ||||||
| 	test.LtNumber = 6 |  | ||||||
| 	test.LtMultiple = make([]string, 3) |  | ||||||
| 	test.LtTime = time.Now().Add(time.Hour * 24) |  | ||||||
| 
 |  | ||||||
| 	test.LteString = "1234" |  | ||||||
| 	test.LteNumber = 6 |  | ||||||
| 	test.LteMultiple = make([]string, 3) |  | ||||||
| 	test.LteTime = time.Now().Add(time.Hour * 24) |  | ||||||
| 
 |  | ||||||
| 	test.LtFieldString = "12345" |  | ||||||
| 	test.LteFieldString = "12345" |  | ||||||
| 
 |  | ||||||
| 	test.LtCSFieldString = "1234" |  | ||||||
| 	test.LteCSFieldString = "1234" |  | ||||||
| 
 |  | ||||||
| 	test.AlphaString = "abc3" |  | ||||||
| 	test.AlphanumString = "abc3!" |  | ||||||
| 	test.NumericString = "12E.00" |  | ||||||
| 	test.NumberString = "12E" |  | ||||||
| 
 |  | ||||||
| 	test.Excludes = "this is some test text" |  | ||||||
| 	test.ExcludesAll = "This is Great!" |  | ||||||
| 	test.ExcludesRune = "Love it ☻" |  | ||||||
| 
 |  | ||||||
| 	test.ASCII = "カタカナ" |  | ||||||
| 	test.PrintableASCII = "カタカナ" |  | ||||||
| 
 |  | ||||||
| 	test.MultiByte = "1234feerf" |  | ||||||
| 
 |  | ||||||
| 	s := "toolong" |  | ||||||
| 	test.StrPtrMaxLen = &s |  | ||||||
| 	test.StrPtrLen = &s |  | ||||||
| 
 |  | ||||||
| 	test.UniqueSlice = []string{"1234", "1234"} |  | ||||||
| 	test.UniqueMap = map[string]string{"key1": "1234", "key2": "1234"} |  | ||||||
| 
 |  | ||||||
| 	err = validate.Struct(test) |  | ||||||
| 	NotEqual(t, err, nil) |  | ||||||
| 
 |  | ||||||
| 	errs, ok := err.(validator.ValidationErrors) |  | ||||||
| 	Equal(t, ok, true) |  | ||||||
| 
 |  | ||||||
| 	tests := []struct { |  | ||||||
| 		ns       string |  | ||||||
| 		expected string |  | ||||||
| 	}{ |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IsColor", |  | ||||||
| 			expected: "IsColor debe ser un color válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MAC", |  | ||||||
| 			expected: "MAC debe contener una dirección MAC válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddr", |  | ||||||
| 			expected: "IPAddr debe ser una dirección IP resoluble", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddrv4", |  | ||||||
| 			expected: "IPAddrv4 debe ser una dirección IPv4 resoluble", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddrv6", |  | ||||||
| 			expected: "IPAddrv6 debe ser una dirección IPv6 resoluble", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddr", |  | ||||||
| 			expected: "UDPAddr debe ser una dirección UDP válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddrv4", |  | ||||||
| 			expected: "UDPAddrv4 debe ser una dirección IPv4 UDP válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddrv6", |  | ||||||
| 			expected: "UDPAddrv6 debe ser una dirección IPv6 UDP válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddr", |  | ||||||
| 			expected: "TCPAddr debe ser una dirección TCP válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddrv4", |  | ||||||
| 			expected: "TCPAddrv4 debe ser una dirección IPv4 TCP válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddrv6", |  | ||||||
| 			expected: "TCPAddrv6 debe ser una dirección IPv6 TCP válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDR", |  | ||||||
| 			expected: "CIDR debe contener una anotación válida del CIDR", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDRv4", |  | ||||||
| 			expected: "CIDRv4 debe contener una notación CIDR válida para una dirección IPv4", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDRv6", |  | ||||||
| 			expected: "CIDRv6 debe contener una notación CIDR válida para una dirección IPv6", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.SSN", |  | ||||||
| 			expected: "SSN debe ser un número válido de SSN", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IP", |  | ||||||
| 			expected: "IP debe ser una dirección IP válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPv4", |  | ||||||
| 			expected: "IPv4 debe ser una dirección IPv4 válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPv6", |  | ||||||
| 			expected: "IPv6 debe ser una dirección IPv6 válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.DataURI", |  | ||||||
| 			expected: "DataURI debe contener un URI de datos válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Latitude", |  | ||||||
| 			expected: "Latitude debe contener coordenadas de latitud válidas", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Longitude", |  | ||||||
| 			expected: "Longitude debe contener unas coordenadas de longitud válidas", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MultiByte", |  | ||||||
| 			expected: "MultiByte debe contener caracteres multibyte", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ASCII", |  | ||||||
| 			expected: "ASCII debe contener sólo caracteres ascii", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.PrintableASCII", |  | ||||||
| 			expected: "PrintableASCII debe contener sólo caracteres ASCII imprimibles", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID", |  | ||||||
| 			expected: "UUID debe ser un UUID válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID3", |  | ||||||
| 			expected: "UUID3 debe ser una versión válida 3 UUID", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID4", |  | ||||||
| 			expected: "UUID4 debe ser una versión válida 4 UUID", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID5", |  | ||||||
| 			expected: "UUID5 debe ser una versión válida 5 UUID", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN", |  | ||||||
| 			expected: "ISBN debe ser un número ISBN válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN10", |  | ||||||
| 			expected: "ISBN10 debe ser un número ISBN-10 válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN13", |  | ||||||
| 			expected: "ISBN13 debe ser un número ISBN-13 válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Excludes", |  | ||||||
| 			expected: "Excludes no puede contener el texto 'text'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ExcludesAll", |  | ||||||
| 			expected: "ExcludesAll no puede contener ninguno de los siguientes caracteres '!@#$'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ExcludesRune", |  | ||||||
| 			expected: "ExcludesRune no puede contener lo siguiente '☻'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ContainsAny", |  | ||||||
| 			expected: "ContainsAny debe contener al menos uno de los siguientes caracteres '!@#$'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Contains", |  | ||||||
| 			expected: "Contains debe contener el texto 'purpose'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Base64", |  | ||||||
| 			expected: "Base64 debe ser una cadena de Base64 válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Email", |  | ||||||
| 			expected: "Email debe ser una dirección de correo electrónico válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.URL", |  | ||||||
| 			expected: "URL debe ser un URL válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.URI", |  | ||||||
| 			expected: "URI debe ser una URI válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RGBColorString", |  | ||||||
| 			expected: "RGBColorString debe ser un color RGB válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RGBAColorString", |  | ||||||
| 			expected: "RGBAColorString debe ser un color RGBA válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HSLColorString", |  | ||||||
| 			expected: "HSLColorString debe ser un color HSL válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HSLAColorString", |  | ||||||
| 			expected: "HSLAColorString debe ser un color HSL válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HexadecimalString", |  | ||||||
| 			expected: "HexadecimalString debe ser un hexadecimal válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HexColorString", |  | ||||||
| 			expected: "HexColorString debe ser un color HEX válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NumberString", |  | ||||||
| 			expected: "NumberString debe ser un número válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NumericString", |  | ||||||
| 			expected: "NumericString debe ser un valor numérico válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.AlphanumString", |  | ||||||
| 			expected: "AlphanumString sólo puede contener caracteres alfanuméricos", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.AlphaString", |  | ||||||
| 			expected: "AlphaString sólo puede contener caracteres alfabéticos", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtFieldString", |  | ||||||
| 			expected: "LtFieldString debe ser menor que MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteFieldString", |  | ||||||
| 			expected: "LteFieldString debe ser menor o igual a MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtFieldString", |  | ||||||
| 			expected: "GtFieldString debe ser mayor que MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteFieldString", |  | ||||||
| 			expected: "GteFieldString debe ser mayor o igual a MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeFieldString", |  | ||||||
| 			expected: "NeFieldString no puede ser igual a EqFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtCSFieldString", |  | ||||||
| 			expected: "LtCSFieldString debe ser menor que Inner.LtCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteCSFieldString", |  | ||||||
| 			expected: "LteCSFieldString debe ser menor o igual a Inner.LteCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtCSFieldString", |  | ||||||
| 			expected: "GtCSFieldString debe ser mayor que Inner.GtCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteCSFieldString", |  | ||||||
| 			expected: "GteCSFieldString debe ser mayor o igual a Inner.GteCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeCSFieldString", |  | ||||||
| 			expected: "NeCSFieldString no puede ser igual a Inner.NeCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqCSFieldString", |  | ||||||
| 			expected: "EqCSFieldString debe ser igual a Inner.EqCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqFieldString", |  | ||||||
| 			expected: "EqFieldString debe ser igual a MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteString", |  | ||||||
| 			expected: "GteString debe tener al menos 3 caracteres de longitud", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteNumber", |  | ||||||
| 			expected: "GteNumber debe ser 5,56 o mayor", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteMultiple", |  | ||||||
| 			expected: "GteMultiple debe contener al menos 2 elementos", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteTime", |  | ||||||
| 			expected: "GteTime debe ser después o durante la fecha y hora actuales", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtString", |  | ||||||
| 			expected: "GtString debe ser mayor que 3 caracteres en longitud", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtNumber", |  | ||||||
| 			expected: "GtNumber debe ser mayor que 5,56", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtMultiple", |  | ||||||
| 			expected: "GtMultiple debe contener más de 2 elementos", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtTime", |  | ||||||
| 			expected: "GtTime debe ser después de la fecha y hora actual", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteString", |  | ||||||
| 			expected: "LteString debe tener un máximo de 3 caracteres de longitud", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteNumber", |  | ||||||
| 			expected: "LteNumber debe ser 5,56 o menos", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteMultiple", |  | ||||||
| 			expected: "LteMultiple debe contener como máximo 2 elementos", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteTime", |  | ||||||
| 			expected: "LteTime debe ser antes o durante la fecha y hora actual", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtString", |  | ||||||
| 			expected: "LtString debe tener menos de 3 caracteres de longitud", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtNumber", |  | ||||||
| 			expected: "LtNumber debe ser menos de 5,56", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtMultiple", |  | ||||||
| 			expected: "LtMultiple debe contener menos de 2 elementos", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtTime", |  | ||||||
| 			expected: "LtTime debe ser antes de la fecha y hora actual", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeString", |  | ||||||
| 			expected: "NeString no debería ser igual a ", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeNumber", |  | ||||||
| 			expected: "NeNumber no debería ser igual a 0.00", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeMultiple", |  | ||||||
| 			expected: "NeMultiple no debería ser igual a 0", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqString", |  | ||||||
| 			expected: "EqString no es igual a 3", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqNumber", |  | ||||||
| 			expected: "EqNumber no es igual a 2.33", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqMultiple", |  | ||||||
| 			expected: "EqMultiple no es igual a 7", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxString", |  | ||||||
| 			expected: "MaxString debe tener un máximo de 3 caracteres de longitud", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxNumber", |  | ||||||
| 			expected: "MaxNumber debe ser 1.113,00 o menos", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxMultiple", |  | ||||||
| 			expected: "MaxMultiple debe contener como máximo 7 elementos", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinString", |  | ||||||
| 			expected: "MinString debe tener al menos 1 carácter de longitud", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinNumber", |  | ||||||
| 			expected: "MinNumber debe ser 1.113,00 o más", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinMultiple", |  | ||||||
| 			expected: "MinMultiple debe contener al menos 7 elementos", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenString", |  | ||||||
| 			expected: "LenString debe tener 1 carácter de longitud", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenNumber", |  | ||||||
| 			expected: "LenNumber debe ser igual a 1.113,00", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenMultiple", |  | ||||||
| 			expected: "LenMultiple debe contener 7 elementos", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredString", |  | ||||||
| 			expected: "RequiredString es un campo requerido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredNumber", |  | ||||||
| 			expected: "RequiredNumber es un campo requerido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredMultiple", |  | ||||||
| 			expected: "RequiredMultiple es un campo requerido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrMinLen", |  | ||||||
| 			expected: "StrPtrMinLen debe tener al menos 10 caracteres de longitud", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrMaxLen", |  | ||||||
| 			expected: "StrPtrMaxLen debe tener un máximo de 1 carácter de longitud", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLen", |  | ||||||
| 			expected: "StrPtrLen debe tener 2 caracteres de longitud", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLt", |  | ||||||
| 			expected: "StrPtrLt debe tener menos de 1 carácter de longitud", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLte", |  | ||||||
| 			expected: "StrPtrLte debe tener un máximo de 1 carácter de longitud", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrGt", |  | ||||||
| 			expected: "StrPtrGt debe ser mayor que 10 caracteres en longitud", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrGte", |  | ||||||
| 			expected: "StrPtrGte debe tener al menos 10 caracteres de longitud", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.OneOfString", |  | ||||||
| 			expected: "OneOfString debe ser uno de [red green]", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.OneOfInt", |  | ||||||
| 			expected: "OneOfInt debe ser uno de [5 63]", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UniqueSlice", |  | ||||||
| 			expected: "UniqueSlice debe contener valores únicos", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UniqueArray", |  | ||||||
| 			expected: "UniqueArray debe contener valores únicos", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UniqueMap", |  | ||||||
| 			expected: "UniqueMap debe contener valores únicos", |  | ||||||
| 		}, |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	for _, tt := range tests { |  | ||||||
| 
 |  | ||||||
| 		var fe validator.FieldError |  | ||||||
| 
 |  | ||||||
| 		for _, e := range errs { |  | ||||||
| 			if tt.ns == e.Namespace() { |  | ||||||
| 				fe = e |  | ||||||
| 				break |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		NotEqual(t, fe, nil) |  | ||||||
| 		Equal(t, tt.expected, fe.Translate(trans)) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -1,634 +0,0 @@ | ||||||
| package fr |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"testing" |  | ||||||
| 	"time" |  | ||||||
| 
 |  | ||||||
| 	. "git.ningdatech.com/ningda/gin_valid/go-playground/assert/v2" |  | ||||||
| 	french "git.ningdatech.com/ningda/gin_valid/go-playground/locales/fr" |  | ||||||
| 	ut "git.ningdatech.com/ningda/gin_valid/go-playground/universal-translator" |  | ||||||
| 	"git.ningdatech.com/ningda/gin_valid/go-playground/validator/v10" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func TestTranslations(t *testing.T) { |  | ||||||
| 
 |  | ||||||
| 	fre := french.New() |  | ||||||
| 	uni := ut.New(fre, fre) |  | ||||||
| 	trans, _ := uni.GetTranslator("fr") |  | ||||||
| 
 |  | ||||||
| 	validate := validator.New() |  | ||||||
| 
 |  | ||||||
| 	err := RegisterDefaultTranslations(validate, trans) |  | ||||||
| 	Equal(t, err, nil) |  | ||||||
| 
 |  | ||||||
| 	type Inner struct { |  | ||||||
| 		EqCSFieldString  string |  | ||||||
| 		NeCSFieldString  string |  | ||||||
| 		GtCSFieldString  string |  | ||||||
| 		GteCSFieldString string |  | ||||||
| 		LtCSFieldString  string |  | ||||||
| 		LteCSFieldString string |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	type Test struct { |  | ||||||
| 		Inner             Inner |  | ||||||
| 		RequiredString    string    `validate:"required"` |  | ||||||
| 		RequiredNumber    int       `validate:"required"` |  | ||||||
| 		RequiredMultiple  []string  `validate:"required"` |  | ||||||
| 		LenString         string    `validate:"len=1"` |  | ||||||
| 		LenNumber         float64   `validate:"len=1113.00"` |  | ||||||
| 		LenMultiple       []string  `validate:"len=7"` |  | ||||||
| 		MinString         string    `validate:"min=1"` |  | ||||||
| 		MinNumber         float64   `validate:"min=1113.00"` |  | ||||||
| 		MinMultiple       []string  `validate:"min=7"` |  | ||||||
| 		MaxString         string    `validate:"max=3"` |  | ||||||
| 		MaxNumber         float64   `validate:"max=1113.00"` |  | ||||||
| 		MaxMultiple       []string  `validate:"max=7"` |  | ||||||
| 		EqString          string    `validate:"eq=3"` |  | ||||||
| 		EqNumber          float64   `validate:"eq=2.33"` |  | ||||||
| 		EqMultiple        []string  `validate:"eq=7"` |  | ||||||
| 		NeString          string    `validate:"ne="` |  | ||||||
| 		NeNumber          float64   `validate:"ne=0.00"` |  | ||||||
| 		NeMultiple        []string  `validate:"ne=0"` |  | ||||||
| 		LtString          string    `validate:"lt=3"` |  | ||||||
| 		LtNumber          float64   `validate:"lt=5.56"` |  | ||||||
| 		LtMultiple        []string  `validate:"lt=2"` |  | ||||||
| 		LtTime            time.Time `validate:"lt"` |  | ||||||
| 		LteString         string    `validate:"lte=3"` |  | ||||||
| 		LteNumber         float64   `validate:"lte=5.56"` |  | ||||||
| 		LteMultiple       []string  `validate:"lte=2"` |  | ||||||
| 		LteTime           time.Time `validate:"lte"` |  | ||||||
| 		GtString          string    `validate:"gt=3"` |  | ||||||
| 		GtNumber          float64   `validate:"gt=5.56"` |  | ||||||
| 		GtMultiple        []string  `validate:"gt=2"` |  | ||||||
| 		GtTime            time.Time `validate:"gt"` |  | ||||||
| 		GteString         string    `validate:"gte=3"` |  | ||||||
| 		GteNumber         float64   `validate:"gte=5.56"` |  | ||||||
| 		GteMultiple       []string  `validate:"gte=2"` |  | ||||||
| 		GteTime           time.Time `validate:"gte"` |  | ||||||
| 		EqFieldString     string    `validate:"eqfield=MaxString"` |  | ||||||
| 		EqCSFieldString   string    `validate:"eqcsfield=Inner.EqCSFieldString"` |  | ||||||
| 		NeCSFieldString   string    `validate:"necsfield=Inner.NeCSFieldString"` |  | ||||||
| 		GtCSFieldString   string    `validate:"gtcsfield=Inner.GtCSFieldString"` |  | ||||||
| 		GteCSFieldString  string    `validate:"gtecsfield=Inner.GteCSFieldString"` |  | ||||||
| 		LtCSFieldString   string    `validate:"ltcsfield=Inner.LtCSFieldString"` |  | ||||||
| 		LteCSFieldString  string    `validate:"ltecsfield=Inner.LteCSFieldString"` |  | ||||||
| 		NeFieldString     string    `validate:"nefield=EqFieldString"` |  | ||||||
| 		GtFieldString     string    `validate:"gtfield=MaxString"` |  | ||||||
| 		GteFieldString    string    `validate:"gtefield=MaxString"` |  | ||||||
| 		LtFieldString     string    `validate:"ltfield=MaxString"` |  | ||||||
| 		LteFieldString    string    `validate:"ltefield=MaxString"` |  | ||||||
| 		AlphaString       string    `validate:"alpha"` |  | ||||||
| 		AlphanumString    string    `validate:"alphanum"` |  | ||||||
| 		NumericString     string    `validate:"numeric"` |  | ||||||
| 		NumberString      string    `validate:"number"` |  | ||||||
| 		HexadecimalString string    `validate:"hexadecimal"` |  | ||||||
| 		HexColorString    string    `validate:"hexcolor"` |  | ||||||
| 		RGBColorString    string    `validate:"rgb"` |  | ||||||
| 		RGBAColorString   string    `validate:"rgba"` |  | ||||||
| 		HSLColorString    string    `validate:"hsl"` |  | ||||||
| 		HSLAColorString   string    `validate:"hsla"` |  | ||||||
| 		Email             string    `validate:"email"` |  | ||||||
| 		URL               string    `validate:"url"` |  | ||||||
| 		URI               string    `validate:"uri"` |  | ||||||
| 		Base64            string    `validate:"base64"` |  | ||||||
| 		Contains          string    `validate:"contains=purpose"` |  | ||||||
| 		ContainsAny       string    `validate:"containsany=!@#$"` |  | ||||||
| 		Excludes          string    `validate:"excludes=text"` |  | ||||||
| 		ExcludesAll       string    `validate:"excludesall=!@#$"` |  | ||||||
| 		ExcludesRune      string    `validate:"excludesrune=☻"` |  | ||||||
| 		ISBN              string    `validate:"isbn"` |  | ||||||
| 		ISBN10            string    `validate:"isbn10"` |  | ||||||
| 		ISBN13            string    `validate:"isbn13"` |  | ||||||
| 		UUID              string    `validate:"uuid"` |  | ||||||
| 		UUID3             string    `validate:"uuid3"` |  | ||||||
| 		UUID4             string    `validate:"uuid4"` |  | ||||||
| 		UUID5             string    `validate:"uuid5"` |  | ||||||
| 		ASCII             string    `validate:"ascii"` |  | ||||||
| 		PrintableASCII    string    `validate:"printascii"` |  | ||||||
| 		MultiByte         string    `validate:"multibyte"` |  | ||||||
| 		DataURI           string    `validate:"datauri"` |  | ||||||
| 		Latitude          string    `validate:"latitude"` |  | ||||||
| 		Longitude         string    `validate:"longitude"` |  | ||||||
| 		SSN               string    `validate:"ssn"` |  | ||||||
| 		IP                string    `validate:"ip"` |  | ||||||
| 		IPv4              string    `validate:"ipv4"` |  | ||||||
| 		IPv6              string    `validate:"ipv6"` |  | ||||||
| 		CIDR              string    `validate:"cidr"` |  | ||||||
| 		CIDRv4            string    `validate:"cidrv4"` |  | ||||||
| 		CIDRv6            string    `validate:"cidrv6"` |  | ||||||
| 		TCPAddr           string    `validate:"tcp_addr"` |  | ||||||
| 		TCPAddrv4         string    `validate:"tcp4_addr"` |  | ||||||
| 		TCPAddrv6         string    `validate:"tcp6_addr"` |  | ||||||
| 		UDPAddr           string    `validate:"udp_addr"` |  | ||||||
| 		UDPAddrv4         string    `validate:"udp4_addr"` |  | ||||||
| 		UDPAddrv6         string    `validate:"udp6_addr"` |  | ||||||
| 		IPAddr            string    `validate:"ip_addr"` |  | ||||||
| 		IPAddrv4          string    `validate:"ip4_addr"` |  | ||||||
| 		IPAddrv6          string    `validate:"ip6_addr"` |  | ||||||
| 		UinxAddr          string    `validate:"unix_addr"` // can't fail from within Go's net package currently, but maybe in the future
 |  | ||||||
| 		MAC               string    `validate:"mac"` |  | ||||||
| 		IsColor           string    `validate:"iscolor"` |  | ||||||
| 		StrPtrMinLen      *string   `validate:"min=10"` |  | ||||||
| 		StrPtrMaxLen      *string   `validate:"max=1"` |  | ||||||
| 		StrPtrLen         *string   `validate:"len=2"` |  | ||||||
| 		StrPtrLt          *string   `validate:"lt=1"` |  | ||||||
| 		StrPtrLte         *string   `validate:"lte=1"` |  | ||||||
| 		StrPtrGt          *string   `validate:"gt=10"` |  | ||||||
| 		StrPtrGte         *string   `validate:"gte=10"` |  | ||||||
| 		OneOfString       string    `validate:"oneof=red green"` |  | ||||||
| 		OneOfInt          int       `validate:"oneof=5 63"` |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	var test Test |  | ||||||
| 
 |  | ||||||
| 	test.Inner.EqCSFieldString = "1234" |  | ||||||
| 	test.Inner.GtCSFieldString = "1234" |  | ||||||
| 	test.Inner.GteCSFieldString = "1234" |  | ||||||
| 
 |  | ||||||
| 	test.MaxString = "1234" |  | ||||||
| 	test.MaxNumber = 2000 |  | ||||||
| 	test.MaxMultiple = make([]string, 9) |  | ||||||
| 
 |  | ||||||
| 	test.LtString = "1234" |  | ||||||
| 	test.LtNumber = 6 |  | ||||||
| 	test.LtMultiple = make([]string, 3) |  | ||||||
| 	test.LtTime = time.Now().Add(time.Hour * 24) |  | ||||||
| 
 |  | ||||||
| 	test.LteString = "1234" |  | ||||||
| 	test.LteNumber = 6 |  | ||||||
| 	test.LteMultiple = make([]string, 3) |  | ||||||
| 	test.LteTime = time.Now().Add(time.Hour * 24) |  | ||||||
| 
 |  | ||||||
| 	test.LtFieldString = "12345" |  | ||||||
| 	test.LteFieldString = "12345" |  | ||||||
| 
 |  | ||||||
| 	test.LtCSFieldString = "1234" |  | ||||||
| 	test.LteCSFieldString = "1234" |  | ||||||
| 
 |  | ||||||
| 	test.AlphaString = "abc3" |  | ||||||
| 	test.AlphanumString = "abc3!" |  | ||||||
| 	test.NumericString = "12E.00" |  | ||||||
| 	test.NumberString = "12E" |  | ||||||
| 
 |  | ||||||
| 	test.Excludes = "this is some test text" |  | ||||||
| 	test.ExcludesAll = "This is Great!" |  | ||||||
| 	test.ExcludesRune = "Love it ☻" |  | ||||||
| 
 |  | ||||||
| 	test.ASCII = "カタカナ" |  | ||||||
| 	test.PrintableASCII = "カタカナ" |  | ||||||
| 
 |  | ||||||
| 	test.MultiByte = "1234feerf" |  | ||||||
| 
 |  | ||||||
| 	s := "toolong" |  | ||||||
| 	test.StrPtrMaxLen = &s |  | ||||||
| 	test.StrPtrLen = &s |  | ||||||
| 
 |  | ||||||
| 	err = validate.Struct(test) |  | ||||||
| 	NotEqual(t, err, nil) |  | ||||||
| 
 |  | ||||||
| 	errs, ok := err.(validator.ValidationErrors) |  | ||||||
| 	Equal(t, ok, true) |  | ||||||
| 
 |  | ||||||
| 	tests := []struct { |  | ||||||
| 		ns       string |  | ||||||
| 		expected string |  | ||||||
| 	}{ |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IsColor", |  | ||||||
| 			expected: "IsColor doit être une couleur valide", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MAC", |  | ||||||
| 			expected: "MAC doit contenir une adresse MAC valide", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddr", |  | ||||||
| 			expected: "IPAddr doit être une adresse IP résolvable", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddrv4", |  | ||||||
| 			expected: "IPAddrv4 doit être une adresse IPv4 résolvable", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddrv6", |  | ||||||
| 			expected: "IPAddrv6 doit être une adresse IPv6 résolvable", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddr", |  | ||||||
| 			expected: "UDPAddr doit être une adressse UDP valide", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddrv4", |  | ||||||
| 			expected: "UDPAddrv4 doit être une adressse IPv4 UDP valide", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddrv6", |  | ||||||
| 			expected: "UDPAddrv6 doit être une adressse IPv6 UDP valide", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddr", |  | ||||||
| 			expected: "TCPAddr doit être une adressse TCP valide", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddrv4", |  | ||||||
| 			expected: "TCPAddrv4 doit être une adressse IPv4 TCP valide", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddrv6", |  | ||||||
| 			expected: "TCPAddrv6 doit être une adressse IPv6 TCP valide", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDR", |  | ||||||
| 			expected: "CIDR doit contenir une notation CIDR valide", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDRv4", |  | ||||||
| 			expected: "CIDRv4 doit contenir une notation CIDR valide pour une adresse IPv4", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDRv6", |  | ||||||
| 			expected: "CIDRv6 doit contenir une notation CIDR valide pour une adresse IPv6", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.SSN", |  | ||||||
| 			expected: "SSN doit être un numéro SSN valide", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IP", |  | ||||||
| 			expected: "IP doit être une adressse IP valide", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPv4", |  | ||||||
| 			expected: "IPv4 doit être une adressse IPv4 valide", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPv6", |  | ||||||
| 			expected: "IPv6 doit être une adressse IPv6 valide", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.DataURI", |  | ||||||
| 			expected: "DataURI doit contenir une URI data valide", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Latitude", |  | ||||||
| 			expected: "Latitude doit contenir des coordonnées latitude valides", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Longitude", |  | ||||||
| 			expected: "Longitude doit contenir des coordonnées longitudes valides", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MultiByte", |  | ||||||
| 			expected: "MultiByte doit contenir des caractères multioctets", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ASCII", |  | ||||||
| 			expected: "ASCII ne doit contenir que des caractères ascii", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.PrintableASCII", |  | ||||||
| 			expected: "PrintableASCII ne doit contenir que des caractères ascii affichables", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID", |  | ||||||
| 			expected: "UUID doit être un UUID valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID3", |  | ||||||
| 			expected: "UUID3 doit être un UUID version 3 valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID4", |  | ||||||
| 			expected: "UUID4 doit être un UUID version 4 valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID5", |  | ||||||
| 			expected: "UUID5 doit être un UUID version 5 valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN", |  | ||||||
| 			expected: "ISBN doit être un numéro ISBN valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN10", |  | ||||||
| 			expected: "ISBN10 doit être un numéro ISBN-10 valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN13", |  | ||||||
| 			expected: "ISBN13 doit être un numéro ISBN-13 valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Excludes", |  | ||||||
| 			expected: "Excludes ne doit pas contenir le texte 'text'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ExcludesAll", |  | ||||||
| 			expected: "ExcludesAll ne doit pas contenir l'un des caractères suivants '!@#$'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ExcludesRune", |  | ||||||
| 			expected: "ExcludesRune ne doit pas contenir ce qui suit '☻'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ContainsAny", |  | ||||||
| 			expected: "ContainsAny doit contenir au moins l' un des caractères suivants '!@#$'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Contains", |  | ||||||
| 			expected: "Contains doit contenir le texte 'purpose'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Base64", |  | ||||||
| 			expected: "Base64 doit être une chaîne de caractères au format Base64 valide", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Email", |  | ||||||
| 			expected: "Email doit être une adresse email valide", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.URL", |  | ||||||
| 			expected: "URL doit être une URL valide", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.URI", |  | ||||||
| 			expected: "URI doit être une URI valide", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RGBColorString", |  | ||||||
| 			expected: "RGBColorString doit être une couleur au format RGB valide", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RGBAColorString", |  | ||||||
| 			expected: "RGBAColorString doit être une couleur au format RGBA valide", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HSLColorString", |  | ||||||
| 			expected: "HSLColorString doit être une couleur au format HSL valide", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HSLAColorString", |  | ||||||
| 			expected: "HSLAColorString doit être une couleur au format HSLA valide", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HexadecimalString", |  | ||||||
| 			expected: "HexadecimalString doit être une chaîne de caractères au format hexadécimal valide", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HexColorString", |  | ||||||
| 			expected: "HexColorString doit être une couleur au format HEX valide", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NumberString", |  | ||||||
| 			expected: "NumberString doit être un nombre valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NumericString", |  | ||||||
| 			expected: "NumericString doit être une valeur numérique valide", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.AlphanumString", |  | ||||||
| 			expected: "AlphanumString ne doit contenir que des caractères alphanumériques", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.AlphaString", |  | ||||||
| 			expected: "AlphaString ne doit contenir que des caractères alphabétiques", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtFieldString", |  | ||||||
| 			expected: "LtFieldString doit être inférieur à MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteFieldString", |  | ||||||
| 			expected: "LteFieldString doit être inférieur ou égal à MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtFieldString", |  | ||||||
| 			expected: "GtFieldString doit être supérieur à MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteFieldString", |  | ||||||
| 			expected: "GteFieldString doit être supérieur ou égal à MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeFieldString", |  | ||||||
| 			expected: "NeFieldString ne doit pas être égal à EqFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtCSFieldString", |  | ||||||
| 			expected: "LtCSFieldString doit être inférieur à Inner.LtCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteCSFieldString", |  | ||||||
| 			expected: "LteCSFieldString doit être inférieur ou égal à Inner.LteCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtCSFieldString", |  | ||||||
| 			expected: "GtCSFieldString doit être supérieur à Inner.GtCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteCSFieldString", |  | ||||||
| 			expected: "GteCSFieldString doit être supérieur ou égal à Inner.GteCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeCSFieldString", |  | ||||||
| 			expected: "NeCSFieldString ne doit pas être égal à Inner.NeCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqCSFieldString", |  | ||||||
| 			expected: "EqCSFieldString doit être égal à Inner.EqCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqFieldString", |  | ||||||
| 			expected: "EqFieldString doit être égal à MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteString", |  | ||||||
| 			expected: "GteString doit faire une taille d'au moins 3 caractères", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteNumber", |  | ||||||
| 			expected: "GteNumber doit être 5,56 ou plus", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteMultiple", |  | ||||||
| 			expected: "GteMultiple doit contenir au moins 2 elements", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteTime", |  | ||||||
| 			expected: "GteTime doit être après ou pendant la date et l'heure actuelle", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtString", |  | ||||||
| 			expected: "GtString doit avoir une taille supérieur à 3 caractères", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtNumber", |  | ||||||
| 			expected: "GtNumber doit être supérieur à 5,56", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtMultiple", |  | ||||||
| 			expected: "GtMultiple doit contenir plus de 2 elements", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtTime", |  | ||||||
| 			expected: "GtTime doit être après la date et l'heure actuelle", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteString", |  | ||||||
| 			expected: "LteString doit faire une taille maximum de 3 caractères", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteNumber", |  | ||||||
| 			expected: "LteNumber doit faire 5,56 ou moins", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteMultiple", |  | ||||||
| 			expected: "LteMultiple doit contenir un maximum de 2 elements", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteTime", |  | ||||||
| 			expected: "LteTime doit être avant ou pendant la date et l'heure actuelle", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtString", |  | ||||||
| 			expected: "LtString doit avoir une taille inférieure à 3 caractères", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtNumber", |  | ||||||
| 			expected: "LtNumber doit être inférieur à 5,56", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtMultiple", |  | ||||||
| 			expected: "LtMultiple doit contenir mois de 2 elements", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtTime", |  | ||||||
| 			expected: "LtTime doit être avant la date et l'heure actuelle", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeString", |  | ||||||
| 			expected: "NeString ne doit pas être égal à ", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeNumber", |  | ||||||
| 			expected: "NeNumber ne doit pas être égal à 0.00", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeMultiple", |  | ||||||
| 			expected: "NeMultiple ne doit pas être égal à 0", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqString", |  | ||||||
| 			expected: "EqString n'est pas égal à 3", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqNumber", |  | ||||||
| 			expected: "EqNumber n'est pas égal à 2.33", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqMultiple", |  | ||||||
| 			expected: "EqMultiple n'est pas égal à 7", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxString", |  | ||||||
| 			expected: "MaxString doit faire une taille maximum de 3 caractères", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxNumber", |  | ||||||
| 			expected: "MaxNumber doit être égal à 1 113,00 ou moins", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxMultiple", |  | ||||||
| 			expected: "MaxMultiple doit contenir au maximum 7 elements", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinString", |  | ||||||
| 			expected: "MinString doit faire une taille minimum de 1 caractère", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinNumber", |  | ||||||
| 			expected: "MinNumber doit être égal à 1 113,00 ou plus", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinMultiple", |  | ||||||
| 			expected: "MinMultiple doit contenir au moins 7 elements", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenString", |  | ||||||
| 			expected: "LenString doit faire une taille de 1 caractère", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenNumber", |  | ||||||
| 			expected: "LenNumber doit être égal à 1 113,00", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenMultiple", |  | ||||||
| 			expected: "LenMultiple doit contenir 7 elements", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredString", |  | ||||||
| 			expected: "RequiredString est un champ obligatoire", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredNumber", |  | ||||||
| 			expected: "RequiredNumber est un champ obligatoire", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredMultiple", |  | ||||||
| 			expected: "RequiredMultiple est un champ obligatoire", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrMinLen", |  | ||||||
| 			expected: "StrPtrMinLen doit faire une taille minimum de 10 caractères", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrMaxLen", |  | ||||||
| 			expected: "StrPtrMaxLen doit faire une taille maximum de 1 caractère", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLen", |  | ||||||
| 			expected: "StrPtrLen doit faire une taille de 2 caractères", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLt", |  | ||||||
| 			expected: "StrPtrLt doit avoir une taille inférieure à 1 caractère", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLte", |  | ||||||
| 			expected: "StrPtrLte doit faire une taille maximum de 1 caractère", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrGt", |  | ||||||
| 			expected: "StrPtrGt doit avoir une taille supérieur à 10 caractères", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrGte", |  | ||||||
| 			expected: "StrPtrGte doit faire une taille d'au moins 10 caractères", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.OneOfString", |  | ||||||
| 			expected: "OneOfString doit être l'un des choix suivants [red green]", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.OneOfInt", |  | ||||||
| 			expected: "OneOfInt doit être l'un des choix suivants [5 63]", |  | ||||||
| 		}, |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	for _, tt := range tests { |  | ||||||
| 
 |  | ||||||
| 		var fe validator.FieldError |  | ||||||
| 
 |  | ||||||
| 		for _, e := range errs { |  | ||||||
| 			if tt.ns == e.Namespace() { |  | ||||||
| 				fe = e |  | ||||||
| 				break |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		NotEqual(t, fe, nil) |  | ||||||
| 		Equal(t, tt.expected, fe.Translate(trans)) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -1,634 +0,0 @@ | ||||||
| package id |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"testing" |  | ||||||
| 	"time" |  | ||||||
| 
 |  | ||||||
| 	. "git.ningdatech.com/ningda/gin_valid/go-playground/assert/v2" |  | ||||||
| 	indonesia "git.ningdatech.com/ningda/gin_valid/go-playground/locales/id" |  | ||||||
| 	ut "git.ningdatech.com/ningda/gin_valid/go-playground/universal-translator" |  | ||||||
| 	"git.ningdatech.com/ningda/gin_valid/go-playground/validator/v10" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func TestTranslations(t *testing.T) { |  | ||||||
| 
 |  | ||||||
| 	idn := indonesia.New() |  | ||||||
| 	uni := ut.New(idn, idn) |  | ||||||
| 	trans, _ := uni.GetTranslator("id") |  | ||||||
| 
 |  | ||||||
| 	validate := validator.New() |  | ||||||
| 
 |  | ||||||
| 	err := RegisterDefaultTranslations(validate, trans) |  | ||||||
| 	Equal(t, err, nil) |  | ||||||
| 
 |  | ||||||
| 	type Inner struct { |  | ||||||
| 		EqCSFieldString  string |  | ||||||
| 		NeCSFieldString  string |  | ||||||
| 		GtCSFieldString  string |  | ||||||
| 		GteCSFieldString string |  | ||||||
| 		LtCSFieldString  string |  | ||||||
| 		LteCSFieldString string |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	type Test struct { |  | ||||||
| 		Inner             Inner |  | ||||||
| 		RequiredString    string    `validate:"required"` |  | ||||||
| 		RequiredNumber    int       `validate:"required"` |  | ||||||
| 		RequiredMultiple  []string  `validate:"required"` |  | ||||||
| 		LenString         string    `validate:"len=1"` |  | ||||||
| 		LenNumber         float64   `validate:"len=1113.00"` |  | ||||||
| 		LenMultiple       []string  `validate:"len=7"` |  | ||||||
| 		MinString         string    `validate:"min=1"` |  | ||||||
| 		MinNumber         float64   `validate:"min=1113.00"` |  | ||||||
| 		MinMultiple       []string  `validate:"min=7"` |  | ||||||
| 		MaxString         string    `validate:"max=3"` |  | ||||||
| 		MaxNumber         float64   `validate:"max=1113.00"` |  | ||||||
| 		MaxMultiple       []string  `validate:"max=7"` |  | ||||||
| 		EqString          string    `validate:"eq=3"` |  | ||||||
| 		EqNumber          float64   `validate:"eq=2.33"` |  | ||||||
| 		EqMultiple        []string  `validate:"eq=7"` |  | ||||||
| 		NeString          string    `validate:"ne="` |  | ||||||
| 		NeNumber          float64   `validate:"ne=0.00"` |  | ||||||
| 		NeMultiple        []string  `validate:"ne=0"` |  | ||||||
| 		LtString          string    `validate:"lt=3"` |  | ||||||
| 		LtNumber          float64   `validate:"lt=5.56"` |  | ||||||
| 		LtMultiple        []string  `validate:"lt=2"` |  | ||||||
| 		LtTime            time.Time `validate:"lt"` |  | ||||||
| 		LteString         string    `validate:"lte=3"` |  | ||||||
| 		LteNumber         float64   `validate:"lte=5.56"` |  | ||||||
| 		LteMultiple       []string  `validate:"lte=2"` |  | ||||||
| 		LteTime           time.Time `validate:"lte"` |  | ||||||
| 		GtString          string    `validate:"gt=3"` |  | ||||||
| 		GtNumber          float64   `validate:"gt=5.56"` |  | ||||||
| 		GtMultiple        []string  `validate:"gt=2"` |  | ||||||
| 		GtTime            time.Time `validate:"gt"` |  | ||||||
| 		GteString         string    `validate:"gte=3"` |  | ||||||
| 		GteNumber         float64   `validate:"gte=5.56"` |  | ||||||
| 		GteMultiple       []string  `validate:"gte=2"` |  | ||||||
| 		GteTime           time.Time `validate:"gte"` |  | ||||||
| 		EqFieldString     string    `validate:"eqfield=MaxString"` |  | ||||||
| 		EqCSFieldString   string    `validate:"eqcsfield=Inner.EqCSFieldString"` |  | ||||||
| 		NeCSFieldString   string    `validate:"necsfield=Inner.NeCSFieldString"` |  | ||||||
| 		GtCSFieldString   string    `validate:"gtcsfield=Inner.GtCSFieldString"` |  | ||||||
| 		GteCSFieldString  string    `validate:"gtecsfield=Inner.GteCSFieldString"` |  | ||||||
| 		LtCSFieldString   string    `validate:"ltcsfield=Inner.LtCSFieldString"` |  | ||||||
| 		LteCSFieldString  string    `validate:"ltecsfield=Inner.LteCSFieldString"` |  | ||||||
| 		NeFieldString     string    `validate:"nefield=EqFieldString"` |  | ||||||
| 		GtFieldString     string    `validate:"gtfield=MaxString"` |  | ||||||
| 		GteFieldString    string    `validate:"gtefield=MaxString"` |  | ||||||
| 		LtFieldString     string    `validate:"ltfield=MaxString"` |  | ||||||
| 		LteFieldString    string    `validate:"ltefield=MaxString"` |  | ||||||
| 		AlphaString       string    `validate:"alpha"` |  | ||||||
| 		AlphanumString    string    `validate:"alphanum"` |  | ||||||
| 		NumericString     string    `validate:"numeric"` |  | ||||||
| 		NumberString      string    `validate:"number"` |  | ||||||
| 		HexadecimalString string    `validate:"hexadecimal"` |  | ||||||
| 		HexColorString    string    `validate:"hexcolor"` |  | ||||||
| 		RGBColorString    string    `validate:"rgb"` |  | ||||||
| 		RGBAColorString   string    `validate:"rgba"` |  | ||||||
| 		HSLColorString    string    `validate:"hsl"` |  | ||||||
| 		HSLAColorString   string    `validate:"hsla"` |  | ||||||
| 		Email             string    `validate:"email"` |  | ||||||
| 		URL               string    `validate:"url"` |  | ||||||
| 		URI               string    `validate:"uri"` |  | ||||||
| 		Base64            string    `validate:"base64"` |  | ||||||
| 		Contains          string    `validate:"contains=tujuan"` |  | ||||||
| 		ContainsAny       string    `validate:"containsany=!@#$"` |  | ||||||
| 		Excludes          string    `validate:"excludes=text"` |  | ||||||
| 		ExcludesAll       string    `validate:"excludesall=!@#$"` |  | ||||||
| 		ExcludesRune      string    `validate:"excludesrune=☻"` |  | ||||||
| 		ISBN              string    `validate:"isbn"` |  | ||||||
| 		ISBN10            string    `validate:"isbn10"` |  | ||||||
| 		ISBN13            string    `validate:"isbn13"` |  | ||||||
| 		UUID              string    `validate:"uuid"` |  | ||||||
| 		UUID3             string    `validate:"uuid3"` |  | ||||||
| 		UUID4             string    `validate:"uuid4"` |  | ||||||
| 		UUID5             string    `validate:"uuid5"` |  | ||||||
| 		ASCII             string    `validate:"ascii"` |  | ||||||
| 		PrintableASCII    string    `validate:"printascii"` |  | ||||||
| 		MultiByte         string    `validate:"multibyte"` |  | ||||||
| 		DataURI           string    `validate:"datauri"` |  | ||||||
| 		Latitude          string    `validate:"latitude"` |  | ||||||
| 		Longitude         string    `validate:"longitude"` |  | ||||||
| 		SSN               string    `validate:"ssn"` |  | ||||||
| 		IP                string    `validate:"ip"` |  | ||||||
| 		IPv4              string    `validate:"ipv4"` |  | ||||||
| 		IPv6              string    `validate:"ipv6"` |  | ||||||
| 		CIDR              string    `validate:"cidr"` |  | ||||||
| 		CIDRv4            string    `validate:"cidrv4"` |  | ||||||
| 		CIDRv6            string    `validate:"cidrv6"` |  | ||||||
| 		TCPAddr           string    `validate:"tcp_addr"` |  | ||||||
| 		TCPAddrv4         string    `validate:"tcp4_addr"` |  | ||||||
| 		TCPAddrv6         string    `validate:"tcp6_addr"` |  | ||||||
| 		UDPAddr           string    `validate:"udp_addr"` |  | ||||||
| 		UDPAddrv4         string    `validate:"udp4_addr"` |  | ||||||
| 		UDPAddrv6         string    `validate:"udp6_addr"` |  | ||||||
| 		IPAddr            string    `validate:"ip_addr"` |  | ||||||
| 		IPAddrv4          string    `validate:"ip4_addr"` |  | ||||||
| 		IPAddrv6          string    `validate:"ip6_addr"` |  | ||||||
| 		UinxAddr          string    `validate:"unix_addr"` // can't fail from within Go's net package currently, but maybe in the future
 |  | ||||||
| 		MAC               string    `validate:"mac"` |  | ||||||
| 		IsColor           string    `validate:"iscolor"` |  | ||||||
| 		StrPtrMinLen      *string   `validate:"min=10"` |  | ||||||
| 		StrPtrMaxLen      *string   `validate:"max=1"` |  | ||||||
| 		StrPtrLen         *string   `validate:"len=2"` |  | ||||||
| 		StrPtrLt          *string   `validate:"lt=1"` |  | ||||||
| 		StrPtrLte         *string   `validate:"lte=1"` |  | ||||||
| 		StrPtrGt          *string   `validate:"gt=10"` |  | ||||||
| 		StrPtrGte         *string   `validate:"gte=10"` |  | ||||||
| 		OneOfString       string    `validate:"oneof=merah hijau"` |  | ||||||
| 		OneOfInt          int       `validate:"oneof=5 63"` |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	var test Test |  | ||||||
| 
 |  | ||||||
| 	test.Inner.EqCSFieldString = "1234" |  | ||||||
| 	test.Inner.GtCSFieldString = "1234" |  | ||||||
| 	test.Inner.GteCSFieldString = "1234" |  | ||||||
| 
 |  | ||||||
| 	test.MaxString = "1234" |  | ||||||
| 	test.MaxNumber = 2000 |  | ||||||
| 	test.MaxMultiple = make([]string, 9) |  | ||||||
| 
 |  | ||||||
| 	test.LtString = "1234" |  | ||||||
| 	test.LtNumber = 6 |  | ||||||
| 	test.LtMultiple = make([]string, 3) |  | ||||||
| 	test.LtTime = time.Now().Add(time.Hour * 24) |  | ||||||
| 
 |  | ||||||
| 	test.LteString = "1234" |  | ||||||
| 	test.LteNumber = 6 |  | ||||||
| 	test.LteMultiple = make([]string, 3) |  | ||||||
| 	test.LteTime = time.Now().Add(time.Hour * 24) |  | ||||||
| 
 |  | ||||||
| 	test.LtFieldString = "12345" |  | ||||||
| 	test.LteFieldString = "12345" |  | ||||||
| 
 |  | ||||||
| 	test.LtCSFieldString = "1234" |  | ||||||
| 	test.LteCSFieldString = "1234" |  | ||||||
| 
 |  | ||||||
| 	test.AlphaString = "abc3" |  | ||||||
| 	test.AlphanumString = "abc3!" |  | ||||||
| 	test.NumericString = "12E.00" |  | ||||||
| 	test.NumberString = "12E" |  | ||||||
| 
 |  | ||||||
| 	test.Excludes = "this is some test text" |  | ||||||
| 	test.ExcludesAll = "This is Great!" |  | ||||||
| 	test.ExcludesRune = "Love it ☻" |  | ||||||
| 
 |  | ||||||
| 	test.ASCII = "カタカナ" |  | ||||||
| 	test.PrintableASCII = "カタカナ" |  | ||||||
| 
 |  | ||||||
| 	test.MultiByte = "1234feerf" |  | ||||||
| 
 |  | ||||||
| 	s := "toolong" |  | ||||||
| 	test.StrPtrMaxLen = &s |  | ||||||
| 	test.StrPtrLen = &s |  | ||||||
| 
 |  | ||||||
| 	err = validate.Struct(test) |  | ||||||
| 	NotEqual(t, err, nil) |  | ||||||
| 
 |  | ||||||
| 	errs, ok := err.(validator.ValidationErrors) |  | ||||||
| 	Equal(t, ok, true) |  | ||||||
| 
 |  | ||||||
| 	tests := []struct { |  | ||||||
| 		ns       string |  | ||||||
| 		expected string |  | ||||||
| 	}{ |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IsColor", |  | ||||||
| 			expected: "IsColor harus berupa warna yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MAC", |  | ||||||
| 			expected: "MAC harus berisi alamat MAC yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddr", |  | ||||||
| 			expected: "IPAddr harus berupa alamat IP yang dapat dipecahkan", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddrv4", |  | ||||||
| 			expected: "IPAddrv4 harus berupa alamat IPv4 yang dapat diatasi", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddrv6", |  | ||||||
| 			expected: "IPAddrv6 harus berupa alamat IPv6 yang dapat diatasi", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddr", |  | ||||||
| 			expected: "UDPAddr harus berupa alamat UDP yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddrv4", |  | ||||||
| 			expected: "UDPAddrv4 harus berupa alamat IPv4 UDP yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddrv6", |  | ||||||
| 			expected: "UDPAddrv6 harus berupa alamat IPv6 UDP yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddr", |  | ||||||
| 			expected: "TCPAddr harus berupa alamat TCP yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddrv4", |  | ||||||
| 			expected: "TCPAddrv4 harus berupa alamat TCP IPv4 yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddrv6", |  | ||||||
| 			expected: "TCPAddrv6 harus berupa alamat TCP IPv6 yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDR", |  | ||||||
| 			expected: "CIDR harus berisi notasi CIDR yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDRv4", |  | ||||||
| 			expected: "CIDRv4 harus berisi notasi CIDR yang valid untuk alamat IPv4", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDRv6", |  | ||||||
| 			expected: "CIDRv6 harus berisi notasi CIDR yang valid untuk alamat IPv6", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.SSN", |  | ||||||
| 			expected: "SSN harus berupa nomor SSN yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IP", |  | ||||||
| 			expected: "IP harus berupa alamat IP yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPv4", |  | ||||||
| 			expected: "IPv4 harus berupa alamat IPv4 yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPv6", |  | ||||||
| 			expected: "IPv6 harus berupa alamat IPv6 yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.DataURI", |  | ||||||
| 			expected: "DataURI harus berisi URI Data yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Latitude", |  | ||||||
| 			expected: "Latitude harus berisi koordinat lintang yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Longitude", |  | ||||||
| 			expected: "Longitude harus berisi koordinat bujur yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MultiByte", |  | ||||||
| 			expected: "MultiByte harus berisi karakter multibyte", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ASCII", |  | ||||||
| 			expected: "ASCII hanya boleh berisi karakter ascii", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.PrintableASCII", |  | ||||||
| 			expected: "PrintableASCII hanya boleh berisi karakter ascii yang dapat dicetak", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID", |  | ||||||
| 			expected: "UUID harus berupa UUID yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID3", |  | ||||||
| 			expected: "UUID3 harus berupa UUID versi 3 yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID4", |  | ||||||
| 			expected: "UUID4 harus berupa UUID versi 4 yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID5", |  | ||||||
| 			expected: "UUID5 harus berupa UUID versi 5 yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN", |  | ||||||
| 			expected: "ISBN harus berupa nomor ISBN yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN10", |  | ||||||
| 			expected: "ISBN10 harus berupa nomor ISBN-10 yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN13", |  | ||||||
| 			expected: "ISBN13 harus berupa nomor ISBN-13 yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Excludes", |  | ||||||
| 			expected: "Excludes tidak boleh berisi teks 'text'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ExcludesAll", |  | ||||||
| 			expected: "ExcludesAll tidak boleh berisi salah satu karakter berikut '!@#$'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ExcludesRune", |  | ||||||
| 			expected: "ExcludesRune tidak boleh berisi '☻'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ContainsAny", |  | ||||||
| 			expected: "ContainsAny harus berisi setidaknya salah satu karakter berikut '!@#$'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Contains", |  | ||||||
| 			expected: "Contains harus berisi teks 'tujuan'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Base64", |  | ||||||
| 			expected: "Base64 harus berupa string Base64 yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Email", |  | ||||||
| 			expected: "Email harus berupa alamat email yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.URL", |  | ||||||
| 			expected: "URL harus berupa URL yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.URI", |  | ||||||
| 			expected: "URI harus berupa URI yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RGBColorString", |  | ||||||
| 			expected: "RGBColorString harus berupa warna RGB yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RGBAColorString", |  | ||||||
| 			expected: "RGBAColorString harus berupa warna RGBA yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HSLColorString", |  | ||||||
| 			expected: "HSLColorString harus berupa warna HSL yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HSLAColorString", |  | ||||||
| 			expected: "HSLAColorString harus berupa warna HSLA yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HexadecimalString", |  | ||||||
| 			expected: "HexadecimalString harus berupa heksadesimal yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HexColorString", |  | ||||||
| 			expected: "HexColorString harus berupa warna HEX yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NumberString", |  | ||||||
| 			expected: "NumberString harus berupa angka yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NumericString", |  | ||||||
| 			expected: "NumericString harus berupa nilai numerik yang valid", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.AlphanumString", |  | ||||||
| 			expected: "AlphanumString hanya dapat berisi karakter alfanumerik", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.AlphaString", |  | ||||||
| 			expected: "AlphaString hanya dapat berisi karakter abjad", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtFieldString", |  | ||||||
| 			expected: "LtFieldString harus kurang dari MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteFieldString", |  | ||||||
| 			expected: "LteFieldString harus kurang dari atau sama dengan MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtFieldString", |  | ||||||
| 			expected: "GtFieldString harus lebih besar dari MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteFieldString", |  | ||||||
| 			expected: "GteFieldString harus lebih besar dari atau sama dengan MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeFieldString", |  | ||||||
| 			expected: "NeFieldString tidak sama dengan EqFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtCSFieldString", |  | ||||||
| 			expected: "LtCSFieldString harus kurang dari Inner.LtCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteCSFieldString", |  | ||||||
| 			expected: "LteCSFieldString harus kurang dari atau sama dengan Inner.LteCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtCSFieldString", |  | ||||||
| 			expected: "GtCSFieldString harus lebih besar dari Inner.GtCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteCSFieldString", |  | ||||||
| 			expected: "GteCSFieldString harus lebih besar dari atau sama dengan Inner.GteCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeCSFieldString", |  | ||||||
| 			expected: "NeCSFieldString tidak sama dengan Inner.NeCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqCSFieldString", |  | ||||||
| 			expected: "EqCSFieldString harus sama dengan Inner.EqCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqFieldString", |  | ||||||
| 			expected: "EqFieldString harus sama dengan MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteString", |  | ||||||
| 			expected: "panjang minimal GteString adalah 3 karakter", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteNumber", |  | ||||||
| 			expected: "GteNumber harus 5,56 atau lebih besar", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteMultiple", |  | ||||||
| 			expected: "GteMultiple harus berisi setidaknya 2 item", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteTime", |  | ||||||
| 			expected: "GteTime harus lebih besar dari atau sama dengan tanggal & waktu saat ini", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtString", |  | ||||||
| 			expected: "panjang GtString harus lebih dari 3 karakter", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtNumber", |  | ||||||
| 			expected: "GtNumber harus lebih besar dari 5,56", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtMultiple", |  | ||||||
| 			expected: "GtMultiple harus berisi lebih dari 2 item", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtTime", |  | ||||||
| 			expected: "GtTime harus lebih besar dari tanggal & waktu saat ini", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteString", |  | ||||||
| 			expected: "panjang maksimal LteString adalah 3 karakter", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteNumber", |  | ||||||
| 			expected: "LteNumber harus 5,56 atau kurang", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteMultiple", |  | ||||||
| 			expected: "LteMultiple harus berisi maksimal 2 item", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteTime", |  | ||||||
| 			expected: "LteTime harus kurang dari atau sama dengan tanggal & waktu saat ini", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtString", |  | ||||||
| 			expected: "panjang LtString harus kurang dari 3 karakter", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtNumber", |  | ||||||
| 			expected: "LtNumber harus kurang dari 5,56", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtMultiple", |  | ||||||
| 			expected: "LtMultiple harus berisi kurang dari 2 item", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtTime", |  | ||||||
| 			expected: "LtTime harus kurang dari tanggal & waktu saat ini", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeString", |  | ||||||
| 			expected: "NeString tidak sama dengan ", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeNumber", |  | ||||||
| 			expected: "NeNumber tidak sama dengan 0.00", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeMultiple", |  | ||||||
| 			expected: "NeMultiple tidak sama dengan 0", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqString", |  | ||||||
| 			expected: "EqString tidak sama dengan 3", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqNumber", |  | ||||||
| 			expected: "EqNumber tidak sama dengan 2.33", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqMultiple", |  | ||||||
| 			expected: "EqMultiple tidak sama dengan 7", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxString", |  | ||||||
| 			expected: "panjang maksimal MaxString adalah 3 karakter", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxNumber", |  | ||||||
| 			expected: "MaxNumber harus 1.113,00 atau kurang", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxMultiple", |  | ||||||
| 			expected: "MaxMultiple harus berisi maksimal 7 item", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinString", |  | ||||||
| 			expected: "panjang minimal MinString adalah 1 karakter", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinNumber", |  | ||||||
| 			expected: "MinNumber harus 1.113,00 atau lebih besar", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinMultiple", |  | ||||||
| 			expected: "panjang minimal MinMultiple adalah 7 item", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenString", |  | ||||||
| 			expected: "panjang LenString harus 1 karakter", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenNumber", |  | ||||||
| 			expected: "LenNumber harus sama dengan 1.113,00", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenMultiple", |  | ||||||
| 			expected: "LenMultiple harus berisi 7 item", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredString", |  | ||||||
| 			expected: "RequiredString wajib diisi", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredNumber", |  | ||||||
| 			expected: "RequiredNumber wajib diisi", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredMultiple", |  | ||||||
| 			expected: "RequiredMultiple wajib diisi", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrMinLen", |  | ||||||
| 			expected: "panjang minimal StrPtrMinLen adalah 10 karakter", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrMaxLen", |  | ||||||
| 			expected: "panjang maksimal StrPtrMaxLen adalah 1 karakter", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLen", |  | ||||||
| 			expected: "panjang StrPtrLen harus 2 karakter", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLt", |  | ||||||
| 			expected: "panjang StrPtrLt harus kurang dari 1 karakter", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLte", |  | ||||||
| 			expected: "panjang maksimal StrPtrLte adalah 1 karakter", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrGt", |  | ||||||
| 			expected: "panjang StrPtrGt harus lebih dari 10 karakter", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrGte", |  | ||||||
| 			expected: "panjang minimal StrPtrGte adalah 10 karakter", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.OneOfString", |  | ||||||
| 			expected: "OneOfString harus berupa salah satu dari [merah hijau]", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.OneOfInt", |  | ||||||
| 			expected: "OneOfInt harus berupa salah satu dari [5 63]", |  | ||||||
| 		}, |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	for _, tt := range tests { |  | ||||||
| 
 |  | ||||||
| 		var fe validator.FieldError |  | ||||||
| 
 |  | ||||||
| 		for _, e := range errs { |  | ||||||
| 			if tt.ns == e.Namespace() { |  | ||||||
| 				fe = e |  | ||||||
| 				break |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		NotEqual(t, fe, nil) |  | ||||||
| 		Equal(t, tt.expected, fe.Translate(trans)) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -1,634 +0,0 @@ | ||||||
| package ja |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"testing" |  | ||||||
| 	"time" |  | ||||||
| 
 |  | ||||||
| 	. "git.ningdatech.com/ningda/gin_valid/go-playground/assert/v2" |  | ||||||
| 	ja_locale "git.ningdatech.com/ningda/gin_valid/go-playground/locales/ja" |  | ||||||
| 	"git.ningdatech.com/ningda/gin_valid/go-playground/validator/v10" |  | ||||||
| 	ut "github.com/go-playground/universal-translator" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func TestTranslations(t *testing.T) { |  | ||||||
| 
 |  | ||||||
| 	japanese := ja_locale.New() |  | ||||||
| 	uni := ut.New(japanese, japanese) |  | ||||||
| 	trans, _ := uni.GetTranslator("ja") |  | ||||||
| 
 |  | ||||||
| 	validate := validator.New() |  | ||||||
| 
 |  | ||||||
| 	err := RegisterDefaultTranslations(validate, trans) |  | ||||||
| 	Equal(t, err, nil) |  | ||||||
| 
 |  | ||||||
| 	type Inner struct { |  | ||||||
| 		EqCSFieldString  string |  | ||||||
| 		NeCSFieldString  string |  | ||||||
| 		GtCSFieldString  string |  | ||||||
| 		GteCSFieldString string |  | ||||||
| 		LtCSFieldString  string |  | ||||||
| 		LteCSFieldString string |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	type Test struct { |  | ||||||
| 		Inner             Inner |  | ||||||
| 		RequiredString    string    `validate:"required"` |  | ||||||
| 		RequiredNumber    int       `validate:"required"` |  | ||||||
| 		RequiredMultiple  []string  `validate:"required"` |  | ||||||
| 		LenString         string    `validate:"len=1"` |  | ||||||
| 		LenNumber         float64   `validate:"len=1113.00"` |  | ||||||
| 		LenMultiple       []string  `validate:"len=7"` |  | ||||||
| 		MinString         string    `validate:"min=1"` |  | ||||||
| 		MinNumber         float64   `validate:"min=1113.00"` |  | ||||||
| 		MinMultiple       []string  `validate:"min=7"` |  | ||||||
| 		MaxString         string    `validate:"max=3"` |  | ||||||
| 		MaxNumber         float64   `validate:"max=1113.00"` |  | ||||||
| 		MaxMultiple       []string  `validate:"max=7"` |  | ||||||
| 		EqString          string    `validate:"eq=3"` |  | ||||||
| 		EqNumber          float64   `validate:"eq=2.33"` |  | ||||||
| 		EqMultiple        []string  `validate:"eq=7"` |  | ||||||
| 		NeString          string    `validate:"ne="` |  | ||||||
| 		NeNumber          float64   `validate:"ne=0.00"` |  | ||||||
| 		NeMultiple        []string  `validate:"ne=0"` |  | ||||||
| 		LtString          string    `validate:"lt=3"` |  | ||||||
| 		LtNumber          float64   `validate:"lt=5.56"` |  | ||||||
| 		LtMultiple        []string  `validate:"lt=2"` |  | ||||||
| 		LtTime            time.Time `validate:"lt"` |  | ||||||
| 		LteString         string    `validate:"lte=3"` |  | ||||||
| 		LteNumber         float64   `validate:"lte=5.56"` |  | ||||||
| 		LteMultiple       []string  `validate:"lte=2"` |  | ||||||
| 		LteTime           time.Time `validate:"lte"` |  | ||||||
| 		GtString          string    `validate:"gt=3"` |  | ||||||
| 		GtNumber          float64   `validate:"gt=5.56"` |  | ||||||
| 		GtMultiple        []string  `validate:"gt=2"` |  | ||||||
| 		GtTime            time.Time `validate:"gt"` |  | ||||||
| 		GteString         string    `validate:"gte=3"` |  | ||||||
| 		GteNumber         float64   `validate:"gte=5.56"` |  | ||||||
| 		GteMultiple       []string  `validate:"gte=2"` |  | ||||||
| 		GteTime           time.Time `validate:"gte"` |  | ||||||
| 		EqFieldString     string    `validate:"eqfield=MaxString"` |  | ||||||
| 		EqCSFieldString   string    `validate:"eqcsfield=Inner.EqCSFieldString"` |  | ||||||
| 		NeCSFieldString   string    `validate:"necsfield=Inner.NeCSFieldString"` |  | ||||||
| 		GtCSFieldString   string    `validate:"gtcsfield=Inner.GtCSFieldString"` |  | ||||||
| 		GteCSFieldString  string    `validate:"gtecsfield=Inner.GteCSFieldString"` |  | ||||||
| 		LtCSFieldString   string    `validate:"ltcsfield=Inner.LtCSFieldString"` |  | ||||||
| 		LteCSFieldString  string    `validate:"ltecsfield=Inner.LteCSFieldString"` |  | ||||||
| 		NeFieldString     string    `validate:"nefield=EqFieldString"` |  | ||||||
| 		GtFieldString     string    `validate:"gtfield=MaxString"` |  | ||||||
| 		GteFieldString    string    `validate:"gtefield=MaxString"` |  | ||||||
| 		LtFieldString     string    `validate:"ltfield=MaxString"` |  | ||||||
| 		LteFieldString    string    `validate:"ltefield=MaxString"` |  | ||||||
| 		AlphaString       string    `validate:"alpha"` |  | ||||||
| 		AlphanumString    string    `validate:"alphanum"` |  | ||||||
| 		NumericString     string    `validate:"numeric"` |  | ||||||
| 		NumberString      string    `validate:"number"` |  | ||||||
| 		HexadecimalString string    `validate:"hexadecimal"` |  | ||||||
| 		HexColorString    string    `validate:"hexcolor"` |  | ||||||
| 		RGBColorString    string    `validate:"rgb"` |  | ||||||
| 		RGBAColorString   string    `validate:"rgba"` |  | ||||||
| 		HSLColorString    string    `validate:"hsl"` |  | ||||||
| 		HSLAColorString   string    `validate:"hsla"` |  | ||||||
| 		Email             string    `validate:"email"` |  | ||||||
| 		URL               string    `validate:"url"` |  | ||||||
| 		URI               string    `validate:"uri"` |  | ||||||
| 		Base64            string    `validate:"base64"` |  | ||||||
| 		Contains          string    `validate:"contains=purpose"` |  | ||||||
| 		ContainsAny       string    `validate:"containsany=!@#$"` |  | ||||||
| 		Excludes          string    `validate:"excludes=text"` |  | ||||||
| 		ExcludesAll       string    `validate:"excludesall=!@#$"` |  | ||||||
| 		ExcludesRune      string    `validate:"excludesrune=☻"` |  | ||||||
| 		ISBN              string    `validate:"isbn"` |  | ||||||
| 		ISBN10            string    `validate:"isbn10"` |  | ||||||
| 		ISBN13            string    `validate:"isbn13"` |  | ||||||
| 		UUID              string    `validate:"uuid"` |  | ||||||
| 		UUID3             string    `validate:"uuid3"` |  | ||||||
| 		UUID4             string    `validate:"uuid4"` |  | ||||||
| 		UUID5             string    `validate:"uuid5"` |  | ||||||
| 		ASCII             string    `validate:"ascii"` |  | ||||||
| 		PrintableASCII    string    `validate:"printascii"` |  | ||||||
| 		MultiByte         string    `validate:"multibyte"` |  | ||||||
| 		DataURI           string    `validate:"datauri"` |  | ||||||
| 		Latitude          string    `validate:"latitude"` |  | ||||||
| 		Longitude         string    `validate:"longitude"` |  | ||||||
| 		SSN               string    `validate:"ssn"` |  | ||||||
| 		IP                string    `validate:"ip"` |  | ||||||
| 		IPv4              string    `validate:"ipv4"` |  | ||||||
| 		IPv6              string    `validate:"ipv6"` |  | ||||||
| 		CIDR              string    `validate:"cidr"` |  | ||||||
| 		CIDRv4            string    `validate:"cidrv4"` |  | ||||||
| 		CIDRv6            string    `validate:"cidrv6"` |  | ||||||
| 		TCPAddr           string    `validate:"tcp_addr"` |  | ||||||
| 		TCPAddrv4         string    `validate:"tcp4_addr"` |  | ||||||
| 		TCPAddrv6         string    `validate:"tcp6_addr"` |  | ||||||
| 		UDPAddr           string    `validate:"udp_addr"` |  | ||||||
| 		UDPAddrv4         string    `validate:"udp4_addr"` |  | ||||||
| 		UDPAddrv6         string    `validate:"udp6_addr"` |  | ||||||
| 		IPAddr            string    `validate:"ip_addr"` |  | ||||||
| 		IPAddrv4          string    `validate:"ip4_addr"` |  | ||||||
| 		IPAddrv6          string    `validate:"ip6_addr"` |  | ||||||
| 		UinxAddr          string    `validate:"unix_addr"` // can't fail from within Go's net package currently, but maybe in the future
 |  | ||||||
| 		MAC               string    `validate:"mac"` |  | ||||||
| 		IsColor           string    `validate:"iscolor"` |  | ||||||
| 		StrPtrMinLen      *string   `validate:"min=10"` |  | ||||||
| 		StrPtrMaxLen      *string   `validate:"max=1"` |  | ||||||
| 		StrPtrLen         *string   `validate:"len=2"` |  | ||||||
| 		StrPtrLt          *string   `validate:"lt=1"` |  | ||||||
| 		StrPtrLte         *string   `validate:"lte=1"` |  | ||||||
| 		StrPtrGt          *string   `validate:"gt=10"` |  | ||||||
| 		StrPtrGte         *string   `validate:"gte=10"` |  | ||||||
| 		OneOfString       string    `validate:"oneof=red green"` |  | ||||||
| 		OneOfInt          int       `validate:"oneof=5 63"` |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	var test Test |  | ||||||
| 
 |  | ||||||
| 	test.Inner.EqCSFieldString = "1234" |  | ||||||
| 	test.Inner.GtCSFieldString = "1234" |  | ||||||
| 	test.Inner.GteCSFieldString = "1234" |  | ||||||
| 
 |  | ||||||
| 	test.MaxString = "1234" |  | ||||||
| 	test.MaxNumber = 2000 |  | ||||||
| 	test.MaxMultiple = make([]string, 9) |  | ||||||
| 
 |  | ||||||
| 	test.LtString = "1234" |  | ||||||
| 	test.LtNumber = 6 |  | ||||||
| 	test.LtMultiple = make([]string, 3) |  | ||||||
| 	test.LtTime = time.Now().Add(time.Hour * 24) |  | ||||||
| 
 |  | ||||||
| 	test.LteString = "1234" |  | ||||||
| 	test.LteNumber = 6 |  | ||||||
| 	test.LteMultiple = make([]string, 3) |  | ||||||
| 	test.LteTime = time.Now().Add(time.Hour * 24) |  | ||||||
| 
 |  | ||||||
| 	test.LtFieldString = "12345" |  | ||||||
| 	test.LteFieldString = "12345" |  | ||||||
| 
 |  | ||||||
| 	test.LtCSFieldString = "1234" |  | ||||||
| 	test.LteCSFieldString = "1234" |  | ||||||
| 
 |  | ||||||
| 	test.AlphaString = "abc3" |  | ||||||
| 	test.AlphanumString = "abc3!" |  | ||||||
| 	test.NumericString = "12E.00" |  | ||||||
| 	test.NumberString = "12E" |  | ||||||
| 
 |  | ||||||
| 	test.Excludes = "this is some test text" |  | ||||||
| 	test.ExcludesAll = "This is Great!" |  | ||||||
| 	test.ExcludesRune = "Love it ☻" |  | ||||||
| 
 |  | ||||||
| 	test.ASCII = "カタカナ" |  | ||||||
| 	test.PrintableASCII = "カタカナ" |  | ||||||
| 
 |  | ||||||
| 	test.MultiByte = "1234feerf" |  | ||||||
| 
 |  | ||||||
| 	s := "toolong" |  | ||||||
| 	test.StrPtrMaxLen = &s |  | ||||||
| 	test.StrPtrLen = &s |  | ||||||
| 
 |  | ||||||
| 	err = validate.Struct(test) |  | ||||||
| 	NotEqual(t, err, nil) |  | ||||||
| 
 |  | ||||||
| 	errs, ok := err.(validator.ValidationErrors) |  | ||||||
| 	Equal(t, ok, true) |  | ||||||
| 
 |  | ||||||
| 	tests := []struct { |  | ||||||
| 		ns       string |  | ||||||
| 		expected string |  | ||||||
| 	}{ |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IsColor", |  | ||||||
| 			expected: "IsColorは正しい色でなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MAC", |  | ||||||
| 			expected: "MACは正しいMACアドレスを含まなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddr", |  | ||||||
| 			expected: "IPAddrは解決可能なIPアドレスでなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddrv4", |  | ||||||
| 			expected: "IPAddrv4は解決可能なIPv4アドレスでなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddrv6", |  | ||||||
| 			expected: "IPAddrv6は解決可能なIPv6アドレスでなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddr", |  | ||||||
| 			expected: "UDPAddrは正しいUDPアドレスでなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddrv4", |  | ||||||
| 			expected: "UDPAddrv4は正しいIPv4のUDPアドレスでなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddrv6", |  | ||||||
| 			expected: "UDPAddrv6は正しいIPv6のUDPアドレスでなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddr", |  | ||||||
| 			expected: "TCPAddrは正しいTCPアドレスでなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddrv4", |  | ||||||
| 			expected: "TCPAddrv4は正しいIPv4のTCPアドレスでなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddrv6", |  | ||||||
| 			expected: "TCPAddrv6は正しいIPv6のTCPアドレスでなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDR", |  | ||||||
| 			expected: "CIDRは正しいCIDR表記を含まなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDRv4", |  | ||||||
| 			expected: "CIDRv4はIPv4アドレスの正しいCIDR表記を含まなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDRv6", |  | ||||||
| 			expected: "CIDRv6はIPv6アドレスの正しいCIDR表記を含まなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.SSN", |  | ||||||
| 			expected: "SSNは正しい社会保障番号でなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IP", |  | ||||||
| 			expected: "IPは正しいIPアドレスでなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPv4", |  | ||||||
| 			expected: "IPv4は正しいIPv4アドレスでなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPv6", |  | ||||||
| 			expected: "IPv6は正しいIPv6アドレスでなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.DataURI", |  | ||||||
| 			expected: "DataURIは正しいデータURIを含まなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Latitude", |  | ||||||
| 			expected: "Latitudeは正しい緯度の座標を含まなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Longitude", |  | ||||||
| 			expected: "Longitudeは正しい経度の座標を含まなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MultiByte", |  | ||||||
| 			expected: "MultiByteはマルチバイト文字を含まなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ASCII", |  | ||||||
| 			expected: "ASCIIはASCII文字のみを含まなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.PrintableASCII", |  | ||||||
| 			expected: "PrintableASCIIは印刷可能なASCII文字のみを含まなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID", |  | ||||||
| 			expected: "UUIDは正しいUUIDでなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID3", |  | ||||||
| 			expected: "UUID3はバージョンが3の正しいUUIDでなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID4", |  | ||||||
| 			expected: "UUID4はバージョンが4の正しいUUIDでなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID5", |  | ||||||
| 			expected: "UUID5はバージョンが4の正しいUUIDでなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN", |  | ||||||
| 			expected: "ISBNは正しいISBN番号でなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN10", |  | ||||||
| 			expected: "ISBN10は正しいISBN-10番号でなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN13", |  | ||||||
| 			expected: "ISBN13は正しいISBN-13番号でなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Excludes", |  | ||||||
| 			expected: "Excludesには'text'というテキストを含むことはできません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ExcludesAll", |  | ||||||
| 			expected: "ExcludesAllには'!@#$'のどれも含めることはできません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ExcludesRune", |  | ||||||
| 			expected: "ExcludesRuneには'☻'を含めることはできません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ContainsAny", |  | ||||||
| 			expected: "ContainsAnyは'!@#$'の少なくとも1つを含まなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Contains", |  | ||||||
| 			expected: "Containsは'purpose'を含まなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Base64", |  | ||||||
| 			expected: "Base64は正しいBase64文字列でなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Email", |  | ||||||
| 			expected: "Emailは正しいメールアドレスでなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.URL", |  | ||||||
| 			expected: "URLは正しいURLでなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.URI", |  | ||||||
| 			expected: "URIは正しいURIでなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RGBColorString", |  | ||||||
| 			expected: "RGBColorStringは正しいRGBカラーコードでなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RGBAColorString", |  | ||||||
| 			expected: "RGBAColorStringは正しいRGBAカラーコードでなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HSLColorString", |  | ||||||
| 			expected: "HSLColorStringは正しいHSLカラーコードでなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HSLAColorString", |  | ||||||
| 			expected: "HSLAColorStringは正しいHSLAカラーコードでなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HexadecimalString", |  | ||||||
| 			expected: "HexadecimalStringは正しい16進表記でなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HexColorString", |  | ||||||
| 			expected: "HexColorStringは正しいHEXカラーコードでなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NumberString", |  | ||||||
| 			expected: "NumberStringは正しい数でなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NumericString", |  | ||||||
| 			expected: "NumericStringは正しい数字でなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.AlphanumString", |  | ||||||
| 			expected: "AlphanumStringはアルファベットと数字のみを含むことができます", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.AlphaString", |  | ||||||
| 			expected: "AlphaStringはアルファベットのみを含むことができます", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtFieldString", |  | ||||||
| 			expected: "LtFieldStringはMaxStringよりも小さくなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteFieldString", |  | ||||||
| 			expected: "LteFieldStringはMaxString以下でなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtFieldString", |  | ||||||
| 			expected: "GtFieldStringはMaxStringよりも大きくなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteFieldString", |  | ||||||
| 			expected: "GteFieldStringはMaxString以上でなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeFieldString", |  | ||||||
| 			expected: "NeFieldStringはEqFieldStringとは異ならなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtCSFieldString", |  | ||||||
| 			expected: "LtCSFieldStringはInner.LtCSFieldStringよりも小さくなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteCSFieldString", |  | ||||||
| 			expected: "LteCSFieldStringはInner.LteCSFieldString以下でなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtCSFieldString", |  | ||||||
| 			expected: "GtCSFieldStringはInner.GtCSFieldStringよりも大きくなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteCSFieldString", |  | ||||||
| 			expected: "GteCSFieldStringはInner.GteCSFieldString以上でなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeCSFieldString", |  | ||||||
| 			expected: "NeCSFieldStringはInner.NeCSFieldStringとは異ならなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqCSFieldString", |  | ||||||
| 			expected: "EqCSFieldStringはInner.EqCSFieldStringと等しくなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqFieldString", |  | ||||||
| 			expected: "EqFieldStringはMaxStringと等しくなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteString", |  | ||||||
| 			expected: "GteStringの長さは少なくとも3文字以上はなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteNumber", |  | ||||||
| 			expected: "GteNumberは5.56かより大きくなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteMultiple", |  | ||||||
| 			expected: "GteMultipleは少なくとも2つの項目を含まなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteTime", |  | ||||||
| 			expected: "GteTimeは現時刻以降でなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtString", |  | ||||||
| 			expected: "GtStringの長さは3文字よりも多くなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtNumber", |  | ||||||
| 			expected: "GtNumberは5.56よりも大きくなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtMultiple", |  | ||||||
| 			expected: "GtMultipleは2つの項目よりも多い項目を含まなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtTime", |  | ||||||
| 			expected: "GtTimeは現時刻よりも後でなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteString", |  | ||||||
| 			expected: "LteStringの長さは最大でも3文字でなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteNumber", |  | ||||||
| 			expected: "LteNumberは5.56かより小さくなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteMultiple", |  | ||||||
| 			expected: "LteMultipleは最大でも2つの項目を含まなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteTime", |  | ||||||
| 			expected: "LteTimeは現時刻以前でなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtString", |  | ||||||
| 			expected: "LtStringの長さは3文字よりも少なくなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtNumber", |  | ||||||
| 			expected: "LtNumberは5.56よりも小さくなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtMultiple", |  | ||||||
| 			expected: "LtMultipleは2つの項目よりも少ない項目を含まなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtTime", |  | ||||||
| 			expected: "LtTimeは現時刻よりも前でなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeString", |  | ||||||
| 			expected: "NeStringはと異ならなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeNumber", |  | ||||||
| 			expected: "NeNumberは0.00と異ならなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeMultiple", |  | ||||||
| 			expected: "NeMultipleの項目の数は0個と異ならなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqString", |  | ||||||
| 			expected: "EqStringは3と等しくありません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqNumber", |  | ||||||
| 			expected: "EqNumberは2.33と等しくありません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqMultiple", |  | ||||||
| 			expected: "EqMultipleは7と等しくありません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxString", |  | ||||||
| 			expected: "MaxStringの長さは最大でも3文字でなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxNumber", |  | ||||||
| 			expected: "MaxNumberは1,113.00かより小さくなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxMultiple", |  | ||||||
| 			expected: "MaxMultipleは最大でも7つの項目を含まなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinString", |  | ||||||
| 			expected: "MinStringの長さは少なくとも1文字はなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinNumber", |  | ||||||
| 			expected: "MinNumberは1,113.00かより大きくなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinMultiple", |  | ||||||
| 			expected: "MinMultipleは少なくとも7つの項目を含まなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenString", |  | ||||||
| 			expected: "LenStringの長さは1文字でなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenNumber", |  | ||||||
| 			expected: "LenNumberは1,113.00と等しくなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenMultiple", |  | ||||||
| 			expected: "LenMultipleは7つの項目を含まなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredString", |  | ||||||
| 			expected: "RequiredStringは必須フィールドです", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredNumber", |  | ||||||
| 			expected: "RequiredNumberは必須フィールドです", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredMultiple", |  | ||||||
| 			expected: "RequiredMultipleは必須フィールドです", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrMinLen", |  | ||||||
| 			expected: "StrPtrMinLenの長さは少なくとも10文字はなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrMaxLen", |  | ||||||
| 			expected: "StrPtrMaxLenの長さは最大でも1文字でなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLen", |  | ||||||
| 			expected: "StrPtrLenの長さは2文字でなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLt", |  | ||||||
| 			expected: "StrPtrLtの長さは1文字よりも少なくなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLte", |  | ||||||
| 			expected: "StrPtrLteの長さは最大でも1文字でなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrGt", |  | ||||||
| 			expected: "StrPtrGtの長さは10文字よりも多くなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrGte", |  | ||||||
| 			expected: "StrPtrGteの長さは少なくとも10文字以上はなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.OneOfString", |  | ||||||
| 			expected: "OneOfStringは[red green]のうちのいずれかでなければなりません", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.OneOfInt", |  | ||||||
| 			expected: "OneOfIntは[5 63]のうちのいずれかでなければなりません", |  | ||||||
| 		}, |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	for _, tt := range tests { |  | ||||||
| 
 |  | ||||||
| 		var fe validator.FieldError |  | ||||||
| 
 |  | ||||||
| 		for _, e := range errs { |  | ||||||
| 			if tt.ns == e.Namespace() { |  | ||||||
| 				fe = e |  | ||||||
| 				break |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		NotEqual(t, fe, nil) |  | ||||||
| 		Equal(t, tt.expected, fe.Translate(trans)) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -1,634 +0,0 @@ | ||||||
| package nl |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"testing" |  | ||||||
| 	"time" |  | ||||||
| 
 |  | ||||||
| 	. "git.ningdatech.com/ningda/gin_valid/go-playground/assert/v2" |  | ||||||
| 	english "git.ningdatech.com/ningda/gin_valid/go-playground/locales/en" |  | ||||||
| 	ut "git.ningdatech.com/ningda/gin_valid/go-playground/universal-translator" |  | ||||||
| 	"git.ningdatech.com/ningda/gin_valid/go-playground/validator/v10" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func TestTranslations(t *testing.T) { |  | ||||||
| 
 |  | ||||||
| 	eng := english.New() |  | ||||||
| 	uni := ut.New(eng, eng) |  | ||||||
| 	trans, _ := uni.GetTranslator("en") |  | ||||||
| 
 |  | ||||||
| 	validate := validator.New() |  | ||||||
| 
 |  | ||||||
| 	err := RegisterDefaultTranslations(validate, trans) |  | ||||||
| 	Equal(t, err, nil) |  | ||||||
| 
 |  | ||||||
| 	type Inner struct { |  | ||||||
| 		EqCSFieldString  string |  | ||||||
| 		NeCSFieldString  string |  | ||||||
| 		GtCSFieldString  string |  | ||||||
| 		GteCSFieldString string |  | ||||||
| 		LtCSFieldString  string |  | ||||||
| 		LteCSFieldString string |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	type Test struct { |  | ||||||
| 		Inner             Inner |  | ||||||
| 		RequiredString    string    `validate:"required"` |  | ||||||
| 		RequiredNumber    int       `validate:"required"` |  | ||||||
| 		RequiredMultiple  []string  `validate:"required"` |  | ||||||
| 		LenString         string    `validate:"len=1"` |  | ||||||
| 		LenNumber         float64   `validate:"len=1113.00"` |  | ||||||
| 		LenMultiple       []string  `validate:"len=7"` |  | ||||||
| 		MinString         string    `validate:"min=1"` |  | ||||||
| 		MinNumber         float64   `validate:"min=1113.00"` |  | ||||||
| 		MinMultiple       []string  `validate:"min=7"` |  | ||||||
| 		MaxString         string    `validate:"max=3"` |  | ||||||
| 		MaxNumber         float64   `validate:"max=1113.00"` |  | ||||||
| 		MaxMultiple       []string  `validate:"max=7"` |  | ||||||
| 		EqString          string    `validate:"eq=3"` |  | ||||||
| 		EqNumber          float64   `validate:"eq=2.33"` |  | ||||||
| 		EqMultiple        []string  `validate:"eq=7"` |  | ||||||
| 		NeString          string    `validate:"ne="` |  | ||||||
| 		NeNumber          float64   `validate:"ne=0.00"` |  | ||||||
| 		NeMultiple        []string  `validate:"ne=0"` |  | ||||||
| 		LtString          string    `validate:"lt=3"` |  | ||||||
| 		LtNumber          float64   `validate:"lt=5.56"` |  | ||||||
| 		LtMultiple        []string  `validate:"lt=2"` |  | ||||||
| 		LtTime            time.Time `validate:"lt"` |  | ||||||
| 		LteString         string    `validate:"lte=3"` |  | ||||||
| 		LteNumber         float64   `validate:"lte=5.56"` |  | ||||||
| 		LteMultiple       []string  `validate:"lte=2"` |  | ||||||
| 		LteTime           time.Time `validate:"lte"` |  | ||||||
| 		GtString          string    `validate:"gt=3"` |  | ||||||
| 		GtNumber          float64   `validate:"gt=5.56"` |  | ||||||
| 		GtMultiple        []string  `validate:"gt=2"` |  | ||||||
| 		GtTime            time.Time `validate:"gt"` |  | ||||||
| 		GteString         string    `validate:"gte=3"` |  | ||||||
| 		GteNumber         float64   `validate:"gte=5.56"` |  | ||||||
| 		GteMultiple       []string  `validate:"gte=2"` |  | ||||||
| 		GteTime           time.Time `validate:"gte"` |  | ||||||
| 		EqFieldString     string    `validate:"eqfield=MaxString"` |  | ||||||
| 		EqCSFieldString   string    `validate:"eqcsfield=Inner.EqCSFieldString"` |  | ||||||
| 		NeCSFieldString   string    `validate:"necsfield=Inner.NeCSFieldString"` |  | ||||||
| 		GtCSFieldString   string    `validate:"gtcsfield=Inner.GtCSFieldString"` |  | ||||||
| 		GteCSFieldString  string    `validate:"gtecsfield=Inner.GteCSFieldString"` |  | ||||||
| 		LtCSFieldString   string    `validate:"ltcsfield=Inner.LtCSFieldString"` |  | ||||||
| 		LteCSFieldString  string    `validate:"ltecsfield=Inner.LteCSFieldString"` |  | ||||||
| 		NeFieldString     string    `validate:"nefield=EqFieldString"` |  | ||||||
| 		GtFieldString     string    `validate:"gtfield=MaxString"` |  | ||||||
| 		GteFieldString    string    `validate:"gtefield=MaxString"` |  | ||||||
| 		LtFieldString     string    `validate:"ltfield=MaxString"` |  | ||||||
| 		LteFieldString    string    `validate:"ltefield=MaxString"` |  | ||||||
| 		AlphaString       string    `validate:"alpha"` |  | ||||||
| 		AlphanumString    string    `validate:"alphanum"` |  | ||||||
| 		NumericString     string    `validate:"numeric"` |  | ||||||
| 		NumberString      string    `validate:"number"` |  | ||||||
| 		HexadecimalString string    `validate:"hexadecimal"` |  | ||||||
| 		HexColorString    string    `validate:"hexcolor"` |  | ||||||
| 		RGBColorString    string    `validate:"rgb"` |  | ||||||
| 		RGBAColorString   string    `validate:"rgba"` |  | ||||||
| 		HSLColorString    string    `validate:"hsl"` |  | ||||||
| 		HSLAColorString   string    `validate:"hsla"` |  | ||||||
| 		Email             string    `validate:"email"` |  | ||||||
| 		URL               string    `validate:"url"` |  | ||||||
| 		URI               string    `validate:"uri"` |  | ||||||
| 		Base64            string    `validate:"base64"` |  | ||||||
| 		Contains          string    `validate:"contains=purpose"` |  | ||||||
| 		ContainsAny       string    `validate:"containsany=!@#$"` |  | ||||||
| 		Excludes          string    `validate:"excludes=text"` |  | ||||||
| 		ExcludesAll       string    `validate:"excludesall=!@#$"` |  | ||||||
| 		ExcludesRune      string    `validate:"excludesrune=☻"` |  | ||||||
| 		ISBN              string    `validate:"isbn"` |  | ||||||
| 		ISBN10            string    `validate:"isbn10"` |  | ||||||
| 		ISBN13            string    `validate:"isbn13"` |  | ||||||
| 		UUID              string    `validate:"uuid"` |  | ||||||
| 		UUID3             string    `validate:"uuid3"` |  | ||||||
| 		UUID4             string    `validate:"uuid4"` |  | ||||||
| 		UUID5             string    `validate:"uuid5"` |  | ||||||
| 		ASCII             string    `validate:"ascii"` |  | ||||||
| 		PrintableASCII    string    `validate:"printascii"` |  | ||||||
| 		MultiByte         string    `validate:"multibyte"` |  | ||||||
| 		DataURI           string    `validate:"datauri"` |  | ||||||
| 		Latitude          string    `validate:"latitude"` |  | ||||||
| 		Longitude         string    `validate:"longitude"` |  | ||||||
| 		SSN               string    `validate:"ssn"` |  | ||||||
| 		IP                string    `validate:"ip"` |  | ||||||
| 		IPv4              string    `validate:"ipv4"` |  | ||||||
| 		IPv6              string    `validate:"ipv6"` |  | ||||||
| 		CIDR              string    `validate:"cidr"` |  | ||||||
| 		CIDRv4            string    `validate:"cidrv4"` |  | ||||||
| 		CIDRv6            string    `validate:"cidrv6"` |  | ||||||
| 		TCPAddr           string    `validate:"tcp_addr"` |  | ||||||
| 		TCPAddrv4         string    `validate:"tcp4_addr"` |  | ||||||
| 		TCPAddrv6         string    `validate:"tcp6_addr"` |  | ||||||
| 		UDPAddr           string    `validate:"udp_addr"` |  | ||||||
| 		UDPAddrv4         string    `validate:"udp4_addr"` |  | ||||||
| 		UDPAddrv6         string    `validate:"udp6_addr"` |  | ||||||
| 		IPAddr            string    `validate:"ip_addr"` |  | ||||||
| 		IPAddrv4          string    `validate:"ip4_addr"` |  | ||||||
| 		IPAddrv6          string    `validate:"ip6_addr"` |  | ||||||
| 		UinxAddr          string    `validate:"unix_addr"` // can't fail from within Go's net package currently, but maybe in the future
 |  | ||||||
| 		MAC               string    `validate:"mac"` |  | ||||||
| 		IsColor           string    `validate:"iscolor"` |  | ||||||
| 		StrPtrMinLen      *string   `validate:"min=10"` |  | ||||||
| 		StrPtrMaxLen      *string   `validate:"max=1"` |  | ||||||
| 		StrPtrLen         *string   `validate:"len=2"` |  | ||||||
| 		StrPtrLt          *string   `validate:"lt=1"` |  | ||||||
| 		StrPtrLte         *string   `validate:"lte=1"` |  | ||||||
| 		StrPtrGt          *string   `validate:"gt=10"` |  | ||||||
| 		StrPtrGte         *string   `validate:"gte=10"` |  | ||||||
| 		OneOfString       string    `validate:"oneof=red green"` |  | ||||||
| 		OneOfInt          int       `validate:"oneof=5 63"` |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	var test Test |  | ||||||
| 
 |  | ||||||
| 	test.Inner.EqCSFieldString = "1234" |  | ||||||
| 	test.Inner.GtCSFieldString = "1234" |  | ||||||
| 	test.Inner.GteCSFieldString = "1234" |  | ||||||
| 
 |  | ||||||
| 	test.MaxString = "1234" |  | ||||||
| 	test.MaxNumber = 2000 |  | ||||||
| 	test.MaxMultiple = make([]string, 9) |  | ||||||
| 
 |  | ||||||
| 	test.LtString = "1234" |  | ||||||
| 	test.LtNumber = 6 |  | ||||||
| 	test.LtMultiple = make([]string, 3) |  | ||||||
| 	test.LtTime = time.Now().Add(time.Hour * 24) |  | ||||||
| 
 |  | ||||||
| 	test.LteString = "1234" |  | ||||||
| 	test.LteNumber = 6 |  | ||||||
| 	test.LteMultiple = make([]string, 3) |  | ||||||
| 	test.LteTime = time.Now().Add(time.Hour * 24) |  | ||||||
| 
 |  | ||||||
| 	test.LtFieldString = "12345" |  | ||||||
| 	test.LteFieldString = "12345" |  | ||||||
| 
 |  | ||||||
| 	test.LtCSFieldString = "1234" |  | ||||||
| 	test.LteCSFieldString = "1234" |  | ||||||
| 
 |  | ||||||
| 	test.AlphaString = "abc3" |  | ||||||
| 	test.AlphanumString = "abc3!" |  | ||||||
| 	test.NumericString = "12E.00" |  | ||||||
| 	test.NumberString = "12E" |  | ||||||
| 
 |  | ||||||
| 	test.Excludes = "this is some test text" |  | ||||||
| 	test.ExcludesAll = "This is Great!" |  | ||||||
| 	test.ExcludesRune = "Love it ☻" |  | ||||||
| 
 |  | ||||||
| 	test.ASCII = "カタカナ" |  | ||||||
| 	test.PrintableASCII = "カタカナ" |  | ||||||
| 
 |  | ||||||
| 	test.MultiByte = "1234feerf" |  | ||||||
| 
 |  | ||||||
| 	s := "toolong" |  | ||||||
| 	test.StrPtrMaxLen = &s |  | ||||||
| 	test.StrPtrLen = &s |  | ||||||
| 
 |  | ||||||
| 	err = validate.Struct(test) |  | ||||||
| 	NotEqual(t, err, nil) |  | ||||||
| 
 |  | ||||||
| 	errs, ok := err.(validator.ValidationErrors) |  | ||||||
| 	Equal(t, ok, true) |  | ||||||
| 
 |  | ||||||
| 	tests := []struct { |  | ||||||
| 		ns       string |  | ||||||
| 		expected string |  | ||||||
| 	}{ |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IsColor", |  | ||||||
| 			expected: "IsColor moet een geldige kleur zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MAC", |  | ||||||
| 			expected: "MAC moet een geldig MAC adres bevatten", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddr", |  | ||||||
| 			expected: "IPAddr moet een oplosbaar IP adres zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddrv4", |  | ||||||
| 			expected: "IPAddrv4 moet een oplosbaar IPv4 adres zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddrv6", |  | ||||||
| 			expected: "IPAddrv6 moet een oplosbaar IPv6 adres zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddr", |  | ||||||
| 			expected: "UDPAddr moet een geldig UDP adres zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddrv4", |  | ||||||
| 			expected: "UDPAddrv4 moet een geldig IPv4 UDP adres zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddrv6", |  | ||||||
| 			expected: "UDPAddrv6 moet een geldig IPv6 UDP adres zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddr", |  | ||||||
| 			expected: "TCPAddr moet een geldig TCP adres zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddrv4", |  | ||||||
| 			expected: "TCPAddrv4 moet een geldig IPv4 TCP adres zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddrv6", |  | ||||||
| 			expected: "TCPAddrv6 moet een geldig IPv6 TCP adres zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDR", |  | ||||||
| 			expected: "CIDR moet een geldige CIDR notatie bevatten", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDRv4", |  | ||||||
| 			expected: "CIDRv4 moet een geldige CIDR notatie voor een IPv4 adres bevatten", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDRv6", |  | ||||||
| 			expected: "CIDRv6 moet een geldige CIDR notatie voor een IPv6 adres bevatten", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.SSN", |  | ||||||
| 			expected: "SSN moet een geldig SSN nummer zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IP", |  | ||||||
| 			expected: "IP moet een geldig IP adres zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPv4", |  | ||||||
| 			expected: "IPv4 moet een geldig IPv4 adres zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPv6", |  | ||||||
| 			expected: "IPv6 moet een geldig IPv6 adres zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.DataURI", |  | ||||||
| 			expected: "DataURI moet een geldige Data URI bevatten", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Latitude", |  | ||||||
| 			expected: "Latitude moet geldige breedtegraadcoördinaten bevatten", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Longitude", |  | ||||||
| 			expected: "Longitude moet geldige lengtegraadcoördinaten bevatten", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MultiByte", |  | ||||||
| 			expected: "MultiByte moet multibyte karakters bevatten", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ASCII", |  | ||||||
| 			expected: "ASCII mag alleen ascii karakters bevatten", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.PrintableASCII", |  | ||||||
| 			expected: "PrintableASCII mag alleen afdrukbare ascii karakters bevatten", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID", |  | ||||||
| 			expected: "UUID moet een geldige UUID zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID3", |  | ||||||
| 			expected: "UUID3 moet een geldige versie 3 UUID zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID4", |  | ||||||
| 			expected: "UUID4 moet een geldige versie 4 UUID zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID5", |  | ||||||
| 			expected: "UUID5 moet een geldige versie 5 UUID zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN", |  | ||||||
| 			expected: "ISBN moet een geldig ISBN nummer zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN10", |  | ||||||
| 			expected: "ISBN10 moet een geldig ISBN-10 nummer zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN13", |  | ||||||
| 			expected: "ISBN13 moet een geldig ISBN-13 nummer zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Excludes", |  | ||||||
| 			expected: "Excludes mag niet de tekst 'text' bevatten", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ExcludesAll", |  | ||||||
| 			expected: "ExcludesAll mag niet een van de volgende karakters bevatten '!@#$'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ExcludesRune", |  | ||||||
| 			expected: "ExcludesRune mag niet het volgende bevatten '☻'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ContainsAny", |  | ||||||
| 			expected: "ContainsAny moet tenminste een van de volgende karakters bevatten '!@#$'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Contains", |  | ||||||
| 			expected: "Contains moet de tekst 'purpose' bevatten", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Base64", |  | ||||||
| 			expected: "Base64 moet een geldige Base64 string zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Email", |  | ||||||
| 			expected: "Email moet een geldig email adres zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.URL", |  | ||||||
| 			expected: "URL moet een geldige URL zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.URI", |  | ||||||
| 			expected: "URI moet een geldige URI zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RGBColorString", |  | ||||||
| 			expected: "RGBColorString moet een geldige RGB kleur zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RGBAColorString", |  | ||||||
| 			expected: "RGBAColorString moet een geldige RGBA kleur zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HSLColorString", |  | ||||||
| 			expected: "HSLColorString moet een geldige HSL kleur zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HSLAColorString", |  | ||||||
| 			expected: "HSLAColorString moet een geldige HSLA kleur zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HexadecimalString", |  | ||||||
| 			expected: "HexadecimalString moet een geldig hexadecimaal getal zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HexColorString", |  | ||||||
| 			expected: "HexColorString moet een geldige HEX kleur zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NumberString", |  | ||||||
| 			expected: "NumberString moet een geldig getal zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NumericString", |  | ||||||
| 			expected: "NumericString moet een geldige numerieke waarde zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.AlphanumString", |  | ||||||
| 			expected: "AlphanumString mag alleen alfanumerieke karakters bevatten", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.AlphaString", |  | ||||||
| 			expected: "AlphaString mag alleen alfabetische karakters bevatten", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtFieldString", |  | ||||||
| 			expected: "LtFieldString moet kleiner zijn dan MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteFieldString", |  | ||||||
| 			expected: "LteFieldString moet kleiner dan of gelijk aan MaxString zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtFieldString", |  | ||||||
| 			expected: "GtFieldString moet groter zijn dan MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteFieldString", |  | ||||||
| 			expected: "GteFieldString moet groter dan of gelijk aan MaxString zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeFieldString", |  | ||||||
| 			expected: "NeFieldString mag niet gelijk zijn aan EqFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtCSFieldString", |  | ||||||
| 			expected: "LtCSFieldString moet kleiner zijn dan Inner.LtCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteCSFieldString", |  | ||||||
| 			expected: "LteCSFieldString moet kleiner dan of gelijk aan Inner.LteCSFieldString zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtCSFieldString", |  | ||||||
| 			expected: "GtCSFieldString moet groter zijn dan Inner.GtCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteCSFieldString", |  | ||||||
| 			expected: "GteCSFieldString moet groter dan of gelijk aan Inner.GteCSFieldString zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeCSFieldString", |  | ||||||
| 			expected: "NeCSFieldString mag niet gelijk zijn aan Inner.NeCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqCSFieldString", |  | ||||||
| 			expected: "EqCSFieldString moet gelijk zijn aan Inner.EqCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqFieldString", |  | ||||||
| 			expected: "EqFieldString moet gelijk zijn aan MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteString", |  | ||||||
| 			expected: "GteString moet tenminste 3 karakters lang zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteNumber", |  | ||||||
| 			expected: "GteNumber moet 5.56 of groter zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteMultiple", |  | ||||||
| 			expected: "GteMultiple moet tenminste 2 items bevatten", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteTime", |  | ||||||
| 			expected: "GteTime moet groter dan of gelijk zijn aan de huidige datum & tijd", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtString", |  | ||||||
| 			expected: "GtString moet langer dan 3 karakters zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtNumber", |  | ||||||
| 			expected: "GtNumber moet groter zijn dan 5.56", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtMultiple", |  | ||||||
| 			expected: "GtMultiple moet meer dan 2 items bevatten", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtTime", |  | ||||||
| 			expected: "GtTime moet groter zijn dan de huidige datum & tijd", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteString", |  | ||||||
| 			expected: "LteString mag maximaal 3 karakters lang zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteNumber", |  | ||||||
| 			expected: "LteNumber moet 5.56 of minder zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteMultiple", |  | ||||||
| 			expected: "LteMultiple mag maximaal 2 items bevatten", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteTime", |  | ||||||
| 			expected: "LteTime moet kleiner dan of gelijk aan de huidige datum & tijd zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtString", |  | ||||||
| 			expected: "LtString moet minder dan 3 karakters lang zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtNumber", |  | ||||||
| 			expected: "LtNumber moet kleiner zijn dan 5.56", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtMultiple", |  | ||||||
| 			expected: "LtMultiple moet minder dan 2 items bevatten", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtTime", |  | ||||||
| 			expected: "LtTime moet kleiner zijn dan de huidige datum & tijd", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeString", |  | ||||||
| 			expected: "NeString mag niet gelijk zijn aan ", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeNumber", |  | ||||||
| 			expected: "NeNumber mag niet gelijk zijn aan 0.00", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeMultiple", |  | ||||||
| 			expected: "NeMultiple mag niet gelijk zijn aan 0", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqString", |  | ||||||
| 			expected: "EqString is niet gelijk aan 3", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqNumber", |  | ||||||
| 			expected: "EqNumber is niet gelijk aan 2.33", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqMultiple", |  | ||||||
| 			expected: "EqMultiple is niet gelijk aan 7", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxString", |  | ||||||
| 			expected: "MaxString mag maximaal 3 karakters lang zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxNumber", |  | ||||||
| 			expected: "MaxNumber moet 1,113.00 of kleiner zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxMultiple", |  | ||||||
| 			expected: "MaxMultiple mag maximaal 7 items bevatten", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinString", |  | ||||||
| 			expected: "MinString moet tenminste 1 karakter lang zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinNumber", |  | ||||||
| 			expected: "MinNumber moet 1,113.00 of groter zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinMultiple", |  | ||||||
| 			expected: "MinMultiple moet tenminste 7 items bevatten", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenString", |  | ||||||
| 			expected: "LenString moet 1 karakter lang zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenNumber", |  | ||||||
| 			expected: "LenNumber moet gelijk zijn aan 1,113.00", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenMultiple", |  | ||||||
| 			expected: "LenMultiple moet 7 items bevatten", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredString", |  | ||||||
| 			expected: "RequiredString is een verplicht veld", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredNumber", |  | ||||||
| 			expected: "RequiredNumber is een verplicht veld", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredMultiple", |  | ||||||
| 			expected: "RequiredMultiple is een verplicht veld", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrMinLen", |  | ||||||
| 			expected: "StrPtrMinLen moet tenminste 10 karakters lang zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrMaxLen", |  | ||||||
| 			expected: "StrPtrMaxLen mag maximaal 1 karakter lang zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLen", |  | ||||||
| 			expected: "StrPtrLen moet 2 karakters lang zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLt", |  | ||||||
| 			expected: "StrPtrLt moet minder dan 1 karakter lang zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLte", |  | ||||||
| 			expected: "StrPtrLte mag maximaal 1 karakter lang zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrGt", |  | ||||||
| 			expected: "StrPtrGt moet langer dan 10 karakters zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrGte", |  | ||||||
| 			expected: "StrPtrGte moet tenminste 10 karakters lang zijn", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.OneOfString", |  | ||||||
| 			expected: "OneOfString moet een van de volgende zijn [red green]", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.OneOfInt", |  | ||||||
| 			expected: "OneOfInt moet een van de volgende zijn [5 63]", |  | ||||||
| 		}, |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	for _, tt := range tests { |  | ||||||
| 
 |  | ||||||
| 		var fe validator.FieldError |  | ||||||
| 
 |  | ||||||
| 		for _, e := range errs { |  | ||||||
| 			if tt.ns == e.Namespace() { |  | ||||||
| 				fe = e |  | ||||||
| 				break |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		NotEqual(t, fe, nil) |  | ||||||
| 		Equal(t, tt.expected, fe.Translate(trans)) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -1,677 +0,0 @@ | ||||||
| package pt |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"testing" |  | ||||||
| 	"time" |  | ||||||
| 
 |  | ||||||
| 	. "git.ningdatech.com/ningda/gin_valid/go-playground/assert/v2" |  | ||||||
| 	"git.ningdatech.com/ningda/gin_valid/go-playground/locales/pt" |  | ||||||
| 	ut "git.ningdatech.com/ningda/gin_valid/go-playground/universal-translator" |  | ||||||
| 
 |  | ||||||
| 	"git.ningdatech.com/ningda/gin_valid/go-playground/validator/v10" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func TestTranslations(t *testing.T) { |  | ||||||
| 
 |  | ||||||
| 	pt := pt.New() |  | ||||||
| 	uni := ut.New(pt, pt) |  | ||||||
| 	trans, _ := uni.GetTranslator("pt") |  | ||||||
| 
 |  | ||||||
| 	validate := validator.New() |  | ||||||
| 
 |  | ||||||
| 	err := RegisterDefaultTranslations(validate, trans) |  | ||||||
| 	Equal(t, err, nil) |  | ||||||
| 
 |  | ||||||
| 	type Inner struct { |  | ||||||
| 		EqCSFieldString  string |  | ||||||
| 		NeCSFieldString  string |  | ||||||
| 		GtCSFieldString  string |  | ||||||
| 		GteCSFieldString string |  | ||||||
| 		LtCSFieldString  string |  | ||||||
| 		LteCSFieldString string |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	type Test struct { |  | ||||||
| 		Inner             Inner |  | ||||||
| 		RequiredString    string            `validate:"required"` |  | ||||||
| 		RequiredNumber    int               `validate:"required"` |  | ||||||
| 		RequiredMultiple  []string          `validate:"required"` |  | ||||||
| 		LenString         string            `validate:"len=1"` |  | ||||||
| 		LenNumber         float64           `validate:"len=1113.00"` |  | ||||||
| 		LenMultiple       []string          `validate:"len=7"` |  | ||||||
| 		MinString         string            `validate:"min=1"` |  | ||||||
| 		MinNumber         float64           `validate:"min=1113.00"` |  | ||||||
| 		MinMultiple       []string          `validate:"min=7"` |  | ||||||
| 		MaxString         string            `validate:"max=3"` |  | ||||||
| 		MaxNumber         float64           `validate:"max=1113.00"` |  | ||||||
| 		MaxMultiple       []string          `validate:"max=7"` |  | ||||||
| 		EqString          string            `validate:"eq=3"` |  | ||||||
| 		EqNumber          float64           `validate:"eq=2.33"` |  | ||||||
| 		EqMultiple        []string          `validate:"eq=7"` |  | ||||||
| 		NeString          string            `validate:"ne="` |  | ||||||
| 		NeNumber          float64           `validate:"ne=0.00"` |  | ||||||
| 		NeMultiple        []string          `validate:"ne=0"` |  | ||||||
| 		LtString          string            `validate:"lt=3"` |  | ||||||
| 		LtNumber          float64           `validate:"lt=5.56"` |  | ||||||
| 		LtMultiple        []string          `validate:"lt=2"` |  | ||||||
| 		LtTime            time.Time         `validate:"lt"` |  | ||||||
| 		LteString         string            `validate:"lte=3"` |  | ||||||
| 		LteNumber         float64           `validate:"lte=5.56"` |  | ||||||
| 		LteMultiple       []string          `validate:"lte=2"` |  | ||||||
| 		LteTime           time.Time         `validate:"lte"` |  | ||||||
| 		GtString          string            `validate:"gt=3"` |  | ||||||
| 		GtNumber          float64           `validate:"gt=5.56"` |  | ||||||
| 		GtMultiple        []string          `validate:"gt=2"` |  | ||||||
| 		GtTime            time.Time         `validate:"gt"` |  | ||||||
| 		GteString         string            `validate:"gte=3"` |  | ||||||
| 		GteNumber         float64           `validate:"gte=5.56"` |  | ||||||
| 		GteMultiple       []string          `validate:"gte=2"` |  | ||||||
| 		GteTime           time.Time         `validate:"gte"` |  | ||||||
| 		EqFieldString     string            `validate:"eqfield=MaxString"` |  | ||||||
| 		EqCSFieldString   string            `validate:"eqcsfield=Inner.EqCSFieldString"` |  | ||||||
| 		NeCSFieldString   string            `validate:"necsfield=Inner.NeCSFieldString"` |  | ||||||
| 		GtCSFieldString   string            `validate:"gtcsfield=Inner.GtCSFieldString"` |  | ||||||
| 		GteCSFieldString  string            `validate:"gtecsfield=Inner.GteCSFieldString"` |  | ||||||
| 		LtCSFieldString   string            `validate:"ltcsfield=Inner.LtCSFieldString"` |  | ||||||
| 		LteCSFieldString  string            `validate:"ltecsfield=Inner.LteCSFieldString"` |  | ||||||
| 		NeFieldString     string            `validate:"nefield=EqFieldString"` |  | ||||||
| 		GtFieldString     string            `validate:"gtfield=MaxString"` |  | ||||||
| 		GteFieldString    string            `validate:"gtefield=MaxString"` |  | ||||||
| 		LtFieldString     string            `validate:"ltfield=MaxString"` |  | ||||||
| 		LteFieldString    string            `validate:"ltefield=MaxString"` |  | ||||||
| 		AlphaString       string            `validate:"alpha"` |  | ||||||
| 		AlphanumString    string            `validate:"alphanum"` |  | ||||||
| 		NumericString     string            `validate:"numeric"` |  | ||||||
| 		NumberString      string            `validate:"number"` |  | ||||||
| 		HexadecimalString string            `validate:"hexadecimal"` |  | ||||||
| 		HexColorString    string            `validate:"hexcolor"` |  | ||||||
| 		RGBColorString    string            `validate:"rgb"` |  | ||||||
| 		RGBAColorString   string            `validate:"rgba"` |  | ||||||
| 		HSLColorString    string            `validate:"hsl"` |  | ||||||
| 		HSLAColorString   string            `validate:"hsla"` |  | ||||||
| 		Email             string            `validate:"email"` |  | ||||||
| 		URL               string            `validate:"url"` |  | ||||||
| 		URI               string            `validate:"uri"` |  | ||||||
| 		Base64            string            `validate:"base64"` |  | ||||||
| 		Contains          string            `validate:"contains=purpose"` |  | ||||||
| 		ContainsAny       string            `validate:"containsany=!@#$"` |  | ||||||
| 		Excludes          string            `validate:"excludes=text"` |  | ||||||
| 		ExcludesAll       string            `validate:"excludesall=!@#$"` |  | ||||||
| 		ExcludesRune      string            `validate:"excludesrune=☻"` |  | ||||||
| 		ISBN              string            `validate:"isbn"` |  | ||||||
| 		ISBN10            string            `validate:"isbn10"` |  | ||||||
| 		ISBN13            string            `validate:"isbn13"` |  | ||||||
| 		UUID              string            `validate:"uuid"` |  | ||||||
| 		UUID3             string            `validate:"uuid3"` |  | ||||||
| 		UUID4             string            `validate:"uuid4"` |  | ||||||
| 		UUID5             string            `validate:"uuid5"` |  | ||||||
| 		ASCII             string            `validate:"ascii"` |  | ||||||
| 		PrintableASCII    string            `validate:"printascii"` |  | ||||||
| 		MultiByte         string            `validate:"multibyte"` |  | ||||||
| 		DataURI           string            `validate:"datauri"` |  | ||||||
| 		Latitude          string            `validate:"latitude"` |  | ||||||
| 		Longitude         string            `validate:"longitude"` |  | ||||||
| 		SSN               string            `validate:"ssn"` |  | ||||||
| 		IP                string            `validate:"ip"` |  | ||||||
| 		IPv4              string            `validate:"ipv4"` |  | ||||||
| 		IPv6              string            `validate:"ipv6"` |  | ||||||
| 		CIDR              string            `validate:"cidr"` |  | ||||||
| 		CIDRv4            string            `validate:"cidrv4"` |  | ||||||
| 		CIDRv6            string            `validate:"cidrv6"` |  | ||||||
| 		TCPAddr           string            `validate:"tcp_addr"` |  | ||||||
| 		TCPAddrv4         string            `validate:"tcp4_addr"` |  | ||||||
| 		TCPAddrv6         string            `validate:"tcp6_addr"` |  | ||||||
| 		UDPAddr           string            `validate:"udp_addr"` |  | ||||||
| 		UDPAddrv4         string            `validate:"udp4_addr"` |  | ||||||
| 		UDPAddrv6         string            `validate:"udp6_addr"` |  | ||||||
| 		IPAddr            string            `validate:"ip_addr"` |  | ||||||
| 		IPAddrv4          string            `validate:"ip4_addr"` |  | ||||||
| 		IPAddrv6          string            `validate:"ip6_addr"` |  | ||||||
| 		UinxAddr          string            `validate:"unix_addr"` // can't fail from within Go's net package currently, but maybe in the future
 |  | ||||||
| 		MAC               string            `validate:"mac"` |  | ||||||
| 		IsColor           string            `validate:"iscolor"` |  | ||||||
| 		StrPtrMinLen      *string           `validate:"min=10"` |  | ||||||
| 		StrPtrMaxLen      *string           `validate:"max=1"` |  | ||||||
| 		StrPtrLen         *string           `validate:"len=2"` |  | ||||||
| 		StrPtrLt          *string           `validate:"lt=1"` |  | ||||||
| 		StrPtrLte         *string           `validate:"lte=1"` |  | ||||||
| 		StrPtrGt          *string           `validate:"gt=10"` |  | ||||||
| 		StrPtrGte         *string           `validate:"gte=10"` |  | ||||||
| 		OneOfString       string            `validate:"oneof=red green"` |  | ||||||
| 		OneOfInt          int               `validate:"oneof=5 63"` |  | ||||||
| 		UniqueSlice       []string          `validate:"unique"` |  | ||||||
| 		UniqueArray       [3]string         `validate:"unique"` |  | ||||||
| 		UniqueMap         map[string]string `validate:"unique"` |  | ||||||
| 		JSONString        string            `validate:"json"` |  | ||||||
| 		LowercaseString   string            `validate:"lowercase"` |  | ||||||
| 		UppercaseString   string            `validate:"uppercase"` |  | ||||||
| 		Datetime          string            `validate:"datetime=2006-01-02"` |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	var test Test |  | ||||||
| 
 |  | ||||||
| 	test.Inner.EqCSFieldString = "1234" |  | ||||||
| 	test.Inner.GtCSFieldString = "1234" |  | ||||||
| 	test.Inner.GteCSFieldString = "1234" |  | ||||||
| 
 |  | ||||||
| 	test.MaxString = "1234" |  | ||||||
| 	test.MaxNumber = 2000 |  | ||||||
| 	test.MaxMultiple = make([]string, 9) |  | ||||||
| 
 |  | ||||||
| 	test.LtString = "1234" |  | ||||||
| 	test.LtNumber = 6 |  | ||||||
| 	test.LtMultiple = make([]string, 3) |  | ||||||
| 	test.LtTime = time.Now().Add(time.Hour * 24) |  | ||||||
| 
 |  | ||||||
| 	test.LteString = "1234" |  | ||||||
| 	test.LteNumber = 6 |  | ||||||
| 	test.LteMultiple = make([]string, 3) |  | ||||||
| 	test.LteTime = time.Now().Add(time.Hour * 24) |  | ||||||
| 
 |  | ||||||
| 	test.LtFieldString = "12345" |  | ||||||
| 	test.LteFieldString = "12345" |  | ||||||
| 
 |  | ||||||
| 	test.LtCSFieldString = "1234" |  | ||||||
| 	test.LteCSFieldString = "1234" |  | ||||||
| 
 |  | ||||||
| 	test.AlphaString = "abc3" |  | ||||||
| 	test.AlphanumString = "abc3!" |  | ||||||
| 	test.NumericString = "12E.00" |  | ||||||
| 	test.NumberString = "12E" |  | ||||||
| 
 |  | ||||||
| 	test.Excludes = "this is some test text" |  | ||||||
| 	test.ExcludesAll = "This is Great!" |  | ||||||
| 	test.ExcludesRune = "Love it ☻" |  | ||||||
| 
 |  | ||||||
| 	test.ASCII = "カタカナ" |  | ||||||
| 	test.PrintableASCII = "カタカナ" |  | ||||||
| 
 |  | ||||||
| 	test.MultiByte = "1234feerf" |  | ||||||
| 
 |  | ||||||
| 	test.LowercaseString = "ABCDEFG" |  | ||||||
| 	test.UppercaseString = "abcdefg" |  | ||||||
| 
 |  | ||||||
| 	s := "toolong" |  | ||||||
| 	test.StrPtrMaxLen = &s |  | ||||||
| 	test.StrPtrLen = &s |  | ||||||
| 
 |  | ||||||
| 	test.UniqueSlice = []string{"1234", "1234"} |  | ||||||
| 	test.UniqueMap = map[string]string{"key1": "1234", "key2": "1234"} |  | ||||||
| 	test.Datetime = "2008-Feb-01" |  | ||||||
| 
 |  | ||||||
| 	err = validate.Struct(test) |  | ||||||
| 	NotEqual(t, err, nil) |  | ||||||
| 
 |  | ||||||
| 	errs, ok := err.(validator.ValidationErrors) |  | ||||||
| 	Equal(t, ok, true) |  | ||||||
| 
 |  | ||||||
| 	tests := []struct { |  | ||||||
| 		ns       string |  | ||||||
| 		expected string |  | ||||||
| 	}{ |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IsColor", |  | ||||||
| 			expected: "IsColor deve ser uma cor válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MAC", |  | ||||||
| 			expected: "MAC deve conter um endereço MAC válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddr", |  | ||||||
| 			expected: "IPAddr deve ser um endereço IP resolvível", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddrv4", |  | ||||||
| 			expected: "IPAddrv4 deve ser um endereço IPv4 resolvível", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddrv6", |  | ||||||
| 			expected: "IPAddrv6 deve ser um endereço IPv6 resolvível", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddr", |  | ||||||
| 			expected: "UDPAddr deve ser um endereço UDP válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddrv4", |  | ||||||
| 			expected: "UDPAddrv4 deve ser um endereço UDP IPv4 válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddrv6", |  | ||||||
| 			expected: "UDPAddrv6 deve ser um endereço UDP IPv6 válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddr", |  | ||||||
| 			expected: "TCPAddr deve ser um endereço TCP válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddrv4", |  | ||||||
| 			expected: "TCPAddrv4 deve ser um endereço TCP IPv4 válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddrv6", |  | ||||||
| 			expected: "TCPAddrv6 deve ser um endereço TCP IPv6 válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDR", |  | ||||||
| 			expected: "CIDR não respeita a notação CIDR", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDRv4", |  | ||||||
| 			expected: "CIDRv4 não respeita a notação CIDR para um endereço IPv4", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDRv6", |  | ||||||
| 			expected: "CIDRv6 não respeita a notação CIDR para um endereço IPv6", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.SSN", |  | ||||||
| 			expected: "SSN deve ser um número SSN válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IP", |  | ||||||
| 			expected: "IP deve ser um endereço IP válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPv4", |  | ||||||
| 			expected: "IPv4 deve ser um endereço IPv4 válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPv6", |  | ||||||
| 			expected: "IPv6 deve ser um endereço IPv6 válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.DataURI", |  | ||||||
| 			expected: "DataURI deve conter um Data URI válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Latitude", |  | ||||||
| 			expected: "Latitude deve conter uma coordenada de latitude válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Longitude", |  | ||||||
| 			expected: "Longitude deve conter uma coordenada de longitude válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MultiByte", |  | ||||||
| 			expected: "MultiByte deve conter caracteres multibyte", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ASCII", |  | ||||||
| 			expected: "ASCII deve conter apenas caracteres ascii", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.PrintableASCII", |  | ||||||
| 			expected: "PrintableASCII deve conter apenas caracteres ascii imprimíveis", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID", |  | ||||||
| 			expected: "UUID deve ser um UUID válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID3", |  | ||||||
| 			expected: "UUID3 deve ser um UUID versão 3 válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID4", |  | ||||||
| 			expected: "UUID4 deve ser um UUID versão 4 válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID5", |  | ||||||
| 			expected: "UUID5 deve ser um UUID versão 5 válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN", |  | ||||||
| 			expected: "ISBN deve ser um número de ISBN válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN10", |  | ||||||
| 			expected: "ISBN10 deve ser um número ISBN-10 válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN13", |  | ||||||
| 			expected: "ISBN13 deve ser um número ISBN-13 válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Excludes", |  | ||||||
| 			expected: "Excludes não deve conter o texto 'text'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ExcludesAll", |  | ||||||
| 			expected: "ExcludesAll não deve conter os seguintes caracteres '!@#$'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ExcludesRune", |  | ||||||
| 			expected: "ExcludesRune não pode conter o seguinte '☻'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ContainsAny", |  | ||||||
| 			expected: "ContainsAny deve conter pelo menos um dos seguintes caracteres '!@#$'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Contains", |  | ||||||
| 			expected: "Contains deve conter o texto 'purpose'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Base64", |  | ||||||
| 			expected: "Base64 deve ser uma string Base64 válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Email", |  | ||||||
| 			expected: "Email deve ser um endereço de e-mail válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.URL", |  | ||||||
| 			expected: "URL deve ser um URL válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.URI", |  | ||||||
| 			expected: "URI deve ser um URI válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RGBColorString", |  | ||||||
| 			expected: "RGBColorString deve ser uma cor RGB válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RGBAColorString", |  | ||||||
| 			expected: "RGBAColorString deve ser uma cor RGBA válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HSLColorString", |  | ||||||
| 			expected: "HSLColorString deve ser uma cor HSL válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HSLAColorString", |  | ||||||
| 			expected: "HSLAColorString deve ser uma cor HSLA válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HexadecimalString", |  | ||||||
| 			expected: "HexadecimalString deve ser um hexadecimal válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HexColorString", |  | ||||||
| 			expected: "HexColorString deve ser uma cor HEX válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NumberString", |  | ||||||
| 			expected: "NumberString deve ser um número válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NumericString", |  | ||||||
| 			expected: "NumericString deve ser um valor numérico válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.AlphanumString", |  | ||||||
| 			expected: "AlphanumString deve conter apenas caracteres alfanuméricos", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.AlphaString", |  | ||||||
| 			expected: "AlphaString deve conter apenas caracteres alfabéticos", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtFieldString", |  | ||||||
| 			expected: "LtFieldString deve ser menor que MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteFieldString", |  | ||||||
| 			expected: "LteFieldString deve ser menor ou igual que MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtFieldString", |  | ||||||
| 			expected: "GtFieldString deve ser maior que MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteFieldString", |  | ||||||
| 			expected: "GteFieldString deve ser maior ou igual que MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeFieldString", |  | ||||||
| 			expected: "NeFieldString não deve ser igual a EqFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtCSFieldString", |  | ||||||
| 			expected: "LtCSFieldString deve ser menor que Inner.LtCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteCSFieldString", |  | ||||||
| 			expected: "LteCSFieldString deve ser menor ou igual que Inner.LteCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtCSFieldString", |  | ||||||
| 			expected: "GtCSFieldString deve ser maior que Inner.GtCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteCSFieldString", |  | ||||||
| 			expected: "GteCSFieldString deve ser maior ou igual que Inner.GteCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeCSFieldString", |  | ||||||
| 			expected: "NeCSFieldString não deve ser igual a Inner.NeCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqCSFieldString", |  | ||||||
| 			expected: "EqCSFieldString deve ser igual a Inner.EqCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqFieldString", |  | ||||||
| 			expected: "EqFieldString deve ser igual a MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteString", |  | ||||||
| 			expected: "GteString deve ter pelo menos 3 caracteres", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteNumber", |  | ||||||
| 			expected: "GteNumber deve ser maior ou igual a 5,56", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteMultiple", |  | ||||||
| 			expected: "GteMultiple deve conter pelo menos 2 items", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteTime", |  | ||||||
| 			expected: "GteTime deve ser posterior ou igual à data/hora atual", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtString", |  | ||||||
| 			expected: "GtString deve conter mais de 3 caracteres", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtNumber", |  | ||||||
| 			expected: "GtNumber deve ser maior que 5,56", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtMultiple", |  | ||||||
| 			expected: "GtMultiple deve conter mais de 2 items", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtTime", |  | ||||||
| 			expected: "GtTime deve ser posterior à data/hora atual", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteString", |  | ||||||
| 			expected: "LteString deve ter no máximo 3 caracteres", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteNumber", |  | ||||||
| 			expected: "LteNumber deve ser menor ou igual a 5,56", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteMultiple", |  | ||||||
| 			expected: "LteMultiple deve conter no máximo 2 items", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteTime", |  | ||||||
| 			expected: "LteTime deve ser anterior ou igual à data/hora atual", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtString", |  | ||||||
| 			expected: "LtString deve ter menos de 3 caracteres", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtNumber", |  | ||||||
| 			expected: "LtNumber deve ser menor que 5,56", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtMultiple", |  | ||||||
| 			expected: "LtMultiple deve conter menos de 2 items", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtTime", |  | ||||||
| 			expected: "LtTime deve ser anterior à data / hora atual", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeString", |  | ||||||
| 			expected: "NeString não deve ser igual a ", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeNumber", |  | ||||||
| 			expected: "NeNumber não deve ser igual a 0.00", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeMultiple", |  | ||||||
| 			expected: "NeMultiple não deve ser igual a 0", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqString", |  | ||||||
| 			expected: "EqString não é igual a 3", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqNumber", |  | ||||||
| 			expected: "EqNumber não é igual a 2.33", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqMultiple", |  | ||||||
| 			expected: "EqMultiple não é igual a 7", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxString", |  | ||||||
| 			expected: "MaxString deve ter no máximo 3 caracteres", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxNumber", |  | ||||||
| 			expected: "MaxNumber deve ser 1.113,00 ou menos", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxMultiple", |  | ||||||
| 			expected: "MaxMultiple deve conter no máximo 7 items", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinString", |  | ||||||
| 			expected: "MinString deve ter pelo menos 1 caractere", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinNumber", |  | ||||||
| 			expected: "MinNumber deve ser 1.113,00 ou superior", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinMultiple", |  | ||||||
| 			expected: "MinMultiple deve conter pelo menos 7 items", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenString", |  | ||||||
| 			expected: "LenString deve ter 1 caractere", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenNumber", |  | ||||||
| 			expected: "LenNumber deve ser igual a 1.113,00", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenMultiple", |  | ||||||
| 			expected: "LenMultiple deve conter 7 items", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredString", |  | ||||||
| 			expected: "RequiredString é obrigatório", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredNumber", |  | ||||||
| 			expected: "RequiredNumber é obrigatório", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredMultiple", |  | ||||||
| 			expected: "RequiredMultiple é obrigatório", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrMinLen", |  | ||||||
| 			expected: "StrPtrMinLen deve ter pelo menos 10 caracteres", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrMaxLen", |  | ||||||
| 			expected: "StrPtrMaxLen deve ter no máximo 1 caractere", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLen", |  | ||||||
| 			expected: "StrPtrLen deve ter 2 caracteres", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLt", |  | ||||||
| 			expected: "StrPtrLt deve ter menos de 1 caractere", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLte", |  | ||||||
| 			expected: "StrPtrLte deve ter no máximo 1 caractere", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrGt", |  | ||||||
| 			expected: "StrPtrGt deve conter mais de 10 caracteres", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrGte", |  | ||||||
| 			expected: "StrPtrGte deve ter pelo menos 10 caracteres", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.OneOfString", |  | ||||||
| 			expected: "OneOfString deve ser um de [red green]", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.OneOfInt", |  | ||||||
| 			expected: "OneOfInt deve ser um de [5 63]", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UniqueSlice", |  | ||||||
| 			expected: "UniqueSlice deve conter valores únicos", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UniqueArray", |  | ||||||
| 			expected: "UniqueArray deve conter valores únicos", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UniqueMap", |  | ||||||
| 			expected: "UniqueMap deve conter valores únicos", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.JSONString", |  | ||||||
| 			expected: "JSONString deve ser uma string json válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LowercaseString", |  | ||||||
| 			expected: "LowercaseString deve estar em minuscúlas", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UppercaseString", |  | ||||||
| 			expected: "UppercaseString deve estar em maiúsculas", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Datetime", |  | ||||||
| 			expected: "Datetime não está no formato 2006-01-02", |  | ||||||
| 		}, |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	for _, tt := range tests { |  | ||||||
| 
 |  | ||||||
| 		var fe validator.FieldError |  | ||||||
| 
 |  | ||||||
| 		for _, e := range errs { |  | ||||||
| 			if tt.ns == e.Namespace() { |  | ||||||
| 				fe = e |  | ||||||
| 				break |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		NotEqual(t, fe, nil) |  | ||||||
| 		Equal(t, tt.expected, fe.Translate(trans)) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -1,634 +0,0 @@ | ||||||
| package pt_BR |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"testing" |  | ||||||
| 	"time" |  | ||||||
| 
 |  | ||||||
| 	. "git.ningdatech.com/ningda/gin_valid/go-playground/assert/v2" |  | ||||||
| 	brazilian_portuguese "git.ningdatech.com/ningda/gin_valid/go-playground/locales/pt_BR" |  | ||||||
| 	ut "git.ningdatech.com/ningda/gin_valid/go-playground/universal-translator" |  | ||||||
| 	"git.ningdatech.com/ningda/gin_valid/go-playground/validator/v10" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func TestTranslations(t *testing.T) { |  | ||||||
| 
 |  | ||||||
| 	ptbr := brazilian_portuguese.New() |  | ||||||
| 	uni := ut.New(ptbr, ptbr) |  | ||||||
| 	trans, _ := uni.GetTranslator("pt_BR") |  | ||||||
| 
 |  | ||||||
| 	validate := validator.New() |  | ||||||
| 
 |  | ||||||
| 	err := RegisterDefaultTranslations(validate, trans) |  | ||||||
| 	Equal(t, err, nil) |  | ||||||
| 
 |  | ||||||
| 	type Inner struct { |  | ||||||
| 		EqCSFieldString  string |  | ||||||
| 		NeCSFieldString  string |  | ||||||
| 		GtCSFieldString  string |  | ||||||
| 		GteCSFieldString string |  | ||||||
| 		LtCSFieldString  string |  | ||||||
| 		LteCSFieldString string |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	type Test struct { |  | ||||||
| 		Inner             Inner |  | ||||||
| 		RequiredString    string    `validate:"required"` |  | ||||||
| 		RequiredNumber    int       `validate:"required"` |  | ||||||
| 		RequiredMultiple  []string  `validate:"required"` |  | ||||||
| 		LenString         string    `validate:"len=1"` |  | ||||||
| 		LenNumber         float64   `validate:"len=1113.00"` |  | ||||||
| 		LenMultiple       []string  `validate:"len=7"` |  | ||||||
| 		MinString         string    `validate:"min=1"` |  | ||||||
| 		MinNumber         float64   `validate:"min=1113.00"` |  | ||||||
| 		MinMultiple       []string  `validate:"min=7"` |  | ||||||
| 		MaxString         string    `validate:"max=3"` |  | ||||||
| 		MaxNumber         float64   `validate:"max=1113.00"` |  | ||||||
| 		MaxMultiple       []string  `validate:"max=7"` |  | ||||||
| 		EqString          string    `validate:"eq=3"` |  | ||||||
| 		EqNumber          float64   `validate:"eq=2.33"` |  | ||||||
| 		EqMultiple        []string  `validate:"eq=7"` |  | ||||||
| 		NeString          string    `validate:"ne="` |  | ||||||
| 		NeNumber          float64   `validate:"ne=0.00"` |  | ||||||
| 		NeMultiple        []string  `validate:"ne=0"` |  | ||||||
| 		LtString          string    `validate:"lt=3"` |  | ||||||
| 		LtNumber          float64   `validate:"lt=5.56"` |  | ||||||
| 		LtMultiple        []string  `validate:"lt=2"` |  | ||||||
| 		LtTime            time.Time `validate:"lt"` |  | ||||||
| 		LteString         string    `validate:"lte=3"` |  | ||||||
| 		LteNumber         float64   `validate:"lte=5.56"` |  | ||||||
| 		LteMultiple       []string  `validate:"lte=2"` |  | ||||||
| 		LteTime           time.Time `validate:"lte"` |  | ||||||
| 		GtString          string    `validate:"gt=3"` |  | ||||||
| 		GtNumber          float64   `validate:"gt=5.56"` |  | ||||||
| 		GtMultiple        []string  `validate:"gt=2"` |  | ||||||
| 		GtTime            time.Time `validate:"gt"` |  | ||||||
| 		GteString         string    `validate:"gte=3"` |  | ||||||
| 		GteNumber         float64   `validate:"gte=5.56"` |  | ||||||
| 		GteMultiple       []string  `validate:"gte=2"` |  | ||||||
| 		GteTime           time.Time `validate:"gte"` |  | ||||||
| 		EqFieldString     string    `validate:"eqfield=MaxString"` |  | ||||||
| 		EqCSFieldString   string    `validate:"eqcsfield=Inner.EqCSFieldString"` |  | ||||||
| 		NeCSFieldString   string    `validate:"necsfield=Inner.NeCSFieldString"` |  | ||||||
| 		GtCSFieldString   string    `validate:"gtcsfield=Inner.GtCSFieldString"` |  | ||||||
| 		GteCSFieldString  string    `validate:"gtecsfield=Inner.GteCSFieldString"` |  | ||||||
| 		LtCSFieldString   string    `validate:"ltcsfield=Inner.LtCSFieldString"` |  | ||||||
| 		LteCSFieldString  string    `validate:"ltecsfield=Inner.LteCSFieldString"` |  | ||||||
| 		NeFieldString     string    `validate:"nefield=EqFieldString"` |  | ||||||
| 		GtFieldString     string    `validate:"gtfield=MaxString"` |  | ||||||
| 		GteFieldString    string    `validate:"gtefield=MaxString"` |  | ||||||
| 		LtFieldString     string    `validate:"ltfield=MaxString"` |  | ||||||
| 		LteFieldString    string    `validate:"ltefield=MaxString"` |  | ||||||
| 		AlphaString       string    `validate:"alpha"` |  | ||||||
| 		AlphanumString    string    `validate:"alphanum"` |  | ||||||
| 		NumericString     string    `validate:"numeric"` |  | ||||||
| 		NumberString      string    `validate:"number"` |  | ||||||
| 		HexadecimalString string    `validate:"hexadecimal"` |  | ||||||
| 		HexColorString    string    `validate:"hexcolor"` |  | ||||||
| 		RGBColorString    string    `validate:"rgb"` |  | ||||||
| 		RGBAColorString   string    `validate:"rgba"` |  | ||||||
| 		HSLColorString    string    `validate:"hsl"` |  | ||||||
| 		HSLAColorString   string    `validate:"hsla"` |  | ||||||
| 		Email             string    `validate:"email"` |  | ||||||
| 		URL               string    `validate:"url"` |  | ||||||
| 		URI               string    `validate:"uri"` |  | ||||||
| 		Base64            string    `validate:"base64"` |  | ||||||
| 		Contains          string    `validate:"contains=purpose"` |  | ||||||
| 		ContainsAny       string    `validate:"containsany=!@#$"` |  | ||||||
| 		Excludes          string    `validate:"excludes=text"` |  | ||||||
| 		ExcludesAll       string    `validate:"excludesall=!@#$"` |  | ||||||
| 		ExcludesRune      string    `validate:"excludesrune=☻"` |  | ||||||
| 		ISBN              string    `validate:"isbn"` |  | ||||||
| 		ISBN10            string    `validate:"isbn10"` |  | ||||||
| 		ISBN13            string    `validate:"isbn13"` |  | ||||||
| 		UUID              string    `validate:"uuid"` |  | ||||||
| 		UUID3             string    `validate:"uuid3"` |  | ||||||
| 		UUID4             string    `validate:"uuid4"` |  | ||||||
| 		UUID5             string    `validate:"uuid5"` |  | ||||||
| 		ASCII             string    `validate:"ascii"` |  | ||||||
| 		PrintableASCII    string    `validate:"printascii"` |  | ||||||
| 		MultiByte         string    `validate:"multibyte"` |  | ||||||
| 		DataURI           string    `validate:"datauri"` |  | ||||||
| 		Latitude          string    `validate:"latitude"` |  | ||||||
| 		Longitude         string    `validate:"longitude"` |  | ||||||
| 		SSN               string    `validate:"ssn"` |  | ||||||
| 		IP                string    `validate:"ip"` |  | ||||||
| 		IPv4              string    `validate:"ipv4"` |  | ||||||
| 		IPv6              string    `validate:"ipv6"` |  | ||||||
| 		CIDR              string    `validate:"cidr"` |  | ||||||
| 		CIDRv4            string    `validate:"cidrv4"` |  | ||||||
| 		CIDRv6            string    `validate:"cidrv6"` |  | ||||||
| 		TCPAddr           string    `validate:"tcp_addr"` |  | ||||||
| 		TCPAddrv4         string    `validate:"tcp4_addr"` |  | ||||||
| 		TCPAddrv6         string    `validate:"tcp6_addr"` |  | ||||||
| 		UDPAddr           string    `validate:"udp_addr"` |  | ||||||
| 		UDPAddrv4         string    `validate:"udp4_addr"` |  | ||||||
| 		UDPAddrv6         string    `validate:"udp6_addr"` |  | ||||||
| 		IPAddr            string    `validate:"ip_addr"` |  | ||||||
| 		IPAddrv4          string    `validate:"ip4_addr"` |  | ||||||
| 		IPAddrv6          string    `validate:"ip6_addr"` |  | ||||||
| 		UinxAddr          string    `validate:"unix_addr"` // can't fail from within Go's net package currently, but maybe in the future
 |  | ||||||
| 		MAC               string    `validate:"mac"` |  | ||||||
| 		IsColor           string    `validate:"iscolor"` |  | ||||||
| 		StrPtrMinLen      *string   `validate:"min=10"` |  | ||||||
| 		StrPtrMaxLen      *string   `validate:"max=1"` |  | ||||||
| 		StrPtrLen         *string   `validate:"len=2"` |  | ||||||
| 		StrPtrLt          *string   `validate:"lt=1"` |  | ||||||
| 		StrPtrLte         *string   `validate:"lte=1"` |  | ||||||
| 		StrPtrGt          *string   `validate:"gt=10"` |  | ||||||
| 		StrPtrGte         *string   `validate:"gte=10"` |  | ||||||
| 		OneOfString       string    `validate:"oneof=red green"` |  | ||||||
| 		OneOfInt          int       `validate:"oneof=5 63"` |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	var test Test |  | ||||||
| 
 |  | ||||||
| 	test.Inner.EqCSFieldString = "1234" |  | ||||||
| 	test.Inner.GtCSFieldString = "1234" |  | ||||||
| 	test.Inner.GteCSFieldString = "1234" |  | ||||||
| 
 |  | ||||||
| 	test.MaxString = "1234" |  | ||||||
| 	test.MaxNumber = 2000 |  | ||||||
| 	test.MaxMultiple = make([]string, 9) |  | ||||||
| 
 |  | ||||||
| 	test.LtString = "1234" |  | ||||||
| 	test.LtNumber = 6 |  | ||||||
| 	test.LtMultiple = make([]string, 3) |  | ||||||
| 	test.LtTime = time.Now().Add(time.Hour * 24) |  | ||||||
| 
 |  | ||||||
| 	test.LteString = "1234" |  | ||||||
| 	test.LteNumber = 6 |  | ||||||
| 	test.LteMultiple = make([]string, 3) |  | ||||||
| 	test.LteTime = time.Now().Add(time.Hour * 24) |  | ||||||
| 
 |  | ||||||
| 	test.LtFieldString = "12345" |  | ||||||
| 	test.LteFieldString = "12345" |  | ||||||
| 
 |  | ||||||
| 	test.LtCSFieldString = "1234" |  | ||||||
| 	test.LteCSFieldString = "1234" |  | ||||||
| 
 |  | ||||||
| 	test.AlphaString = "abc3" |  | ||||||
| 	test.AlphanumString = "abc3!" |  | ||||||
| 	test.NumericString = "12E.00" |  | ||||||
| 	test.NumberString = "12E" |  | ||||||
| 
 |  | ||||||
| 	test.Excludes = "este é um texto de teste" |  | ||||||
| 	test.ExcludesAll = "Isso é Ótimo!" |  | ||||||
| 	test.ExcludesRune = "Amo isso ☻" |  | ||||||
| 
 |  | ||||||
| 	test.ASCII = "カタカナ" |  | ||||||
| 	test.PrintableASCII = "カタカナ" |  | ||||||
| 
 |  | ||||||
| 	test.MultiByte = "1234feerf" |  | ||||||
| 
 |  | ||||||
| 	s := "toolong" |  | ||||||
| 	test.StrPtrMaxLen = &s |  | ||||||
| 	test.StrPtrLen = &s |  | ||||||
| 
 |  | ||||||
| 	err = validate.Struct(test) |  | ||||||
| 	NotEqual(t, err, nil) |  | ||||||
| 
 |  | ||||||
| 	errs, ok := err.(validator.ValidationErrors) |  | ||||||
| 	Equal(t, ok, true) |  | ||||||
| 
 |  | ||||||
| 	tests := []struct { |  | ||||||
| 		ns       string |  | ||||||
| 		expected string |  | ||||||
| 	}{ |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IsColor", |  | ||||||
| 			expected: "IsColor deve ser uma cor válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MAC", |  | ||||||
| 			expected: "MAC deve conter um endereço MAC válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddr", |  | ||||||
| 			expected: "IPAddr deve ser um endereço IP resolvível", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddrv4", |  | ||||||
| 			expected: "IPAddrv4 deve ser um endereço IPv4 resolvível", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddrv6", |  | ||||||
| 			expected: "IPAddrv6 deve ser um endereço IPv6 resolvível", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddr", |  | ||||||
| 			expected: "UDPAddr deve ser um endereço UDP válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddrv4", |  | ||||||
| 			expected: "UDPAddrv4 deve ser um endereço IPv4 UDP válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddrv6", |  | ||||||
| 			expected: "UDPAddrv6 deve ser um endereço IPv6 UDP válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddr", |  | ||||||
| 			expected: "TCPAddr deve ser um endereço TCP válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddrv4", |  | ||||||
| 			expected: "TCPAddrv4 deve ser um endereço IPv4 TCP válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddrv6", |  | ||||||
| 			expected: "TCPAddrv6 deve ser um endereço IPv6 TCP válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDR", |  | ||||||
| 			expected: "CIDR deve conter uma notação CIDR válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDRv4", |  | ||||||
| 			expected: "CIDRv4 deve conter uma notação CIDR válida para um endereço IPv4", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDRv6", |  | ||||||
| 			expected: "CIDRv6 deve conter uma notação CIDR válida para um endereço IPv6", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.SSN", |  | ||||||
| 			expected: "SSN deve ser um número SSN válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IP", |  | ||||||
| 			expected: "IP deve ser um endereço de IP válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPv4", |  | ||||||
| 			expected: "IPv4 deve ser um endereço IPv4 válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPv6", |  | ||||||
| 			expected: "IPv6 deve ser um endereço IPv6 válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.DataURI", |  | ||||||
| 			expected: "DataURI deve conter um URI data válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Latitude", |  | ||||||
| 			expected: "Latitude deve conter uma coordenada de latitude válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Longitude", |  | ||||||
| 			expected: "Longitude deve conter uma coordenada de longitude válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MultiByte", |  | ||||||
| 			expected: "MultiByte deve conter caracteres multibyte", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ASCII", |  | ||||||
| 			expected: "ASCII deve conter apenas caracteres ascii", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.PrintableASCII", |  | ||||||
| 			expected: "PrintableASCII deve conter apenas caracteres ascii imprimíveis", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID", |  | ||||||
| 			expected: "UUID deve ser um UUID válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID3", |  | ||||||
| 			expected: "UUID3 deve ser um UUID versão 3 válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID4", |  | ||||||
| 			expected: "UUID4 deve ser um UUID versão 4 válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID5", |  | ||||||
| 			expected: "UUID5 deve ser um UUID versão 5 válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN", |  | ||||||
| 			expected: "ISBN deve ser um número ISBN válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN10", |  | ||||||
| 			expected: "ISBN10 deve ser um número ISBN-10 válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN13", |  | ||||||
| 			expected: "ISBN13 deve ser um número ISBN-13 válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Excludes", |  | ||||||
| 			expected: "Excludes não deve conter o texto 'text'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ExcludesAll", |  | ||||||
| 			expected: "ExcludesAll não deve conter nenhum dos caracteres '!@#$'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ExcludesRune", |  | ||||||
| 			expected: "ExcludesRune não deve conter '☻'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ContainsAny", |  | ||||||
| 			expected: "ContainsAny deve conter pelo menos um dos caracteres '!@#$'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Contains", |  | ||||||
| 			expected: "Contains deve conter o texto 'purpose'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Base64", |  | ||||||
| 			expected: "Base64 deve ser uma string Base64 válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Email", |  | ||||||
| 			expected: "Email deve ser um endereço de e-mail válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.URL", |  | ||||||
| 			expected: "URL deve ser uma URL válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.URI", |  | ||||||
| 			expected: "URI deve ser uma URI válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RGBColorString", |  | ||||||
| 			expected: "RGBColorString deve ser uma cor RGB válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RGBAColorString", |  | ||||||
| 			expected: "RGBAColorString deve ser uma cor RGBA válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HSLColorString", |  | ||||||
| 			expected: "HSLColorString deve ser uma cor HSL válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HSLAColorString", |  | ||||||
| 			expected: "HSLAColorString deve ser uma cor HSLA válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HexadecimalString", |  | ||||||
| 			expected: "HexadecimalString deve ser um hexadecimal válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HexColorString", |  | ||||||
| 			expected: "HexColorString deve ser uma cor HEX válida", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NumberString", |  | ||||||
| 			expected: "NumberString deve ser um número válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NumericString", |  | ||||||
| 			expected: "NumericString deve ser um valor numérico válido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.AlphanumString", |  | ||||||
| 			expected: "AlphanumString deve conter caracteres alfanuméricos", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.AlphaString", |  | ||||||
| 			expected: "AlphaString deve conter caracteres alfabéticos", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtFieldString", |  | ||||||
| 			expected: "LtFieldString deve ser menor que MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteFieldString", |  | ||||||
| 			expected: "LteFieldString deve ser menor ou igual a MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtFieldString", |  | ||||||
| 			expected: "GtFieldString deve ser maior do que MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteFieldString", |  | ||||||
| 			expected: "GteFieldString deve ser maior ou igual a MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeFieldString", |  | ||||||
| 			expected: "NeFieldString não deve ser igual a EqFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtCSFieldString", |  | ||||||
| 			expected: "LtCSFieldString deve ser menor que Inner.LtCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteCSFieldString", |  | ||||||
| 			expected: "LteCSFieldString deve ser menor ou igual a Inner.LteCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtCSFieldString", |  | ||||||
| 			expected: "GtCSFieldString deve ser maior do que Inner.GtCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteCSFieldString", |  | ||||||
| 			expected: "GteCSFieldString deve ser maior ou igual a Inner.GteCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeCSFieldString", |  | ||||||
| 			expected: "NeCSFieldString não deve ser igual a Inner.NeCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqCSFieldString", |  | ||||||
| 			expected: "EqCSFieldString deve ser igual a Inner.EqCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqFieldString", |  | ||||||
| 			expected: "EqFieldString deve ser igual a MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteString", |  | ||||||
| 			expected: "GteString deve ter pelo menos 3 caracteres", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteNumber", |  | ||||||
| 			expected: "GteNumber deve ser 5,56 ou superior", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteMultiple", |  | ||||||
| 			expected: "GteMultiple deve conter pelo menos 2 itens", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteTime", |  | ||||||
| 			expected: "GteTime deve ser maior ou igual à Data e Hora atual", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtString", |  | ||||||
| 			expected: "GtString deve ter mais de 3 caracteres", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtNumber", |  | ||||||
| 			expected: "GtNumber deve ser maior do que 5,56", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtMultiple", |  | ||||||
| 			expected: "GtMultiple deve conter mais de 2 itens", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtTime", |  | ||||||
| 			expected: "GtTime deve ser maior que a Data e Hora atual", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteString", |  | ||||||
| 			expected: "LteString deve ter no máximo 3 caracteres", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteNumber", |  | ||||||
| 			expected: "LteNumber deve ser 5,56 ou menor", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteMultiple", |  | ||||||
| 			expected: "LteMultiple deve conter no máximo 2 itens", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteTime", |  | ||||||
| 			expected: "LteTime deve ser menor ou igual à Data e Hora atual", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtString", |  | ||||||
| 			expected: "LtString deve ter menos de 3 caracteres", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtNumber", |  | ||||||
| 			expected: "LtNumber deve ser menor que 5,56", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtMultiple", |  | ||||||
| 			expected: "LtMultiple deve conter menos de 2 itens", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtTime", |  | ||||||
| 			expected: "LtTime deve ser inferior à Data e Hora atual", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeString", |  | ||||||
| 			expected: "NeString não deve ser igual a ", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeNumber", |  | ||||||
| 			expected: "NeNumber não deve ser igual a 0.00", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeMultiple", |  | ||||||
| 			expected: "NeMultiple não deve ser igual a 0", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqString", |  | ||||||
| 			expected: "EqString não é igual a 3", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqNumber", |  | ||||||
| 			expected: "EqNumber não é igual a 2.33", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqMultiple", |  | ||||||
| 			expected: "EqMultiple não é igual a 7", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxString", |  | ||||||
| 			expected: "MaxString deve ter no máximo 3 caracteres", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxNumber", |  | ||||||
| 			expected: "MaxNumber deve ser 1.113,00 ou menor", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxMultiple", |  | ||||||
| 			expected: "MaxMultiple deve conter no máximo 7 itens", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinString", |  | ||||||
| 			expected: "MinString deve ter pelo menos 1 caractere", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinNumber", |  | ||||||
| 			expected: "MinNumber deve ser 1.113,00 ou superior", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinMultiple", |  | ||||||
| 			expected: "MinMultiple deve conter pelo menos 7 itens", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenString", |  | ||||||
| 			expected: "LenString deve ter 1 caractere", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenNumber", |  | ||||||
| 			expected: "LenNumber deve ser igual a 1.113,00", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenMultiple", |  | ||||||
| 			expected: "LenMultiple deve conter 7 itens", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredString", |  | ||||||
| 			expected: "RequiredString é um campo requerido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredNumber", |  | ||||||
| 			expected: "RequiredNumber é um campo requerido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredMultiple", |  | ||||||
| 			expected: "RequiredMultiple é um campo requerido", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrMinLen", |  | ||||||
| 			expected: "StrPtrMinLen deve ter pelo menos 10 caracteres", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrMaxLen", |  | ||||||
| 			expected: "StrPtrMaxLen deve ter no máximo 1 caractere", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLen", |  | ||||||
| 			expected: "StrPtrLen deve ter 2 caracteres", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLt", |  | ||||||
| 			expected: "StrPtrLt deve ter menos de 1 caractere", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLte", |  | ||||||
| 			expected: "StrPtrLte deve ter no máximo 1 caractere", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrGt", |  | ||||||
| 			expected: "StrPtrGt deve ter mais de 10 caracteres", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrGte", |  | ||||||
| 			expected: "StrPtrGte deve ter pelo menos 10 caracteres", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.OneOfString", |  | ||||||
| 			expected: "OneOfString deve ser um de [red green]", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.OneOfInt", |  | ||||||
| 			expected: "OneOfInt deve ser um de [5 63]", |  | ||||||
| 		}, |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	for _, tt := range tests { |  | ||||||
| 
 |  | ||||||
| 		var fe validator.FieldError |  | ||||||
| 
 |  | ||||||
| 		for _, e := range errs { |  | ||||||
| 			if tt.ns == e.Namespace() { |  | ||||||
| 				fe = e |  | ||||||
| 				break |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		NotEqual(t, fe, nil) |  | ||||||
| 		Equal(t, tt.expected, fe.Translate(trans)) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -1,656 +0,0 @@ | ||||||
| package ru |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"log" |  | ||||||
| 	//"github.com/rustery/validator"
 |  | ||||||
| 	"testing" |  | ||||||
| 	"time" |  | ||||||
| 
 |  | ||||||
| 	. "git.ningdatech.com/ningda/gin_valid/go-playground/assert/v2" |  | ||||||
| 	russian "git.ningdatech.com/ningda/gin_valid/go-playground/locales/en" |  | ||||||
| 	ut "git.ningdatech.com/ningda/gin_valid/go-playground/universal-translator" |  | ||||||
| 	"git.ningdatech.com/ningda/gin_valid/go-playground/validator/v10" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func TestTranslations(t *testing.T) { |  | ||||||
| 
 |  | ||||||
| 	ru := russian.New() |  | ||||||
| 	uni := ut.New(ru, ru) |  | ||||||
| 	trans, _ := uni.GetTranslator("ru") |  | ||||||
| 
 |  | ||||||
| 	validate := validator.New() |  | ||||||
| 
 |  | ||||||
| 	err := RegisterDefaultTranslations(validate, trans) |  | ||||||
| 	Equal(t, err, nil) |  | ||||||
| 
 |  | ||||||
| 	type Inner struct { |  | ||||||
| 		EqCSFieldString  string |  | ||||||
| 		NeCSFieldString  string |  | ||||||
| 		GtCSFieldString  string |  | ||||||
| 		GteCSFieldString string |  | ||||||
| 		LtCSFieldString  string |  | ||||||
| 		LteCSFieldString string |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	type Test struct { |  | ||||||
| 		Inner             Inner |  | ||||||
| 		RequiredString    string            `validate:"required"` |  | ||||||
| 		RequiredNumber    int               `validate:"required"` |  | ||||||
| 		RequiredMultiple  []string          `validate:"required"` |  | ||||||
| 		LenString         string            `validate:"len=1"` |  | ||||||
| 		LenNumber         float64           `validate:"len=1113.00"` |  | ||||||
| 		LenMultiple       []string          `validate:"len=7"` |  | ||||||
| 		MinString         string            `validate:"min=1"` |  | ||||||
| 		MinNumber         float64           `validate:"min=1113.00"` |  | ||||||
| 		MinMultiple       []string          `validate:"min=7"` |  | ||||||
| 		MaxString         string            `validate:"max=3"` |  | ||||||
| 		MaxNumber         float64           `validate:"max=1113.00"` |  | ||||||
| 		MaxMultiple       []string          `validate:"max=7"` |  | ||||||
| 		EqString          string            `validate:"eq=3"` |  | ||||||
| 		EqNumber          float64           `validate:"eq=2.33"` |  | ||||||
| 		EqMultiple        []string          `validate:"eq=7"` |  | ||||||
| 		NeString          string            `validate:"ne="` |  | ||||||
| 		NeNumber          float64           `validate:"ne=0.00"` |  | ||||||
| 		NeMultiple        []string          `validate:"ne=0"` |  | ||||||
| 		LtString          string            `validate:"lt=3"` |  | ||||||
| 		LtNumber          float64           `validate:"lt=5.56"` |  | ||||||
| 		LtMultiple        []string          `validate:"lt=2"` |  | ||||||
| 		LtTime            time.Time         `validate:"lt"` |  | ||||||
| 		LteString         string            `validate:"lte=3"` |  | ||||||
| 		LteNumber         float64           `validate:"lte=5.56"` |  | ||||||
| 		LteMultiple       []string          `validate:"lte=2"` |  | ||||||
| 		LteTime           time.Time         `validate:"lte"` |  | ||||||
| 		GtString          string            `validate:"gt=3"` |  | ||||||
| 		GtNumber          float64           `validate:"gt=5.56"` |  | ||||||
| 		GtMultiple        []string          `validate:"gt=2"` |  | ||||||
| 		GtTime            time.Time         `validate:"gt"` |  | ||||||
| 		GteString         string            `validate:"gte=3"` |  | ||||||
| 		GteNumber         float64           `validate:"gte=5.56"` |  | ||||||
| 		GteMultiple       []string          `validate:"gte=2"` |  | ||||||
| 		GteTime           time.Time         `validate:"gte"` |  | ||||||
| 		EqFieldString     string            `validate:"eqfield=MaxString"` |  | ||||||
| 		EqCSFieldString   string            `validate:"eqcsfield=Inner.EqCSFieldString"` |  | ||||||
| 		NeCSFieldString   string            `validate:"necsfield=Inner.NeCSFieldString"` |  | ||||||
| 		GtCSFieldString   string            `validate:"gtcsfield=Inner.GtCSFieldString"` |  | ||||||
| 		GteCSFieldString  string            `validate:"gtecsfield=Inner.GteCSFieldString"` |  | ||||||
| 		LtCSFieldString   string            `validate:"ltcsfield=Inner.LtCSFieldString"` |  | ||||||
| 		LteCSFieldString  string            `validate:"ltecsfield=Inner.LteCSFieldString"` |  | ||||||
| 		NeFieldString     string            `validate:"nefield=EqFieldString"` |  | ||||||
| 		GtFieldString     string            `validate:"gtfield=MaxString"` |  | ||||||
| 		GteFieldString    string            `validate:"gtefield=MaxString"` |  | ||||||
| 		LtFieldString     string            `validate:"ltfield=MaxString"` |  | ||||||
| 		LteFieldString    string            `validate:"ltefield=MaxString"` |  | ||||||
| 		AlphaString       string            `validate:"alpha"` |  | ||||||
| 		AlphanumString    string            `validate:"alphanum"` |  | ||||||
| 		NumericString     string            `validate:"numeric"` |  | ||||||
| 		NumberString      string            `validate:"number"` |  | ||||||
| 		HexadecimalString string            `validate:"hexadecimal"` |  | ||||||
| 		HexColorString    string            `validate:"hexcolor"` |  | ||||||
| 		RGBColorString    string            `validate:"rgb"` |  | ||||||
| 		RGBAColorString   string            `validate:"rgba"` |  | ||||||
| 		HSLColorString    string            `validate:"hsl"` |  | ||||||
| 		HSLAColorString   string            `validate:"hsla"` |  | ||||||
| 		Email             string            `validate:"email"` |  | ||||||
| 		URL               string            `validate:"url"` |  | ||||||
| 		URI               string            `validate:"uri"` |  | ||||||
| 		Base64            string            `validate:"base64"` |  | ||||||
| 		Contains          string            `validate:"contains=purpose"` |  | ||||||
| 		ContainsAny       string            `validate:"containsany=!@#$"` |  | ||||||
| 		Excludes          string            `validate:"excludes=text"` |  | ||||||
| 		ExcludesAll       string            `validate:"excludesall=!@#$"` |  | ||||||
| 		ExcludesRune      string            `validate:"excludesrune=☻"` |  | ||||||
| 		ISBN              string            `validate:"isbn"` |  | ||||||
| 		ISBN10            string            `validate:"isbn10"` |  | ||||||
| 		ISBN13            string            `validate:"isbn13"` |  | ||||||
| 		UUID              string            `validate:"uuid"` |  | ||||||
| 		UUID3             string            `validate:"uuid3"` |  | ||||||
| 		UUID4             string            `validate:"uuid4"` |  | ||||||
| 		UUID5             string            `validate:"uuid5"` |  | ||||||
| 		ASCII             string            `validate:"ascii"` |  | ||||||
| 		PrintableASCII    string            `validate:"printascii"` |  | ||||||
| 		MultiByte         string            `validate:"multibyte"` |  | ||||||
| 		DataURI           string            `validate:"datauri"` |  | ||||||
| 		Latitude          string            `validate:"latitude"` |  | ||||||
| 		Longitude         string            `validate:"longitude"` |  | ||||||
| 		SSN               string            `validate:"ssn"` |  | ||||||
| 		IP                string            `validate:"ip"` |  | ||||||
| 		IPv4              string            `validate:"ipv4"` |  | ||||||
| 		IPv6              string            `validate:"ipv6"` |  | ||||||
| 		CIDR              string            `validate:"cidr"` |  | ||||||
| 		CIDRv4            string            `validate:"cidrv4"` |  | ||||||
| 		CIDRv6            string            `validate:"cidrv6"` |  | ||||||
| 		TCPAddr           string            `validate:"tcp_addr"` |  | ||||||
| 		TCPAddrv4         string            `validate:"tcp4_addr"` |  | ||||||
| 		TCPAddrv6         string            `validate:"tcp6_addr"` |  | ||||||
| 		UDPAddr           string            `validate:"udp_addr"` |  | ||||||
| 		UDPAddrv4         string            `validate:"udp4_addr"` |  | ||||||
| 		UDPAddrv6         string            `validate:"udp6_addr"` |  | ||||||
| 		IPAddr            string            `validate:"ip_addr"` |  | ||||||
| 		IPAddrv4          string            `validate:"ip4_addr"` |  | ||||||
| 		IPAddrv6          string            `validate:"ip6_addr"` |  | ||||||
| 		UinxAddr          string            `validate:"unix_addr"` // can't fail from within Go's net package currently, but maybe in the future
 |  | ||||||
| 		MAC               string            `validate:"mac"` |  | ||||||
| 		IsColor           string            `validate:"iscolor"` |  | ||||||
| 		StrPtrMinLen      *string           `validate:"min=10"` |  | ||||||
| 		StrPtrMaxLen      *string           `validate:"max=1"` |  | ||||||
| 		StrPtrLen         *string           `validate:"len=2"` |  | ||||||
| 		StrPtrLt          *string           `validate:"lt=1"` |  | ||||||
| 		StrPtrLte         *string           `validate:"lte=1"` |  | ||||||
| 		StrPtrGt          *string           `validate:"gt=10"` |  | ||||||
| 		StrPtrGte         *string           `validate:"gte=10"` |  | ||||||
| 		OneOfString       string            `validate:"oneof=red green"` |  | ||||||
| 		OneOfInt          int               `validate:"oneof=5 63"` |  | ||||||
| 		UniqueSlice       []string          `validate:"unique"` |  | ||||||
| 		UniqueArray       [3]string         `validate:"unique"` |  | ||||||
| 		UniqueMap         map[string]string `validate:"unique"` |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	var test Test |  | ||||||
| 
 |  | ||||||
| 	test.Inner.EqCSFieldString = "1234" |  | ||||||
| 	test.Inner.GtCSFieldString = "1234" |  | ||||||
| 	test.Inner.GteCSFieldString = "1234" |  | ||||||
| 
 |  | ||||||
| 	test.MaxString = "1234" |  | ||||||
| 	test.MaxNumber = 2000 |  | ||||||
| 	test.MaxMultiple = make([]string, 9) |  | ||||||
| 
 |  | ||||||
| 	test.LtString = "1234" |  | ||||||
| 	test.LtNumber = 6 |  | ||||||
| 	test.LtMultiple = make([]string, 3) |  | ||||||
| 	test.LtTime = time.Now().Add(time.Hour * 24) |  | ||||||
| 
 |  | ||||||
| 	test.LteString = "1234" |  | ||||||
| 	test.LteNumber = 6 |  | ||||||
| 	test.LteMultiple = make([]string, 3) |  | ||||||
| 	test.LteTime = time.Now().Add(time.Hour * 24) |  | ||||||
| 
 |  | ||||||
| 	test.LtFieldString = "12345" |  | ||||||
| 	test.LteFieldString = "12345" |  | ||||||
| 
 |  | ||||||
| 	test.LtCSFieldString = "1234" |  | ||||||
| 	test.LteCSFieldString = "1234" |  | ||||||
| 
 |  | ||||||
| 	test.AlphaString = "abc3" |  | ||||||
| 	test.AlphanumString = "abc3!" |  | ||||||
| 	test.NumericString = "12E.00" |  | ||||||
| 	test.NumberString = "12E" |  | ||||||
| 
 |  | ||||||
| 	test.Excludes = "this is some test text" |  | ||||||
| 	test.ExcludesAll = "This is Great!" |  | ||||||
| 	test.ExcludesRune = "Love it ☻" |  | ||||||
| 
 |  | ||||||
| 	test.ASCII = "カタカナ" |  | ||||||
| 	test.PrintableASCII = "カタカナ" |  | ||||||
| 
 |  | ||||||
| 	test.MultiByte = "1234feerf" |  | ||||||
| 
 |  | ||||||
| 	s := "toolong" |  | ||||||
| 	test.StrPtrMaxLen = &s |  | ||||||
| 	test.StrPtrLen = &s |  | ||||||
| 
 |  | ||||||
| 	test.UniqueSlice = []string{"1234", "1234"} |  | ||||||
| 	test.UniqueMap = map[string]string{"key1": "1234", "key2": "1234"} |  | ||||||
| 
 |  | ||||||
| 	err = validate.Struct(test) |  | ||||||
| 	NotEqual(t, err, nil) |  | ||||||
| 
 |  | ||||||
| 	errs, ok := err.(validator.ValidationErrors) |  | ||||||
| 	Equal(t, ok, true) |  | ||||||
| 
 |  | ||||||
| 	tests := []struct { |  | ||||||
| 		ns       string |  | ||||||
| 		expected string |  | ||||||
| 	}{ |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IsColor", |  | ||||||
| 			expected: "IsColor должен быть цветом", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MAC", |  | ||||||
| 			expected: "MAC должен содержать MAC адрес", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddr", |  | ||||||
| 			expected: "IPAddr должен быть распознаваемым IP адресом", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddrv4", |  | ||||||
| 			expected: "IPAddrv4 должен быть распознаваемым IPv4 адресом", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddrv6", |  | ||||||
| 			expected: "IPAddrv6 должен быть распознаваемым IPv6 адресом", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddr", |  | ||||||
| 			expected: "UDPAddr должен быть UDP адресом", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddrv4", |  | ||||||
| 			expected: "UDPAddrv4 должен быть IPv4 UDP адресом", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddrv6", |  | ||||||
| 			expected: "UDPAddrv6 должен быть IPv6 UDP адресом", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddr", |  | ||||||
| 			expected: "TCPAddr должен быть TCP адресом", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddrv4", |  | ||||||
| 			expected: "TCPAddrv4 должен быть IPv4 TCP адресом", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddrv6", |  | ||||||
| 			expected: "TCPAddrv6 должен быть IPv6 TCP адресом", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDR", |  | ||||||
| 			expected: "CIDR должен содержать CIDR обозначения", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDRv4", |  | ||||||
| 			expected: "CIDRv4 должен содержать CIDR обозначения для IPv4 адреса", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDRv6", |  | ||||||
| 			expected: "CIDRv6 должен содержать CIDR обозначения для IPv6 адреса", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.SSN", |  | ||||||
| 			expected: "SSN должен быть SSN номером", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IP", |  | ||||||
| 			expected: "IP должен быть IP адресом", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPv4", |  | ||||||
| 			expected: "IPv4 должен быть IPv4 адресом", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPv6", |  | ||||||
| 			expected: "IPv6 должен быть IPv6 адресом", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.DataURI", |  | ||||||
| 			expected: "DataURI должен содержать Data URI", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Latitude", |  | ||||||
| 			expected: "Latitude должен содержать координаты широты", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Longitude", |  | ||||||
| 			expected: "Longitude должен содержать координаты долготы", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MultiByte", |  | ||||||
| 			expected: "MultiByte должен содержать мультибайтные символы", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ASCII", |  | ||||||
| 			expected: "ASCII должен содержать только ascii символы", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.PrintableASCII", |  | ||||||
| 			expected: "PrintableASCII должен содержать только доступные для печати ascii символы", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID", |  | ||||||
| 			expected: "UUID должен быть UUID", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID3", |  | ||||||
| 			expected: "UUID3 должен быть UUID 3 версии", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID4", |  | ||||||
| 			expected: "UUID4 должен быть UUID 4 версии", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID5", |  | ||||||
| 			expected: "UUID5 должен быть UUID 5 версии", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN", |  | ||||||
| 			expected: "ISBN должен быть ISBN номером", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN10", |  | ||||||
| 			expected: "ISBN10 должен быть ISBN-10 номером", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN13", |  | ||||||
| 			expected: "ISBN13 должен быть ISBN-13 номером", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Excludes", |  | ||||||
| 			expected: "Excludes не должен содержать текст 'text'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ExcludesAll", |  | ||||||
| 			expected: "ExcludesAll не должен содержать символы '!@#$'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ExcludesRune", |  | ||||||
| 			expected: "ExcludesRune не должен содержать '☻'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ContainsAny", |  | ||||||
| 			expected: "ContainsAny должен содержать минимум один из символов '!@#$'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Contains", |  | ||||||
| 			expected: "Contains должен содержать текст 'purpose'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Base64", |  | ||||||
| 			expected: "Base64 должен быть Base64 строкой", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Email", |  | ||||||
| 			expected: "Email должен быть email адресом", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.URL", |  | ||||||
| 			expected: "URL должен быть URL", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.URI", |  | ||||||
| 			expected: "URI должен быть URI", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RGBColorString", |  | ||||||
| 			expected: "RGBColorString должен быть RGB цветом", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RGBAColorString", |  | ||||||
| 			expected: "RGBAColorString должен быть RGBA цветом", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HSLColorString", |  | ||||||
| 			expected: "HSLColorString должен быть HSL цветом", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HSLAColorString", |  | ||||||
| 			expected: "HSLAColorString должен быть HSLA цветом", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HexadecimalString", |  | ||||||
| 			expected: "HexadecimalString должен быть шестнадцатеричной строкой", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HexColorString", |  | ||||||
| 			expected: "HexColorString должен быть HEX цветом", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NumberString", |  | ||||||
| 			expected: "NumberString должен быть цифрой", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NumericString", |  | ||||||
| 			expected: "NumericString должен быть цифровым значением", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.AlphanumString", |  | ||||||
| 			expected: "AlphanumString должен содержать только буквы и цифры", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.AlphaString", |  | ||||||
| 			expected: "AlphaString должен содержать только буквы", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtFieldString", |  | ||||||
| 			expected: "LtFieldString должен быть менее MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteFieldString", |  | ||||||
| 			expected: "LteFieldString должен быть менее или равен MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtFieldString", |  | ||||||
| 			expected: "GtFieldString должен быть больше MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteFieldString", |  | ||||||
| 			expected: "GteFieldString должен быть больше или равен MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeFieldString", |  | ||||||
| 			expected: "NeFieldString не должен быть равен EqFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtCSFieldString", |  | ||||||
| 			expected: "LtCSFieldString должен быть менее Inner.LtCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteCSFieldString", |  | ||||||
| 			expected: "LteCSFieldString должен быть менее или равен Inner.LteCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtCSFieldString", |  | ||||||
| 			expected: "GtCSFieldString должен быть больше Inner.GtCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteCSFieldString", |  | ||||||
| 			expected: "GteCSFieldString должен быть больше или равен Inner.GteCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeCSFieldString", |  | ||||||
| 			expected: "NeCSFieldString не должен быть равен Inner.NeCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqCSFieldString", |  | ||||||
| 			expected: "EqCSFieldString должен быть равен Inner.EqCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqFieldString", |  | ||||||
| 			expected: "EqFieldString должен быть равен MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteString", |  | ||||||
| 			expected: "GteString должен содержать минимум 3 символы", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteNumber", |  | ||||||
| 			expected: "GteNumber должен быть больше или равно 5.56", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteMultiple", |  | ||||||
| 			expected: "GteMultiple должен содержать минимум 2 элементы", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteTime", |  | ||||||
| 			expected: "GteTime должна быть позже или равна текущему моменту", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtString", |  | ||||||
| 			expected: "GtString должен быть длиннее 3 символы", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtNumber", |  | ||||||
| 			expected: "GtNumber должен быть больше 5.56", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtMultiple", |  | ||||||
| 			expected: "GtMultiple должен содержать более 2 элементы", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtTime", |  | ||||||
| 			expected: "GtTime должна быть позже текущего момента", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteString", |  | ||||||
| 			expected: "LteString должен содержать максимум 3 символы", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteNumber", |  | ||||||
| 			expected: "LteNumber должен быть менее или равен 5.56", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteMultiple", |  | ||||||
| 			expected: "LteMultiple должен содержать максимум 2 элементы", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteTime", |  | ||||||
| 			expected: "LteTime must be less than or equal to the current Date & Time", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtString", |  | ||||||
| 			expected: "LtString должен иметь менее 3 символы", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtNumber", |  | ||||||
| 			expected: "LtNumber должен быть менее 5.56", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtMultiple", |  | ||||||
| 			expected: "LtMultiple должен содержать менее 2 элементы", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtTime", |  | ||||||
| 			expected: "LtTime must be less than the current Date & Time", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeString", |  | ||||||
| 			expected: "NeString должен быть не равен ", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeNumber", |  | ||||||
| 			expected: "NeNumber должен быть не равен 0.00", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeMultiple", |  | ||||||
| 			expected: "NeMultiple должен быть не равен 0", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqString", |  | ||||||
| 			expected: "EqString не равен 3", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqNumber", |  | ||||||
| 			expected: "EqNumber не равен 2.33", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqMultiple", |  | ||||||
| 			expected: "EqMultiple не равен 7", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxString", |  | ||||||
| 			expected: "MaxString должен содержать максимум 3 символы", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxNumber", |  | ||||||
| 			expected: "MaxNumber должен быть меньше или равно 1,113.00", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxMultiple", |  | ||||||
| 			expected: "MaxMultiple должен содержать максимум 7 элементы", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinString", |  | ||||||
| 			expected: "MinString должен содержать минимум 1 символ", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinNumber", |  | ||||||
| 			expected: "MinNumber должен быть больше или равно 1,113.00", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinMultiple", |  | ||||||
| 			expected: "MinMultiple должен содержать минимум 7 элементы", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenString", |  | ||||||
| 			expected: "LenString должен быть длиной в 1 символ", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenNumber", |  | ||||||
| 			expected: "LenNumber должен быть равен 1,113.00", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenMultiple", |  | ||||||
| 			expected: "LenMultiple должен содержать 7 элементы", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredString", |  | ||||||
| 			expected: "RequiredString обязательное поле", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredNumber", |  | ||||||
| 			expected: "RequiredNumber обязательное поле", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredMultiple", |  | ||||||
| 			expected: "RequiredMultiple обязательное поле", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrMinLen", |  | ||||||
| 			expected: "StrPtrMinLen должен содержать минимум 10 символы", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrMaxLen", |  | ||||||
| 			expected: "StrPtrMaxLen должен содержать максимум 1 символ", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLen", |  | ||||||
| 			expected: "StrPtrLen должен быть длиной в 2 символы", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLt", |  | ||||||
| 			expected: "StrPtrLt должен иметь менее 1 символ", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLte", |  | ||||||
| 			expected: "StrPtrLte должен содержать максимум 1 символ", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrGt", |  | ||||||
| 			expected: "StrPtrGt должен быть длиннее 10 символы", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrGte", |  | ||||||
| 			expected: "StrPtrGte должен содержать минимум 10 символы", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.OneOfString", |  | ||||||
| 			expected: "OneOfString должен быть одним из [red green]", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.OneOfInt", |  | ||||||
| 			expected: "OneOfInt должен быть одним из [5 63]", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UniqueSlice", |  | ||||||
| 			expected: "UniqueSlice должен содержать уникальные значения", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UniqueArray", |  | ||||||
| 			expected: "UniqueArray должен содержать уникальные значения", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UniqueMap", |  | ||||||
| 			expected: "UniqueMap должен содержать уникальные значения", |  | ||||||
| 		}, |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	for _, tt := range tests { |  | ||||||
| 
 |  | ||||||
| 		var fe validator.FieldError |  | ||||||
| 
 |  | ||||||
| 		for _, e := range errs { |  | ||||||
| 			if tt.ns == e.Namespace() { |  | ||||||
| 				fe = e |  | ||||||
| 				break |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		log.Println(fe) |  | ||||||
| 
 |  | ||||||
| 		NotEqual(t, fe, nil) |  | ||||||
| 		Equal(t, tt.expected, fe.Translate(trans)) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -1,652 +0,0 @@ | ||||||
| package tr |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"testing" |  | ||||||
| 	"time" |  | ||||||
| 
 |  | ||||||
| 	. "git.ningdatech.com/ningda/gin_valid/go-playground/assert/v2" |  | ||||||
| 	turkish "git.ningdatech.com/ningda/gin_valid/go-playground/locales/tr" |  | ||||||
| 	ut "git.ningdatech.com/ningda/gin_valid/go-playground/universal-translator" |  | ||||||
| 	"git.ningdatech.com/ningda/gin_valid/go-playground/validator/v10" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func TestTranslations(t *testing.T) { |  | ||||||
| 
 |  | ||||||
| 	tr := turkish.New() |  | ||||||
| 	uni := ut.New(tr, tr) |  | ||||||
| 	trans, _ := uni.GetTranslator("tr") |  | ||||||
| 
 |  | ||||||
| 	validate := validator.New() |  | ||||||
| 
 |  | ||||||
| 	err := RegisterDefaultTranslations(validate, trans) |  | ||||||
| 	Equal(t, err, nil) |  | ||||||
| 
 |  | ||||||
| 	type Inner struct { |  | ||||||
| 		EqCSFieldString  string |  | ||||||
| 		NeCSFieldString  string |  | ||||||
| 		GtCSFieldString  string |  | ||||||
| 		GteCSFieldString string |  | ||||||
| 		LtCSFieldString  string |  | ||||||
| 		LteCSFieldString string |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	type Test struct { |  | ||||||
| 		Inner             Inner |  | ||||||
| 		RequiredString    string            `validate:"required"` |  | ||||||
| 		RequiredNumber    int               `validate:"required"` |  | ||||||
| 		RequiredMultiple  []string          `validate:"required"` |  | ||||||
| 		LenString         string            `validate:"len=1"` |  | ||||||
| 		LenNumber         float64           `validate:"len=1113.00"` |  | ||||||
| 		LenMultiple       []string          `validate:"len=7"` |  | ||||||
| 		MinString         string            `validate:"min=1"` |  | ||||||
| 		MinNumber         float64           `validate:"min=1113.00"` |  | ||||||
| 		MinMultiple       []string          `validate:"min=7"` |  | ||||||
| 		MaxString         string            `validate:"max=3"` |  | ||||||
| 		MaxNumber         float64           `validate:"max=1113.00"` |  | ||||||
| 		MaxMultiple       []string          `validate:"max=7"` |  | ||||||
| 		EqString          string            `validate:"eq=3"` |  | ||||||
| 		EqNumber          float64           `validate:"eq=2.33"` |  | ||||||
| 		EqMultiple        []string          `validate:"eq=7"` |  | ||||||
| 		NeString          string            `validate:"ne="` |  | ||||||
| 		NeNumber          float64           `validate:"ne=0.00"` |  | ||||||
| 		NeMultiple        []string          `validate:"ne=0"` |  | ||||||
| 		LtString          string            `validate:"lt=3"` |  | ||||||
| 		LtNumber          float64           `validate:"lt=5.56"` |  | ||||||
| 		LtMultiple        []string          `validate:"lt=2"` |  | ||||||
| 		LtTime            time.Time         `validate:"lt"` |  | ||||||
| 		LteString         string            `validate:"lte=3"` |  | ||||||
| 		LteNumber         float64           `validate:"lte=5.56"` |  | ||||||
| 		LteMultiple       []string          `validate:"lte=2"` |  | ||||||
| 		LteTime           time.Time         `validate:"lte"` |  | ||||||
| 		GtString          string            `validate:"gt=3"` |  | ||||||
| 		GtNumber          float64           `validate:"gt=5.56"` |  | ||||||
| 		GtMultiple        []string          `validate:"gt=2"` |  | ||||||
| 		GtTime            time.Time         `validate:"gt"` |  | ||||||
| 		GteString         string            `validate:"gte=3"` |  | ||||||
| 		GteNumber         float64           `validate:"gte=5.56"` |  | ||||||
| 		GteMultiple       []string          `validate:"gte=2"` |  | ||||||
| 		GteTime           time.Time         `validate:"gte"` |  | ||||||
| 		EqFieldString     string            `validate:"eqfield=MaxString"` |  | ||||||
| 		EqCSFieldString   string            `validate:"eqcsfield=Inner.EqCSFieldString"` |  | ||||||
| 		NeCSFieldString   string            `validate:"necsfield=Inner.NeCSFieldString"` |  | ||||||
| 		GtCSFieldString   string            `validate:"gtcsfield=Inner.GtCSFieldString"` |  | ||||||
| 		GteCSFieldString  string            `validate:"gtecsfield=Inner.GteCSFieldString"` |  | ||||||
| 		LtCSFieldString   string            `validate:"ltcsfield=Inner.LtCSFieldString"` |  | ||||||
| 		LteCSFieldString  string            `validate:"ltecsfield=Inner.LteCSFieldString"` |  | ||||||
| 		NeFieldString     string            `validate:"nefield=EqFieldString"` |  | ||||||
| 		GtFieldString     string            `validate:"gtfield=MaxString"` |  | ||||||
| 		GteFieldString    string            `validate:"gtefield=MaxString"` |  | ||||||
| 		LtFieldString     string            `validate:"ltfield=MaxString"` |  | ||||||
| 		LteFieldString    string            `validate:"ltefield=MaxString"` |  | ||||||
| 		AlphaString       string            `validate:"alpha"` |  | ||||||
| 		AlphanumString    string            `validate:"alphanum"` |  | ||||||
| 		NumericString     string            `validate:"numeric"` |  | ||||||
| 		NumberString      string            `validate:"number"` |  | ||||||
| 		HexadecimalString string            `validate:"hexadecimal"` |  | ||||||
| 		HexColorString    string            `validate:"hexcolor"` |  | ||||||
| 		RGBColorString    string            `validate:"rgb"` |  | ||||||
| 		RGBAColorString   string            `validate:"rgba"` |  | ||||||
| 		HSLColorString    string            `validate:"hsl"` |  | ||||||
| 		HSLAColorString   string            `validate:"hsla"` |  | ||||||
| 		Email             string            `validate:"email"` |  | ||||||
| 		URL               string            `validate:"url"` |  | ||||||
| 		URI               string            `validate:"uri"` |  | ||||||
| 		Base64            string            `validate:"base64"` |  | ||||||
| 		Contains          string            `validate:"contains=purpose"` |  | ||||||
| 		ContainsAny       string            `validate:"containsany=!@#$"` |  | ||||||
| 		Excludes          string            `validate:"excludes=text"` |  | ||||||
| 		ExcludesAll       string            `validate:"excludesall=!@#$"` |  | ||||||
| 		ExcludesRune      string            `validate:"excludesrune=☻"` |  | ||||||
| 		ISBN              string            `validate:"isbn"` |  | ||||||
| 		ISBN10            string            `validate:"isbn10"` |  | ||||||
| 		ISBN13            string            `validate:"isbn13"` |  | ||||||
| 		UUID              string            `validate:"uuid"` |  | ||||||
| 		UUID3             string            `validate:"uuid3"` |  | ||||||
| 		UUID4             string            `validate:"uuid4"` |  | ||||||
| 		UUID5             string            `validate:"uuid5"` |  | ||||||
| 		ASCII             string            `validate:"ascii"` |  | ||||||
| 		PrintableASCII    string            `validate:"printascii"` |  | ||||||
| 		MultiByte         string            `validate:"multibyte"` |  | ||||||
| 		DataURI           string            `validate:"datauri"` |  | ||||||
| 		Latitude          string            `validate:"latitude"` |  | ||||||
| 		Longitude         string            `validate:"longitude"` |  | ||||||
| 		SSN               string            `validate:"ssn"` |  | ||||||
| 		IP                string            `validate:"ip"` |  | ||||||
| 		IPv4              string            `validate:"ipv4"` |  | ||||||
| 		IPv6              string            `validate:"ipv6"` |  | ||||||
| 		CIDR              string            `validate:"cidr"` |  | ||||||
| 		CIDRv4            string            `validate:"cidrv4"` |  | ||||||
| 		CIDRv6            string            `validate:"cidrv6"` |  | ||||||
| 		TCPAddr           string            `validate:"tcp_addr"` |  | ||||||
| 		TCPAddrv4         string            `validate:"tcp4_addr"` |  | ||||||
| 		TCPAddrv6         string            `validate:"tcp6_addr"` |  | ||||||
| 		UDPAddr           string            `validate:"udp_addr"` |  | ||||||
| 		UDPAddrv4         string            `validate:"udp4_addr"` |  | ||||||
| 		UDPAddrv6         string            `validate:"udp6_addr"` |  | ||||||
| 		IPAddr            string            `validate:"ip_addr"` |  | ||||||
| 		IPAddrv4          string            `validate:"ip4_addr"` |  | ||||||
| 		IPAddrv6          string            `validate:"ip6_addr"` |  | ||||||
| 		UinxAddr          string            `validate:"unix_addr"` // can't fail from within Go's net package currently, but maybe in the future
 |  | ||||||
| 		MAC               string            `validate:"mac"` |  | ||||||
| 		IsColor           string            `validate:"iscolor"` |  | ||||||
| 		StrPtrMinLen      *string           `validate:"min=10"` |  | ||||||
| 		StrPtrMaxLen      *string           `validate:"max=1"` |  | ||||||
| 		StrPtrLen         *string           `validate:"len=2"` |  | ||||||
| 		StrPtrLt          *string           `validate:"lt=1"` |  | ||||||
| 		StrPtrLte         *string           `validate:"lte=1"` |  | ||||||
| 		StrPtrGt          *string           `validate:"gt=10"` |  | ||||||
| 		StrPtrGte         *string           `validate:"gte=10"` |  | ||||||
| 		OneOfString       string            `validate:"oneof=red green"` |  | ||||||
| 		OneOfInt          int               `validate:"oneof=5 63"` |  | ||||||
| 		UniqueSlice       []string          `validate:"unique"` |  | ||||||
| 		UniqueArray       [3]string         `validate:"unique"` |  | ||||||
| 		UniqueMap         map[string]string `validate:"unique"` |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	var test Test |  | ||||||
| 
 |  | ||||||
| 	test.Inner.EqCSFieldString = "1234" |  | ||||||
| 	test.Inner.GtCSFieldString = "1234" |  | ||||||
| 	test.Inner.GteCSFieldString = "1234" |  | ||||||
| 
 |  | ||||||
| 	test.MaxString = "1234" |  | ||||||
| 	test.MaxNumber = 2000 |  | ||||||
| 	test.MaxMultiple = make([]string, 9) |  | ||||||
| 
 |  | ||||||
| 	test.LtString = "1234" |  | ||||||
| 	test.LtNumber = 6 |  | ||||||
| 	test.LtMultiple = make([]string, 3) |  | ||||||
| 	test.LtTime = time.Now().Add(time.Hour * 24) |  | ||||||
| 
 |  | ||||||
| 	test.LteString = "1234" |  | ||||||
| 	test.LteNumber = 6 |  | ||||||
| 	test.LteMultiple = make([]string, 3) |  | ||||||
| 	test.LteTime = time.Now().Add(time.Hour * 24) |  | ||||||
| 
 |  | ||||||
| 	test.LtFieldString = "12345" |  | ||||||
| 	test.LteFieldString = "12345" |  | ||||||
| 
 |  | ||||||
| 	test.LtCSFieldString = "1234" |  | ||||||
| 	test.LteCSFieldString = "1234" |  | ||||||
| 
 |  | ||||||
| 	test.AlphaString = "abc3" |  | ||||||
| 	test.AlphanumString = "abc3!" |  | ||||||
| 	test.NumericString = "12E.00" |  | ||||||
| 	test.NumberString = "12E" |  | ||||||
| 
 |  | ||||||
| 	test.Excludes = "this is some test text" |  | ||||||
| 	test.ExcludesAll = "This is Great!" |  | ||||||
| 	test.ExcludesRune = "Love it ☻" |  | ||||||
| 
 |  | ||||||
| 	test.ASCII = "カタカナ" |  | ||||||
| 	test.PrintableASCII = "カタカナ" |  | ||||||
| 
 |  | ||||||
| 	test.MultiByte = "1234feerf" |  | ||||||
| 
 |  | ||||||
| 	s := "toolong" |  | ||||||
| 	test.StrPtrMaxLen = &s |  | ||||||
| 	test.StrPtrLen = &s |  | ||||||
| 
 |  | ||||||
| 	test.UniqueSlice = []string{"1234", "1234"} |  | ||||||
| 	test.UniqueMap = map[string]string{"key1": "1234", "key2": "1234"} |  | ||||||
| 
 |  | ||||||
| 	err = validate.Struct(test) |  | ||||||
| 	NotEqual(t, err, nil) |  | ||||||
| 
 |  | ||||||
| 	errs, ok := err.(validator.ValidationErrors) |  | ||||||
| 	Equal(t, ok, true) |  | ||||||
| 
 |  | ||||||
| 	tests := []struct { |  | ||||||
| 		ns       string |  | ||||||
| 		expected string |  | ||||||
| 	}{ |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IsColor", |  | ||||||
| 			expected: "IsColor geçerli bir renk olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MAC", |  | ||||||
| 			expected: "MAC geçerli bir MAC adresi içermelidir", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddr", |  | ||||||
| 			expected: "IPAddr çözülebilir bir IP adresi olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddrv4", |  | ||||||
| 			expected: "IPAddrv4 çözülebilir bir IPv4 adresi olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddrv6", |  | ||||||
| 			expected: "IPAddrv6 çözülebilir bir IPv6 adresi olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddr", |  | ||||||
| 			expected: "UDPAddr geçerli bir UDP adresi olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddrv4", |  | ||||||
| 			expected: "UDPAddrv4 geçerli bir IPv4 UDP adresi olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddrv6", |  | ||||||
| 			expected: "UDPAddrv6 geçerli bir IPv6 UDP adresi olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddr", |  | ||||||
| 			expected: "TCPAddr geçerli bir TCP adresi olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddrv4", |  | ||||||
| 			expected: "TCPAddrv4 geçerli bir IPv4 TCP adresi olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddrv6", |  | ||||||
| 			expected: "TCPAddrv6 geçerli bir IPv6 TCP adresi olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDR", |  | ||||||
| 			expected: "CIDR geçerli bir CIDR gösterimi içermelidir", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDRv4", |  | ||||||
| 			expected: "CIDRv4 bir IPv4 adresi için geçerli bir CIDR gösterimi içermelidir", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDRv6", |  | ||||||
| 			expected: "CIDRv6 bir IPv6 adresi için geçerli bir CIDR gösterimi içermelidir", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.SSN", |  | ||||||
| 			expected: "SSN geçerli bir SSN numarası olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IP", |  | ||||||
| 			expected: "IP geçerli bir IP adresi olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPv4", |  | ||||||
| 			expected: "IPv4 geçerli bir IPv4 adresi olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPv6", |  | ||||||
| 			expected: "IPv6 geçerli bir IPv6 adresi olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.DataURI", |  | ||||||
| 			expected: "DataURI geçerli bir Veri URI içermelidir", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Latitude", |  | ||||||
| 			expected: "Latitude geçerli bir enlem koordinatı içermelidir", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Longitude", |  | ||||||
| 			expected: "Longitude geçerli bir boylam koordinatı içermelidir", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MultiByte", |  | ||||||
| 			expected: "MultiByte çok baytlı karakterler içermelidir", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ASCII", |  | ||||||
| 			expected: "ASCII yalnızca ascii karakterler içermelidir", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.PrintableASCII", |  | ||||||
| 			expected: "PrintableASCII yalnızca yazdırılabilir ascii karakterleri içermelidir", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID", |  | ||||||
| 			expected: "UUID geçerli bir UUID olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID3", |  | ||||||
| 			expected: "UUID3 geçerli bir sürüm 3 UUID olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID4", |  | ||||||
| 			expected: "UUID4 geçerli bir sürüm 4 UUID olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID5", |  | ||||||
| 			expected: "UUID5 geçerli bir sürüm 5 UUID olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN", |  | ||||||
| 			expected: "ISBN geçerli bir ISBN numarası olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN10", |  | ||||||
| 			expected: "ISBN10 geçerli bir ISBN-10 numarası olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN13", |  | ||||||
| 			expected: "ISBN13 geçerli bir ISBN-13 numarası olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Excludes", |  | ||||||
| 			expected: "Excludes, 'text' metnini içeremez", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ExcludesAll", |  | ||||||
| 			expected: "ExcludesAll, '!@#$' karakterlerinden hiçbirini içeremez", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ExcludesRune", |  | ||||||
| 			expected: "ExcludesRune, '☻' ifadesini içeremez", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ContainsAny", |  | ||||||
| 			expected: "ContainsAny, '!@#$' karakterlerinden en az birini içermelidir", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Contains", |  | ||||||
| 			expected: "Contains, 'purpose' metnini içermelidir", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Base64", |  | ||||||
| 			expected: "Base64 geçerli bir Base64 karakter dizesi olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Email", |  | ||||||
| 			expected: "Email geçerli bir e-posta adresi olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.URL", |  | ||||||
| 			expected: "URL geçerli bir URL olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.URI", |  | ||||||
| 			expected: "URI geçerli bir URI olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RGBColorString", |  | ||||||
| 			expected: "RGBColorString geçerli bir RGB rengi olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RGBAColorString", |  | ||||||
| 			expected: "RGBAColorString geçerli bir RGBA rengi olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HSLColorString", |  | ||||||
| 			expected: "HSLColorString geçerli bir HSL rengi olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HSLAColorString", |  | ||||||
| 			expected: "HSLAColorString geçerli bir HSLA rengi olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HexadecimalString", |  | ||||||
| 			expected: "HexadecimalString geçerli bir onaltılık olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HexColorString", |  | ||||||
| 			expected: "HexColorString geçerli bir HEX rengi olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NumberString", |  | ||||||
| 			expected: "NumberString geçerli bir sayı olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NumericString", |  | ||||||
| 			expected: "NumericString geçerli bir sayısal değer olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.AlphanumString", |  | ||||||
| 			expected: "AlphanumString yalnızca alfanümerik karakterler içerebilir", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.AlphaString", |  | ||||||
| 			expected: "AlphaString yalnızca alfabetik karakterler içerebilir", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtFieldString", |  | ||||||
| 			expected: "LtFieldString, MaxString değerinden küçük olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteFieldString", |  | ||||||
| 			expected: "LteFieldString, MaxString değerinden küçük veya ona eşit olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtFieldString", |  | ||||||
| 			expected: "GtFieldString, MaxString değerinden büyük olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteFieldString", |  | ||||||
| 			expected: "GteFieldString, MaxString değerinden büyük veya ona eşit olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeFieldString", |  | ||||||
| 			expected: "NeFieldString, EqFieldString değerine eşit olmamalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtCSFieldString", |  | ||||||
| 			expected: "LtCSFieldString, Inner.LtCSFieldString değerinden küçük olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteCSFieldString", |  | ||||||
| 			expected: "LteCSFieldString, Inner.LteCSFieldString değerinden küçük veya ona eşit olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtCSFieldString", |  | ||||||
| 			expected: "GtCSFieldString, Inner.GtCSFieldString değerinden büyük olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteCSFieldString", |  | ||||||
| 			expected: "GteCSFieldString, Inner.GteCSFieldString değerinden küçük veya ona eşit olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeCSFieldString", |  | ||||||
| 			expected: "NeCSFieldString, Inner.NeCSFieldString değerine eşit olmamalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqCSFieldString", |  | ||||||
| 			expected: "EqCSFieldString, Inner.EqCSFieldString değerine eşit olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqFieldString", |  | ||||||
| 			expected: "EqFieldString, MaxString değerine eşit olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteString", |  | ||||||
| 			expected: "GteString en az 3 karakter uzunluğunda olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteNumber", |  | ||||||
| 			expected: "GteNumber, 5,56 veya daha büyük olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteMultiple", |  | ||||||
| 			expected: "GteMultiple en az 2 öğe içermelidir", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteTime", |  | ||||||
| 			expected: "GteTime geçerli Tarih ve Saatten büyük veya ona eşit olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtString", |  | ||||||
| 			expected: "GtString, 3 karakter uzunluğundan fazla olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtNumber", |  | ||||||
| 			expected: "GtNumber, 5,56 değerinden büyük olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtMultiple", |  | ||||||
| 			expected: "GtMultiple, 2 öğeden daha fazla içermelidir", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtTime", |  | ||||||
| 			expected: "GtTime geçerli Tarih ve Saatten büyük olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteString", |  | ||||||
| 			expected: "LteString en fazla 3 karakter uzunluğunda olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteNumber", |  | ||||||
| 			expected: "LteNumber, 5,56 veya daha az olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteMultiple", |  | ||||||
| 			expected: "LteMultiple, maksimum 2 öğe içermelidir", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteTime", |  | ||||||
| 			expected: "LteTime geçerli Tarih ve Saate eşit veya daha küçük olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtString", |  | ||||||
| 			expected: "LtString, 3 karakter uzunluğundan daha az olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtNumber", |  | ||||||
| 			expected: "LtNumber, 5,56 değerinden küçük olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtMultiple", |  | ||||||
| 			expected: "LtMultiple, 2 öğeden daha az içermelidir", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtTime", |  | ||||||
| 			expected: "LtTime geçerli Tarih ve Saatten daha az olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeString", |  | ||||||
| 			expected: "NeString,  değerine eşit olmamalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeNumber", |  | ||||||
| 			expected: "NeNumber, 0.00 değerine eşit olmamalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeMultiple", |  | ||||||
| 			expected: "NeMultiple, 0 değerine eşit olmamalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqString", |  | ||||||
| 			expected: "EqString, 3 değerine eşit değil", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqNumber", |  | ||||||
| 			expected: "EqNumber, 2.33 değerine eşit değil", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqMultiple", |  | ||||||
| 			expected: "EqMultiple, 7 değerine eşit değil", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxString", |  | ||||||
| 			expected: "MaxString uzunluğu en fazla 3 karakter olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxNumber", |  | ||||||
| 			expected: "MaxNumber, 1.113,00 veya daha az olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxMultiple", |  | ||||||
| 			expected: "MaxMultiple maksimum 7 öğe içermelidir", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinString", |  | ||||||
| 			expected: "MinString en az 1 karakter uzunluğunda olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinNumber", |  | ||||||
| 			expected: "MinNumber, 1.113,00 veya daha büyük olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinMultiple", |  | ||||||
| 			expected: "MinMultiple en az 7 öğe içermelidir", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenString", |  | ||||||
| 			expected: "LenString uzunluğu 1 karakter olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenNumber", |  | ||||||
| 			expected: "LenNumber, 1.113,00 değerine eşit olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenMultiple", |  | ||||||
| 			expected: "LenMultiple, 7 öğe içermelidir", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredString", |  | ||||||
| 			expected: "RequiredString zorunlu bir alandır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredNumber", |  | ||||||
| 			expected: "RequiredNumber zorunlu bir alandır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredMultiple", |  | ||||||
| 			expected: "RequiredMultiple zorunlu bir alandır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrMinLen", |  | ||||||
| 			expected: "StrPtrMinLen en az 10 karakter uzunluğunda olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrMaxLen", |  | ||||||
| 			expected: "StrPtrMaxLen uzunluğu en fazla 1 karakter olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLen", |  | ||||||
| 			expected: "StrPtrLen uzunluğu 2 karakter olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLt", |  | ||||||
| 			expected: "StrPtrLt, 1 karakter uzunluğundan daha az olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLte", |  | ||||||
| 			expected: "StrPtrLte en fazla 1 karakter uzunluğunda olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrGt", |  | ||||||
| 			expected: "StrPtrGt, 10 karakter uzunluğundan fazla olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrGte", |  | ||||||
| 			expected: "StrPtrGte en az 10 karakter uzunluğunda olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.OneOfString", |  | ||||||
| 			expected: "OneOfString, [red green]'dan biri olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.OneOfInt", |  | ||||||
| 			expected: "OneOfInt, [5 63]'dan biri olmalıdır", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UniqueSlice", |  | ||||||
| 			expected: "UniqueSlice benzersiz değerler içermelidir", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UniqueArray", |  | ||||||
| 			expected: "UniqueArray benzersiz değerler içermelidir", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UniqueMap", |  | ||||||
| 			expected: "UniqueMap benzersiz değerler içermelidir", |  | ||||||
| 		}, |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	for _, tt := range tests { |  | ||||||
| 
 |  | ||||||
| 		var fe validator.FieldError |  | ||||||
| 
 |  | ||||||
| 		for _, e := range errs { |  | ||||||
| 			if tt.ns == e.Namespace() { |  | ||||||
| 				fe = e |  | ||||||
| 				break |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		NotEqual(t, fe, nil) |  | ||||||
| 		Equal(t, tt.expected, fe.Translate(trans)) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -1,641 +0,0 @@ | ||||||
| package zh_tw |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"testing" |  | ||||||
| 	"time" |  | ||||||
| 
 |  | ||||||
| 	. "git.ningdatech.com/ningda/gin_valid/go-playground/assert/v2" |  | ||||||
| 	zhongwen "git.ningdatech.com/ningda/gin_valid/go-playground/locales/zh_Hant_TW" |  | ||||||
| 	ut "git.ningdatech.com/ningda/gin_valid/go-playground/universal-translator" |  | ||||||
| 	"git.ningdatech.com/ningda/gin_valid/go-playground/validator/v10" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func TestTranslations(t *testing.T) { |  | ||||||
| 
 |  | ||||||
| 	zh := zhongwen.New() |  | ||||||
| 	uni := ut.New(zh, zh) |  | ||||||
| 	trans, _ := uni.GetTranslator("zh") |  | ||||||
| 
 |  | ||||||
| 	validate := validator.New() |  | ||||||
| 
 |  | ||||||
| 	err := RegisterDefaultTranslations(validate, trans) |  | ||||||
| 	Equal(t, err, nil) |  | ||||||
| 
 |  | ||||||
| 	type Inner struct { |  | ||||||
| 		EqCSFieldString  string |  | ||||||
| 		NeCSFieldString  string |  | ||||||
| 		GtCSFieldString  string |  | ||||||
| 		GteCSFieldString string |  | ||||||
| 		LtCSFieldString  string |  | ||||||
| 		LteCSFieldString string |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	type Test struct { |  | ||||||
| 		Inner             Inner |  | ||||||
| 		RequiredString    string    `validate:"required"` |  | ||||||
| 		RequiredNumber    int       `validate:"required"` |  | ||||||
| 		RequiredMultiple  []string  `validate:"required"` |  | ||||||
| 		LenString         string    `validate:"len=1"` |  | ||||||
| 		LenNumber         float64   `validate:"len=1113.00"` |  | ||||||
| 		LenMultiple       []string  `validate:"len=7"` |  | ||||||
| 		MinString         string    `validate:"min=1"` |  | ||||||
| 		MinNumber         float64   `validate:"min=1113.00"` |  | ||||||
| 		MinMultiple       []string  `validate:"min=7"` |  | ||||||
| 		MaxString         string    `validate:"max=3"` |  | ||||||
| 		MaxNumber         float64   `validate:"max=1113.00"` |  | ||||||
| 		MaxMultiple       []string  `validate:"max=7"` |  | ||||||
| 		EqString          string    `validate:"eq=3"` |  | ||||||
| 		EqNumber          float64   `validate:"eq=2.33"` |  | ||||||
| 		EqMultiple        []string  `validate:"eq=7"` |  | ||||||
| 		NeString          string    `validate:"ne="` |  | ||||||
| 		NeNumber          float64   `validate:"ne=0.00"` |  | ||||||
| 		NeMultiple        []string  `validate:"ne=0"` |  | ||||||
| 		LtString          string    `validate:"lt=3"` |  | ||||||
| 		LtNumber          float64   `validate:"lt=5.56"` |  | ||||||
| 		LtMultiple        []string  `validate:"lt=2"` |  | ||||||
| 		LtTime            time.Time `validate:"lt"` |  | ||||||
| 		LteString         string    `validate:"lte=3"` |  | ||||||
| 		LteNumber         float64   `validate:"lte=5.56"` |  | ||||||
| 		LteMultiple       []string  `validate:"lte=2"` |  | ||||||
| 		LteTime           time.Time `validate:"lte"` |  | ||||||
| 		GtString          string    `validate:"gt=3"` |  | ||||||
| 		GtNumber          float64   `validate:"gt=5.56"` |  | ||||||
| 		GtMultiple        []string  `validate:"gt=2"` |  | ||||||
| 		GtTime            time.Time `validate:"gt"` |  | ||||||
| 		GteString         string    `validate:"gte=3"` |  | ||||||
| 		GteNumber         float64   `validate:"gte=5.56"` |  | ||||||
| 		GteMultiple       []string  `validate:"gte=2"` |  | ||||||
| 		GteTime           time.Time `validate:"gte"` |  | ||||||
| 		EqFieldString     string    `validate:"eqfield=MaxString"` |  | ||||||
| 		EqCSFieldString   string    `validate:"eqcsfield=Inner.EqCSFieldString"` |  | ||||||
| 		NeCSFieldString   string    `validate:"necsfield=Inner.NeCSFieldString"` |  | ||||||
| 		GtCSFieldString   string    `validate:"gtcsfield=Inner.GtCSFieldString"` |  | ||||||
| 		GteCSFieldString  string    `validate:"gtecsfield=Inner.GteCSFieldString"` |  | ||||||
| 		LtCSFieldString   string    `validate:"ltcsfield=Inner.LtCSFieldString"` |  | ||||||
| 		LteCSFieldString  string    `validate:"ltecsfield=Inner.LteCSFieldString"` |  | ||||||
| 		NeFieldString     string    `validate:"nefield=EqFieldString"` |  | ||||||
| 		GtFieldString     string    `validate:"gtfield=MaxString"` |  | ||||||
| 		GteFieldString    string    `validate:"gtefield=MaxString"` |  | ||||||
| 		LtFieldString     string    `validate:"ltfield=MaxString"` |  | ||||||
| 		LteFieldString    string    `validate:"ltefield=MaxString"` |  | ||||||
| 		AlphaString       string    `validate:"alpha"` |  | ||||||
| 		AlphanumString    string    `validate:"alphanum"` |  | ||||||
| 		NumericString     string    `validate:"numeric"` |  | ||||||
| 		NumberString      string    `validate:"number"` |  | ||||||
| 		HexadecimalString string    `validate:"hexadecimal"` |  | ||||||
| 		HexColorString    string    `validate:"hexcolor"` |  | ||||||
| 		RGBColorString    string    `validate:"rgb"` |  | ||||||
| 		RGBAColorString   string    `validate:"rgba"` |  | ||||||
| 		HSLColorString    string    `validate:"hsl"` |  | ||||||
| 		HSLAColorString   string    `validate:"hsla"` |  | ||||||
| 		Email             string    `validate:"email"` |  | ||||||
| 		URL               string    `validate:"url"` |  | ||||||
| 		URI               string    `validate:"uri"` |  | ||||||
| 		Base64            string    `validate:"base64"` |  | ||||||
| 		Contains          string    `validate:"contains=purpose"` |  | ||||||
| 		ContainsAny       string    `validate:"containsany=!@#$"` |  | ||||||
| 		Excludes          string    `validate:"excludes=text"` |  | ||||||
| 		ExcludesAll       string    `validate:"excludesall=!@#$"` |  | ||||||
| 		ExcludesRune      string    `validate:"excludesrune=☻"` |  | ||||||
| 		ISBN              string    `validate:"isbn"` |  | ||||||
| 		ISBN10            string    `validate:"isbn10"` |  | ||||||
| 		ISBN13            string    `validate:"isbn13"` |  | ||||||
| 		UUID              string    `validate:"uuid"` |  | ||||||
| 		UUID3             string    `validate:"uuid3"` |  | ||||||
| 		UUID4             string    `validate:"uuid4"` |  | ||||||
| 		UUID5             string    `validate:"uuid5"` |  | ||||||
| 		ASCII             string    `validate:"ascii"` |  | ||||||
| 		PrintableASCII    string    `validate:"printascii"` |  | ||||||
| 		MultiByte         string    `validate:"multibyte"` |  | ||||||
| 		DataURI           string    `validate:"datauri"` |  | ||||||
| 		Latitude          string    `validate:"latitude"` |  | ||||||
| 		Longitude         string    `validate:"longitude"` |  | ||||||
| 		SSN               string    `validate:"ssn"` |  | ||||||
| 		IP                string    `validate:"ip"` |  | ||||||
| 		IPv4              string    `validate:"ipv4"` |  | ||||||
| 		IPv6              string    `validate:"ipv6"` |  | ||||||
| 		CIDR              string    `validate:"cidr"` |  | ||||||
| 		CIDRv4            string    `validate:"cidrv4"` |  | ||||||
| 		CIDRv6            string    `validate:"cidrv6"` |  | ||||||
| 		TCPAddr           string    `validate:"tcp_addr"` |  | ||||||
| 		TCPAddrv4         string    `validate:"tcp4_addr"` |  | ||||||
| 		TCPAddrv6         string    `validate:"tcp6_addr"` |  | ||||||
| 		UDPAddr           string    `validate:"udp_addr"` |  | ||||||
| 		UDPAddrv4         string    `validate:"udp4_addr"` |  | ||||||
| 		UDPAddrv6         string    `validate:"udp6_addr"` |  | ||||||
| 		IPAddr            string    `validate:"ip_addr"` |  | ||||||
| 		IPAddrv4          string    `validate:"ip4_addr"` |  | ||||||
| 		IPAddrv6          string    `validate:"ip6_addr"` |  | ||||||
| 		UinxAddr          string    `validate:"unix_addr"` // can't fail from within Go's net package currently, but maybe in the future
 |  | ||||||
| 		MAC               string    `validate:"mac"` |  | ||||||
| 		IsColor           string    `validate:"iscolor"` |  | ||||||
| 		StrPtrMinLen      *string   `validate:"min=10"` |  | ||||||
| 		StrPtrMaxLen      *string   `validate:"max=1"` |  | ||||||
| 		StrPtrLen         *string   `validate:"len=2"` |  | ||||||
| 		StrPtrLt          *string   `validate:"lt=1"` |  | ||||||
| 		StrPtrLte         *string   `validate:"lte=1"` |  | ||||||
| 		StrPtrGt          *string   `validate:"gt=10"` |  | ||||||
| 		StrPtrGte         *string   `validate:"gte=10"` |  | ||||||
| 		OneOfString       string    `validate:"oneof=red green"` |  | ||||||
| 		OneOfInt          int       `validate:"oneof=5 63"` |  | ||||||
| 		Datetime          string    `validate:"datetime=2006-01-02"` |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	var test Test |  | ||||||
| 
 |  | ||||||
| 	test.Inner.EqCSFieldString = "1234" |  | ||||||
| 	test.Inner.GtCSFieldString = "1234" |  | ||||||
| 	test.Inner.GteCSFieldString = "1234" |  | ||||||
| 
 |  | ||||||
| 	test.MaxString = "1234" |  | ||||||
| 	test.MaxNumber = 2000 |  | ||||||
| 	test.MaxMultiple = make([]string, 9) |  | ||||||
| 
 |  | ||||||
| 	test.LtString = "1234" |  | ||||||
| 	test.LtNumber = 6 |  | ||||||
| 	test.LtMultiple = make([]string, 3) |  | ||||||
| 	test.LtTime = time.Now().Add(time.Hour * 24) |  | ||||||
| 
 |  | ||||||
| 	test.LteString = "1234" |  | ||||||
| 	test.LteNumber = 6 |  | ||||||
| 	test.LteMultiple = make([]string, 3) |  | ||||||
| 	test.LteTime = time.Now().Add(time.Hour * 24) |  | ||||||
| 
 |  | ||||||
| 	test.LtFieldString = "12345" |  | ||||||
| 	test.LteFieldString = "12345" |  | ||||||
| 
 |  | ||||||
| 	test.LtCSFieldString = "1234" |  | ||||||
| 	test.LteCSFieldString = "1234" |  | ||||||
| 
 |  | ||||||
| 	test.AlphaString = "abc3" |  | ||||||
| 	test.AlphanumString = "abc3!" |  | ||||||
| 	test.NumericString = "12E.00" |  | ||||||
| 	test.NumberString = "12E" |  | ||||||
| 
 |  | ||||||
| 	test.Excludes = "this is some test text" |  | ||||||
| 	test.ExcludesAll = "This is Great!" |  | ||||||
| 	test.ExcludesRune = "Love it ☻" |  | ||||||
| 
 |  | ||||||
| 	test.ASCII = "カタカナ" |  | ||||||
| 	test.PrintableASCII = "カタカナ" |  | ||||||
| 
 |  | ||||||
| 	test.MultiByte = "1234feerf" |  | ||||||
| 
 |  | ||||||
| 	s := "toolong" |  | ||||||
| 	test.StrPtrMaxLen = &s |  | ||||||
| 	test.StrPtrLen = &s |  | ||||||
| 
 |  | ||||||
| 	test.Datetime = "2008-Feb-01" |  | ||||||
| 
 |  | ||||||
| 	err = validate.Struct(test) |  | ||||||
| 	NotEqual(t, err, nil) |  | ||||||
| 
 |  | ||||||
| 	errs, ok := err.(validator.ValidationErrors) |  | ||||||
| 	Equal(t, ok, true) |  | ||||||
| 
 |  | ||||||
| 	tests := []struct { |  | ||||||
| 		ns       string |  | ||||||
| 		expected string |  | ||||||
| 	}{ |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IsColor", |  | ||||||
| 			expected: "IsColor必須是一個有效的顏色", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MAC", |  | ||||||
| 			expected: "MAC必須是一個有效的MAC地址", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddr", |  | ||||||
| 			expected: "IPAddr必須是一個有效的IP地址", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddrv4", |  | ||||||
| 			expected: "IPAddrv4必須是一個有效的IPv4地址", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPAddrv6", |  | ||||||
| 			expected: "IPAddrv6必須是一個有效的IPv6地址", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddr", |  | ||||||
| 			expected: "UDPAddr必須是一個有效的UDP地址", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddrv4", |  | ||||||
| 			expected: "UDPAddrv4必須是一個有效的IPv4 UDP地址", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UDPAddrv6", |  | ||||||
| 			expected: "UDPAddrv6必須是一個有效的IPv6 UDP地址", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddr", |  | ||||||
| 			expected: "TCPAddr必須是一個有效的TCP地址", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddrv4", |  | ||||||
| 			expected: "TCPAddrv4必須是一個有效的IPv4 TCP地址", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.TCPAddrv6", |  | ||||||
| 			expected: "TCPAddrv6必須是一個有效的IPv6 TCP地址", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDR", |  | ||||||
| 			expected: "CIDR必須是一個有效的無類別域間路由(CIDR)", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDRv4", |  | ||||||
| 			expected: "CIDRv4必須是一个包含IPv4地址的有效無類別域間路由(CIDR)", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.CIDRv6", |  | ||||||
| 			expected: "CIDRv6必須是一个包含IPv6地址的有效無類別域間路由(CIDR)", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.SSN", |  | ||||||
| 			expected: "SSN必須是一個有效的社會安全編號(SSN)", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IP", |  | ||||||
| 			expected: "IP必須是一個有效的IP地址", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPv4", |  | ||||||
| 			expected: "IPv4必須是一個有效的IPv4地址", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.IPv6", |  | ||||||
| 			expected: "IPv6必須是一個有效的IPv6地址", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.DataURI", |  | ||||||
| 			expected: "DataURI必須包含有效的數據URI", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Latitude", |  | ||||||
| 			expected: "Latitude必須包含有效的緯度座標", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Longitude", |  | ||||||
| 			expected: "Longitude必須包含有效的經度座標", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MultiByte", |  | ||||||
| 			expected: "MultiByte必須包含多個字元", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ASCII", |  | ||||||
| 			expected: "ASCII必須只包含ascii字元", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.PrintableASCII", |  | ||||||
| 			expected: "PrintableASCII必須只包含可輸出的ascii字元", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID", |  | ||||||
| 			expected: "UUID必須是一個有效的UUID", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID3", |  | ||||||
| 			expected: "UUID3必須是一個有效的V3 UUID", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID4", |  | ||||||
| 			expected: "UUID4必須是一個有效的V4 UUID", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.UUID5", |  | ||||||
| 			expected: "UUID5必須是一個有效的V5 UUID", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN", |  | ||||||
| 			expected: "ISBN必須是一個有效的ISBN編號", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN10", |  | ||||||
| 			expected: "ISBN10必須是一個有效的ISBN-10編號", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ISBN13", |  | ||||||
| 			expected: "ISBN13必須是一個有效的ISBN-13編號", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Excludes", |  | ||||||
| 			expected: "Excludes不能包含文字'text'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ExcludesAll", |  | ||||||
| 			expected: "ExcludesAll不能包含以下任何字元'!@#$'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ExcludesRune", |  | ||||||
| 			expected: "ExcludesRune不能包含'☻'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.ContainsAny", |  | ||||||
| 			expected: "ContainsAny必須包含至少一個以下字元'!@#$'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Contains", |  | ||||||
| 			expected: "Contains必須包含文字'purpose'", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Base64", |  | ||||||
| 			expected: "Base64必須是一個有效的Base64字元串", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Email", |  | ||||||
| 			expected: "Email必須是一個有效的信箱", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.URL", |  | ||||||
| 			expected: "URL必須是一個有效的URL", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.URI", |  | ||||||
| 			expected: "URI必須是一個有效的URI", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RGBColorString", |  | ||||||
| 			expected: "RGBColorString必須是一個有效的RGB顏色", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RGBAColorString", |  | ||||||
| 			expected: "RGBAColorString必須是一個有效的RGBA顏色", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HSLColorString", |  | ||||||
| 			expected: "HSLColorString必須是一個有效的HSL顏色", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HSLAColorString", |  | ||||||
| 			expected: "HSLAColorString必須是一個有效的HSLA顏色", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HexadecimalString", |  | ||||||
| 			expected: "HexadecimalString必須是一個有效的十六進制", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.HexColorString", |  | ||||||
| 			expected: "HexColorString必須是一個有效的十六進制顏色", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NumberString", |  | ||||||
| 			expected: "NumberString必須是一個有效的數字", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NumericString", |  | ||||||
| 			expected: "NumericString必須是一個有效的數值", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.AlphanumString", |  | ||||||
| 			expected: "AlphanumString只能包含字母和數字", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.AlphaString", |  | ||||||
| 			expected: "AlphaString只能包含字母", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtFieldString", |  | ||||||
| 			expected: "LtFieldString必須小於MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteFieldString", |  | ||||||
| 			expected: "LteFieldString必須小於或等於MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtFieldString", |  | ||||||
| 			expected: "GtFieldString必須大於MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteFieldString", |  | ||||||
| 			expected: "GteFieldString必須大於或等於MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeFieldString", |  | ||||||
| 			expected: "NeFieldString不能等於EqFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtCSFieldString", |  | ||||||
| 			expected: "LtCSFieldString必須小於Inner.LtCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteCSFieldString", |  | ||||||
| 			expected: "LteCSFieldString必須小於或等於Inner.LteCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtCSFieldString", |  | ||||||
| 			expected: "GtCSFieldString必須大於Inner.GtCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteCSFieldString", |  | ||||||
| 			expected: "GteCSFieldString必須大於或等於Inner.GteCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeCSFieldString", |  | ||||||
| 			expected: "NeCSFieldString不能等於Inner.NeCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqCSFieldString", |  | ||||||
| 			expected: "EqCSFieldString必須等於Inner.EqCSFieldString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqFieldString", |  | ||||||
| 			expected: "EqFieldString必須等於MaxString", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteString", |  | ||||||
| 			expected: "GteString長度必須至少為3個字元", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteNumber", |  | ||||||
| 			expected: "GteNumber必須大於或等於5.56", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteMultiple", |  | ||||||
| 			expected: "GteMultiple必須至少包含2項", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GteTime", |  | ||||||
| 			expected: "GteTime必須大於或等於目前日期和時間", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtString", |  | ||||||
| 			expected: "GtString長度必須大於3個字元", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtNumber", |  | ||||||
| 			expected: "GtNumber必須大於5.56", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtMultiple", |  | ||||||
| 			expected: "GtMultiple必須大於2項", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.GtTime", |  | ||||||
| 			expected: "GtTime必須大於目前日期和時間", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteString", |  | ||||||
| 			expected: "LteString長度不能超過3個字元", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteNumber", |  | ||||||
| 			expected: "LteNumber必須小於或等於5.56", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteMultiple", |  | ||||||
| 			expected: "LteMultiple最多只能包含2項", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LteTime", |  | ||||||
| 			expected: "LteTime必須小於或等於目前日期和時間", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtString", |  | ||||||
| 			expected: "LtString長度必須小於3個字元", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtNumber", |  | ||||||
| 			expected: "LtNumber必須小於5.56", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtMultiple", |  | ||||||
| 			expected: "LtMultiple必須包含少於2項", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LtTime", |  | ||||||
| 			expected: "LtTime必須小於目前日期和時間", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeString", |  | ||||||
| 			expected: "NeString不能等於", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeNumber", |  | ||||||
| 			expected: "NeNumber不能等於0.00", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.NeMultiple", |  | ||||||
| 			expected: "NeMultiple不能等於0", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqString", |  | ||||||
| 			expected: "EqString不等於3", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqNumber", |  | ||||||
| 			expected: "EqNumber不等於2.33", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.EqMultiple", |  | ||||||
| 			expected: "EqMultiple不等於7", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxString", |  | ||||||
| 			expected: "MaxString長度不能超過3個字元", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxNumber", |  | ||||||
| 			expected: "MaxNumber必須小於或等於1,113.00", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MaxMultiple", |  | ||||||
| 			expected: "MaxMultiple最多只能包含7項", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinString", |  | ||||||
| 			expected: "MinString長度必須至少為1個字元", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinNumber", |  | ||||||
| 			expected: "MinNumber最小只能為1,113.00", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.MinMultiple", |  | ||||||
| 			expected: "MinMultiple必須至少包含7項", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenString", |  | ||||||
| 			expected: "LenString長度必須為1個字元", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenNumber", |  | ||||||
| 			expected: "LenNumber必須等於1,113.00", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.LenMultiple", |  | ||||||
| 			expected: "LenMultiple必須包含7項", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredString", |  | ||||||
| 			expected: "RequiredString為必填欄位", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredNumber", |  | ||||||
| 			expected: "RequiredNumber為必填欄位", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.RequiredMultiple", |  | ||||||
| 			expected: "RequiredMultiple為必填欄位", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrMinLen", |  | ||||||
| 			expected: "StrPtrMinLen長度必須至少為10個字元", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrMaxLen", |  | ||||||
| 			expected: "StrPtrMaxLen長度不能超過1個字元", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLen", |  | ||||||
| 			expected: "StrPtrLen長度必須為2個字元", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLt", |  | ||||||
| 			expected: "StrPtrLt長度必須小於1個字元", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrLte", |  | ||||||
| 			expected: "StrPtrLte長度不能超過1個字元", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrGt", |  | ||||||
| 			expected: "StrPtrGt長度必須大於10個字元", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.StrPtrGte", |  | ||||||
| 			expected: "StrPtrGte長度必須至少為10個字元", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.OneOfString", |  | ||||||
| 			expected: "OneOfString必須是[red green]中的一個", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.OneOfInt", |  | ||||||
| 			expected: "OneOfInt必須是[5 63]中的一個", |  | ||||||
| 		}, |  | ||||||
| 		{ |  | ||||||
| 			ns:       "Test.Datetime", |  | ||||||
| 			expected: "Datetime與2006-01-02格式不匹配", |  | ||||||
| 		}, |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	for _, tt := range tests { |  | ||||||
| 
 |  | ||||||
| 		var fe validator.FieldError |  | ||||||
| 
 |  | ||||||
| 		for _, e := range errs { |  | ||||||
| 			if tt.ns == e.Namespace() { |  | ||||||
| 				fe = e |  | ||||||
| 				break |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		NotEqual(t, fe, nil) |  | ||||||
| 		Equal(t, tt.expected, fe.Translate(trans)) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
		Loading…
	
		Reference in New Issue