Files
Go-StudyExample/SourceAnalysisAndTool/validator.v8/testValidator/Validator_test.go
T

159 lines
3.2 KiB
Go
Raw Normal View History

2020-12-31 16:48:30 +08:00
/*
* @Author : huangzj
* @Time : 2020/12/11 16:16
* @Description
*/
package testValidator
import (
"Go-Tool/SourceAnalysisAndTool/validator.v8/sourceAnalysis/gopkg.in/go-playground/validator.v8"
"fmt"
"reflect"
"strconv"
"strings"
"testing"
)
func TestValidator(t *testing.T) {
fmt.Println("测试别名校验器")
testAlias()
fmt.Println()
fmt.Println("测试默认和自定义tag校验器")
testTag()
fmt.Println()
fmt.Println("测试字段校验器")
testField()
fmt.Println()
fmt.Println("测试结构体校验器")
testStruct()
}
func testStruct() {
//添加结构体校验,对结构体进行处理之后,validator的标签还是会起作用
config := &validator.Config{
TagName: "validate",
}
valid := validator.New(config)
valid.RegisterStructValidation(func(v *validator.Validate, structLevel *validator.StructLevel) {
c := structLevel.CurrentStruct.Interface().(Cat)
if c.Age < 100 {
fmt.Println("猫的岁数不能小于100")
}
}, Cat{})
p := Person{
Name: "192.168.0.1",
M: map[string]int{"A": 1},
H: 2000,
Exist: false,
Require: false,
Cat: Cat{
Age: 0,
Ower: Ower{},
},
}
err := valid.Struct(p)
fmt.Println(err)
}
func testField() {
//如果注册了对应的Field,则会调用自定义的方法,不会再使用validator定义的标签
//这边测试了结构体和基本类型,都是如上述描述的这么处理
config := &validator.Config{
TagName: "validate",
}
valid := validator.New(config)
valid.RegisterAliasValidation("ipe", "ip|ipv4|ipv6")
valid.RegisterCustomTypeFunc(func(field reflect.Value) interface{} {
d := field.Interface().(Cat)
if d.Age < 50 {
fmt.Println("狗的岁数不能小于50")
}
return field
}, Cat{})
p := Person{
Name: "192.168.0.1",
M: map[string]int{"A": 1},
H: 2000,
Exist: false,
Require: false,
Cat: Cat{
Age: 0,
Ower: Ower{},
},
}
err := valid.Struct(p)
fmt.Println(err)
valid.RegisterCustomTypeFunc(func(field reflect.Value) interface{} {
d := field.Interface().(int)
if d != 10 {
fmt.Println("测试一下")
}
return field
}, 1)
err1 := valid.Struct(p)
fmt.Println(err1)
}
func testTag() {
w := Woman{
Name: "my name is Woman",
}
w1 := Woman{
Name: "my name is wo-man",
}
config := &validator.Config{
TagName: "validate",
}
valid := validator.New(config)
_ = valid.RegisterValidation("diy", func(v *validator.Validate, topStruct reflect.Value, currentStruct reflect.Value, field reflect.Value, fieldtype reflect.Type, fieldKind reflect.Kind, param string) bool {
s := field.Interface().(string)
i, _ := strconv.ParseInt(param, 0, 64)
if int64(len(s)) < i || strings.Contains(s, "Woman") {
fmt.Println("校验一下")
return false
}
return true
})
err := valid.Struct(w)
fmt.Println(err)
err1 := valid.Struct(w1)
fmt.Println(err1)
}
func testAlias() {
m := Man{
Name: "192.168.0.1",
}
m1 := Man{
Name: "213123123",
}
config := &validator.Config{
TagName: "validate",
}
valid := validator.New(config)
valid.RegisterAliasValidation("ipe", "ip|ipv4|ipv6")
err := valid.Struct(m)
fmt.Println(err)
err1 := valid.Struct(m1)
fmt.Println(err1)
}