improve package gvalid

This commit is contained in:
John Guo 2021-11-22 22:43:09 +08:00
parent 3be19e58e1
commit cea6e4c3d9
16 changed files with 434 additions and 474 deletions

View File

@ -107,7 +107,7 @@ func (r *Request) doParse(pointer interface{}, requestType int) error {
}
}
// Validation.
if err := gvalid.CheckStructWithData(r.Context(), pointer, data, nil); err != nil {
if err = gvalid.New().Data(pointer, data).Run(r.Context()); err != nil {
return err
}
@ -120,16 +120,14 @@ func (r *Request) doParse(pointer interface{}, requestType int) error {
if err != nil {
return err
}
if err := j.Var().Scan(pointer); err != nil {
if err = j.Var().Scan(pointer); err != nil {
return err
}
for i := 0; i < reflectVal2.Len(); i++ {
if err := gvalid.CheckStructWithData(
r.Context(),
reflectVal2.Index(i),
j.Get(gconv.String(i)).Map(),
nil,
); err != nil {
if err = gvalid.New().
Data(reflectVal2.Index(i), j.Get(gconv.String(i)).Map()).
Run(r.Context()); err != nil {
return err
}
}

View File

@ -424,7 +424,7 @@ func Test_Params_Struct(t *testing.T) {
if err := r.GetStruct(user); err != nil {
r.Response.WriteExit(err)
}
if err := gvalid.CheckStruct(r.Context(), user, nil); err != nil {
if err := gvalid.New().Data(user).Run(r.Context()); err != nil {
r.Response.WriteExit(err)
}
}

View File

@ -8,7 +8,6 @@
package gvalid
import (
"context"
"regexp"
"strings"
@ -177,7 +176,6 @@ var (
"no": {},
}
defaultValidator = New() // defaultValidator is the default validator for package functions.
structTagPriority = []string{"gvalid", "valid", "v"} // structTagPriority specifies the validation tag priority array.
aliasNameTagPriority = []string{"param", "params", "p"} // aliasNameTagPriority specifies the alias tag priority array.
@ -199,65 +197,6 @@ var (
}
)
// CheckValue checks single value with specified rules.
// It returns nil if successful validation.
//
// The parameter `value` can be any type of variable, which will be converted to string
// for validation.
// The parameter `rules` can be one or more rules, multiple rules joined using char '|'.
// The parameter `messages` specifies the custom error messages, which can be type of:
// string/map/struct/*struct.
// The optional parameter `params` specifies the extra validation parameters for some rules
// like: required-*、same、different, etc.
func CheckValue(ctx context.Context, value interface{}, rules string, messages interface{}, params ...interface{}) Error {
var data interface{}
if len(params) > 0 {
data = params[0]
}
return defaultValidator.Rules(rules).Data(data).Messages(messages).CheckValue(ctx, value)
}
// CheckMap validates map and returns the error result. It returns nil if with successful validation.
//
// The parameter `rules` can be type of []string/map[string]string. It supports sequence in error result
// if `rules` is type of []string.
// The optional parameter `messages` specifies the custom error messages for specified keys and rules.
func CheckMap(ctx context.Context, params interface{}, rules interface{}, messages ...CustomMsg) Error {
var customErrorMessages CustomMsg
if len(messages) > 0 {
customErrorMessages = messages[0]
}
return defaultValidator.Rules(rules).Messages(customErrorMessages).CheckMap(ctx, params)
}
// CheckStruct validates struct and returns the error result.
//
// The parameter `object` should be type of struct/*struct.
// The parameter `rules` can be type of []string/map[string]string. It supports sequence in error result
// if `rules` is type of []string.
// The optional parameter `messages` specifies the custom error messages for specified keys and rules.
func CheckStruct(ctx context.Context, object interface{}, rules interface{}, messages ...CustomMsg) Error {
var customErrorMessages CustomMsg
if len(messages) > 0 {
customErrorMessages = messages[0]
}
return defaultValidator.Rules(rules).Messages(customErrorMessages).CheckStruct(ctx, object)
}
// CheckStructWithData validates struct with given parameter map and returns the error result.
//
// The parameter `object` should be type of struct/*struct.
// The parameter `rules` can be type of []string/map[string]string. It supports sequence in error result
// if `rules` is type of []string.
// The optional parameter `messages` specifies the custom error messages for specified keys and rules.
func CheckStructWithData(ctx context.Context, object interface{}, data interface{}, rules interface{}, messages ...CustomMsg) Error {
var customErrorMessages CustomMsg
if len(messages) > 0 {
customErrorMessages = messages[0]
}
return defaultValidator.Data(data).Rules(rules).Messages(customErrorMessages).CheckStruct(ctx, object)
}
// parseSequenceTag parses one sequence tag to field, rule and error message.
// The sequence tag is like: [alias@]rule[...#msg...]
func parseSequenceTag(tag string) (field, rule, msg string) {

View File

@ -7,15 +7,20 @@
package gvalid
import (
"context"
"errors"
"reflect"
"github.com/gogf/gf/v2/i18n/gi18n"
"github.com/gogf/gf/v2/internal/utils"
"github.com/gogf/gf/v2/util/gconv"
)
// Validator is the validation manager for chaining operations.
type Validator struct {
i18nManager *gi18n.Manager // I18n manager for error message translation.
key string // Single validation key.
value interface{} // Single validation value.
data interface{} // Validation data, which is usually a map.
data interface{} // Validation data, which can be a map, struct or a certain value to be validated.
assoc interface{} // Associated data, which is usually a map, for union validation.
rules interface{} // Custom validation data.
messages interface{} // Custom validation error messages, which can be string or type of CustomMsg.
ruleFuncMap map[string]RuleFunc // ruleFuncMap stores custom rule functions for current Validator.
@ -32,6 +37,50 @@ func New() *Validator {
}
}
// Run starts validating the given data with rules and messages.
func (v *Validator) Run(ctx context.Context) Error {
if v.data == nil {
return newValidationErrorByStr(
internalParamsErrRuleName,
errors.New(`no data passed for validation`),
)
}
originValueAndKind := utils.OriginValueAndKind(v.data)
switch originValueAndKind.OriginKind {
case reflect.Map:
isMapValidation := false
if v.rules == nil {
isMapValidation = true
} else if utils.IsMap(v.rules) || utils.IsSlice(v.rules) {
isMapValidation = true
}
if isMapValidation {
return v.doCheckMap(ctx, v.data)
}
case reflect.Struct:
isStructValidation := false
if v.rules == nil {
isStructValidation = true
} else if v.rules != nil && (utils.IsMap(v.rules) || utils.IsSlice(v.rules)) {
isStructValidation = true
}
if isStructValidation {
return v.doCheckStruct(ctx, v.data)
}
}
return v.doCheckValue(ctx, doCheckValueInput{
Name: "",
Value: v.data,
Rule: gconv.String(v.rules),
Messages: v.messages,
DataRaw: v.assoc,
DataMap: gconv.Map(v.assoc),
})
}
// Clone creates and returns a new Validator which is a shallow copy of current one.
func (v *Validator) Clone() *Validator {
newValidator := New()
@ -64,15 +113,18 @@ func (v *Validator) CaseInsensitive() *Validator {
}
// Data is a chaining operation function, which sets validation data for current operation.
// The parameter `data` is usually type of map, which specifies the parameter map used in validation.
// Calling this function also sets `useDataInsteadOfObjectAttributes` true no mather the `data` is nil or not.
func (v *Validator) Data(data interface{}) *Validator {
// The optional parameter `assoc` is usually type of map, which specifies the parameter map used in union validation.
// Calling this function with `assoc` also sets `useDataInsteadOfObjectAttributes` true
func (v *Validator) Data(data interface{}, assoc ...interface{}) *Validator {
if data == nil {
return v
}
newValidator := v.Clone()
newValidator.data = data
newValidator.useDataInsteadOfObjectAttributes = true
if len(assoc) > 0 {
newValidator.assoc = assoc[0]
newValidator.useDataInsteadOfObjectAttributes = true
}
return newValidator
}

View File

@ -17,12 +17,6 @@ import (
"github.com/gogf/gf/v2/util/gconv"
)
// CheckMap validates map and returns the error result. It returns nil if with successful validation.
// The parameter `params` should be type of map.
func (v *Validator) CheckMap(ctx context.Context, params interface{}) Error {
return v.doCheckMap(ctx, params)
}
func (v *Validator) doCheckMap(ctx context.Context, params interface{}) Error {
if params == nil {
return nil

View File

@ -17,12 +17,6 @@ import (
"github.com/gogf/gf/v2/util/gutil"
)
// CheckStruct validates struct and returns the error result.
// The parameter `object` should be type of struct/*struct.
func (v *Validator) CheckStruct(ctx context.Context, object interface{}) Error {
return v.doCheckStruct(ctx, object)
}
func (v *Validator) doCheckStruct(ctx context.Context, object interface{}) Error {
var (
errorMaps = make(map[string]map[string]error) // Returning error.
@ -53,7 +47,7 @@ func (v *Validator) doCheckStruct(ctx context.Context, object interface{}) Error
checkRules = make([]fieldRule, 0)
nameToRuleMap = make(map[string]string) // just for internally searching index purpose.
customMessage = make(CustomMsg) // Custom rule error message map.
checkValueData = v.data // Ready to be validated data, which can be type of .
checkValueData = v.assoc // Ready to be validated data, which can be type of .
)
if checkValueData == nil {
checkValueData = object
@ -111,10 +105,10 @@ func (v *Validator) doCheckStruct(ctx context.Context, object interface{}) Error
return nil
}
// Input parameter map handling.
if v.data == nil || !v.useDataInsteadOfObjectAttributes {
if v.assoc == nil || !v.useDataInsteadOfObjectAttributes {
inputParamMap = make(map[string]interface{})
} else {
inputParamMap = gconv.Map(v.data)
inputParamMap = gconv.Map(v.assoc)
}
// Checks and extends the parameters map with struct alias tag.
if !v.useDataInsteadOfObjectAttributes {

View File

@ -33,19 +33,6 @@ type iTime interface {
IsZero() bool
}
// CheckValue checks single value with specified rules.
// It returns nil if successful validation.
func (v *Validator) CheckValue(ctx context.Context, value interface{}) Error {
return v.doCheckValue(ctx, doCheckValueInput{
Name: "",
Value: value,
Rule: gconv.String(v.rules),
Messages: v.messages,
DataRaw: v.data,
DataMap: gconv.Map(v.data),
})
}
type doCheckValueInput struct {
Name string // Name specifies the name of parameter `value`.
Value interface{} // Value specifies the value for the rules to be validated.
@ -563,7 +550,7 @@ func (v *Validator) doCheckValueRecursively(ctx context.Context, in doCheckValue
validator := v.Clone()
validator.rules = nil
validator.messages = nil
if err := validator.Data(in.Value).doCheckStruct(ctx, reflect.New(in.Type).Interface()); err != nil {
if err := validator.Data(reflect.New(in.Type).Interface(), in.Value).Run(ctx); err != nil {
// It merges the errors into single error map.
for k, m := range err.(*validationError).errors {
in.ErrorMaps[k] = m
@ -575,12 +562,8 @@ func (v *Validator) doCheckValueRecursively(ctx context.Context, in doCheckValue
case reflect.Map:
var (
dataMap = gconv.Map(in.Value)
validator = v.Clone()
dataMap = gconv.Map(in.Value)
)
// Ignore data, rules and messages from parent.
validator.rules = nil
validator.messages = nil
for _, item := range dataMap {
originTypeAndKind := utils.OriginTypeAndKind(item)
v.doCheckValueRecursively(ctx, doCheckValueRecursivelyInput{

View File

@ -32,7 +32,7 @@ func ExampleCheckMap() {
"password@required|length:6,16|same{password}2#密码不能为空|密码长度应当在{min}到{max}之间|两次密码输入不相等",
"password2@required|length:6,16#",
}
if e := gvalid.CheckMap(gctx.New(), params, rules); e != nil {
if e := g.Validator().Data(params).Rules(rules).Run(gctx.New()); e != nil {
fmt.Println(e.Map())
fmt.Println(e.FirstItem())
fmt.Println(e.FirstError())
@ -54,7 +54,7 @@ func ExampleCheckMap2() {
"password@required|length:6,16|same:password2#密码不能为空|密码长度应当在{min}到{max}之间|两次密码输入不相等",
"password2@required|length:6,16#",
}
if e := gvalid.CheckMap(gctx.New(), params, rules); e != nil {
if e := g.Validator().Data(params).Rules(rules).Run(gctx.New()); e != nil {
fmt.Println(e.Map())
fmt.Println(e.FirstItem())
fmt.Println(e.FirstError())
@ -76,7 +76,7 @@ func ExampleCheckStruct() {
Page: 1,
Size: 10,
}
err := gvalid.CheckStruct(gctx.New(), obj, nil)
err := g.Validator().Data(obj).Rules(nil).Run(gctx.New())
fmt.Println(err == nil)
// Output:
// true
@ -93,7 +93,7 @@ func ExampleCheckStruct2() {
Page: 1,
Size: 10,
}
err := gvalid.CheckStruct(gctx.New(), obj, nil)
err := g.Validator().Data(obj).Rules(nil).Run(gctx.New())
fmt.Println(err == nil)
// Output:
// true
@ -110,7 +110,7 @@ func ExampleCheckStruct3() {
Page: 1,
Size: 10,
}
err := gvalid.CheckStruct(gctx.New(), obj, nil)
err := g.Validator().Data(obj).Rules(nil).Run(gctx.New())
fmt.Println(err)
// Output:
// project id must between 1, 10000
@ -143,7 +143,7 @@ func ExampleRegisterRule() {
}
return nil
})
err := gvalid.CheckStruct(gctx.New(), user, nil)
err := g.Validator().Data(user).Rules(nil).Run(gctx.New())
fmt.Println(err.Error())
// May Output:
// 用户名称已被占用
@ -177,14 +177,14 @@ func ExampleRegisterRule_OverwriteRequired() {
}
return nil
})
fmt.Println(gvalid.CheckValue(gctx.New(), "", "required", "It's required"))
fmt.Println(gvalid.CheckValue(gctx.New(), 0, "required", "It's required"))
fmt.Println(gvalid.CheckValue(gctx.New(), false, "required", "It's required"))
fmt.Println(g.Validator().Data("").Rules("required").Messages("It's required").Run(gctx.New()))
fmt.Println(g.Validator().Data(0).Rules("required").Messages("It's required").Run(gctx.New()))
fmt.Println(g.Validator().Data(false).Rules("required").Messages("It's required").Run(gctx.New()))
gvalid.DeleteRule(rule)
fmt.Println("rule deleted")
fmt.Println(gvalid.CheckValue(gctx.New(), "", "required", "It's required"))
fmt.Println(gvalid.CheckValue(gctx.New(), 0, "required", "It's required"))
fmt.Println(gvalid.CheckValue(gctx.New(), false, "required", "It's required"))
fmt.Println(g.Validator().Data("").Rules("required").Messages("It's required").Run(gctx.New()))
fmt.Println(g.Validator().Data(0).Rules("required").Messages("It's required").Run(gctx.New()))
fmt.Println(g.Validator().Data(false).Rules("required").Messages("It's required").Run(gctx.New()))
// Output:
// It's required
// It's required
@ -199,10 +199,10 @@ func ExampleValidator_Rules() {
data := g.Map{
"password": "123",
}
err := g.Validator().Data(data).
err := g.Validator().Data("", data).
Rules("required-with:password").
Messages("请输入确认密码").
CheckValue(gctx.New(), "")
Run(gctx.New())
fmt.Println(err.String())
// Output:
@ -212,7 +212,7 @@ func ExampleValidator_Rules() {
func ExampleValidator_CheckValue() {
err := g.Validator().Rules("min:18").
Messages("未成年人不允许注册哟").
CheckValue(gctx.New(), 16)
Data(16).Run(gctx.New())
fmt.Println(err.String())
// Output:
@ -240,7 +240,7 @@ func ExampleValidator_CheckMap() {
err := g.Validator().
Messages(messages).
Rules(rules).
CheckMap(gctx.New(), params)
Data(params).Run(gctx.New())
if err != nil {
g.Dump(err.Maps())
}
@ -269,7 +269,7 @@ func ExampleValidator_CheckStruct() {
if err := gconv.Scan(data, &user); err != nil {
panic(err)
}
err := g.Validator().Data(data).CheckStruct(gctx.New(), user)
err := g.Validator().Data(user, data).Run(gctx.New())
if err != nil {
fmt.Println(err.Items())
}
@ -289,7 +289,7 @@ func ExampleValidator_Required() {
ID: 1,
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Println(err)
}
@ -313,7 +313,7 @@ func ExampleValidator_RequiredIf() {
Gender: 1,
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Println(err)
}
@ -337,7 +337,7 @@ func ExampleValidator_RequiredUnless() {
Gender: 1,
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Println(err)
}
@ -362,7 +362,7 @@ func ExampleValidator_RequiredWith() {
WifeName: "Ann",
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Println(err)
}
@ -387,7 +387,7 @@ func ExampleValidator_RequiredWithAll() {
WifeName: "Ann",
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Println(err)
}
@ -411,7 +411,7 @@ func ExampleValidator_RequiredWithout() {
Gender: 1,
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Println(err)
}
@ -434,7 +434,7 @@ func ExampleValidator_RequiredWithoutAll() {
Gender: 1,
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Println(err)
}
@ -461,7 +461,7 @@ func ExampleValidator_Date() {
Date5: "2021/Oct/31",
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(gstr.Join(err.Strings(), "\n"))
}
@ -488,7 +488,7 @@ func ExampleValidator_Datetime() {
Date4: "2021/Dec/01 23:00:00", // error
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(gstr.Join(err.Strings(), "\n"))
}
@ -515,7 +515,7 @@ func ExampleValidator_DateFormat() {
Date4: "2021-11-01 23:00", // error
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(gstr.Join(err.Strings(), "\n"))
}
@ -541,7 +541,7 @@ func ExampleValidator_Email() {
MailAddr4: "gf#goframe.org", // error
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(gstr.Join(err.Strings(), "\n"))
}
@ -567,7 +567,7 @@ func ExampleValidator_Phone() {
PhoneNumber4: "1357891234", // error len must be 11
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(gstr.Join(err.Strings(), "\n"))
}
@ -594,7 +594,7 @@ func ExampleValidator_PhoneLoose() {
PhoneNumber4: "1357891234", // error len must be 11
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(gstr.Join(err.Strings(), "\n"))
}
@ -620,7 +620,7 @@ func ExampleValidator_Telephone() {
Telephone4: "775421451", // error len must be 7 or 8
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(gstr.Join(err.Strings(), "\n"))
}
@ -646,7 +646,7 @@ func ExampleValidator_Passport() {
Passport4: "gf", // error length between 6 and 18
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(gstr.Join(err.Strings(), "\n"))
}
@ -669,7 +669,7 @@ func ExampleValidator_Password() {
Password2: "gofra", // error length between 6 and 18
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(err)
}
@ -694,7 +694,7 @@ func ExampleValidator_Password2() {
Password4: "goframe123", // error must contain lower and upper letters and numbers.
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(gstr.Join(err.Strings(), "\n"))
}
@ -719,7 +719,7 @@ func ExampleValidator_Password3() {
Password3: "Goframe123", // error must contain lower and upper letters, numbers and special chars.
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(gstr.Join(err.Strings(), "\n"))
}
@ -743,7 +743,7 @@ func ExampleValidator_Postcode() {
Postcode3: "1000000", // error length must be 6
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(gstr.Join(err.Strings(), "\n"))
}
@ -763,7 +763,7 @@ func ExampleValidator_ResidentId() {
ResidentID1: "320107199506285482",
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(err)
}
@ -782,7 +782,7 @@ func ExampleValidator_BankCard() {
BankCard1: "6225760079930218",
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(err)
}
@ -805,7 +805,7 @@ func ExampleValidator_QQ() {
QQ3: "514258412a", // error all number
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(gstr.Join(err.Strings(), "\n"))
}
@ -831,7 +831,7 @@ func ExampleValidator_IP() {
IP4: "ze80::812b:1158:1f43:f0d1",
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(gstr.Join(err.Strings(), "\n"))
}
@ -853,7 +853,7 @@ func ExampleValidator_IPV4() {
IP2: "520.255.255.255",
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(err)
}
@ -874,7 +874,7 @@ func ExampleValidator_IPV6() {
IP2: "ze80::812b:1158:1f43:f0d1",
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(err)
}
@ -895,7 +895,7 @@ func ExampleValidator_Mac() {
Mac2: "Z0-CC-6A-D6-B1-1A",
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(err)
}
@ -918,7 +918,7 @@ func ExampleValidator_Url() {
URL3: "ws://goframe.org",
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(err)
}
@ -943,7 +943,7 @@ func ExampleValidator_Domain() {
Domain4: "1a.2b",
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(gstr.Join(err.Strings(), "\n"))
}
@ -965,7 +965,7 @@ func ExampleValidator_Size() {
Size2: "goframe",
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(err)
}
@ -986,7 +986,7 @@ func ExampleValidator_Length() {
Length2: "goframe",
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(err)
}
@ -1007,7 +1007,7 @@ func ExampleValidator_MinLength() {
MinLength2: "goframe",
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(err)
}
@ -1028,7 +1028,7 @@ func ExampleValidator_MaxLength() {
MaxLength2: "goframe",
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(err)
}
@ -1053,7 +1053,7 @@ func ExampleValidator_Between() {
Score2: -0.5,
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(gstr.Join(err.Strings(), "\n"))
}
@ -1079,7 +1079,7 @@ func ExampleValidator_Min() {
Score2: 10.1,
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(gstr.Join(err.Strings(), "\n"))
}
@ -1105,7 +1105,7 @@ func ExampleValidator_Max() {
Score2: 10.1,
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(gstr.Join(err.Strings(), "\n"))
}
@ -1127,7 +1127,7 @@ func ExampleValidator_Json() {
JSON2: "{\"name\":\"goframe\",\"author\":\"郭强\",\"test\"}",
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(err)
}
@ -1150,7 +1150,7 @@ func ExampleValidator_Integer() {
Str: "goframe",
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(gstr.Join(err.Strings(), "\n"))
}
@ -1174,7 +1174,7 @@ func ExampleValidator_Float() {
Str: "goframe",
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(err)
}
@ -1203,7 +1203,7 @@ func ExampleValidator_Boolean() {
Str3: "goframe",
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(gstr.Join(err.Strings(), "\n"))
}
@ -1226,7 +1226,7 @@ func ExampleValidator_Same() {
Password2: "goframe.net",
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Println(err)
}
@ -1248,7 +1248,7 @@ func ExampleValidator_Different() {
OtherMailAddr: "gf@goframe.org",
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Println(err)
}
@ -1270,7 +1270,7 @@ func ExampleValidator_In() {
Gender: 3,
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Println(err)
}
@ -1292,7 +1292,7 @@ func ExampleValidator_NotIn() {
InvalidIndex: 1,
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Println(err)
}
@ -1314,7 +1314,7 @@ func ExampleValidator_Regex() {
Regex3: "10000",
}
)
if err := g.Validator().CheckStruct(ctx, req); err != nil {
if err := g.Validator().Data(req).Run(ctx); err != nil {
fmt.Print(gstr.Join(err.Strings(), "\n"))
}

View File

@ -26,7 +26,7 @@ func Test_CheckMap1(t *testing.T) {
"id": "required|between:1,100",
"name": "required|length:6,16",
}
if m := gvalid.CheckMap(context.TODO(), data, rules); m == nil {
if m := g.Validator().Data(data).Rules(rules).Run(context.TODO()); m == nil {
t.Error("CheckMap校验失败")
} else {
t.Assert(len(m.Maps()), 2)
@ -39,7 +39,7 @@ func Test_CheckMap1(t *testing.T) {
func Test_CheckMap2(t *testing.T) {
var params interface{}
gtest.C(t, func(t *gtest.T) {
if err := gvalid.CheckMap(context.TODO(), params, nil, nil); err == nil {
if err := g.Validator().Data(params).Rules(nil).Messages(nil).Run(context.TODO()); err == nil {
t.Assert(err, nil)
}
})
@ -59,7 +59,7 @@ func Test_CheckMap2(t *testing.T) {
"length": "名称长度为{min}到{max}个字符",
},
}
if m := gvalid.CheckMap(context.TODO(), kvmap, rules, msgs); m == nil {
if m := g.Validator().Data(kvmap).Rules(rules).Messages(msgs).Run(context.TODO()); m == nil {
t.Error("CheckMap校验失败")
}
@ -78,7 +78,7 @@ func Test_CheckMap2(t *testing.T) {
"length": "名称长度为{min}到{max}个字符",
},
}
if m := gvalid.CheckMap(context.TODO(), kvmap, rules, msgs); m != nil {
if m := g.Validator().Data(kvmap).Rules(rules).Messages(msgs).Run(context.TODO()); m != nil {
t.Error(m)
}
@ -97,7 +97,7 @@ func Test_CheckMap2(t *testing.T) {
"length": "名称长度为{min}到{max}个字符",
},
}
if m := gvalid.CheckMap(context.TODO(), kvmap, rules, msgs); m != nil {
if m := g.Validator().Data(kvmap).Rules(rules).Messages(msgs).Run(context.TODO()); m != nil {
t.Error(m)
}
@ -116,7 +116,7 @@ func Test_CheckMap2(t *testing.T) {
"length": "名称长度为{min}到{max}个字符",
},
}
if m := gvalid.CheckMap(context.TODO(), kvmap, rules2, msgs); m != nil {
if m := g.Validator().Data(kvmap).Rules(rules2).Messages(msgs).Run(context.TODO()); m != nil {
t.Error(m)
}
@ -135,7 +135,7 @@ func Test_CheckMap2(t *testing.T) {
"length": "名称长度为{min}到{max}个字符",
},
}
if m := gvalid.CheckMap(context.TODO(), kvmap, rules2, msgs); m != nil {
if m := g.Validator().Data(kvmap).Rules(rules2).Messages(msgs).Run(context.TODO()); m != nil {
t.Error(m)
}
@ -154,7 +154,7 @@ func Test_CheckMap2(t *testing.T) {
"length": "名称长度为{min}到{max}个字符",
},
}
if m := gvalid.CheckMap(context.TODO(), kvmap, rules2, msgs); m != nil {
if m := g.Validator().Data(kvmap).Rules(rules2).Messages(msgs).Run(context.TODO()); m != nil {
t.Error(m)
}
}
@ -167,7 +167,7 @@ func Test_CheckMapWithNilAndNotRequiredField(t *testing.T) {
"id": "required",
"name": "length:4,16",
}
if m := gvalid.CheckMap(context.TODO(), data, rules); m != nil {
if m := g.Validator().Data(data).Rules(rules).Run(context.TODO()); m != nil {
t.Error(m)
}
}
@ -184,7 +184,7 @@ func Test_Sequence(t *testing.T) {
"password@required|length:6,16|same:password2#密码不能为空|密码长度应当在{min}到{max}之间|两次密码输入不相等",
"password2@required|length:6,16#",
}
err := gvalid.CheckMap(context.TODO(), params, rules)
err := g.Validator().Data(params).Rules(rules).Run(context.TODO())
t.AssertNE(err, nil)
t.Assert(len(err.Map()), 2)
t.Assert(err.Map()["required"], "账号不能为空")
@ -224,7 +224,7 @@ func Test_Map_Bail(t *testing.T) {
"password@required|length:6,16|same:password2#密码不能为空|密码长度应当在{min}到{max}之间|两次密码输入不相等",
"password2@required|length:6,16#",
}
err := g.Validator().Bail().Rules(rules).CheckMap(ctx, params)
err := g.Validator().Bail().Rules(rules).Data(params).Run(ctx)
t.AssertNE(err, nil)
t.Assert(err.String(), "账号不能为空")
})
@ -240,7 +240,7 @@ func Test_Map_Bail(t *testing.T) {
"password@required|length:6,16|same:password2#密码不能为空|密码长度应当在{min}到{max}之间|两次密码输入不相等",
"password2@required|length:6,16#",
}
err := g.Validator().Bail().Rules(rules).CheckMap(ctx, params)
err := g.Validator().Bail().Rules(rules).Data(params).Run(ctx)
t.AssertNE(err, nil)
t.Assert(err.String(), "账号不能为空")
})

View File

@ -14,7 +14,6 @@ import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gtime"
"github.com/gogf/gf/v2/test/gtest"
"github.com/gogf/gf/v2/util/gvalid"
)
func Test_CheckStruct(t *testing.T) {
@ -35,7 +34,7 @@ func Test_CheckStruct(t *testing.T) {
"Age": "年龄为18到30周岁",
}
obj := &Object{"john", 16}
err := gvalid.CheckStruct(context.TODO(), obj, rules, msgs)
err := g.Validator().Data(obj).Rules(rules).Messages(msgs).Run(context.TODO())
t.Assert(err, nil)
})
@ -56,7 +55,7 @@ func Test_CheckStruct(t *testing.T) {
"Age": "年龄为18到30周岁",
}
obj := &Object{"john", 16}
err := gvalid.CheckStruct(context.TODO(), obj, rules, msgs)
err := g.Validator().Data(obj).Rules(rules).Messages(msgs).Run(context.TODO())
t.AssertNE(err, nil)
t.Assert(len(err.Maps()), 2)
t.Assert(err.Maps()["Name"]["required"], "")
@ -81,7 +80,7 @@ func Test_CheckStruct(t *testing.T) {
"Age": "年龄为18到30周岁",
}
obj := &Object{"john", 16}
err := gvalid.CheckStruct(context.TODO(), obj, rules, msgs)
err := g.Validator().Data(obj).Rules(rules).Messages(msgs).Run(context.TODO())
t.AssertNE(err, nil)
t.Assert(len(err.Maps()), 2)
t.Assert(err.Maps()["Name"]["required"], "")
@ -106,7 +105,7 @@ func Test_CheckStruct(t *testing.T) {
"Age": "年龄为18到30周岁",
}
obj := &Object{"john", 16}
err := gvalid.CheckStruct(context.TODO(), obj, rules, msgs)
err := g.Validator().Data(obj).Rules(rules).Messages(msgs).Run(context.TODO())
t.AssertNE(err, nil)
t.Assert(len(err.Maps()), 2)
t.Assert(err.Maps()["Name"]["required"], "")
@ -120,7 +119,7 @@ func Test_CheckStruct(t *testing.T) {
Password string `json:"password" gvalid:"password@required#登录密码不能为空"`
}
var login LoginRequest
err := gvalid.CheckStruct(context.TODO(), login, nil)
err := g.Validator().Data(login).Rules(nil).Run(context.TODO())
t.AssertNE(err, nil)
t.Assert(len(err.Maps()), 2)
t.Assert(err.Maps()["username"]["required"], "用户名不能为空")
@ -133,7 +132,7 @@ func Test_CheckStruct(t *testing.T) {
Password string `json:"password" gvalid:"@required#登录密码不能为空"`
}
var login LoginRequest
err := gvalid.CheckStruct(context.TODO(), login, nil)
err := g.Validator().Data(login).Rules(nil).Run(context.TODO())
t.Assert(err, nil)
})
@ -143,7 +142,7 @@ func Test_CheckStruct(t *testing.T) {
Password string `json:"password" gvalid:"password@required#登录密码不能为空"`
}
var login LoginRequest
err := gvalid.CheckStruct(context.TODO(), login, nil)
err := g.Validator().Data(login).Rules(nil).Run(context.TODO())
t.AssertNE(err, nil)
t.Assert(err.Maps()["password"]["required"], "登录密码不能为空")
})
@ -161,7 +160,7 @@ func Test_CheckStruct(t *testing.T) {
Username: "john",
Password: "123456",
}
err := gvalid.CheckStruct(context.TODO(), user, nil)
err := g.Validator().Data(user).Rules(nil).Run(context.TODO())
t.AssertNE(err, nil)
t.Assert(len(err.Maps()), 1)
t.Assert(err.Maps()["uid"]["min"], "ID不能为空")
@ -184,7 +183,7 @@ func Test_CheckStruct(t *testing.T) {
"username@required#用户名不能为空",
}
err := gvalid.CheckStruct(context.TODO(), user, rules)
err := g.Validator().Data(user).Rules(rules).Run(context.TODO())
t.AssertNE(err, nil)
t.Assert(len(err.Maps()), 1)
t.Assert(err.Maps()["uid"]["min"], "ID不能为空")
@ -202,7 +201,7 @@ func Test_CheckStruct(t *testing.T) {
Username: "john",
Password: "123456",
}
err := gvalid.CheckStruct(context.TODO(), user, nil)
err := g.Validator().Data(user).Rules(nil).Run(context.TODO())
t.AssertNE(err, nil)
t.Assert(len(err.Maps()), 1)
})
@ -220,7 +219,7 @@ func Test_CheckStruct(t *testing.T) {
Username: "john",
Password: "123456",
}
err := gvalid.CheckStruct(context.TODO(), user, nil)
err := g.Validator().Data(user).Rules(nil).Run(context.TODO())
t.AssertNE(err, nil)
t.Assert(len(err.Maps()), 1)
t.Assert(err.Maps()["uid"]["min"], "ID不能为空")
@ -249,7 +248,7 @@ func Test_CheckStruct_EmbeddedObject_Attribute(t *testing.T) {
obj.Type = 1
obj.Name = "john"
obj.Time = gtime.Now()
err := gvalid.CheckStruct(context.TODO(), obj, rules, ruleMsg)
err := g.Validator().Data(obj).Rules(rules).Messages(ruleMsg).Run(context.TODO())
t.Assert(err, nil)
})
gtest.C(t, func(t *gtest.T) {
@ -273,7 +272,7 @@ func Test_CheckStruct_EmbeddedObject_Attribute(t *testing.T) {
obj := &Object{}
obj.Type = 1
obj.Name = "john"
err := gvalid.CheckStruct(context.TODO(), obj, rules, ruleMsg)
err := g.Validator().Data(obj).Rules(rules).Messages(ruleMsg).Run(context.TODO())
t.Assert(err, nil)
})
}
@ -296,7 +295,7 @@ func Test_CheckStruct_With_EmbeddedObject(t *testing.T) {
Pass2: "2",
},
}
err := gvalid.CheckStruct(context.TODO(), user, nil)
err := g.Validator().Data(user).Rules(nil).Run(context.TODO())
t.AssertNE(err, nil)
t.Assert(err.Maps()["name"], g.Map{"required": "请输入您的姓名"})
t.Assert(err.Maps()["password1"], g.Map{"same": "您两次输入的密码不一致"})
@ -322,7 +321,7 @@ func Test_CheckStruct_With_StructAttribute(t *testing.T) {
Pass2: "2",
},
}
err := gvalid.CheckStruct(context.TODO(), user, nil)
err := g.Validator().Data(user).Rules(nil).Run(context.TODO())
t.AssertNE(err, nil)
t.Assert(err.Maps()["name"], g.Map{"required": "请输入您的姓名"})
t.Assert(err.Maps()["password1"], g.Map{"same": "您两次输入的密码不一致"})
@ -341,7 +340,7 @@ func Test_CheckStruct_Optional(t *testing.T) {
Page: 1,
Size: 10,
}
err := gvalid.CheckStruct(context.TODO(), obj, nil)
err := g.Validator().Data(obj).Rules(nil).Run(context.TODO())
t.Assert(err, nil)
})
gtest.C(t, func(t *gtest.T) {
@ -354,7 +353,7 @@ func Test_CheckStruct_Optional(t *testing.T) {
Page: 1,
Size: 10,
}
err := gvalid.CheckStruct(context.TODO(), obj, nil)
err := g.Validator().Data(obj).Rules(nil).Run(context.TODO())
t.Assert(err, nil)
})
gtest.C(t, func(t *gtest.T) {
@ -367,7 +366,7 @@ func Test_CheckStruct_Optional(t *testing.T) {
Page: 1,
Size: 10,
}
err := gvalid.CheckStruct(context.TODO(), obj, nil)
err := g.Validator().Data(obj).Rules(nil).Run(context.TODO())
t.Assert(err.String(), "project id must between 1, 10000")
})
}
@ -383,7 +382,7 @@ func Test_CheckStruct_NoTag(t *testing.T) {
Page: 1,
Size: 10,
}
err := gvalid.CheckStruct(context.TODO(), obj, nil)
err := g.Validator().Data(obj).Rules(nil).Run(context.TODO())
t.Assert(err, nil)
})
}
@ -400,7 +399,7 @@ func Test_CheckStruct_InvalidRule(t *testing.T) {
Age: 18,
Phone: "123",
}
err := gvalid.CheckStruct(context.TODO(), obj, nil)
err := g.Validator().Data(obj).Rules(nil).Run(context.TODO())
t.AssertNE(err, nil)
})
}
@ -415,7 +414,12 @@ func TestValidator_CheckStructWithData(t *testing.T) {
Uid: 1,
Nickname: "john",
}
t.Assert(gvalid.CheckStructWithData(context.TODO(), data, g.Map{"uid": 1, "nickname": "john"}, nil), nil)
t.Assert(g.Validator().Data(
data,
g.Map{"uid": 1, "nickname": "john"},
).Run(context.TODO()),
nil,
)
})
gtest.C(t, func(t *gtest.T) {
type UserApiSearch struct {
@ -423,7 +427,7 @@ func TestValidator_CheckStructWithData(t *testing.T) {
Nickname string `v:"required-with:uid"`
}
data := UserApiSearch{}
t.AssertNE(gvalid.CheckStructWithData(context.TODO(), data, g.Map{}, nil), nil)
t.AssertNE(g.Validator().Data(data, g.Map{}).Run(context.TODO()), nil)
})
gtest.C(t, func(t *gtest.T) {
type UserApiSearch struct {
@ -433,7 +437,7 @@ func TestValidator_CheckStructWithData(t *testing.T) {
data := UserApiSearch{
Uid: 1,
}
t.AssertNE(gvalid.CheckStructWithData(context.TODO(), data, g.Map{}, nil), nil)
t.AssertNE(g.Validator().Data(data, g.Map{}).Run(context.TODO()), nil)
})
gtest.C(t, func(t *gtest.T) {
@ -447,7 +451,7 @@ func TestValidator_CheckStructWithData(t *testing.T) {
StartTime: nil,
EndTime: nil,
}
t.Assert(gvalid.CheckStructWithData(context.TODO(), data, g.Map{}, nil), nil)
t.Assert(g.Validator().Data(data, g.Map{}).Run(context.TODO()), nil)
})
gtest.C(t, func(t *gtest.T) {
type UserApiSearch struct {
@ -460,6 +464,6 @@ func TestValidator_CheckStructWithData(t *testing.T) {
StartTime: gtime.Now(),
EndTime: nil,
}
t.AssertNE(gvalid.CheckStructWithData(context.TODO(), data, g.Map{"start_time": gtime.Now()}, nil), nil)
t.AssertNE(g.Validator().Data(data, g.Map{"start_time": gtime.Now()}).Run(context.TODO()), nil)
})
}

View File

@ -11,20 +11,19 @@ import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/test/gtest"
"github.com/gogf/gf/v2/util/gvalid"
)
func Test_CI(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
err := gvalid.CheckValue(ctx, "id", "in:Id,Name", nil)
err := g.Validator().Data("id").Rules("in:Id,Name").Messages(nil).Run(ctx)
t.AssertNE(err, nil)
})
gtest.C(t, func(t *gtest.T) {
err := gvalid.CheckValue(ctx, "id", "ci|in:Id,Name", nil)
err := g.Validator().Data("id").Rules("ci|in:Id,Name").Messages(nil).Run(ctx)
t.AssertNil(err)
})
gtest.C(t, func(t *gtest.T) {
err := g.Validator().CaseInsensitive().Rules("in:Id,Name").CheckValue(ctx, "id")
err := g.Validator().CaseInsensitive().Rules("in:Id,Name").Data("id").Run(ctx)
t.AssertNil(err)
})
}

View File

@ -11,8 +11,8 @@ import (
"strings"
"testing"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/test/gtest"
"github.com/gogf/gf/v2/util/gvalid"
)
func Test_Map(t *testing.T) {
@ -20,7 +20,7 @@ func Test_Map(t *testing.T) {
var (
rule = "ipv4"
val = "0.0.0"
err = gvalid.CheckValue(context.TODO(), val, rule, nil)
err = g.Validator().Data(val).Rules(rule).Messages(nil).Run(context.TODO())
msg = map[string]string{
"ipv4": "The value `0.0.0` is not a valid IPv4 address",
}
@ -34,7 +34,7 @@ func Test_FirstString(t *testing.T) {
var (
rule = "ipv4"
val = "0.0.0"
err = gvalid.CheckValue(context.TODO(), val, rule, nil)
err = g.Validator().Data(val).Rules(rule).Messages(nil).Run(context.TODO())
)
t.Assert(err.FirstError(), "The value `0.0.0` is not a valid IPv4 address")
})
@ -46,7 +46,7 @@ func Test_CustomError1(t *testing.T) {
"integer": "请输入一个整数",
"length": "参数长度不对啊老铁",
}
e := gvalid.CheckValue(context.TODO(), "6.66", rule, msgs)
e := g.Validator().Data("6.66").Rules(rule).Messages(msgs).Run(context.TODO())
if e == nil || len(e.Map()) != 2 {
t.Error("规则校验失败")
} else {
@ -66,7 +66,7 @@ func Test_CustomError1(t *testing.T) {
func Test_CustomError2(t *testing.T) {
rule := "integer|length:6,16"
msgs := "请输入一个整数|参数长度不对啊老铁"
e := gvalid.CheckValue(context.TODO(), "6.66", rule, msgs)
e := g.Validator().Data("6.66").Rules(rule).Messages(msgs).Run(context.TODO())
if e == nil || len(e.Map()) != 2 {
t.Error("规则校验失败")
} else {

View File

@ -34,9 +34,9 @@ func Test_CustomRule1(t *testing.T) {
)
gtest.C(t, func(t *gtest.T) {
err := gvalid.CheckValue(context.TODO(), "123456", rule, "custom message")
err := g.Validator().Data("123456").Rules(rule).Messages("custom message").Run(ctx)
t.Assert(err.String(), "custom message")
err = gvalid.CheckValue(context.TODO(), "123456", rule, "custom message", g.Map{"data": "123456"})
err = g.Validator().Data("123456", g.Map{"data": "123456"}).Rules(rule).Messages("custom message").Run(ctx)
t.Assert(err, nil)
})
// Error with struct validation.
@ -49,7 +49,7 @@ func Test_CustomRule1(t *testing.T) {
Value: "123",
Data: "123456",
}
err := gvalid.CheckStruct(context.TODO(), st, nil)
err := g.Validator().Data(st).Rules(nil).Run(ctx)
t.Assert(err.String(), "自定义错误")
})
// No error with struct validation.
@ -62,7 +62,7 @@ func Test_CustomRule1(t *testing.T) {
Value: "123456",
Data: "123456",
}
err := gvalid.CheckStruct(context.TODO(), st, nil)
err := g.Validator().Data(st).Rules(nil).Run(ctx)
t.Assert(err, nil)
})
}
@ -79,8 +79,8 @@ func Test_CustomRule2(t *testing.T) {
// Check.
gtest.C(t, func(t *gtest.T) {
errStr := "data map should not be empty"
t.Assert(gvalid.CheckValue(context.TODO(), g.Map{}, rule, errStr).String(), errStr)
t.Assert(gvalid.CheckValue(context.TODO(), g.Map{"k": "v"}, rule, errStr), nil)
t.Assert(g.Validator().Data(g.Map{}).Messages(errStr).Rules(rule).Run(ctx), errStr)
t.Assert(g.Validator().Data(g.Map{"k": "v"}).Rules(rule).Messages(errStr).Run(ctx), nil)
})
// Error with struct validation.
gtest.C(t, func(t *gtest.T) {
@ -92,7 +92,7 @@ func Test_CustomRule2(t *testing.T) {
Value: map[string]string{},
Data: "123456",
}
err := gvalid.CheckStruct(context.TODO(), st, nil)
err := g.Validator().Data(st).Rules(nil).Run(ctx)
t.Assert(err.String(), "自定义错误")
})
// No error with struct validation.
@ -105,7 +105,7 @@ func Test_CustomRule2(t *testing.T) {
Value: map[string]string{"k": "v"},
Data: "123456",
}
err := gvalid.CheckStruct(context.TODO(), st, nil)
err := g.Validator().Data(st).Rules(nil).Run(ctx)
t.Assert(err, nil)
})
}
@ -122,9 +122,9 @@ func Test_CustomRule_AllowEmpty(t *testing.T) {
// Check.
gtest.C(t, func(t *gtest.T) {
errStr := "error"
t.Assert(gvalid.CheckValue(context.TODO(), "", rule, errStr), nil)
t.Assert(gvalid.CheckValue(context.TODO(), "gf", rule, errStr), nil)
t.Assert(gvalid.CheckValue(context.TODO(), "gf2", rule, errStr).String(), errStr)
t.Assert(g.Validator().Data("").Rules(rule).Messages(errStr).Run(ctx), "")
t.Assert(g.Validator().Data("gf").Rules(rule).Messages(errStr).Run(ctx), "")
t.Assert(g.Validator().Data("gf2").Rules(rule).Messages(errStr).Run(ctx), errStr)
})
// Error with struct validation.
gtest.C(t, func(t *gtest.T) {
@ -136,7 +136,7 @@ func Test_CustomRule_AllowEmpty(t *testing.T) {
Value: "",
Data: "123456",
}
err := gvalid.CheckStruct(context.TODO(), st, nil)
err := g.Validator().Data(st).Rules(nil).Run(ctx)
t.Assert(err, nil)
})
// No error with struct validation.
@ -149,7 +149,7 @@ func Test_CustomRule_AllowEmpty(t *testing.T) {
Value: "john",
Data: "123456",
}
err := gvalid.CheckStruct(context.TODO(), st, nil)
err := g.Validator().Data(st).Rules(nil).Run(ctx)
t.Assert(err.String(), "自定义错误")
})
}
@ -170,14 +170,15 @@ func TestValidator_RuleFunc(t *testing.T) {
err := g.Validator().Rules(ruleName).
Messages("custom message").
RuleFunc(ruleName, ruleFunc).
CheckValue(ctx, "123456")
Data("123456").
Run(ctx)
t.Assert(err.String(), "custom message")
err = g.Validator().
Rules(ruleName).
Messages("custom message").
Data(g.Map{"data": "123456"}).
Data("123456", g.Map{"data": "123456"}).
RuleFunc(ruleName, ruleFunc).
CheckValue(ctx, "123456")
Run(ctx)
t.AssertNil(err)
})
// Error with struct validation.
@ -190,7 +191,7 @@ func TestValidator_RuleFunc(t *testing.T) {
Value: "123",
Data: "123456",
}
err := g.Validator().RuleFunc(ruleName, ruleFunc).CheckStruct(ctx, st)
err := g.Validator().RuleFunc(ruleName, ruleFunc).Data(st).Run(ctx)
t.Assert(err.String(), "自定义错误")
})
// No error with struct validation.
@ -203,7 +204,7 @@ func TestValidator_RuleFunc(t *testing.T) {
Value: "123456",
Data: "123456",
}
err := g.Validator().RuleFunc(ruleName, ruleFunc).CheckStruct(ctx, st)
err := g.Validator().RuleFunc(ruleName, ruleFunc).Data(st).Run(ctx)
t.AssertNil(err)
})
}
@ -226,16 +227,15 @@ func TestValidator_RuleFuncMap(t *testing.T) {
Messages("custom message").
RuleFuncMap(map[string]gvalid.RuleFunc{
ruleName: ruleFunc,
}).CheckValue(ctx, "123456")
}).Data("123456").Run(ctx)
t.Assert(err.String(), "custom message")
err = g.Validator().
Rules(ruleName).
Messages("custom message").
Data(g.Map{"data": "123456"}).
Data("123456", g.Map{"data": "123456"}).
RuleFuncMap(map[string]gvalid.RuleFunc{
ruleName: ruleFunc,
}).
CheckValue(ctx, "123456")
}).Run(ctx)
t.AssertNil(err)
})
// Error with struct validation.
@ -251,7 +251,7 @@ func TestValidator_RuleFuncMap(t *testing.T) {
err := g.Validator().
RuleFuncMap(map[string]gvalid.RuleFunc{
ruleName: ruleFunc,
}).CheckStruct(ctx, st)
}).Data(st).Run(ctx)
t.Assert(err.String(), "自定义错误")
})
// No error with struct validation.
@ -267,7 +267,7 @@ func TestValidator_RuleFuncMap(t *testing.T) {
err := g.Validator().
RuleFuncMap(map[string]gvalid.RuleFunc{
ruleName: ruleFunc,
}).CheckStruct(ctx, st)
}).Data(st).Run(ctx)
t.AssertNil(err)
})
}

View File

@ -24,14 +24,14 @@ func TestValidator_I18n(t *testing.T) {
validator = gvalid.New().I18n(i18nManager)
)
gtest.C(t, func(t *gtest.T) {
err = validator.Rules("required").CheckValue(ctx, "")
err = validator.Rules("required").Data("").Run(ctx)
t.Assert(err.String(), "The field is required")
err = validator.Rules("required").CheckValue(ctxCn, "")
err = validator.Rules("required").Data("").Run(ctxCn)
t.Assert(err.String(), "字段不能为空")
})
gtest.C(t, func(t *gtest.T) {
err = validator.Rules("required").Messages("CustomMessage").CheckValue(ctxCn, "")
err = validator.Rules("required").Messages("CustomMessage").Data("").Run(ctxCn)
t.Assert(err.String(), "自定义错误")
})
gtest.C(t, func(t *gtest.T) {
@ -44,7 +44,7 @@ func TestValidator_I18n(t *testing.T) {
Page: 1,
Size: 10,
}
err = validator.CheckStruct(ctxCn, obj)
err = validator.Data(obj).Run(ctxCn)
t.Assert(err.String(), "项目ID必须大于等于1并且要小于等于10000")
})
}

View File

@ -12,7 +12,6 @@ import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/test/gtest"
"github.com/gogf/gf/v2/util/gvalid"
)
func Test_CheckStruct_Recursive_Struct(t *testing.T) {
@ -33,7 +32,7 @@ func Test_CheckStruct_Recursive_Struct(t *testing.T) {
Pass2: "2",
},
}
err := gvalid.CheckStruct(ctx, user, nil)
err := g.Validator().Data(user).Run(ctx)
t.AssertNE(err, nil)
t.Assert(err.Maps()["Name"], g.Map{"required": "The Name field is required"})
t.Assert(err.Maps()["Pass1"], g.Map{"same": "The Pass1 value `1` must be the same as field Pass2"})
@ -60,7 +59,7 @@ func Test_CheckStruct_Recursive_Struct_WithData(t *testing.T) {
"Pass2": 200,
},
}
err := g.Validator().Data(data).CheckStruct(ctx, user)
err := g.Validator().Data(user, data).Run(ctx)
t.AssertNE(err, nil)
t.Assert(err.Maps()["Name"], nil)
t.Assert(err.Maps()["Pass1"], g.Map{"same": "The Pass1 value `100` must be the same as field Pass2"})
@ -92,7 +91,7 @@ func Test_CheckStruct_Recursive_SliceStruct(t *testing.T) {
},
},
}
err := gvalid.CheckStruct(ctx, user, nil)
err := g.Validator().Data(user).Rules(nil).Run(ctx)
g.Dump(err.Items())
t.AssertNE(err, nil)
t.Assert(err.Maps()["Name"], g.Map{"required": "The Name field is required"})
@ -125,7 +124,7 @@ func Test_CheckStruct_Recursive_SliceStruct_Bail(t *testing.T) {
},
},
}
err := g.Validator().Bail().CheckStruct(ctx, user)
err := g.Validator().Bail().Data(user).Run(ctx)
g.Dump(err.Items())
t.AssertNE(err, nil)
t.Assert(err.Maps()["Name"], nil)
@ -146,7 +145,7 @@ func Test_CheckStruct_Recursive_SliceStruct_Required(t *testing.T) {
Passes []Pass
}
user := &User{}
err := gvalid.CheckStruct(ctx, user, nil)
err := g.Validator().Data(user).Rules(nil).Run(ctx)
g.Dump(err.Items())
t.AssertNE(err, nil)
t.Assert(err.Maps()["Name"], g.Map{"required": "The Name field is required"})
@ -179,7 +178,7 @@ func Test_CheckStruct_Recursive_MapStruct(t *testing.T) {
},
},
}
err := gvalid.CheckStruct(ctx, user, nil)
err := g.Validator().Data(user).Rules(nil).Run(ctx)
g.Dump(err.Items())
t.AssertNE(err, nil)
t.Assert(err.Maps()["Name"], g.Map{"required": "The Name field is required"})
@ -207,7 +206,7 @@ func Test_CheckMap_Recursive_SliceStruct(t *testing.T) {
},
},
}
err := gvalid.CheckMap(ctx, user, nil)
err := g.Validator().Data(user).Run(ctx)
g.Dump(err.Items())
t.AssertNE(err, nil)
t.Assert(err.Maps()["Name"], nil)

View File

@ -7,7 +7,6 @@
package gvalid_test
import (
"context"
"testing"
"time"
@ -17,7 +16,6 @@ import (
"github.com/gogf/gf/v2/os/gctx"
"github.com/gogf/gf/v2/os/gtime"
"github.com/gogf/gf/v2/test/gtest"
"github.com/gogf/gf/v2/util/gvalid"
)
var (
@ -30,9 +28,9 @@ func Test_Check(t *testing.T) {
val1 := 0
val2 := 7
val3 := 20
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil)
err2 := gvalid.CheckValue(context.TODO(), val2, rule, nil)
err3 := gvalid.CheckValue(context.TODO(), val3, rule, nil)
err1 := g.Validator().Data(val1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val3).Rules(rule).Messages(nil).Run(ctx)
t.Assert(err1, "InvalidRules: abc:6,16")
t.Assert(err2, "InvalidRules: abc:6,16")
t.Assert(err3, "InvalidRules: abc:6,16")
@ -40,16 +38,16 @@ func Test_Check(t *testing.T) {
}
func Test_Required(t *testing.T) {
if m := gvalid.CheckValue(context.TODO(), "1", "required", nil); m != nil {
if m := g.Validator().Data("1").Rules("required").Messages(nil).Run(ctx); m != nil {
t.Error(m)
}
if m := gvalid.CheckValue(context.TODO(), "", "required", nil); m == nil {
if m := g.Validator().Data("").Rules("required").Messages(nil).Run(ctx); m == nil {
t.Error(m)
}
if m := gvalid.CheckValue(context.TODO(), "", "required-if: id,1,age,18", nil, map[string]interface{}{"id": 1, "age": 19}); m == nil {
if m := g.Validator().Data("", map[string]interface{}{"id": 1, "age": 19}).Rules("required-if: id,1,age,18").Messages(nil).Run(ctx); m == nil {
t.Error("Required校验失败")
}
if m := gvalid.CheckValue(context.TODO(), "", "required-if: id,1,age,18", nil, map[string]interface{}{"id": 2, "age": 19}); m != nil {
if m := g.Validator().Data("", map[string]interface{}{"id": 2, "age": 19}).Rules("required-if: id,1,age,18").Messages(nil).Run(ctx); m != nil {
t.Error("Required校验失败")
}
}
@ -57,20 +55,20 @@ func Test_Required(t *testing.T) {
func Test_RequiredIf(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
rule := "required-if:id,1,age,18"
t.AssertNE(gvalid.CheckValue(context.TODO(), "", rule, nil, g.Map{"id": 1}), nil)
t.Assert(gvalid.CheckValue(context.TODO(), "", rule, nil, g.Map{"id": 0}), nil)
t.AssertNE(gvalid.CheckValue(context.TODO(), "", rule, nil, g.Map{"age": 18}), nil)
t.Assert(gvalid.CheckValue(context.TODO(), "", rule, nil, g.Map{"age": 20}), nil)
t.AssertNE(g.Validator().Data("", g.Map{"id": 1}).Rules(rule).Messages(nil).Run(ctx), nil)
t.Assert(g.Validator().Data("", g.Map{"id": 0}).Rules(rule).Messages(nil).Run(ctx), nil)
t.AssertNE(g.Validator().Data("", g.Map{"age": 18}).Rules(rule).Messages(nil).Run(ctx), nil)
t.Assert(g.Validator().Data("", g.Map{"age": 20}).Rules(rule).Messages(nil).Run(ctx), nil)
})
}
func Test_RequiredUnless(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
rule := "required-unless:id,1,age,18"
t.Assert(gvalid.CheckValue(context.TODO(), "", rule, nil, g.Map{"id": 1}), nil)
t.AssertNE(gvalid.CheckValue(context.TODO(), "", rule, nil, g.Map{"id": 0}), nil)
t.Assert(gvalid.CheckValue(context.TODO(), "", rule, nil, g.Map{"age": 18}), nil)
t.AssertNE(gvalid.CheckValue(context.TODO(), "", rule, nil, g.Map{"age": 20}), nil)
t.Assert(g.Validator().Data("", g.Map{"id": 1}).Rules(rule).Messages(nil).Run(ctx), nil)
t.AssertNE(g.Validator().Data("", g.Map{"id": 0}).Rules(rule).Messages(nil).Run(ctx), nil)
t.Assert(g.Validator().Data("", g.Map{"age": 18}).Rules(rule).Messages(nil).Run(ctx), nil)
t.AssertNE(g.Validator().Data("", g.Map{"age": 20}).Rules(rule).Messages(nil).Run(ctx), nil)
})
}
@ -88,9 +86,9 @@ func Test_RequiredWith(t *testing.T) {
"id": 100,
"name": "john",
}
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil, params1)
err2 := gvalid.CheckValue(context.TODO(), val1, rule, nil, params2)
err3 := gvalid.CheckValue(context.TODO(), val1, rule, nil, params3)
err1 := g.Validator().Data(val1, params1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val1, params2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val1, params3).Rules(rule).Messages(nil).Run(ctx)
t.Assert(err1, nil)
t.AssertNE(err2, nil)
t.AssertNE(err3, nil)
@ -108,9 +106,9 @@ func Test_RequiredWith(t *testing.T) {
params3 := g.Map{
"time": time.Time{},
}
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil, params1)
err2 := gvalid.CheckValue(context.TODO(), val1, rule, nil, params2)
err3 := gvalid.CheckValue(context.TODO(), val1, rule, nil, params3)
err1 := g.Validator().Data(val1, params1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val1, params2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val1, params3).Rules(rule).Messages(nil).Run(ctx)
t.Assert(err1, nil)
t.AssertNE(err2, nil)
t.Assert(err3, nil)
@ -127,9 +125,9 @@ func Test_RequiredWith(t *testing.T) {
params3 := g.Map{
"time": time.Now(),
}
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil, params1)
err2 := gvalid.CheckValue(context.TODO(), val1, rule, nil, params2)
err3 := gvalid.CheckValue(context.TODO(), val1, rule, nil, params3)
err1 := g.Validator().Data(val1, params1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val1, params2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val1, params3).Rules(rule).Messages(nil).Run(ctx)
t.Assert(err1, nil)
t.AssertNE(err2, nil)
t.AssertNE(err3, nil)
@ -146,7 +144,7 @@ func Test_RequiredWith(t *testing.T) {
StartTime: nil,
EndTime: nil,
}
t.Assert(gvalid.CheckStruct(context.TODO(), data, nil), nil)
t.Assert(g.Validator().Data(data).Run(ctx), nil)
})
gtest.C(t, func(t *gtest.T) {
type UserApiSearch struct {
@ -159,7 +157,7 @@ func Test_RequiredWith(t *testing.T) {
StartTime: nil,
EndTime: gtime.Now(),
}
t.AssertNE(gvalid.CheckStruct(context.TODO(), data, nil), nil)
t.AssertNE(g.Validator().Data(data).Run(ctx), nil)
})
}
@ -177,9 +175,9 @@ func Test_RequiredWithAll(t *testing.T) {
"id": 100,
"name": "john",
}
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil, params1)
err2 := gvalid.CheckValue(context.TODO(), val1, rule, nil, params2)
err3 := gvalid.CheckValue(context.TODO(), val1, rule, nil, params3)
err1 := g.Validator().Data(val1, params1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val1, params2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val1, params3).Rules(rule).Messages(nil).Run(ctx)
t.Assert(err1, nil)
t.Assert(err2, nil)
t.AssertNE(err3, nil)
@ -200,9 +198,9 @@ func Test_RequiredWithOut(t *testing.T) {
"id": 100,
"name": "john",
}
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil, params1)
err2 := gvalid.CheckValue(context.TODO(), val1, rule, nil, params2)
err3 := gvalid.CheckValue(context.TODO(), val1, rule, nil, params3)
err1 := g.Validator().Data(val1, params1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val1, params2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val1, params3).Rules(rule).Messages(nil).Run(ctx)
t.AssertNE(err1, nil)
t.AssertNE(err2, nil)
t.Assert(err3, nil)
@ -223,9 +221,9 @@ func Test_RequiredWithOutAll(t *testing.T) {
"id": 100,
"name": "john",
}
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil, params1)
err2 := gvalid.CheckValue(context.TODO(), val1, rule, nil, params2)
err3 := gvalid.CheckValue(context.TODO(), val1, rule, nil, params3)
err1 := g.Validator().Data(val1, params1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val1, params2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val1, params3).Rules(rule).Messages(nil).Run(ctx)
t.AssertNE(err1, nil)
t.Assert(err2, nil)
t.Assert(err3, nil)
@ -243,14 +241,14 @@ func Test_Date(t *testing.T) {
val6 := "2010/11/01"
val7 := "2010=11=01"
val8 := "123"
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil)
err2 := gvalid.CheckValue(context.TODO(), val2, rule, nil)
err3 := gvalid.CheckValue(context.TODO(), val3, rule, nil)
err4 := gvalid.CheckValue(context.TODO(), val4, rule, nil)
err5 := gvalid.CheckValue(context.TODO(), val5, rule, nil)
err6 := gvalid.CheckValue(context.TODO(), val6, rule, nil)
err7 := gvalid.CheckValue(context.TODO(), val7, rule, nil)
err8 := gvalid.CheckValue(context.TODO(), val8, rule, nil)
err1 := g.Validator().Data(val1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val3).Rules(rule).Messages(nil).Run(ctx)
err4 := g.Validator().Data(val4).Rules(rule).Messages(nil).Run(ctx)
err5 := g.Validator().Data(val5).Rules(rule).Messages(nil).Run(ctx)
err6 := g.Validator().Data(val6).Rules(rule).Messages(nil).Run(ctx)
err7 := g.Validator().Data(val7).Rules(rule).Messages(nil).Run(ctx)
err8 := g.Validator().Data(val8).Rules(rule).Messages(nil).Run(ctx)
t.AssertNE(err1, nil)
t.AssertNE(err2, nil)
t.Assert(err3, nil)
@ -273,7 +271,7 @@ func Test_Datetime(t *testing.T) {
"2010.11.01 12:00:00": false,
}
for k, v := range m {
err := g.Validator().Rules(`datetime`).CheckValue(ctx, k)
err := g.Validator().Rules(`datetime`).Data(k).Run(ctx)
if v {
t.AssertNil(err)
} else {
@ -291,12 +289,12 @@ func Test_DateFormat(t *testing.T) {
val4 := "201011-01"
val5 := "2010~11~01"
val6 := "2010-11~01"
err1 := gvalid.CheckValue(context.TODO(), val1, "date-format:Y", nil)
err2 := gvalid.CheckValue(context.TODO(), val2, "date-format:Ym", nil)
err3 := gvalid.CheckValue(context.TODO(), val3, "date-format:Y.m", nil)
err4 := gvalid.CheckValue(context.TODO(), val4, "date-format:Ym-d", nil)
err5 := gvalid.CheckValue(context.TODO(), val5, "date-format:Y~m~d", nil)
err6 := gvalid.CheckValue(context.TODO(), val6, "date-format:Y~m~d", nil)
err1 := g.Validator().Data(val1).Rules("date-format:Y").Messages(nil).Run(ctx)
err2 := g.Validator().Data(val2).Rules("date-format:Ym").Messages(nil).Run(ctx)
err3 := g.Validator().Data(val3).Rules("date-format:Y.m").Messages(nil).Run(ctx)
err4 := g.Validator().Data(val4).Rules("date-format:Ym-d").Messages(nil).Run(ctx)
err5 := g.Validator().Data(val5).Rules("date-format:Y~m~d").Messages(nil).Run(ctx)
err6 := g.Validator().Data(val6).Rules("date-format:Y~m~d").Messages(nil).Run(ctx)
t.Assert(err1, nil)
t.Assert(err2, nil)
t.Assert(err3, nil)
@ -307,8 +305,8 @@ func Test_DateFormat(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
t1 := gtime.Now()
t2 := time.Time{}
err1 := gvalid.CheckValue(context.TODO(), t1, "date-format:Y", nil)
err2 := gvalid.CheckValue(context.TODO(), t2, "date-format:Y", nil)
err1 := g.Validator().Data(t1).Rules("date-format:Y").Run(ctx)
err2 := g.Validator().Data(t2).Rules("date-format:Y").Run(ctx)
t.Assert(err1, nil)
t.AssertNE(err2, nil)
})
@ -321,10 +319,10 @@ func Test_Email(t *testing.T) {
value2 := "m@www@johngcn"
value3 := "m-m_m@mail.johng.cn"
value4 := "m.m-m@johng.cn"
err1 := gvalid.CheckValue(context.TODO(), value1, rule, nil)
err2 := gvalid.CheckValue(context.TODO(), value2, rule, nil)
err3 := gvalid.CheckValue(context.TODO(), value3, rule, nil)
err4 := gvalid.CheckValue(context.TODO(), value4, rule, nil)
err1 := g.Validator().Data(value1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(value2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(value3).Rules(rule).Messages(nil).Run(ctx)
err4 := g.Validator().Data(value4).Rules(rule).Messages(nil).Run(ctx)
t.AssertNE(err1, nil)
t.AssertNE(err2, nil)
t.Assert(err3, nil)
@ -334,10 +332,10 @@ func Test_Email(t *testing.T) {
func Test_Phone(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
err1 := gvalid.CheckValue(context.TODO(), "1361990897", "phone", nil)
err2 := gvalid.CheckValue(context.TODO(), "13619908979", "phone", nil)
err3 := gvalid.CheckValue(context.TODO(), "16719908979", "phone", nil)
err4 := gvalid.CheckValue(context.TODO(), "19719908989", "phone", nil)
err1 := g.Validator().Data("1361990897").Rules("phone").Messages(nil).Run(ctx)
err2 := g.Validator().Data("13619908979").Rules("phone").Messages(nil).Run(ctx)
err3 := g.Validator().Data("16719908979").Rules("phone").Messages(nil).Run(ctx)
err4 := g.Validator().Data("19719908989").Rules("phone").Messages(nil).Run(ctx)
t.AssertNE(err1.String(), nil)
t.Assert(err2, nil)
t.Assert(err3, nil)
@ -347,12 +345,12 @@ func Test_Phone(t *testing.T) {
func Test_PhoneLoose(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
err1 := gvalid.CheckValue(context.TODO(), "13333333333", "phone-loose", nil)
err2 := gvalid.CheckValue(context.TODO(), "15555555555", "phone-loose", nil)
err3 := gvalid.CheckValue(context.TODO(), "16666666666", "phone-loose", nil)
err4 := gvalid.CheckValue(context.TODO(), "23333333333", "phone-loose", nil)
err5 := gvalid.CheckValue(context.TODO(), "1333333333", "phone-loose", nil)
err6 := gvalid.CheckValue(context.TODO(), "10333333333", "phone-loose", nil)
err1 := g.Validator().Data("13333333333").Rules("phone-loose").Messages(nil).Run(ctx)
err2 := g.Validator().Data("15555555555").Rules("phone-loose").Messages(nil).Run(ctx)
err3 := g.Validator().Data("16666666666").Rules("phone-loose").Messages(nil).Run(ctx)
err4 := g.Validator().Data("23333333333").Rules("phone-loose").Messages(nil).Run(ctx)
err5 := g.Validator().Data("1333333333").Rules("phone-loose").Messages(nil).Run(ctx)
err6 := g.Validator().Data("10333333333").Rules("phone-loose").Messages(nil).Run(ctx)
t.Assert(err1, nil)
t.Assert(err2, nil)
t.Assert(err3, nil)
@ -370,11 +368,11 @@ func Test_Telephone(t *testing.T) {
val3 := "86292651"
val4 := "028-8692651"
val5 := "0830-8692651"
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil)
err2 := gvalid.CheckValue(context.TODO(), val2, rule, nil)
err3 := gvalid.CheckValue(context.TODO(), val3, rule, nil)
err4 := gvalid.CheckValue(context.TODO(), val4, rule, nil)
err5 := gvalid.CheckValue(context.TODO(), val5, rule, nil)
err1 := g.Validator().Data(val1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val3).Rules(rule).Messages(nil).Run(ctx)
err4 := g.Validator().Data(val4).Rules(rule).Messages(nil).Run(ctx)
err5 := g.Validator().Data(val5).Rules(rule).Messages(nil).Run(ctx)
t.AssertNE(err1, nil)
t.AssertNE(err2, nil)
t.Assert(err3, nil)
@ -391,11 +389,11 @@ func Test_Passport(t *testing.T) {
val3 := "aaaaa"
val4 := "aaaaaa"
val5 := "a123_456"
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil)
err2 := gvalid.CheckValue(context.TODO(), val2, rule, nil)
err3 := gvalid.CheckValue(context.TODO(), val3, rule, nil)
err4 := gvalid.CheckValue(context.TODO(), val4, rule, nil)
err5 := gvalid.CheckValue(context.TODO(), val5, rule, nil)
err1 := g.Validator().Data(val1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val3).Rules(rule).Messages(nil).Run(ctx)
err4 := g.Validator().Data(val4).Rules(rule).Messages(nil).Run(ctx)
err5 := g.Validator().Data(val5).Rules(rule).Messages(nil).Run(ctx)
t.AssertNE(err1, nil)
t.AssertNE(err2, nil)
t.AssertNE(err3, nil)
@ -412,11 +410,11 @@ func Test_Password(t *testing.T) {
val3 := "a12345-6"
val4 := ">,/;'[09-"
val5 := "a123_456"
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil)
err2 := gvalid.CheckValue(context.TODO(), val2, rule, nil)
err3 := gvalid.CheckValue(context.TODO(), val3, rule, nil)
err4 := gvalid.CheckValue(context.TODO(), val4, rule, nil)
err5 := gvalid.CheckValue(context.TODO(), val5, rule, nil)
err1 := g.Validator().Data(val1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val3).Rules(rule).Messages(nil).Run(ctx)
err4 := g.Validator().Data(val4).Rules(rule).Messages(nil).Run(ctx)
err5 := g.Validator().Data(val5).Rules(rule).Messages(nil).Run(ctx)
t.AssertNE(err1, nil)
t.AssertNE(err2, nil)
t.Assert(err3, nil)
@ -435,13 +433,13 @@ func Test_Password2(t *testing.T) {
val5 := "a123_456"
val6 := "Nant1986"
val7 := "Nant1986!"
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil)
err2 := gvalid.CheckValue(context.TODO(), val2, rule, nil)
err3 := gvalid.CheckValue(context.TODO(), val3, rule, nil)
err4 := gvalid.CheckValue(context.TODO(), val4, rule, nil)
err5 := gvalid.CheckValue(context.TODO(), val5, rule, nil)
err6 := gvalid.CheckValue(context.TODO(), val6, rule, nil)
err7 := gvalid.CheckValue(context.TODO(), val7, rule, nil)
err1 := g.Validator().Data(val1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val3).Rules(rule).Messages(nil).Run(ctx)
err4 := g.Validator().Data(val4).Rules(rule).Messages(nil).Run(ctx)
err5 := g.Validator().Data(val5).Rules(rule).Messages(nil).Run(ctx)
err6 := g.Validator().Data(val6).Rules(rule).Messages(nil).Run(ctx)
err7 := g.Validator().Data(val7).Rules(rule).Messages(nil).Run(ctx)
t.AssertNE(err1, nil)
t.AssertNE(err2, nil)
t.AssertNE(err3, nil)
@ -462,13 +460,13 @@ func Test_Password3(t *testing.T) {
val5 := "a123_456"
val6 := "Nant1986"
val7 := "Nant1986!"
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil)
err2 := gvalid.CheckValue(context.TODO(), val2, rule, nil)
err3 := gvalid.CheckValue(context.TODO(), val3, rule, nil)
err4 := gvalid.CheckValue(context.TODO(), val4, rule, nil)
err5 := gvalid.CheckValue(context.TODO(), val5, rule, nil)
err6 := gvalid.CheckValue(context.TODO(), val6, rule, nil)
err7 := gvalid.CheckValue(context.TODO(), val7, rule, nil)
err1 := g.Validator().Data(val1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val3).Rules(rule).Messages(nil).Run(ctx)
err4 := g.Validator().Data(val4).Rules(rule).Messages(nil).Run(ctx)
err5 := g.Validator().Data(val5).Rules(rule).Messages(nil).Run(ctx)
err6 := g.Validator().Data(val6).Rules(rule).Messages(nil).Run(ctx)
err7 := g.Validator().Data(val7).Rules(rule).Messages(nil).Run(ctx)
t.AssertNE(err1, nil)
t.AssertNE(err2, nil)
t.AssertNE(err3, nil)
@ -484,8 +482,8 @@ func Test_Postcode(t *testing.T) {
rule := "postcode"
val1 := "12345"
val2 := "610036"
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil)
err2 := gvalid.CheckValue(context.TODO(), val2, rule, nil)
err1 := g.Validator().Data(val1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val2).Rules(rule).Messages(nil).Run(ctx)
t.AssertNE(err1, nil)
t.Assert(err2, nil)
})
@ -499,11 +497,11 @@ func Test_ResidentId(t *testing.T) {
val3 := "311128500121201"
val4 := "510521198607185367"
val5 := "51052119860718536x"
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil)
err2 := gvalid.CheckValue(context.TODO(), val2, rule, nil)
err3 := gvalid.CheckValue(context.TODO(), val3, rule, nil)
err4 := gvalid.CheckValue(context.TODO(), val4, rule, nil)
err5 := gvalid.CheckValue(context.TODO(), val5, rule, nil)
err1 := g.Validator().Data(val1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val3).Rules(rule).Messages(nil).Run(ctx)
err4 := g.Validator().Data(val4).Rules(rule).Messages(nil).Run(ctx)
err5 := g.Validator().Data(val5).Rules(rule).Messages(nil).Run(ctx)
t.AssertNE(err1, nil)
t.AssertNE(err2, nil)
t.AssertNE(err3, nil)
@ -517,8 +515,8 @@ func Test_BankCard(t *testing.T) {
rule := "bank-card"
val1 := "6230514630000424470"
val2 := "6230514630000424473"
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil)
err2 := gvalid.CheckValue(context.TODO(), val2, rule, nil)
err1 := g.Validator().Data(val1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val2).Rules(rule).Messages(nil).Run(ctx)
t.AssertNE(err1, nil)
t.Assert(err2, nil)
})
@ -532,11 +530,11 @@ func Test_QQ(t *testing.T) {
val3 := "10000"
val4 := "38996181"
val5 := "389961817"
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil)
err2 := gvalid.CheckValue(context.TODO(), val2, rule, nil)
err3 := gvalid.CheckValue(context.TODO(), val3, rule, nil)
err4 := gvalid.CheckValue(context.TODO(), val4, rule, nil)
err5 := gvalid.CheckValue(context.TODO(), val5, rule, nil)
err1 := g.Validator().Data(val1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val3).Rules(rule).Messages(nil).Run(ctx)
err4 := g.Validator().Data(val4).Rules(rule).Messages(nil).Run(ctx)
err5 := g.Validator().Data(val5).Rules(rule).Messages(nil).Run(ctx)
t.AssertNE(err1, nil)
t.AssertNE(err2, nil)
t.Assert(err3, nil)
@ -546,31 +544,31 @@ func Test_QQ(t *testing.T) {
}
func Test_Ip(t *testing.T) {
if m := gvalid.CheckValue(context.TODO(), "10.0.0.1", "ip", nil); m != nil {
if m := g.Validator().Data("10.0.0.1").Rules("ip").Messages(nil).Run(ctx); m != nil {
t.Error(m)
}
if m := gvalid.CheckValue(context.TODO(), "10.0.0.1", "ipv4", nil); m != nil {
if m := g.Validator().Data("10.0.0.1").Rules("ipv4").Messages(nil).Run(ctx); m != nil {
t.Error(m)
}
if m := gvalid.CheckValue(context.TODO(), "0.0.0.0", "ipv4", nil); m != nil {
if m := g.Validator().Data("0.0.0.0").Rules("ipv4").Messages(nil).Run(ctx); m != nil {
t.Error(m)
}
if m := gvalid.CheckValue(context.TODO(), "1920.0.0.0", "ipv4", nil); m == nil {
if m := g.Validator().Data("1920.0.0.0").Rules("ipv4").Messages(nil).Run(ctx); m == nil {
t.Error("ipv4校验失败")
}
if m := gvalid.CheckValue(context.TODO(), "1920.0.0.0", "ip", nil); m == nil {
if m := g.Validator().Data("1920.0.0.0").Rules("ip").Messages(nil).Run(ctx); m == nil {
t.Error("ipv4校验失败")
}
if m := gvalid.CheckValue(context.TODO(), "fe80::5484:7aff:fefe:9799", "ipv6", nil); m != nil {
if m := g.Validator().Data("fe80::5484:7aff:fefe:9799").Rules("ipv6").Messages(nil).Run(ctx); m != nil {
t.Error(m)
}
if m := gvalid.CheckValue(context.TODO(), "fe80::5484:7aff:fefe:9799123", "ipv6", nil); m == nil {
if m := g.Validator().Data("fe80::5484:7aff:fefe:9799123").Rules("ipv6").Messages(nil).Run(ctx); m == nil {
t.Error(m)
}
if m := gvalid.CheckValue(context.TODO(), "fe80::5484:7aff:fefe:9799", "ip", nil); m != nil {
if m := g.Validator().Data("fe80::5484:7aff:fefe:9799").Rules("ip").Messages(nil).Run(ctx); m != nil {
t.Error(m)
}
if m := gvalid.CheckValue(context.TODO(), "fe80::5484:7aff:fefe:9799123", "ip", nil); m == nil {
if m := g.Validator().Data("fe80::5484:7aff:fefe:9799123").Rules("ip").Messages(nil).Run(ctx); m == nil {
t.Error(m)
}
}
@ -583,11 +581,11 @@ func Test_IPv4(t *testing.T) {
val3 := "1.1.1.1"
val4 := "255.255.255.0"
val5 := "127.0.0.1"
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil)
err2 := gvalid.CheckValue(context.TODO(), val2, rule, nil)
err3 := gvalid.CheckValue(context.TODO(), val3, rule, nil)
err4 := gvalid.CheckValue(context.TODO(), val4, rule, nil)
err5 := gvalid.CheckValue(context.TODO(), val5, rule, nil)
err1 := g.Validator().Data(val1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val3).Rules(rule).Messages(nil).Run(ctx)
err4 := g.Validator().Data(val4).Rules(rule).Messages(nil).Run(ctx)
err5 := g.Validator().Data(val5).Rules(rule).Messages(nil).Run(ctx)
t.AssertNE(err1, nil)
t.Assert(err2, nil)
t.Assert(err3, nil)
@ -604,11 +602,11 @@ func Test_IPv6(t *testing.T) {
val3 := "1030::C9B4:FF12:48AA:1A2B"
val4 := "2000:0:0:0:0:0:0:1"
val5 := "0000:0000:0000:0000:0000:ffff:c0a8:5909"
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil)
err2 := gvalid.CheckValue(context.TODO(), val2, rule, nil)
err3 := gvalid.CheckValue(context.TODO(), val3, rule, nil)
err4 := gvalid.CheckValue(context.TODO(), val4, rule, nil)
err5 := gvalid.CheckValue(context.TODO(), val5, rule, nil)
err1 := g.Validator().Data(val1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val3).Rules(rule).Messages(nil).Run(ctx)
err4 := g.Validator().Data(val4).Rules(rule).Messages(nil).Run(ctx)
err5 := g.Validator().Data(val5).Rules(rule).Messages(nil).Run(ctx)
t.AssertNE(err1, nil)
t.Assert(err2, nil)
t.Assert(err3, nil)
@ -623,9 +621,9 @@ func Test_MAC(t *testing.T) {
val1 := "192.168.1.1"
val2 := "44-45-53-54-00-00"
val3 := "01:00:5e:00:00:00"
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil)
err2 := gvalid.CheckValue(context.TODO(), val2, rule, nil)
err3 := gvalid.CheckValue(context.TODO(), val3, rule, nil)
err1 := g.Validator().Data(val1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val3).Rules(rule).Messages(nil).Run(ctx)
t.AssertNE(err1, nil)
t.Assert(err2, nil)
t.Assert(err3, nil)
@ -639,10 +637,10 @@ func Test_URL(t *testing.T) {
val2 := "https://www.baidu.com"
val3 := "http://127.0.0.1"
val4 := "file:///tmp/test.txt"
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil)
err2 := gvalid.CheckValue(context.TODO(), val2, rule, nil)
err3 := gvalid.CheckValue(context.TODO(), val3, rule, nil)
err4 := gvalid.CheckValue(context.TODO(), val4, rule, nil)
err1 := g.Validator().Data(val1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val3).Rules(rule).Messages(nil).Run(ctx)
err4 := g.Validator().Data(val4).Rules(rule).Messages(nil).Run(ctx)
t.AssertNE(err1, nil)
t.Assert(err2, nil)
t.Assert(err3, nil)
@ -669,7 +667,7 @@ func Test_Domain(t *testing.T) {
}
var err error
for k, v := range m {
err = gvalid.CheckValue(context.TODO(), k, "domain", nil)
err = g.Validator().Data(k).Rules("domain").Messages(nil).Run(ctx)
if v {
// fmt.Println(k)
t.Assert(err, nil)
@ -683,10 +681,10 @@ func Test_Domain(t *testing.T) {
func Test_Length(t *testing.T) {
rule := "length:6,16"
if m := gvalid.CheckValue(context.TODO(), "123456", rule, nil); m != nil {
if m := g.Validator().Data("123456").Rules(rule).Messages(nil).Run(ctx); m != nil {
t.Error(m)
}
if m := gvalid.CheckValue(context.TODO(), "12345", rule, nil); m == nil {
if m := g.Validator().Data("12345").Rules(rule).Messages(nil).Run(ctx); m == nil {
t.Error("长度校验失败")
}
}
@ -696,18 +694,18 @@ func Test_MinLength(t *testing.T) {
msgs := map[string]string{
"min-length": "地址长度至少为{min}位",
}
if m := gvalid.CheckValue(context.TODO(), "123456", rule, nil); m != nil {
if m := g.Validator().Data("123456").Rules(rule).Messages(nil).Run(ctx); m != nil {
t.Error(m)
}
if m := gvalid.CheckValue(context.TODO(), "12345", rule, nil); m == nil {
if m := g.Validator().Data("12345").Rules(rule).Messages(nil).Run(ctx); m == nil {
t.Error("长度校验失败")
}
if m := gvalid.CheckValue(context.TODO(), "12345", rule, msgs); m == nil {
if m := g.Validator().Data("12345").Rules(rule).Messages(msgs).Run(ctx); m == nil {
t.Error("长度校验失败")
}
rule2 := "min-length:abc"
if m := gvalid.CheckValue(context.TODO(), "123456", rule2, nil); m == nil {
if m := g.Validator().Data("123456").Rules(rule2).Messages(nil).Run(ctx); m == nil {
t.Error("长度校验失败")
}
}
@ -717,41 +715,41 @@ func Test_MaxLength(t *testing.T) {
msgs := map[string]string{
"max-length": "地址长度至大为{max}位",
}
if m := gvalid.CheckValue(context.TODO(), "12345", rule, nil); m != nil {
if m := g.Validator().Data("12345").Rules(rule).Messages(nil).Run(ctx); m != nil {
t.Error(m)
}
if m := gvalid.CheckValue(context.TODO(), "1234567", rule, nil); m == nil {
if m := g.Validator().Data("1234567").Rules(rule).Messages(nil).Run(ctx); m == nil {
t.Error("长度校验失败")
}
if m := gvalid.CheckValue(context.TODO(), "1234567", rule, msgs); m == nil {
if m := g.Validator().Data("1234567").Rules(rule).Messages(msgs).Run(ctx); m == nil {
t.Error("长度校验失败")
}
rule2 := "max-length:abc"
if m := gvalid.CheckValue(context.TODO(), "123456", rule2, nil); m == nil {
if m := g.Validator().Data("123456").Rules(rule2).Messages(nil).Run(ctx); m == nil {
t.Error("长度校验失败")
}
}
func Test_Size(t *testing.T) {
rule := "size:5"
if m := gvalid.CheckValue(context.TODO(), "12345", rule, nil); m != nil {
if m := g.Validator().Data("12345").Rules(rule).Messages(nil).Run(ctx); m != nil {
t.Error(m)
}
if m := gvalid.CheckValue(context.TODO(), "123456", rule, nil); m == nil {
if m := g.Validator().Data("123456").Rules(rule).Messages(nil).Run(ctx); m == nil {
t.Error("长度校验失败")
}
}
func Test_Between(t *testing.T) {
rule := "between:6.01, 10.01"
if m := gvalid.CheckValue(context.TODO(), 10, rule, nil); m != nil {
if m := g.Validator().Data(10).Rules(rule).Messages(nil).Run(ctx); m != nil {
t.Error(m)
}
if m := gvalid.CheckValue(context.TODO(), 10.02, rule, nil); m == nil {
if m := g.Validator().Data(10.02).Rules(rule).Messages(nil).Run(ctx); m == nil {
t.Error("大小范围校验失败")
}
if m := gvalid.CheckValue(context.TODO(), "a", rule, nil); m == nil {
if m := g.Validator().Data("a").Rules(rule).Messages(nil).Run(ctx); m == nil {
t.Error("大小范围校验失败")
}
}
@ -764,11 +762,11 @@ func Test_Min(t *testing.T) {
val3 := "100"
val4 := "1000"
val5 := "a"
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil)
err2 := gvalid.CheckValue(context.TODO(), val2, rule, nil)
err3 := gvalid.CheckValue(context.TODO(), val3, rule, nil)
err4 := gvalid.CheckValue(context.TODO(), val4, rule, nil)
err5 := gvalid.CheckValue(context.TODO(), val5, rule, nil)
err1 := g.Validator().Data(val1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val3).Rules(rule).Messages(nil).Run(ctx)
err4 := g.Validator().Data(val4).Rules(rule).Messages(nil).Run(ctx)
err5 := g.Validator().Data(val5).Rules(rule).Messages(nil).Run(ctx)
t.AssertNE(err1, nil)
t.AssertNE(err2, nil)
t.Assert(err3, nil)
@ -776,7 +774,7 @@ func Test_Min(t *testing.T) {
t.AssertNE(err5, nil)
rule2 := "min:a"
err6 := gvalid.CheckValue(context.TODO(), val1, rule2, nil)
err6 := g.Validator().Data(val1).Rules(rule2).Messages(nil).Run(ctx)
t.AssertNE(err6, nil)
})
}
@ -789,11 +787,11 @@ func Test_Max(t *testing.T) {
val3 := "100"
val4 := "1000"
val5 := "a"
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil)
err2 := gvalid.CheckValue(context.TODO(), val2, rule, nil)
err3 := gvalid.CheckValue(context.TODO(), val3, rule, nil)
err4 := gvalid.CheckValue(context.TODO(), val4, rule, nil)
err5 := gvalid.CheckValue(context.TODO(), val5, rule, nil)
err1 := g.Validator().Data(val1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val3).Rules(rule).Messages(nil).Run(ctx)
err4 := g.Validator().Data(val4).Rules(rule).Messages(nil).Run(ctx)
err5 := g.Validator().Data(val5).Rules(rule).Messages(nil).Run(ctx)
t.Assert(err1, nil)
t.Assert(err2, nil)
t.Assert(err3, nil)
@ -801,7 +799,7 @@ func Test_Max(t *testing.T) {
t.AssertNE(err5, nil)
rule2 := "max:a"
err6 := gvalid.CheckValue(context.TODO(), val1, rule2, nil)
err6 := g.Validator().Data(val1).Rules(rule2).Messages(nil).Run(ctx)
t.AssertNE(err6, nil)
})
}
@ -815,12 +813,12 @@ func Test_Json(t *testing.T) {
val4 := "[]"
val5 := "[1,2,3,4]"
val6 := `{"list":[1,2,3,4]}`
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil)
err2 := gvalid.CheckValue(context.TODO(), val2, rule, nil)
err3 := gvalid.CheckValue(context.TODO(), val3, rule, nil)
err4 := gvalid.CheckValue(context.TODO(), val4, rule, nil)
err5 := gvalid.CheckValue(context.TODO(), val5, rule, nil)
err6 := gvalid.CheckValue(context.TODO(), val6, rule, nil)
err1 := g.Validator().Data(val1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val3).Rules(rule).Messages(nil).Run(ctx)
err4 := g.Validator().Data(val4).Rules(rule).Messages(nil).Run(ctx)
err5 := g.Validator().Data(val5).Rules(rule).Messages(nil).Run(ctx)
err6 := g.Validator().Data(val6).Rules(rule).Messages(nil).Run(ctx)
t.AssertNE(err1, nil)
t.AssertNE(err2, nil)
t.Assert(err3, nil)
@ -839,12 +837,12 @@ func Test_Integer(t *testing.T) {
val4 := "1"
val5 := "100"
val6 := `999999999`
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil)
err2 := gvalid.CheckValue(context.TODO(), val2, rule, nil)
err3 := gvalid.CheckValue(context.TODO(), val3, rule, nil)
err4 := gvalid.CheckValue(context.TODO(), val4, rule, nil)
err5 := gvalid.CheckValue(context.TODO(), val5, rule, nil)
err6 := gvalid.CheckValue(context.TODO(), val6, rule, nil)
err1 := g.Validator().Data(val1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val3).Rules(rule).Messages(nil).Run(ctx)
err4 := g.Validator().Data(val4).Rules(rule).Messages(nil).Run(ctx)
err5 := g.Validator().Data(val5).Rules(rule).Messages(nil).Run(ctx)
err6 := g.Validator().Data(val6).Rules(rule).Messages(nil).Run(ctx)
t.AssertNE(err1, nil)
t.AssertNE(err2, nil)
t.Assert(err3, nil)
@ -863,12 +861,12 @@ func Test_Float(t *testing.T) {
val4 := "1.0"
val5 := "1.1"
val6 := `0.1`
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil)
err2 := gvalid.CheckValue(context.TODO(), val2, rule, nil)
err3 := gvalid.CheckValue(context.TODO(), val3, rule, nil)
err4 := gvalid.CheckValue(context.TODO(), val4, rule, nil)
err5 := gvalid.CheckValue(context.TODO(), val5, rule, nil)
err6 := gvalid.CheckValue(context.TODO(), val6, rule, nil)
err1 := g.Validator().Data(val1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val3).Rules(rule).Messages(nil).Run(ctx)
err4 := g.Validator().Data(val4).Rules(rule).Messages(nil).Run(ctx)
err5 := g.Validator().Data(val5).Rules(rule).Messages(nil).Run(ctx)
err6 := g.Validator().Data(val6).Rules(rule).Messages(nil).Run(ctx)
t.AssertNE(err1, nil)
t.AssertNE(err2, nil)
t.Assert(err3, nil)
@ -887,12 +885,12 @@ func Test_Boolean(t *testing.T) {
val4 := "1"
val5 := "true"
val6 := `off`
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil)
err2 := gvalid.CheckValue(context.TODO(), val2, rule, nil)
err3 := gvalid.CheckValue(context.TODO(), val3, rule, nil)
err4 := gvalid.CheckValue(context.TODO(), val4, rule, nil)
err5 := gvalid.CheckValue(context.TODO(), val5, rule, nil)
err6 := gvalid.CheckValue(context.TODO(), val6, rule, nil)
err1 := g.Validator().Data(val1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val3).Rules(rule).Messages(nil).Run(ctx)
err4 := g.Validator().Data(val4).Rules(rule).Messages(nil).Run(ctx)
err5 := g.Validator().Data(val5).Rules(rule).Messages(nil).Run(ctx)
err6 := g.Validator().Data(val6).Rules(rule).Messages(nil).Run(ctx)
t.AssertNE(err1, nil)
t.AssertNE(err2, nil)
t.Assert(err3, nil)
@ -916,9 +914,9 @@ func Test_Same(t *testing.T) {
"id": 100,
"name": "john",
}
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil, params1)
err2 := gvalid.CheckValue(context.TODO(), val1, rule, nil, params2)
err3 := gvalid.CheckValue(context.TODO(), val1, rule, nil, params3)
err1 := g.Validator().Data(val1, params1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val1, params2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val1, params3).Rules(rule).Messages(nil).Run(ctx)
t.AssertNE(err1, nil)
t.Assert(err2, nil)
t.Assert(err3, nil)
@ -939,9 +937,9 @@ func Test_Different(t *testing.T) {
"id": 100,
"name": "john",
}
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil, params1)
err2 := gvalid.CheckValue(context.TODO(), val1, rule, nil, params2)
err3 := gvalid.CheckValue(context.TODO(), val1, rule, nil, params3)
err1 := g.Validator().Data(val1, params1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val1, params2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val1, params3).Rules(rule).Messages(nil).Run(ctx)
t.Assert(err1, nil)
t.AssertNE(err2, nil)
t.AssertNE(err3, nil)
@ -955,10 +953,10 @@ func Test_In(t *testing.T) {
val2 := "1"
val3 := "100"
val4 := "200"
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil)
err2 := gvalid.CheckValue(context.TODO(), val2, rule, nil)
err3 := gvalid.CheckValue(context.TODO(), val3, rule, nil)
err4 := gvalid.CheckValue(context.TODO(), val4, rule, nil)
err1 := g.Validator().Data(val1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val3).Rules(rule).Messages(nil).Run(ctx)
err4 := g.Validator().Data(val4).Rules(rule).Messages(nil).Run(ctx)
t.AssertNE(err1, nil)
t.AssertNE(err2, nil)
t.Assert(err3, nil)
@ -973,10 +971,10 @@ func Test_NotIn(t *testing.T) {
val2 := "1"
val3 := "100"
val4 := "200"
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil)
err2 := gvalid.CheckValue(context.TODO(), val2, rule, nil)
err3 := gvalid.CheckValue(context.TODO(), val3, rule, nil)
err4 := gvalid.CheckValue(context.TODO(), val4, rule, nil)
err1 := g.Validator().Data(val1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val3).Rules(rule).Messages(nil).Run(ctx)
err4 := g.Validator().Data(val4).Rules(rule).Messages(nil).Run(ctx)
t.Assert(err1, nil)
t.Assert(err2, nil)
t.AssertNE(err3, nil)
@ -988,10 +986,10 @@ func Test_NotIn(t *testing.T) {
val2 := "1"
val3 := "100"
val4 := "200"
err1 := gvalid.CheckValue(context.TODO(), val1, rule, nil)
err2 := gvalid.CheckValue(context.TODO(), val2, rule, nil)
err3 := gvalid.CheckValue(context.TODO(), val3, rule, nil)
err4 := gvalid.CheckValue(context.TODO(), val4, rule, nil)
err1 := g.Validator().Data(val1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(val2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(val3).Rules(rule).Messages(nil).Run(ctx)
err4 := g.Validator().Data(val4).Rules(rule).Messages(nil).Run(ctx)
t.Assert(err1, nil)
t.Assert(err2, nil)
t.AssertNE(err3, nil)
@ -1001,10 +999,10 @@ func Test_NotIn(t *testing.T) {
func Test_Regex1(t *testing.T) {
rule := `regex:\d{6}|\D{6}|length:6,16`
if m := gvalid.CheckValue(context.TODO(), "123456", rule, nil); m != nil {
if m := g.Validator().Data("123456").Rules(rule).Messages(nil).Run(ctx); m != nil {
t.Error(m)
}
if m := gvalid.CheckValue(context.TODO(), "abcde6", rule, nil); m == nil {
if m := g.Validator().Data("abcde6").Rules(rule).Messages(nil).Run(ctx); m == nil {
t.Error("校验失败")
}
}
@ -1015,9 +1013,9 @@ func Test_Regex2(t *testing.T) {
str1 := ""
str2 := "data"
str3 := "data:image/jpeg;base64,/9jrbattq22r"
err1 := gvalid.CheckValue(context.TODO(), str1, rule, nil)
err2 := gvalid.CheckValue(context.TODO(), str2, rule, nil)
err3 := gvalid.CheckValue(context.TODO(), str3, rule, nil)
err1 := g.Validator().Data(str1).Rules(rule).Messages(nil).Run(ctx)
err2 := g.Validator().Data(str2).Rules(rule).Messages(nil).Run(ctx)
err3 := g.Validator().Data(str3).Rules(rule).Messages(nil).Run(ctx)
t.AssertNE(err1, nil)
t.AssertNE(err2, nil)
t.Assert(err3, nil)
@ -1034,7 +1032,7 @@ func Test_InternalError_String(t *testing.T) {
Name string `v:"hh"`
}
aa := a{Name: "2"}
err := gvalid.CheckStruct(context.TODO(), &aa, nil)
err := g.Validator().Data(&aa).Rules(nil).Run(ctx)
t.Assert(err.String(), "InvalidRules: hh")
t.Assert(err.Strings(), g.Slice{"InvalidRules: hh"})
@ -1045,13 +1043,13 @@ func Test_InternalError_String(t *testing.T) {
func Test_Code(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
err := g.Validator().Rules("required").CheckValue(ctx, "")
err := g.Validator().Rules("required").Data("").Run(ctx)
t.AssertNE(err, nil)
t.Assert(gerror.Code(err), gcode.CodeValidationFailed)
})
gtest.C(t, func(t *gtest.T) {
err := g.Validator().Rules("none-exist-rule").CheckValue(ctx, "")
err := g.Validator().Rules("none-exist-rule").Data("").Run(ctx)
t.AssertNE(err, nil)
t.Assert(gerror.Code(err), gcode.CodeInternalError)
})
@ -1063,7 +1061,7 @@ func Test_Bail(t *testing.T) {
err := g.Validator().
Rules("required|min:1|between:1,100").
Messages("|min number is 1|size is between 1 and 100").
CheckValue(ctx, -1)
Data(-1).Run(ctx)
t.AssertNE(err, nil)
t.Assert(err.Error(), "min number is 1; size is between 1 and 100")
})
@ -1073,7 +1071,7 @@ func Test_Bail(t *testing.T) {
err := g.Validator().
Rules("bail|required|min:1|between:1,100").
Messages("||min number is 1|size is between 1 and 100").
CheckValue(ctx, -1)
Data(-1).Run(ctx)
t.AssertNE(err, nil)
t.Assert(err.Error(), "min number is 1")
})
@ -1088,7 +1086,7 @@ func Test_Bail(t *testing.T) {
Page: 1,
Size: -1,
}
err := g.Validator().CheckStruct(ctx, obj)
err := g.Validator().Data(obj).Run(ctx)
t.AssertNE(err, nil)
t.Assert(err.Error(), "min number is 1; size is between 1 and 100")
})
@ -1102,7 +1100,7 @@ func Test_Bail(t *testing.T) {
Page: 1,
Size: -1,
}
err := g.Validator().CheckStruct(ctx, obj)
err := g.Validator().Data(obj).Run(ctx)
t.AssertNE(err, nil)
t.Assert(err.Error(), "min number is 1")
})