|
|
|
@ -2,11 +2,11 @@ package validator |
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
|
"fmt" |
|
|
|
|
"path" |
|
|
|
|
"reflect" |
|
|
|
|
"runtime" |
|
|
|
|
"testing" |
|
|
|
|
"time" |
|
|
|
|
|
|
|
|
|
. "gopkg.in/bluesuncorp/assert.v1" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
// NOTES:
|
|
|
|
@ -110,116 +110,6 @@ type TestSlice struct { |
|
|
|
|
|
|
|
|
|
var validate = New(Config{TagName: "validate", ValidationFuncs: BakedInValidators}) |
|
|
|
|
|
|
|
|
|
func IsEqual(t *testing.T, val1, val2 interface{}) bool { |
|
|
|
|
v1 := reflect.ValueOf(val1) |
|
|
|
|
v2 := reflect.ValueOf(val2) |
|
|
|
|
|
|
|
|
|
if v1.Kind() == reflect.Ptr { |
|
|
|
|
v1 = v1.Elem() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if v2.Kind() == reflect.Ptr { |
|
|
|
|
v2 = v2.Elem() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if !v1.IsValid() && !v2.IsValid() { |
|
|
|
|
return true |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
switch v1.Kind() { |
|
|
|
|
case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice: |
|
|
|
|
if v1.IsNil() { |
|
|
|
|
v1 = reflect.ValueOf(nil) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
switch v2.Kind() { |
|
|
|
|
case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice: |
|
|
|
|
if v2.IsNil() { |
|
|
|
|
v2 = reflect.ValueOf(nil) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
v1Underlying := reflect.Zero(reflect.TypeOf(v1)).Interface() |
|
|
|
|
v2Underlying := reflect.Zero(reflect.TypeOf(v2)).Interface() |
|
|
|
|
|
|
|
|
|
if v1 == v1Underlying { |
|
|
|
|
if v2 == v2Underlying { |
|
|
|
|
goto CASE4 |
|
|
|
|
} else { |
|
|
|
|
goto CASE3 |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
if v2 == v2Underlying { |
|
|
|
|
goto CASE2 |
|
|
|
|
} else { |
|
|
|
|
goto CASE1 |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
CASE1: |
|
|
|
|
// fmt.Println("CASE 1")
|
|
|
|
|
return reflect.DeepEqual(v1.Interface(), v2.Interface()) |
|
|
|
|
CASE2: |
|
|
|
|
// fmt.Println("CASE 2")
|
|
|
|
|
return reflect.DeepEqual(v1.Interface(), v2) |
|
|
|
|
CASE3: |
|
|
|
|
// fmt.Println("CASE 3")
|
|
|
|
|
return reflect.DeepEqual(v1, v2.Interface()) |
|
|
|
|
CASE4: |
|
|
|
|
// fmt.Println("CASE 4")
|
|
|
|
|
return reflect.DeepEqual(v1, v2) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func Equal(t *testing.T, val1, val2 interface{}) { |
|
|
|
|
EqualSkip(t, 2, val1, val2) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func EqualSkip(t *testing.T, skip int, val1, val2 interface{}) { |
|
|
|
|
|
|
|
|
|
if !IsEqual(t, val1, val2) { |
|
|
|
|
|
|
|
|
|
_, file, line, _ := runtime.Caller(skip) |
|
|
|
|
fmt.Printf("%s:%d %v does not equal %v\n", path.Base(file), line, val1, val2) |
|
|
|
|
t.FailNow() |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func NotEqual(t *testing.T, val1, val2 interface{}) { |
|
|
|
|
NotEqualSkip(t, 2, val1, val2) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func NotEqualSkip(t *testing.T, skip int, val1, val2 interface{}) { |
|
|
|
|
|
|
|
|
|
if IsEqual(t, val1, val2) { |
|
|
|
|
_, file, line, _ := runtime.Caller(skip) |
|
|
|
|
fmt.Printf("%s:%d %v should not be equal %v\n", path.Base(file), line, val1, val2) |
|
|
|
|
t.FailNow() |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func PanicMatches(t *testing.T, fn func(), matches string) { |
|
|
|
|
PanicMatchesSkip(t, 2, fn, matches) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func PanicMatchesSkip(t *testing.T, skip int, fn func(), matches string) { |
|
|
|
|
|
|
|
|
|
_, file, line, _ := runtime.Caller(skip) |
|
|
|
|
|
|
|
|
|
defer func() { |
|
|
|
|
if r := recover(); r != nil { |
|
|
|
|
err := fmt.Sprintf("%s", r) |
|
|
|
|
|
|
|
|
|
if err != matches { |
|
|
|
|
fmt.Printf("%s:%d Panic... expected [%s] received [%s]", path.Base(file), line, matches, err) |
|
|
|
|
t.FailNow() |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}() |
|
|
|
|
|
|
|
|
|
fn() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func AssertError(t *testing.T, errs ValidationErrors, key, field, expectedTag string) { |
|
|
|
|
|
|
|
|
|
val, ok := errs[key] |
|
|
|
@ -864,11 +754,11 @@ func TestSSNValidation(t *testing.T) { |
|
|
|
|
errs := validate.Field(test.param, "ssn") |
|
|
|
|
|
|
|
|
|
if test.expected == true { |
|
|
|
|
if !IsEqual(t, errs, nil) { |
|
|
|
|
if !IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d SSN failed Error: %s", i, errs) |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
if IsEqual(t, errs, nil) { |
|
|
|
|
if IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d SSN failed Error: %s", i, errs) |
|
|
|
|
} else { |
|
|
|
|
val := errs[""] |
|
|
|
@ -898,11 +788,11 @@ func TestLongitudeValidation(t *testing.T) { |
|
|
|
|
errs := validate.Field(test.param, "longitude") |
|
|
|
|
|
|
|
|
|
if test.expected == true { |
|
|
|
|
if !IsEqual(t, errs, nil) { |
|
|
|
|
if !IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d Longitude failed Error: %s", i, errs) |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
if IsEqual(t, errs, nil) { |
|
|
|
|
if IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d Longitude failed Error: %s", i, errs) |
|
|
|
|
} else { |
|
|
|
|
val := errs[""] |
|
|
|
@ -932,11 +822,11 @@ func TestLatitudeValidation(t *testing.T) { |
|
|
|
|
errs := validate.Field(test.param, "latitude") |
|
|
|
|
|
|
|
|
|
if test.expected == true { |
|
|
|
|
if !IsEqual(t, errs, nil) { |
|
|
|
|
if !IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d Latitude failed Error: %s", i, errs) |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
if IsEqual(t, errs, nil) { |
|
|
|
|
if IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d Latitude failed Error: %s", i, errs) |
|
|
|
|
} else { |
|
|
|
|
val := errs[""] |
|
|
|
@ -972,11 +862,11 @@ func TestDataURIValidation(t *testing.T) { |
|
|
|
|
errs := validate.Field(test.param, "datauri") |
|
|
|
|
|
|
|
|
|
if test.expected == true { |
|
|
|
|
if !IsEqual(t, errs, nil) { |
|
|
|
|
if !IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d DataURI failed Error: %s", i, errs) |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
if IsEqual(t, errs, nil) { |
|
|
|
|
if IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d DataURI failed Error: %s", i, errs) |
|
|
|
|
} else { |
|
|
|
|
val := errs[""] |
|
|
|
@ -1010,11 +900,11 @@ func TestMultibyteValidation(t *testing.T) { |
|
|
|
|
errs := validate.Field(test.param, "multibyte") |
|
|
|
|
|
|
|
|
|
if test.expected == true { |
|
|
|
|
if !IsEqual(t, errs, nil) { |
|
|
|
|
if !IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d Multibyte failed Error: %s", i, errs) |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
if IsEqual(t, errs, nil) { |
|
|
|
|
if IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d Multibyte failed Error: %s", i, errs) |
|
|
|
|
} else { |
|
|
|
|
val := errs[""] |
|
|
|
@ -1049,11 +939,11 @@ func TestPrintableASCIIValidation(t *testing.T) { |
|
|
|
|
errs := validate.Field(test.param, "printascii") |
|
|
|
|
|
|
|
|
|
if test.expected == true { |
|
|
|
|
if !IsEqual(t, errs, nil) { |
|
|
|
|
if !IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d Printable ASCII failed Error: %s", i, errs) |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
if IsEqual(t, errs, nil) { |
|
|
|
|
if IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d Printable ASCII failed Error: %s", i, errs) |
|
|
|
|
} else { |
|
|
|
|
val := errs[""] |
|
|
|
@ -1087,11 +977,11 @@ func TestASCIIValidation(t *testing.T) { |
|
|
|
|
errs := validate.Field(test.param, "ascii") |
|
|
|
|
|
|
|
|
|
if test.expected == true { |
|
|
|
|
if !IsEqual(t, errs, nil) { |
|
|
|
|
if !IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d ASCII failed Error: %s", i, errs) |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
if IsEqual(t, errs, nil) { |
|
|
|
|
if IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d ASCII failed Error: %s", i, errs) |
|
|
|
|
} else { |
|
|
|
|
val := errs[""] |
|
|
|
@ -1122,11 +1012,11 @@ func TestUUID5Validation(t *testing.T) { |
|
|
|
|
errs := validate.Field(test.param, "uuid5") |
|
|
|
|
|
|
|
|
|
if test.expected == true { |
|
|
|
|
if !IsEqual(t, errs, nil) { |
|
|
|
|
if !IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d UUID5 failed Error: %s", i, errs) |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
if IsEqual(t, errs, nil) { |
|
|
|
|
if IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d UUID5 failed Error: %s", i, errs) |
|
|
|
|
} else { |
|
|
|
|
val := errs[""] |
|
|
|
@ -1156,11 +1046,11 @@ func TestUUID4Validation(t *testing.T) { |
|
|
|
|
errs := validate.Field(test.param, "uuid4") |
|
|
|
|
|
|
|
|
|
if test.expected == true { |
|
|
|
|
if !IsEqual(t, errs, nil) { |
|
|
|
|
if !IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d UUID4 failed Error: %s", i, errs) |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
if IsEqual(t, errs, nil) { |
|
|
|
|
if IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d UUID4 failed Error: %s", i, errs) |
|
|
|
|
} else { |
|
|
|
|
val := errs[""] |
|
|
|
@ -1189,11 +1079,11 @@ func TestUUID3Validation(t *testing.T) { |
|
|
|
|
errs := validate.Field(test.param, "uuid3") |
|
|
|
|
|
|
|
|
|
if test.expected == true { |
|
|
|
|
if !IsEqual(t, errs, nil) { |
|
|
|
|
if !IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d UUID3 failed Error: %s", i, errs) |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
if IsEqual(t, errs, nil) { |
|
|
|
|
if IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d UUID3 failed Error: %s", i, errs) |
|
|
|
|
} else { |
|
|
|
|
val := errs[""] |
|
|
|
@ -1225,11 +1115,11 @@ func TestUUIDValidation(t *testing.T) { |
|
|
|
|
errs := validate.Field(test.param, "uuid") |
|
|
|
|
|
|
|
|
|
if test.expected == true { |
|
|
|
|
if !IsEqual(t, errs, nil) { |
|
|
|
|
if !IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d UUID failed Error: %s", i, errs) |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
if IsEqual(t, errs, nil) { |
|
|
|
|
if IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d UUID failed Error: %s", i, errs) |
|
|
|
|
} else { |
|
|
|
|
val := errs[""] |
|
|
|
@ -1263,11 +1153,11 @@ func TestISBNValidation(t *testing.T) { |
|
|
|
|
errs := validate.Field(test.param, "isbn") |
|
|
|
|
|
|
|
|
|
if test.expected == true { |
|
|
|
|
if !IsEqual(t, errs, nil) { |
|
|
|
|
if !IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d ISBN failed Error: %s", i, errs) |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
if IsEqual(t, errs, nil) { |
|
|
|
|
if IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d ISBN failed Error: %s", i, errs) |
|
|
|
|
} else { |
|
|
|
|
val := errs[""] |
|
|
|
@ -1300,11 +1190,11 @@ func TestISBN13Validation(t *testing.T) { |
|
|
|
|
errs := validate.Field(test.param, "isbn13") |
|
|
|
|
|
|
|
|
|
if test.expected == true { |
|
|
|
|
if !IsEqual(t, errs, nil) { |
|
|
|
|
if !IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d ISBN13 failed Error: %s", i, errs) |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
if IsEqual(t, errs, nil) { |
|
|
|
|
if IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d ISBN13 failed Error: %s", i, errs) |
|
|
|
|
} else { |
|
|
|
|
val := errs[""] |
|
|
|
@ -1338,11 +1228,11 @@ func TestISBN10Validation(t *testing.T) { |
|
|
|
|
errs := validate.Field(test.param, "isbn10") |
|
|
|
|
|
|
|
|
|
if test.expected == true { |
|
|
|
|
if !IsEqual(t, errs, nil) { |
|
|
|
|
if !IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d ISBN10 failed Error: %s", i, errs) |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
if IsEqual(t, errs, nil) { |
|
|
|
|
if IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d ISBN10 failed Error: %s", i, errs) |
|
|
|
|
} else { |
|
|
|
|
val := errs[""] |
|
|
|
@ -2702,11 +2592,11 @@ func TestUrl(t *testing.T) { |
|
|
|
|
errs := validate.Field(test.param, "url") |
|
|
|
|
|
|
|
|
|
if test.expected == true { |
|
|
|
|
if !IsEqual(t, errs, nil) { |
|
|
|
|
if !IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d URL failed Error: %s", i, errs) |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
if IsEqual(t, errs, nil) { |
|
|
|
|
if IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d URL failed Error: %s", i, errs) |
|
|
|
|
} else { |
|
|
|
|
val := errs[""] |
|
|
|
@ -2766,11 +2656,11 @@ func TestUri(t *testing.T) { |
|
|
|
|
errs := validate.Field(test.param, "uri") |
|
|
|
|
|
|
|
|
|
if test.expected == true { |
|
|
|
|
if !IsEqual(t, errs, nil) { |
|
|
|
|
if !IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d URI failed Error: %s", i, errs) |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
if IsEqual(t, errs, nil) { |
|
|
|
|
if IsEqual(errs, nil) { |
|
|
|
|
t.Fatalf("Index: %d URI failed Error: %s", i, errs) |
|
|
|
|
} else { |
|
|
|
|
val := errs[""] |
|
|
|
|