|
|
@@ -0,0 +1,459 @@
|
|
|
+package test
|
|
|
+
|
|
|
+import (
|
|
|
+ "git.sxidc.com/go-framework/baize/framework/core/tag/rule"
|
|
|
+ "github.com/pkg/errors"
|
|
|
+ "reflect"
|
|
|
+ "testing"
|
|
|
+ "time"
|
|
|
+)
|
|
|
+
|
|
|
+type RuleTagStruct struct {
|
|
|
+ Ignore string
|
|
|
+ StringValue string `rule:"type:default"`
|
|
|
+ IntValue int `rule:"type:default"`
|
|
|
+ Int8Value int8 `rule:"type:default"`
|
|
|
+ Int16Value int16 `rule:"type:default"`
|
|
|
+ Int32Value int32 `rule:"type:default"`
|
|
|
+ Int64Value int64 `rule:"type:default"`
|
|
|
+ UintValue uint `rule:"type:default"`
|
|
|
+ Uint8Value uint8 `rule:"type:default"`
|
|
|
+ Uint16Value uint16 `rule:"type:default"`
|
|
|
+ Uint32Value uint32 `rule:"type:default"`
|
|
|
+ Uint64Value uint64 `rule:"type:default"`
|
|
|
+ Float32Value float32 `rule:"type:default"`
|
|
|
+ Float64Value float64 `rule:"type:default"`
|
|
|
+ TimeValue time.Time `rule:"type:default"`
|
|
|
+ BoolValue bool `rule:"type:default"`
|
|
|
+ TagStringValue bool `rule:"type:string"`
|
|
|
+ TagIntValue string `rule:"type:number"`
|
|
|
+ TagInt8Value string `rule:"type:number"`
|
|
|
+ TagInt16Value string `rule:"type:number"`
|
|
|
+ TagInt32Value string `rule:"type:number"`
|
|
|
+ TagInt64Value string `rule:"type:number"`
|
|
|
+ TagUintValue string `rule:"type:number"`
|
|
|
+ TagUint8Value string `rule:"type:number"`
|
|
|
+ TagUint16Value string `rule:"type:number"`
|
|
|
+ TagUint32Value string `rule:"type:number"`
|
|
|
+ TagUint64Value string `rule:"type:number"`
|
|
|
+ TagFloat32Value string `rule:"type:number"`
|
|
|
+ TagFloat64Value string `rule:"type:number"`
|
|
|
+ TagTimeValue string `rule:"type:time"`
|
|
|
+ TagBoolValue string `rule:"type:bool"`
|
|
|
+}
|
|
|
+
|
|
|
+func (s RuleTagStruct) checkFields(t *testing.T, fields []rule.Field) {
|
|
|
+ if len(fields) != reflect.TypeOf(s).NumField()-1 {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("有字段没有被解析"))
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, field := range fields {
|
|
|
+ if field.FieldName == "Ignore" && field.Type != "" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("忽略字段没有被忽略"))
|
|
|
+ }
|
|
|
+
|
|
|
+ switch field.FieldName {
|
|
|
+ case "StringValue":
|
|
|
+ if field.Type != "string" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "IntValue":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "Int8Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "Int16Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "Int32Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "Int64Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "UintValue":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "Uint8Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "Uint16Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "Uint32Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "Uint64Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "Float32Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "Float64Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TimeValue":
|
|
|
+ if field.Type != "time" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "BoolValue":
|
|
|
+ if field.Type != "bool" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagStringValue":
|
|
|
+ if field.Type != "string" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagIntValue":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagInt8Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagInt16Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagInt32Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagInt64Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagUintValue":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagUint8Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagUint16Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagUint32Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagUint64Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagFloat32Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagFloat64Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagTimeValue":
|
|
|
+ if field.Type != "time" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagBoolValue":
|
|
|
+ if field.Type != "bool" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ default:
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("未知的字段名: tag fieldName: %v", field.FieldName))
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+type RuleTagPointerFieldsStruct struct {
|
|
|
+ Ignore *string
|
|
|
+ StringValue *string `rule:"type:default"`
|
|
|
+ IntValue *int `rule:"type:default"`
|
|
|
+ Int8Value *int8 `rule:"type:default"`
|
|
|
+ Int16Value *int16 `rule:"type:default"`
|
|
|
+ Int32Value *int32 `rule:"type:default"`
|
|
|
+ Int64Value *int64 `rule:"type:default"`
|
|
|
+ UintValue *uint `rule:"type:default"`
|
|
|
+ Uint8Value *uint8 `rule:"type:default"`
|
|
|
+ Uint16Value *uint16 `rule:"type:default"`
|
|
|
+ Uint32Value *uint32 `rule:"type:default"`
|
|
|
+ Uint64Value *uint64 `rule:"type:default"`
|
|
|
+ Float32Value *float32 `rule:"type:default"`
|
|
|
+ Float64Value *float64 `rule:"type:default"`
|
|
|
+ TimeValue *time.Time `rule:"type:default"`
|
|
|
+ BoolValue *bool `rule:"type:default"`
|
|
|
+ TagStringValue *bool `rule:"type:string"`
|
|
|
+ TagIntValue *string `rule:"type:number"`
|
|
|
+ TagInt8Value *string `rule:"type:number"`
|
|
|
+ TagInt16Value *string `rule:"type:number"`
|
|
|
+ TagInt32Value *string `rule:"type:number"`
|
|
|
+ TagInt64Value *string `rule:"type:number"`
|
|
|
+ TagUintValue *string `rule:"type:number"`
|
|
|
+ TagUint8Value *string `rule:"type:number"`
|
|
|
+ TagUint16Value *string `rule:"type:number"`
|
|
|
+ TagUint32Value *string `rule:"type:number"`
|
|
|
+ TagUint64Value *string `rule:"type:number"`
|
|
|
+ TagFloat32Value *string `rule:"type:number"`
|
|
|
+ TagFloat64Value *string `rule:"type:number"`
|
|
|
+ TagTimeValue *string `rule:"type:time"`
|
|
|
+ TagBoolValue *string `rule:"type:bool"`
|
|
|
+}
|
|
|
+
|
|
|
+func (s RuleTagPointerFieldsStruct) checkFields(t *testing.T, fields []rule.Field) {
|
|
|
+ if len(fields) != reflect.TypeOf(s).NumField()-1 {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("有字段没有被解析"))
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, field := range fields {
|
|
|
+ if field.FieldName == "Ignore" && field.Type != "" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("忽略字段没有被忽略"))
|
|
|
+ }
|
|
|
+
|
|
|
+ switch field.FieldName {
|
|
|
+ case "StringValue":
|
|
|
+ if field.Type != "string" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "IntValue":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "Int8Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "Int16Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "Int32Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "Int64Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "UintValue":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "Uint8Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "Uint16Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "Uint32Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "Uint64Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "Float32Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "Float64Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TimeValue":
|
|
|
+ if field.Type != "time" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "BoolValue":
|
|
|
+ if field.Type != "bool" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagStringValue":
|
|
|
+ if field.Type != "string" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagIntValue":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagInt8Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagInt16Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagInt32Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagInt64Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagUintValue":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagUint8Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagUint16Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagUint32Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagUint64Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagFloat32Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagFloat64Value":
|
|
|
+ if field.Type != "number" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagTimeValue":
|
|
|
+ if field.Type != "time" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ case "TagBoolValue":
|
|
|
+ if field.Type != "bool" {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual type: %v",
|
|
|
+ field.FieldName, field.Type))
|
|
|
+ }
|
|
|
+ default:
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("未知的字段名: tag fieldName: %v", field.FieldName))
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestRuleTagDefaultUsage(t *testing.T) {
|
|
|
+ s := RuleTagStruct{}
|
|
|
+
|
|
|
+ sPointerFields := RuleTagPointerFieldsStruct{}
|
|
|
+
|
|
|
+ sPointerFieldsNil := RuleTagPointerFieldsStruct{}
|
|
|
+
|
|
|
+ fields, err := rule.DefaultUsage(s)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("%+v\n", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ s.checkFields(t, fields)
|
|
|
+
|
|
|
+ fields, err = rule.DefaultUsage(&s)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("%+v\n", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ s.checkFields(t, fields)
|
|
|
+
|
|
|
+ fields, err = rule.DefaultUsage(sPointerFields)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("%+v\n", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ sPointerFields.checkFields(t, fields)
|
|
|
+
|
|
|
+ fields, err = rule.DefaultUsage(&sPointerFields)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("%+v\n", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ sPointerFields.checkFields(t, fields)
|
|
|
+
|
|
|
+ fields, err = rule.DefaultUsage(sPointerFieldsNil)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("%+v\n", errors.Errorf("字段为nil"))
|
|
|
+ }
|
|
|
+
|
|
|
+ fields, err = rule.DefaultUsage(&sPointerFieldsNil)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("%+v\n", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ sPointerFieldsNil.checkFields(t, fields)
|
|
|
+}
|