From 105cdf6fe65a9b1e848a79c7953a237af12b9616 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=9B=BD=E6=BD=AE?= <2892931976@qq.com> Date: Wed, 3 Jul 2019 14:28:20 +0800 Subject: [PATCH 1/9] 20190703 14:25 --- g/util/gvalid/gvalid_unit_basic_all_test.go | 1678 +++++++++-------- g/util/gvalid/gvalid_unit_checkmap_test.go | 281 ++- g/util/gvalid/gvalid_unit_checkstruct_test.go | 316 +++- g/util/gvalid/gvalid_unit_customerror_test.go | 174 +- 4 files changed, 1367 insertions(+), 1082 deletions(-) mode change 100644 => 100755 g/util/gvalid/gvalid_unit_basic_all_test.go mode change 100644 => 100755 g/util/gvalid/gvalid_unit_checkmap_test.go mode change 100644 => 100755 g/util/gvalid/gvalid_unit_checkstruct_test.go mode change 100644 => 100755 g/util/gvalid/gvalid_unit_customerror_test.go diff --git a/g/util/gvalid/gvalid_unit_basic_all_test.go b/g/util/gvalid/gvalid_unit_basic_all_test.go old mode 100644 new mode 100755 index 6d9642b2e..dcd9e2c90 --- a/g/util/gvalid/gvalid_unit_basic_all_test.go +++ b/g/util/gvalid/gvalid_unit_basic_all_test.go @@ -1,811 +1,867 @@ -// Copyright 2017 gf Author(https://github.com/gogf/gf). All Rights Reserved. -// -// This Source Code Form is subject to the terms of the MIT License. -// If a copy of the MIT was not distributed with this file, -// You can obtain one at https://github.com/gogf/gf. - -package gvalid_test - -import ( - "github.com/gogf/gf/g" - "github.com/gogf/gf/g/test/gtest" - "github.com/gogf/gf/g/util/gvalid" - "testing" -) - -func Test_Required(t *testing.T) { - if m := gvalid.Check("1", "required", nil); m != nil { - t.Error(m) - } - if m := gvalid.Check("", "required", nil); m == nil { - t.Error(m) - } - if m := gvalid.Check("", "required-if:id,1,age,18", nil, map[string]interface{}{"id": 1, "age": 19}); m == nil { - t.Error("Required校验失败") - } - if m := gvalid.Check("", "required-if:id,1,age,18", nil, map[string]interface{}{"id": 2, "age": 19}); m != nil { - t.Error("Required校验失败") - } -} - -func Test_RequiredIf(t *testing.T) { - gtest.Case(t, func() { - rule := "required-if:100,200" - val1 := "" - val2 := "100" - val3 := "200" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - gtest.Assert(err1, nil) - gtest.Assert(err2, nil) - gtest.Assert(err3, nil) - }) -} - -func Test_RequiredUnless(t *testing.T) { - gtest.Case(t, func() { - rule := "required-unless:100,200" - val1 := "" - val2 := "100" - val3 := "200" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - gtest.AssertNE(err1, nil) - gtest.Assert(err2, nil) - gtest.Assert(err3, nil) - }) -} - -func Test_RequiredWith(t *testing.T) { - gtest.Case(t, func() { - rule := "required-with:id,name" - val1 := "" - params1 := g.Map{ - "age": 18, - } - params2 := g.Map{ - "id": 100, - } - params3 := g.Map{ - "id": 100, - "name": "john", - } - err1 := gvalid.Check(val1, rule, nil, params1) - err2 := gvalid.Check(val1, rule, nil, params2) - err3 := gvalid.Check(val1, rule, nil, params3) - gtest.Assert(err1, nil) - gtest.AssertNE(err2, nil) - gtest.AssertNE(err3, nil) - }) -} - -func Test_RequiredWithAll(t *testing.T) { - gtest.Case(t, func() { - rule := "required-with-all:id,name" - val1 := "" - params1 := g.Map{ - "age": 18, - } - params2 := g.Map{ - "id": 100, - } - params3 := g.Map{ - "id": 100, - "name": "john", - } - err1 := gvalid.Check(val1, rule, nil, params1) - err2 := gvalid.Check(val1, rule, nil, params2) - err3 := gvalid.Check(val1, rule, nil, params3) - gtest.Assert(err1, nil) - gtest.Assert(err2, nil) - gtest.AssertNE(err3, nil) - }) -} - -func Test_RequiredWithOut(t *testing.T) { - gtest.Case(t, func() { - rule := "required-without:id,name" - val1 := "" - params1 := g.Map{ - "age": 18, - } - params2 := g.Map{ - "id": 100, - } - params3 := g.Map{ - "id": 100, - "name": "john", - } - err1 := gvalid.Check(val1, rule, nil, params1) - err2 := gvalid.Check(val1, rule, nil, params2) - err3 := gvalid.Check(val1, rule, nil, params3) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.Assert(err3, nil) - }) -} - -func Test_RequiredWithOutAll(t *testing.T) { - gtest.Case(t, func() { - rule := "required-without-all:id,name" - val1 := "" - params1 := g.Map{ - "age": 18, - } - params2 := g.Map{ - "id": 100, - } - params3 := g.Map{ - "id": 100, - "name": "john", - } - err1 := gvalid.Check(val1, rule, nil, params1) - err2 := gvalid.Check(val1, rule, nil, params2) - err3 := gvalid.Check(val1, rule, nil, params3) - gtest.AssertNE(err1, nil) - gtest.Assert(err2, nil) - gtest.Assert(err3, nil) - }) -} - -func Test_Date(t *testing.T) { - gtest.Case(t, func() { - rule := "date" - val1 := "2010" - val2 := "201011" - val3 := "20101101" - val4 := "2010-11-01" - val5 := "2010.11.01" - val6 := "2010/11/01" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - err6 := gvalid.Check(val6, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - gtest.Assert(err5, nil) - gtest.Assert(err6, nil) - }) -} - -func Test_DateFormat(t *testing.T) { - gtest.Case(t, func() { - val1 := "2010" - val2 := "201011" - val3 := "2010.11" - val4 := "201011-01" - val5 := "2010~11~01" - val6 := "2010-11~01" - err1 := gvalid.Check(val1, "date-format:Y", nil) - err2 := gvalid.Check(val2, "date-format:Ym", nil) - err3 := gvalid.Check(val3, "date-format:Y.m", nil) - err4 := gvalid.Check(val4, "date-format:Ym-d", nil) - err5 := gvalid.Check(val5, "date-format:Y~m~d", nil) - err6 := gvalid.Check(val6, "date-format:Y~m~d", nil) - gtest.Assert(err1, nil) - gtest.Assert(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - gtest.Assert(err5, nil) - gtest.AssertNE(err6, nil) - }) -} - -func Test_Email(t *testing.T) { - gtest.Case(t, func() { - rule := "email" - value1 := "m@johngcn" - value2 := "m@www@johngcn" - value3 := "m-m_m@mail.johng.cn" - value4 := "m.m-m@johng.cn" - err1 := gvalid.Check(value1, rule, nil) - err2 := gvalid.Check(value2, rule, nil) - err3 := gvalid.Check(value3, rule, nil) - err4 := gvalid.Check(value4, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - }) -} - -func Test_Phone(t *testing.T) { - gtest.Case(t, func() { - err1 := gvalid.Check("1361990897", "phone", nil) - err2 := gvalid.Check("13619908979", "phone", nil) - err3 := gvalid.Check("16719908979", "phone", nil) - err4 := gvalid.Check("19719908989", "phone", nil) - gtest.AssertNE(err1, nil) - gtest.Assert(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - }) -} - -func Test_Telephone(t *testing.T) { - gtest.Case(t, func() { - rule := "telephone" - val1 := "869265" - val2 := "028-869265" - val3 := "86292651" - val4 := "028-8692651" - val5 := "0830-8692651" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - gtest.Assert(err5, nil) - }) -} - -func Test_Passport(t *testing.T) { - gtest.Case(t, func() { - rule := "passport" - val1 := "123456" - val2 := "a12345-6" - val3 := "aaaaa" - val4 := "aaaaaa" - val5 := "a123_456" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.AssertNE(err3, nil) - gtest.Assert(err4, nil) - gtest.Assert(err5, nil) - }) -} - -func Test_Password(t *testing.T) { - gtest.Case(t, func() { - rule := "password" - val1 := "12345" - val2 := "aaaaa" - val3 := "a12345-6" - val4 := ">,/;'[09-" - val5 := "a123_456" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - gtest.Assert(err5, nil) - }) -} - -func Test_Password2(t *testing.T) { - gtest.Case(t, func() { - rule := "password2" - val1 := "12345" - val2 := "Naaaa" - val3 := "a12345-6" - val4 := ">,/;'[09-" - val5 := "a123_456" - val6 := "Nant1986" - val7 := "Nant1986!" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - err6 := gvalid.Check(val6, rule, nil) - err7 := gvalid.Check(val7, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.AssertNE(err3, nil) - gtest.AssertNE(err4, nil) - gtest.AssertNE(err5, nil) - gtest.Assert(err6, nil) - gtest.Assert(err7, nil) - }) -} - -func Test_Password3(t *testing.T) { - gtest.Case(t, func() { - rule := "password3" - val1 := "12345" - val2 := "Naaaa" - val3 := "a12345-6" - val4 := ">,/;'[09-" - val5 := "a123_456" - val6 := "Nant1986" - val7 := "Nant1986!" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - err6 := gvalid.Check(val6, rule, nil) - err7 := gvalid.Check(val7, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.AssertNE(err3, nil) - gtest.AssertNE(err4, nil) - gtest.AssertNE(err5, nil) - gtest.AssertNE(err6, nil) - gtest.Assert(err7, nil) - }) -} - -func Test_Postcode(t *testing.T) { - gtest.Case(t, func() { - rule := "postcode" - val1 := "12345" - val2 := "610036" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - gtest.AssertNE(err1, nil) - gtest.Assert(err2, nil) - }) -} - -func Test_IDNumber(t *testing.T) { - gtest.Case(t, func() { - rule := "id-number" - val1 := "11111111111111" - val2 := "1111111111111111" - val3 := "311128500121201" - val4 := "510521198607185367" - val5 := "51052119860718536x" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - gtest.Assert(err5, nil) - }) -} - -func Test_QQ(t *testing.T) { - gtest.Case(t, func() { - rule := "qq" - val1 := "100" - val2 := "1" - val3 := "10000" - val4 := "38996181" - val5 := "389961817" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - gtest.Assert(err5, nil) - }) -} - -func Test_Ip(t *testing.T) { - if m := gvalid.Check("10.0.0.1", "ip", nil); m != nil { - t.Error(m) - } - if m := gvalid.Check("10.0.0.1", "ipv4", nil); m != nil { - t.Error(m) - } - if m := gvalid.Check("0.0.0.0", "ipv4", nil); m != nil { - t.Error(m) - } - if m := gvalid.Check("1920.0.0.0", "ipv4", nil); m == nil { - t.Error("ipv4校验失败") - } - if m := gvalid.Check("1920.0.0.0", "ip", nil); m == nil { - t.Error("ipv4校验失败") - } - if m := gvalid.Check("fe80::5484:7aff:fefe:9799", "ipv6", nil); m != nil { - t.Error(m) - } - if m := gvalid.Check("fe80::5484:7aff:fefe:9799123", "ipv6", nil); m == nil { - t.Error(m) - } - if m := gvalid.Check("fe80::5484:7aff:fefe:9799", "ip", nil); m != nil { - t.Error(m) - } - if m := gvalid.Check("fe80::5484:7aff:fefe:9799123", "ip", nil); m == nil { - t.Error(m) - } -} - -func Test_IPv4(t *testing.T) { - gtest.Case(t, func() { - rule := "ipv4" - val1 := "0.0.0" - val2 := "0.0.0.0" - val3 := "1.1.1.1" - val4 := "255.255.255.0" - val5 := "127.0.0.1" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - gtest.AssertNE(err1, nil) - gtest.Assert(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - gtest.Assert(err5, nil) - }) -} - -func Test_IPv6(t *testing.T) { - gtest.Case(t, func() { - rule := "ipv6" - val1 := "192.168.1.1" - val2 := "CDCD:910A:2222:5498:8475:1111:3900:2020" - 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.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - gtest.AssertNE(err1, nil) - gtest.Assert(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - gtest.Assert(err5, nil) - }) -} - -func Test_MAC(t *testing.T) { - gtest.Case(t, func() { - rule := "mac" - val1 := "192.168.1.1" - val2 := "44-45-53-54-00-00" - val3 := "01:00:5e:00:00:00" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - gtest.AssertNE(err1, nil) - gtest.Assert(err2, nil) - gtest.Assert(err3, nil) - }) -} - -func Test_URL(t *testing.T) { - gtest.Case(t, func() { - rule := "url" - val1 := "127.0.0.1" - val2 := "https://www.baidu.com" - val3 := "http://127.0.0.1" - val4 := "file:///tmp/test.txt" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - gtest.AssertNE(err1, nil) - gtest.Assert(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - }) -} - -func Test_Domain(t *testing.T) { - gtest.Case(t, func() { - rule := "domain" - val1 := "localhost" - val2 := "baidu.com" - val3 := "www.baidu.com" - val4 := "jn.np" - val5 := "www.jn.np" - val6 := "w.www.jn.np" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - err6 := gvalid.Check(val6, rule, nil) - gtest.AssertNE(err1, nil) - gtest.Assert(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - gtest.Assert(err5, nil) - gtest.Assert(err6, nil) - }) -} - -func Test_Length(t *testing.T) { - rule := "length:6,16" - if m := gvalid.Check("123456", rule, nil); m != nil { - t.Error(m) - } - if m := gvalid.Check("12345", rule, nil); m == nil { - t.Error("长度校验失败") - } -} - -func Test_MinLength(t *testing.T) { - rule := "min-length:6" - if m := gvalid.Check("123456", rule, nil); m != nil { - t.Error(m) - } - if m := gvalid.Check("12345", rule, nil); m == nil { - t.Error("长度校验失败") - } -} - -func Test_MaxLength(t *testing.T) { - rule := "max-length:6" - if m := gvalid.Check("12345", rule, nil); m != nil { - t.Error(m) - } - if m := gvalid.Check("1234567", rule, nil); m == nil { - t.Error("长度校验失败") - } -} - -func Test_Between(t *testing.T) { - rule := "between:6.01, 10.01" - if m := gvalid.Check(10, rule, nil); m != nil { - t.Error(m) - } - if m := gvalid.Check(10.02, rule, nil); m == nil { - t.Error("大小范围校验失败") - } -} - -func Test_Min(t *testing.T) { - gtest.Case(t, func() { - rule := "min:100" - val1 := "1" - val2 := "99" - val3 := "100" - val4 := "1000" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - }) -} - -func Test_Max(t *testing.T) { - gtest.Case(t, func() { - rule := "max:100" - val1 := "1" - val2 := "99" - val3 := "100" - val4 := "1000" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - gtest.Assert(err1, nil) - gtest.Assert(err2, nil) - gtest.Assert(err3, nil) - gtest.AssertNE(err4, nil) - }) -} - -func Test_Json(t *testing.T) { - gtest.Case(t, func() { - rule := "json" - val1 := "" - val2 := "." - val3 := "{}" - val4 := "[]" - val5 := "[1,2,3,4]" - val6 := `{"list":[1,2,3,4]}` - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - err6 := gvalid.Check(val6, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - gtest.Assert(err5, nil) - gtest.Assert(err6, nil) - }) -} - -func Test_Integer(t *testing.T) { - gtest.Case(t, func() { - rule := "integer" - val1 := "" - val2 := "1.0" - val3 := "001" - val4 := "1" - val5 := "100" - val6 := `999999999` - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - err6 := gvalid.Check(val6, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - gtest.Assert(err5, nil) - gtest.Assert(err6, nil) - }) -} - -func Test_Float(t *testing.T) { - gtest.Case(t, func() { - rule := "float" - val1 := "" - val2 := "a" - val3 := "1" - val4 := "1.0" - val5 := "1.1" - val6 := `0.1` - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - err6 := gvalid.Check(val6, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - gtest.Assert(err5, nil) - gtest.Assert(err6, nil) - }) -} - -func Test_Boolean(t *testing.T) { - gtest.Case(t, func() { - rule := "boolean" - val1 := "a" - val2 := "-" - val3 := "" - val4 := "1" - val5 := "true" - val6 := `off` - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - err6 := gvalid.Check(val6, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - gtest.Assert(err5, nil) - gtest.Assert(err6, nil) - }) -} - -func Test_Same(t *testing.T) { - gtest.Case(t, func() { - rule := "same:id" - val1 := "100" - params1 := g.Map{ - "age": 18, - } - params2 := g.Map{ - "id": 100, - } - params3 := g.Map{ - "id": 100, - "name": "john", - } - err1 := gvalid.Check(val1, rule, nil, params1) - err2 := gvalid.Check(val1, rule, nil, params2) - err3 := gvalid.Check(val1, rule, nil, params3) - gtest.AssertNE(err1, nil) - gtest.Assert(err2, nil) - gtest.Assert(err3, nil) - }) -} - -func Test_Different(t *testing.T) { - gtest.Case(t, func() { - rule := "different:id" - val1 := "100" - params1 := g.Map{ - "age": 18, - } - params2 := g.Map{ - "id": 100, - } - params3 := g.Map{ - "id": 100, - "name": "john", - } - err1 := gvalid.Check(val1, rule, nil, params1) - err2 := gvalid.Check(val1, rule, nil, params2) - err3 := gvalid.Check(val1, rule, nil, params3) - gtest.Assert(err1, nil) - gtest.AssertNE(err2, nil) - gtest.AssertNE(err3, nil) - }) -} - -func Test_In(t *testing.T) { - gtest.Case(t, func() { - rule := "in:100,200" - val1 := "" - val2 := "1" - val3 := "100" - val4 := "200" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - }) -} - -func Test_NotIn(t *testing.T) { - gtest.Case(t, func() { - rule := "not-in:100,200" - val1 := "" - val2 := "1" - val3 := "100" - val4 := "200" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - gtest.Assert(err1, nil) - gtest.Assert(err2, nil) - gtest.AssertNE(err3, nil) - gtest.AssertNE(err4, nil) - }) -} - -func Test_Regex1(t *testing.T) { - rule := `regex:\d{6}|\D{6}|length:6,16` - if m := gvalid.Check("123456", rule, nil); m != nil { - t.Error(m) - } - if m := gvalid.Check("abcde6", rule, nil); m == nil { - t.Error("校验失败") - } -} - -func Test_Regex2(t *testing.T) { - gtest.Case(t, func() { - rule := `required|min-length:6|regex:^data:image\/(jpeg|png);base64,` - str1 := "" - str2 := "data" - str3 := "data:image/jpeg;base64,/9jrbattq22r" - err1 := gvalid.Check(str1, rule, nil) - err2 := gvalid.Check(str2, rule, nil) - err3 := gvalid.Check(str3, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.Assert(err3, nil) - - gtest.AssertNE(err1.Map()["required"], nil) - gtest.AssertNE(err2.Map()["min-length"], nil) - }) -} +// Copyright 2017 gf Author(https://github.com/gogf/gf). All Rights Reserved. +// +// This Source Code Form is subject to the terms of the MIT License. +// If a copy of the MIT was not distributed with this file, +// You can obtain one at https://github.com/gogf/gf. + +package gvalid_test + +import ( + "testing" + + "github.com/gogf/gf/g" + "github.com/gogf/gf/g/test/gtest" + "github.com/gogf/gf/g/util/gvalid" +) + +func Test_Check(t *testing.T) { + + gtest.Case(t, func() { + rule := "abc:6,16" + val1 := 0 + val2 := 7 + val3 := 20 + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.AssertNE(err3, nil) + }) +} + +func Test_Required(t *testing.T) { + if m := gvalid.Check("1", "required", nil); m != nil { + t.Error(m) + } + if m := gvalid.Check("", "required", nil); m == nil { + t.Error(m) + } + if m := gvalid.Check("", "required-if:id,1,age,18", nil, map[string]interface{}{"id": 1, "age": 19}); m == nil { + t.Error("Required校验失败") + } + if m := gvalid.Check("", "required-if:id,1,age,18", nil, map[string]interface{}{"id": 2, "age": 19}); m != nil { + t.Error("Required校验失败") + } +} + +func Test_RequiredIf(t *testing.T) { + gtest.Case(t, func() { + rule := "required-if:100,200" + val1 := "" + val2 := "100" + val3 := "200" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + gtest.Assert(err1, nil) + gtest.Assert(err2, nil) + gtest.Assert(err3, nil) + }) +} + +func Test_RequiredUnless(t *testing.T) { + gtest.Case(t, func() { + rule := "required-unless:100,200" + val1 := "" + val2 := "100" + val3 := "200" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + gtest.AssertNE(err1, nil) + gtest.Assert(err2, nil) + gtest.Assert(err3, nil) + }) +} + +func Test_RequiredWith(t *testing.T) { + gtest.Case(t, func() { + rule := "required-with:id,name" + val1 := "" + params1 := g.Map{ + "age": 18, + } + params2 := g.Map{ + "id": 100, + } + params3 := g.Map{ + "id": 100, + "name": "john", + } + err1 := gvalid.Check(val1, rule, nil, params1) + err2 := gvalid.Check(val1, rule, nil, params2) + err3 := gvalid.Check(val1, rule, nil, params3) + gtest.Assert(err1, nil) + gtest.AssertNE(err2, nil) + gtest.AssertNE(err3, nil) + }) +} + +func Test_RequiredWithAll(t *testing.T) { + gtest.Case(t, func() { + rule := "required-with-all:id,name" + val1 := "" + params1 := g.Map{ + "age": 18, + } + params2 := g.Map{ + "id": 100, + } + params3 := g.Map{ + "id": 100, + "name": "john", + } + err1 := gvalid.Check(val1, rule, nil, params1) + err2 := gvalid.Check(val1, rule, nil, params2) + err3 := gvalid.Check(val1, rule, nil, params3) + gtest.Assert(err1, nil) + gtest.Assert(err2, nil) + gtest.AssertNE(err3, nil) + }) +} + +func Test_RequiredWithOut(t *testing.T) { + gtest.Case(t, func() { + rule := "required-without:id,name" + val1 := "" + params1 := g.Map{ + "age": 18, + } + params2 := g.Map{ + "id": 100, + } + params3 := g.Map{ + "id": 100, + "name": "john", + } + err1 := gvalid.Check(val1, rule, nil, params1) + err2 := gvalid.Check(val1, rule, nil, params2) + err3 := gvalid.Check(val1, rule, nil, params3) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.Assert(err3, nil) + }) +} + +func Test_RequiredWithOutAll(t *testing.T) { + gtest.Case(t, func() { + rule := "required-without-all:id,name" + val1 := "" + params1 := g.Map{ + "age": 18, + } + params2 := g.Map{ + "id": 100, + } + params3 := g.Map{ + "id": 100, + "name": "john", + } + err1 := gvalid.Check(val1, rule, nil, params1) + err2 := gvalid.Check(val1, rule, nil, params2) + err3 := gvalid.Check(val1, rule, nil, params3) + gtest.AssertNE(err1, nil) + gtest.Assert(err2, nil) + gtest.Assert(err3, nil) + }) +} + +func Test_Date(t *testing.T) { + gtest.Case(t, func() { + rule := "date" + val1 := "2010" + val2 := "201011" + val3 := "20101101" + val4 := "2010-11-01" + val5 := "2010.11.01" + val6 := "2010/11/01" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + err6 := gvalid.Check(val6, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + gtest.Assert(err5, nil) + gtest.Assert(err6, nil) + }) +} + +func Test_DateFormat(t *testing.T) { + gtest.Case(t, func() { + val1 := "2010" + val2 := "201011" + val3 := "2010.11" + val4 := "201011-01" + val5 := "2010~11~01" + val6 := "2010-11~01" + err1 := gvalid.Check(val1, "date-format:Y", nil) + err2 := gvalid.Check(val2, "date-format:Ym", nil) + err3 := gvalid.Check(val3, "date-format:Y.m", nil) + err4 := gvalid.Check(val4, "date-format:Ym-d", nil) + err5 := gvalid.Check(val5, "date-format:Y~m~d", nil) + err6 := gvalid.Check(val6, "date-format:Y~m~d", nil) + gtest.Assert(err1, nil) + gtest.Assert(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + gtest.Assert(err5, nil) + gtest.AssertNE(err6, nil) + }) +} + +func Test_Email(t *testing.T) { + gtest.Case(t, func() { + rule := "email" + value1 := "m@johngcn" + value2 := "m@www@johngcn" + value3 := "m-m_m@mail.johng.cn" + value4 := "m.m-m@johng.cn" + err1 := gvalid.Check(value1, rule, nil) + err2 := gvalid.Check(value2, rule, nil) + err3 := gvalid.Check(value3, rule, nil) + err4 := gvalid.Check(value4, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + }) +} + +func Test_Phone(t *testing.T) { + gtest.Case(t, func() { + err1 := gvalid.Check("1361990897", "phone", nil) + err2 := gvalid.Check("13619908979", "phone", nil) + err3 := gvalid.Check("16719908979", "phone", nil) + err4 := gvalid.Check("19719908989", "phone", nil) + gtest.AssertNE(err1, nil) + gtest.Assert(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + }) +} + +func Test_Telephone(t *testing.T) { + gtest.Case(t, func() { + rule := "telephone" + val1 := "869265" + val2 := "028-869265" + val3 := "86292651" + val4 := "028-8692651" + val5 := "0830-8692651" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + gtest.Assert(err5, nil) + }) +} + +func Test_Passport(t *testing.T) { + gtest.Case(t, func() { + rule := "passport" + val1 := "123456" + val2 := "a12345-6" + val3 := "aaaaa" + val4 := "aaaaaa" + val5 := "a123_456" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.AssertNE(err3, nil) + gtest.Assert(err4, nil) + gtest.Assert(err5, nil) + }) +} + +func Test_Password(t *testing.T) { + gtest.Case(t, func() { + rule := "password" + val1 := "12345" + val2 := "aaaaa" + val3 := "a12345-6" + val4 := ">,/;'[09-" + val5 := "a123_456" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + gtest.Assert(err5, nil) + }) +} + +func Test_Password2(t *testing.T) { + gtest.Case(t, func() { + rule := "password2" + val1 := "12345" + val2 := "Naaaa" + val3 := "a12345-6" + val4 := ">,/;'[09-" + val5 := "a123_456" + val6 := "Nant1986" + val7 := "Nant1986!" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + err6 := gvalid.Check(val6, rule, nil) + err7 := gvalid.Check(val7, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.AssertNE(err3, nil) + gtest.AssertNE(err4, nil) + gtest.AssertNE(err5, nil) + gtest.Assert(err6, nil) + gtest.Assert(err7, nil) + }) +} + +func Test_Password3(t *testing.T) { + gtest.Case(t, func() { + rule := "password3" + val1 := "12345" + val2 := "Naaaa" + val3 := "a12345-6" + val4 := ">,/;'[09-" + val5 := "a123_456" + val6 := "Nant1986" + val7 := "Nant1986!" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + err6 := gvalid.Check(val6, rule, nil) + err7 := gvalid.Check(val7, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.AssertNE(err3, nil) + gtest.AssertNE(err4, nil) + gtest.AssertNE(err5, nil) + gtest.AssertNE(err6, nil) + gtest.Assert(err7, nil) + }) +} + +func Test_Postcode(t *testing.T) { + gtest.Case(t, func() { + rule := "postcode" + val1 := "12345" + val2 := "610036" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + gtest.AssertNE(err1, nil) + gtest.Assert(err2, nil) + }) +} + +func Test_IDNumber(t *testing.T) { + gtest.Case(t, func() { + rule := "id-number" + val1 := "11111111111111" + val2 := "1111111111111111" + val3 := "311128500121201" + val4 := "510521198607185367" + val5 := "51052119860718536x" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + gtest.Assert(err5, nil) + }) +} + +func Test_QQ(t *testing.T) { + gtest.Case(t, func() { + rule := "qq" + val1 := "100" + val2 := "1" + val3 := "10000" + val4 := "38996181" + val5 := "389961817" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + gtest.Assert(err5, nil) + }) +} + +func Test_Ip(t *testing.T) { + if m := gvalid.Check("10.0.0.1", "ip", nil); m != nil { + t.Error(m) + } + if m := gvalid.Check("10.0.0.1", "ipv4", nil); m != nil { + t.Error(m) + } + if m := gvalid.Check("0.0.0.0", "ipv4", nil); m != nil { + t.Error(m) + } + if m := gvalid.Check("1920.0.0.0", "ipv4", nil); m == nil { + t.Error("ipv4校验失败") + } + if m := gvalid.Check("1920.0.0.0", "ip", nil); m == nil { + t.Error("ipv4校验失败") + } + if m := gvalid.Check("fe80::5484:7aff:fefe:9799", "ipv6", nil); m != nil { + t.Error(m) + } + if m := gvalid.Check("fe80::5484:7aff:fefe:9799123", "ipv6", nil); m == nil { + t.Error(m) + } + if m := gvalid.Check("fe80::5484:7aff:fefe:9799", "ip", nil); m != nil { + t.Error(m) + } + if m := gvalid.Check("fe80::5484:7aff:fefe:9799123", "ip", nil); m == nil { + t.Error(m) + } +} + +func Test_IPv4(t *testing.T) { + gtest.Case(t, func() { + rule := "ipv4" + val1 := "0.0.0" + val2 := "0.0.0.0" + val3 := "1.1.1.1" + val4 := "255.255.255.0" + val5 := "127.0.0.1" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + gtest.AssertNE(err1, nil) + gtest.Assert(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + gtest.Assert(err5, nil) + }) +} + +func Test_IPv6(t *testing.T) { + gtest.Case(t, func() { + rule := "ipv6" + val1 := "192.168.1.1" + val2 := "CDCD:910A:2222:5498:8475:1111:3900:2020" + 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.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + gtest.AssertNE(err1, nil) + gtest.Assert(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + gtest.Assert(err5, nil) + }) +} + +func Test_MAC(t *testing.T) { + gtest.Case(t, func() { + rule := "mac" + val1 := "192.168.1.1" + val2 := "44-45-53-54-00-00" + val3 := "01:00:5e:00:00:00" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + gtest.AssertNE(err1, nil) + gtest.Assert(err2, nil) + gtest.Assert(err3, nil) + }) +} + +func Test_URL(t *testing.T) { + gtest.Case(t, func() { + rule := "url" + val1 := "127.0.0.1" + val2 := "https://www.baidu.com" + val3 := "http://127.0.0.1" + val4 := "file:///tmp/test.txt" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + gtest.AssertNE(err1, nil) + gtest.Assert(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + }) +} + +func Test_Domain(t *testing.T) { + gtest.Case(t, func() { + rule := "domain" + val1 := "localhost" + val2 := "baidu.com" + val3 := "www.baidu.com" + val4 := "jn.np" + val5 := "www.jn.np" + val6 := "w.www.jn.np" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + err6 := gvalid.Check(val6, rule, nil) + gtest.AssertNE(err1, nil) + gtest.Assert(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + gtest.Assert(err5, nil) + gtest.Assert(err6, nil) + }) +} + +func Test_Length(t *testing.T) { + rule := "length:6,16" + if m := gvalid.Check("123456", rule, nil); m != nil { + t.Error(m) + } + if m := gvalid.Check("12345", rule, nil); m == nil { + t.Error("长度校验失败") + } +} + +func Test_MinLength(t *testing.T) { + rule := "min-length:6" + msgs := map[string]string{ + "min-length": "地址长度至少为:min位", + } + if m := gvalid.Check("123456", rule, nil); m != nil { + t.Error(m) + } + if m := gvalid.Check("12345", rule, nil); m == nil { + t.Error("长度校验失败") + } + if m := gvalid.Check("12345", rule, msgs); m == nil { + t.Error("长度校验失败") + } + + rule2 := "min-length:abc" + if m := gvalid.Check("123456", rule2, nil); m == nil { + t.Error("长度校验失败") + } +} + +func Test_MaxLength(t *testing.T) { + rule := "max-length:6" + msgs := map[string]string{ + "max-length": "地址长度至大为:max位", + } + if m := gvalid.Check("12345", rule, nil); m != nil { + t.Error(m) + } + if m := gvalid.Check("1234567", rule, nil); m == nil { + t.Error("长度校验失败") + } + if m := gvalid.Check("1234567", rule, msgs); m == nil { + t.Error("长度校验失败") + } + + rule2 := "max-length:abc" + if m := gvalid.Check("123456", rule2, nil); m == nil { + t.Error("长度校验失败") + } +} + +func Test_Between(t *testing.T) { + rule := "between:6.01, 10.01" + if m := gvalid.Check(10, rule, nil); m != nil { + t.Error(m) + } + if m := gvalid.Check(10.02, rule, nil); m == nil { + t.Error("大小范围校验失败") + } + if m := gvalid.Check("a", rule, nil); m == nil { + t.Error("大小范围校验失败") + } +} + +func Test_Min(t *testing.T) { + gtest.Case(t, func() { + rule := "min:100" + val1 := "1" + val2 := "99" + val3 := "100" + val4 := "1000" + val5 := "a" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + gtest.AssertNE(err5, nil) + + rule2 := "min:a" + err6 := gvalid.Check(val1, rule2, nil) + gtest.AssertNE(err6, nil) + }) +} + +func Test_Max(t *testing.T) { + gtest.Case(t, func() { + rule := "max:100" + val1 := "1" + val2 := "99" + val3 := "100" + val4 := "1000" + val5 := "a" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + gtest.Assert(err1, nil) + gtest.Assert(err2, nil) + gtest.Assert(err3, nil) + gtest.AssertNE(err4, nil) + gtest.AssertNE(err5, nil) + + rule2 := "max:a" + err6 := gvalid.Check(val1, rule2, nil) + gtest.AssertNE(err6, nil) + }) +} + +func Test_Json(t *testing.T) { + gtest.Case(t, func() { + rule := "json" + val1 := "" + val2 := "." + val3 := "{}" + val4 := "[]" + val5 := "[1,2,3,4]" + val6 := `{"list":[1,2,3,4]}` + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + err6 := gvalid.Check(val6, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + gtest.Assert(err5, nil) + gtest.Assert(err6, nil) + }) +} + +func Test_Integer(t *testing.T) { + gtest.Case(t, func() { + rule := "integer" + val1 := "" + val2 := "1.0" + val3 := "001" + val4 := "1" + val5 := "100" + val6 := `999999999` + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + err6 := gvalid.Check(val6, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + gtest.Assert(err5, nil) + gtest.Assert(err6, nil) + }) +} + +func Test_Float(t *testing.T) { + gtest.Case(t, func() { + rule := "float" + val1 := "" + val2 := "a" + val3 := "1" + val4 := "1.0" + val5 := "1.1" + val6 := `0.1` + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + err6 := gvalid.Check(val6, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + gtest.Assert(err5, nil) + gtest.Assert(err6, nil) + }) +} + +func Test_Boolean(t *testing.T) { + gtest.Case(t, func() { + rule := "boolean" + val1 := "a" + val2 := "-" + val3 := "" + val4 := "1" + val5 := "true" + val6 := `off` + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + err6 := gvalid.Check(val6, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + gtest.Assert(err5, nil) + gtest.Assert(err6, nil) + }) +} + +func Test_Same(t *testing.T) { + gtest.Case(t, func() { + rule := "same:id" + val1 := "100" + params1 := g.Map{ + "age": 18, + } + params2 := g.Map{ + "id": 100, + } + params3 := g.Map{ + "id": 100, + "name": "john", + } + err1 := gvalid.Check(val1, rule, nil, params1) + err2 := gvalid.Check(val1, rule, nil, params2) + err3 := gvalid.Check(val1, rule, nil, params3) + gtest.AssertNE(err1, nil) + gtest.Assert(err2, nil) + gtest.Assert(err3, nil) + }) +} + +func Test_Different(t *testing.T) { + gtest.Case(t, func() { + rule := "different:id" + val1 := "100" + params1 := g.Map{ + "age": 18, + } + params2 := g.Map{ + "id": 100, + } + params3 := g.Map{ + "id": 100, + "name": "john", + } + err1 := gvalid.Check(val1, rule, nil, params1) + err2 := gvalid.Check(val1, rule, nil, params2) + err3 := gvalid.Check(val1, rule, nil, params3) + gtest.Assert(err1, nil) + gtest.AssertNE(err2, nil) + gtest.AssertNE(err3, nil) + }) +} + +func Test_In(t *testing.T) { + gtest.Case(t, func() { + rule := "in:100,200" + val1 := "" + val2 := "1" + val3 := "100" + val4 := "200" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + }) +} + +func Test_NotIn(t *testing.T) { + gtest.Case(t, func() { + rule := "not-in:100,200" + val1 := "" + val2 := "1" + val3 := "100" + val4 := "200" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + gtest.Assert(err1, nil) + gtest.Assert(err2, nil) + gtest.AssertNE(err3, nil) + gtest.AssertNE(err4, nil) + }) +} + +func Test_Regex1(t *testing.T) { + rule := `regex:\d{6}|\D{6}|length:6,16` + if m := gvalid.Check("123456", rule, nil); m != nil { + t.Error(m) + } + if m := gvalid.Check("abcde6", rule, nil); m == nil { + t.Error("校验失败") + } +} + +func Test_Regex2(t *testing.T) { + gtest.Case(t, func() { + rule := `required|min-length:6|regex:^data:image\/(jpeg|png);base64,` + str1 := "" + str2 := "data" + str3 := "data:image/jpeg;base64,/9jrbattq22r" + err1 := gvalid.Check(str1, rule, nil) + err2 := gvalid.Check(str2, rule, nil) + err3 := gvalid.Check(str3, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.Assert(err3, nil) + + gtest.AssertNE(err1.Map()["required"], nil) + gtest.AssertNE(err2.Map()["min-length"], nil) + }) +} diff --git a/g/util/gvalid/gvalid_unit_checkmap_test.go b/g/util/gvalid/gvalid_unit_checkmap_test.go old mode 100644 new mode 100755 index 76a75dfb8..009d72bc3 --- a/g/util/gvalid/gvalid_unit_checkmap_test.go +++ b/g/util/gvalid/gvalid_unit_checkmap_test.go @@ -1,99 +1,182 @@ -// Copyright 2019 gf Author(https://github.com/gogf/gf). All Rights Reserved. -// -// This Source Code Form is subject to the terms of the MIT License. -// If a copy of the MIT was not distributed with this file, -// You can obtain one at https://github.com/gogf/gf. - -package gvalid_test - -import ( - "github.com/gogf/gf/g/test/gtest" - "github.com/gogf/gf/g/util/gvalid" - "testing" -) - -func Test_CheckMap(t *testing.T) { - kvmap := map[string]interface{}{ - "id": "0", - "name": "john", - } - rules := map[string]string{ - "id": "required|between:1,100", - "name": "required|length:6,16", - } - msgs := gvalid.CustomMsg{ - "id": "ID不能为空|ID范围应当为:min到:max", - "name": map[string]string{ - "required": "名称不能为空", - "length": "名称长度为:min到:max个字符", - }, - } - if m := gvalid.CheckMap(kvmap, rules, msgs); m == nil { - t.Error("CheckMap校验失败") - } - - kvmap = map[string]interface{}{ - "id": "1", - "name": "john", - } - rules = map[string]string{ - "id": "required|between:1,100", - "name": "required|length:4,16", - } - msgs = map[string]interface{}{ - "id": "ID不能为空|ID范围应当为:min到:max", - "name": map[string]string{ - "required": "名称不能为空", - "length": "名称长度为:min到:max个字符", - }, - } - if m := gvalid.CheckMap(kvmap, rules, msgs); m != nil { - t.Error(m) - } -} - -// 如果值为nil,并且不需要require*验证时,其他验证失效 -func Test_CheckMapWithNilAndNotRequiredField(t *testing.T) { - data := map[string]interface{}{ - "id": "1", - } - rules := map[string]string{ - "id": "required", - "name": "length:4,16", - } - if m := gvalid.CheckMap(data, rules); m != nil { - t.Error(m) - } -} - -func Test_Sequence(t *testing.T) { - gtest.Case(t, func() { - params := map[string]interface{}{ - "passport": "", - "password": "123456", - "password2": "1234567", - } - rules := []string{ - "passport@required|length:6,16#账号不能为空|账号长度应当在:min到:max之间", - "password@required|length:6,16|same:password2#密码不能为空|密码长度应当在:min到:max之间|两次密码输入不相等", - "password2@required|length:6,16#", - } - err := gvalid.CheckMap(params, rules) - gtest.AssertNE(err, nil) - gtest.Assert(len(err.Map()), 2) - gtest.Assert(err.Map()["required"], "账号不能为空") - gtest.Assert(err.Map()["length"], "账号长度应当在6到16之间") - gtest.Assert(len(err.Maps()), 2) - - gtest.Assert(err.String(), "账号不能为空; 账号长度应当在6到16之间; 两次密码输入不相等") - gtest.Assert(err.Strings(), []string{"账号不能为空", "账号长度应当在6到16之间", "两次密码输入不相等"}) - - k, m := err.FirstItem() - gtest.Assert(k, "passport") - gtest.Assert(m, err.Map()) - - r, s := err.FirstRule() - gtest.Assert(r, "required") - gtest.Assert(s, "账号不能为空") - }) -} +// Copyright 2019 gf Author(https://github.com/gogf/gf). All Rights Reserved. +// +// This Source Code Form is subject to the terms of the MIT License. +// If a copy of the MIT was not distributed with this file, +// You can obtain one at https://github.com/gogf/gf. + +package gvalid_test + +import ( + "testing" + + "github.com/gogf/gf/g/test/gtest" + "github.com/gogf/gf/g/util/gvalid" +) + +func Test_CheckMap(t *testing.T) { + + var params interface{} + if m := gvalid.CheckMap(params, nil, nil); m == nil { + t.Error("CheckMap校验失败") + } + + kvmap := map[string]interface{}{ + "id": "0", + "name": "john", + } + rules := map[string]string{ + "id": "required|between:1,100", + "name": "required|length:6,16", + } + msgs := gvalid.CustomMsg{ + "id": "ID不能为空|ID范围应当为:min到:max", + "name": map[string]string{ + "required": "名称不能为空", + "length": "名称长度为:min到:max个字符", + }, + } + if m := gvalid.CheckMap(kvmap, rules, msgs); m == nil { + t.Error("CheckMap校验失败") + } + + kvmap = map[string]interface{}{ + "id": "1", + "name": "john", + } + rules = map[string]string{ + "id": "required|between:1,100", + "name": "required|length:4,16", + } + msgs = map[string]interface{}{ + "id": "ID不能为空|ID范围应当为:min到:max", + "name": map[string]string{ + "required": "名称不能为空", + "length": "名称长度为:min到:max个字符", + }, + } + if m := gvalid.CheckMap(kvmap, rules, msgs); m != nil { + t.Error(m) + } + + kvmap = map[string]interface{}{ + "id": "1", + "name": "john", + } + rules = map[string]string{ + "id": "", + "name": "", + } + msgs = map[string]interface{}{ + "id": "ID不能为空|ID范围应当为:min到:max", + "name": map[string]string{ + "required": "名称不能为空", + "length": "名称长度为:min到:max个字符", + }, + } + if m := gvalid.CheckMap(kvmap, rules, msgs); m != nil { + t.Error(m) + } + + kvmap = map[string]interface{}{ + "id": "1", + "name": "john", + } + rules2 := []string{ + "@required|between:1,100", + "@required|length:4,16", + } + msgs = map[string]interface{}{ + "id": "ID不能为空|ID范围应当为:min到:max", + "name": map[string]string{ + "required": "名称不能为空", + "length": "名称长度为:min到:max个字符", + }, + } + if m := gvalid.CheckMap(kvmap, rules2, msgs); m != nil { + t.Error(m) + } + + kvmap = map[string]interface{}{ + "id": "1", + "name": "john", + } + rules2 = []string{ + "id@required|between:1,100", + "name@required|length:4,16#名称不能为空|", + } + msgs = map[string]interface{}{ + "id": "ID不能为空|ID范围应当为:min到:max", + "name": map[string]string{ + "required": "名称不能为空", + "length": "名称长度为:min到:max个字符", + }, + } + if m := gvalid.CheckMap(kvmap, rules2, msgs); m != nil { + t.Error(m) + } + + kvmap = map[string]interface{}{ + "id": "1", + "name": "john", + } + rules2 = []string{ + "id@required|between:1,100", + "name@required|length:4,16#名称不能为空", + } + msgs = map[string]interface{}{ + "id": "ID不能为空|ID范围应当为:min到:max", + "name": map[string]string{ + "required": "名称不能为空", + "length": "名称长度为:min到:max个字符", + }, + } + if m := gvalid.CheckMap(kvmap, rules2, msgs); m != nil { + t.Error(m) + } +} + +// 如果值为nil,并且不需要require*验证时,其他验证失效 +func Test_CheckMapWithNilAndNotRequiredField(t *testing.T) { + data := map[string]interface{}{ + "id": "1", + } + rules := map[string]string{ + "id": "required", + "name": "length:4,16", + } + if m := gvalid.CheckMap(data, rules); m != nil { + t.Error(m) + } +} + +func Test_Sequence(t *testing.T) { + gtest.Case(t, func() { + params := map[string]interface{}{ + "passport": "", + "password": "123456", + "password2": "1234567", + } + rules := []string{ + "passport@required|length:6,16#账号不能为空|账号长度应当在:min到:max之间", + "password@required|length:6,16|same:password2#密码不能为空|密码长度应当在:min到:max之间|两次密码输入不相等", + "password2@required|length:6,16#", + } + err := gvalid.CheckMap(params, rules) + gtest.AssertNE(err, nil) + gtest.Assert(len(err.Map()), 2) + gtest.Assert(err.Map()["required"], "账号不能为空") + gtest.Assert(err.Map()["length"], "账号长度应当在6到16之间") + gtest.Assert(len(err.Maps()), 2) + + gtest.Assert(err.String(), "账号不能为空; 账号长度应当在6到16之间; 两次密码输入不相等") + gtest.Assert(err.Strings(), []string{"账号不能为空", "账号长度应当在6到16之间", "两次密码输入不相等"}) + + k, m := err.FirstItem() + gtest.Assert(k, "passport") + gtest.Assert(m, err.Map()) + + r, s := err.FirstRule() + gtest.Assert(r, "required") + gtest.Assert(s, "账号不能为空") + }) +} diff --git a/g/util/gvalid/gvalid_unit_checkstruct_test.go b/g/util/gvalid/gvalid_unit_checkstruct_test.go old mode 100644 new mode 100755 index 40e3178f0..01a2dc2f3 --- a/g/util/gvalid/gvalid_unit_checkstruct_test.go +++ b/g/util/gvalid/gvalid_unit_checkstruct_test.go @@ -1,92 +1,224 @@ -// Copyright 2019 gf Author(https://github.com/gogf/gf). All Rights Reserved. -// -// This Source Code Form is subject to the terms of the MIT License. -// If a copy of the MIT was not distributed with this file, -// You can obtain one at https://github.com/gogf/gf. - -package gvalid_test - -import ( - "testing" - - "github.com/gogf/gf/g/test/gtest" - "github.com/gogf/gf/g/util/gvalid" -) - -func Test_CheckStruct(t *testing.T) { - gtest.Case(t, func() { - type Object struct { - Name string - Age int - } - rules := map[string]string{ - "Name": "required|length:6,16", - "Age": "between:18,30", - } - msgs := map[string]interface{}{ - "Name": map[string]string{ - "required": "名称不能为空", - "length": "名称长度为:min到:max个字符", - }, - "Age": "年龄为18到30周岁", - } - obj := &Object{"john", 16} - err := gvalid.CheckStruct(obj, rules, msgs) - gtest.AssertNE(err, nil) - gtest.Assert(len(err.Maps()), 2) - gtest.Assert(err.Maps()["Name"]["required"], "") - gtest.Assert(err.Maps()["Name"]["length"], "名称长度为6到16个字符") - gtest.Assert(err.Maps()["Age"]["between"], "年龄为18到30周岁") - }) - - gtest.Case(t, func() { - type LoginRequest struct { - Username string `json:"username" gvalid:"username@required#用户名不能为空"` - Password string `json:"password" gvalid:"password@required#登录密码不能为空"` - } - var login LoginRequest - err := gvalid.CheckStruct(login, nil) - gtest.AssertNE(err, nil) - gtest.Assert(len(err.Maps()), 2) - gtest.Assert(err.Maps()["username"]["required"], "用户名不能为空") - gtest.Assert(err.Maps()["password"]["required"], "登录密码不能为空") - }) - - // gvalid tag - gtest.Case(t, func() { - type User struct { - Id int `gvalid:"uid@required|min:10#|ID不能为空"` - Age int `gvalid:"age@required#年龄不能为空"` - Username string `json:"username" gvalid:"username@required#用户名不能为空"` - Password string `json:"password" gvalid:"password@required#登录密码不能为空"` - } - user := &User{ - Id: 1, - Username: "john", - Password: "123456", - } - err := gvalid.CheckStruct(user, nil) - gtest.AssertNE(err, nil) - gtest.Assert(len(err.Maps()), 1) - gtest.Assert(err.Maps()["uid"]["min"], "ID不能为空") - }) - - // valid tag - gtest.Case(t, func() { - type User struct { - Id int `valid:"uid@required|min:10#|ID不能为空"` - Age int `valid:"age@required#年龄不能为空"` - Username string `json:"username" gvalid:"username@required#用户名不能为空"` - Password string `json:"password" gvalid:"password@required#登录密码不能为空"` - } - user := &User{ - Id: 1, - Username: "john", - Password: "123456", - } - err := gvalid.CheckStruct(user, nil) - gtest.AssertNE(err, nil) - gtest.Assert(len(err.Maps()), 1) - gtest.Assert(err.Maps()["uid"]["min"], "ID不能为空") - }) -} +// Copyright 2019 gf Author(https://github.com/gogf/gf). All Rights Reserved. +// +// This Source Code Form is subject to the terms of the MIT License. +// If a copy of the MIT was not distributed with this file, +// You can obtain one at https://github.com/gogf/gf. + +package gvalid_test + +import ( + "testing" + + "github.com/gogf/gf/g/test/gtest" + "github.com/gogf/gf/g/util/gvalid" +) + +func Test_CheckStruct(t *testing.T) { + gtest.Case(t, func() { + type Object struct { + Name string + Age int + } + rules := []string{ + "@required|length:6,16", + "@between:18,30", + } + msgs := map[string]interface{}{ + "Name": map[string]string{ + "required": "名称不能为空", + "length": "名称长度为:min到:max个字符", + }, + "Age": "年龄为18到30周岁", + } + obj := &Object{"john", 16} + err := gvalid.CheckStruct(obj, rules, msgs) + gtest.Assert(err, nil) + }) + + gtest.Case(t, func() { + type Object struct { + Name string + Age int + } + rules := []string{ + "Name@required|length:6,16#名称不能为空", + "Age@between:18,30", + } + msgs := map[string]interface{}{ + "Name": map[string]string{ + "required": "名称不能为空", + "length": "名称长度为:min到:max个字符", + }, + "Age": "年龄为18到30周岁", + } + obj := &Object{"john", 16} + err := gvalid.CheckStruct(obj, rules, msgs) + gtest.AssertNE(err, nil) + gtest.Assert(len(err.Maps()), 2) + gtest.Assert(err.Maps()["Name"]["required"], "") + gtest.Assert(err.Maps()["Name"]["length"], "名称长度为6到16个字符") + gtest.Assert(err.Maps()["Age"]["between"], "年龄为18到30周岁") + }) + + gtest.Case(t, func() { + type Object struct { + Name string + Age int + } + rules := []string{ + "Name@required|length:6,16#名称不能为空|", + "Age@between:18,30", + } + msgs := map[string]interface{}{ + "Name": map[string]string{ + "required": "名称不能为空", + "length": "名称长度为:min到:max个字符", + }, + "Age": "年龄为18到30周岁", + } + obj := &Object{"john", 16} + err := gvalid.CheckStruct(obj, rules, msgs) + gtest.AssertNE(err, nil) + gtest.Assert(len(err.Maps()), 2) + gtest.Assert(err.Maps()["Name"]["required"], "") + gtest.Assert(err.Maps()["Name"]["length"], "名称长度为6到16个字符") + gtest.Assert(err.Maps()["Age"]["between"], "年龄为18到30周岁") + }) + + gtest.Case(t, func() { + type Object struct { + Name string + Age int + } + rules := map[string]string{ + "Name": "required|length:6,16", + "Age": "between:18,30", + } + msgs := map[string]interface{}{ + "Name": map[string]string{ + "required": "名称不能为空", + "length": "名称长度为:min到:max个字符", + }, + "Age": "年龄为18到30周岁", + } + obj := &Object{"john", 16} + err := gvalid.CheckStruct(obj, rules, msgs) + gtest.AssertNE(err, nil) + gtest.Assert(len(err.Maps()), 2) + gtest.Assert(err.Maps()["Name"]["required"], "") + gtest.Assert(err.Maps()["Name"]["length"], "名称长度为6到16个字符") + gtest.Assert(err.Maps()["Age"]["between"], "年龄为18到30周岁") + }) + + gtest.Case(t, func() { + type LoginRequest struct { + Username string `json:"username" gvalid:"username@required#用户名不能为空"` + Password string `json:"password" gvalid:"password@required#登录密码不能为空"` + } + var login LoginRequest + err := gvalid.CheckStruct(login, nil) + gtest.AssertNE(err, nil) + gtest.Assert(len(err.Maps()), 2) + gtest.Assert(err.Maps()["username"]["required"], "用户名不能为空") + gtest.Assert(err.Maps()["password"]["required"], "登录密码不能为空") + }) + + gtest.Case(t, func() { + type LoginRequest struct { + Username string `json:"username" gvalid:"@required#用户名不能为空"` + Password string `json:"password" gvalid:"@required#登录密码不能为空"` + } + var login LoginRequest + err := gvalid.CheckStruct(login, nil) + gtest.Assert(err, nil) + }) + + gtest.Case(t, func() { + type LoginRequest struct { + username string `json:"username" gvalid:"username@required#用户名不能为空"` + Password string `json:"password" gvalid:"password@required#登录密码不能为空"` + } + var login LoginRequest + err := gvalid.CheckStruct(login, nil) + gtest.AssertNE(err, nil) + gtest.Assert(err.Maps()["password"]["required"], "登录密码不能为空") + }) + + // gvalid tag + gtest.Case(t, func() { + type User struct { + Id int `gvalid:"uid@required|min:10#|ID不能为空"` + Age int `gvalid:"age@required#年龄不能为空"` + Username string `json:"username" gvalid:"username@required#用户名不能为空"` + Password string `json:"password" gvalid:"password@required#登录密码不能为空"` + } + user := &User{ + Id: 1, + Username: "john", + Password: "123456", + } + err := gvalid.CheckStruct(user, nil) + gtest.AssertNE(err, nil) + gtest.Assert(len(err.Maps()), 1) + gtest.Assert(err.Maps()["uid"]["min"], "ID不能为空") + }) + + gtest.Case(t, func() { + type User struct { + Id int `gvalid:"uid@required|min:10#|ID不能为空"` + Age int `gvalid:"age@required#年龄不能为空"` + Username string `json:"username" gvalid:"username@required#用户名不能为空"` + Password string `json:"password" gvalid:"password@required#登录密码不能为空"` + } + user := &User{ + Id: 1, + Username: "john", + Password: "123456", + } + + rules := []string{ + "username@required#用户名不能为空", + } + + err := gvalid.CheckStruct(user, rules) + gtest.AssertNE(err, nil) + gtest.Assert(len(err.Maps()), 1) + gtest.Assert(err.Maps()["uid"]["min"], "ID不能为空") + }) + + gtest.Case(t, func() { + type User struct { + Id int `gvalid:"uid@required|min:10#ID不能为空"` + Age int `gvalid:"age@required#年龄不能为空"` + Username string `json:"username" gvalid:"username@required#用户名不能为空"` + Password string `json:"password" gvalid:"password@required#登录密码不能为空"` + } + user := &User{ + Id: 1, + Username: "john", + Password: "123456", + } + err := gvalid.CheckStruct(user, nil) + gtest.AssertNE(err, nil) + gtest.Assert(len(err.Maps()), 1) + }) + + // valid tag + gtest.Case(t, func() { + type User struct { + Id int `valid:"uid@required|min:10#|ID不能为空"` + Age int `valid:"age@required#年龄不能为空"` + Username string `json:"username" gvalid:"username@required#用户名不能为空"` + Password string `json:"password" gvalid:"password@required#登录密码不能为空"` + } + user := &User{ + Id: 1, + Username: "john", + Password: "123456", + } + err := gvalid.CheckStruct(user, nil) + gtest.AssertNE(err, nil) + gtest.Assert(len(err.Maps()), 1) + gtest.Assert(err.Maps()["uid"]["min"], "ID不能为空") + }) +} diff --git a/g/util/gvalid/gvalid_unit_customerror_test.go b/g/util/gvalid/gvalid_unit_customerror_test.go old mode 100644 new mode 100755 index e6c7bf3fc..26f512552 --- a/g/util/gvalid/gvalid_unit_customerror_test.go +++ b/g/util/gvalid/gvalid_unit_customerror_test.go @@ -1,80 +1,94 @@ -// Copyright 2019 gf Author(https://github.com/gogf/gf). All Rights Reserved. -// -// This Source Code Form is subject to the terms of the MIT License. -// If a copy of the MIT was not distributed with this file, -// You can obtain one at https://github.com/gogf/gf. - -package gvalid_test - -import ( - "github.com/gogf/gf/g/util/gvalid" - "strings" - "testing" -) - -func Test_SetDefaultErrorMsgs(t *testing.T) { - rule := "integer|length:6,16" - msgs := map[string]string{ - "integer": "请输入一个整数", - "length": "参数长度不对啊老铁", - } - gvalid.SetDefaultErrorMsgs(msgs) - e := gvalid.Check("6.66", rule, nil) - if e == nil || len(e.Map()) != 2 { - t.Error("规则校验失败") - } else { - if v, ok := e.Map()["integer"]; ok { - if strings.Compare(v, msgs["integer"]) != 0 { - t.Error("错误信息不匹配") - } - } - if v, ok := e.Map()["length"]; ok { - if strings.Compare(v, msgs["length"]) != 0 { - t.Error("错误信息不匹配") - } - } - } -} - -func Test_CustomError1(t *testing.T) { - rule := "integer|length:6,16" - msgs := map[string]string{ - "integer": "请输入一个整数", - "length": "参数长度不对啊老铁", - } - e := gvalid.Check("6.66", rule, msgs) - if e == nil || len(e.Map()) != 2 { - t.Error("规则校验失败") - } else { - if v, ok := e.Map()["integer"]; ok { - if strings.Compare(v, msgs["integer"]) != 0 { - t.Error("错误信息不匹配") - } - } - if v, ok := e.Map()["length"]; ok { - if strings.Compare(v, msgs["length"]) != 0 { - t.Error("错误信息不匹配") - } - } - } -} - -func Test_CustomError2(t *testing.T) { - rule := "integer|length:6,16" - msgs := "请输入一个整数|参数长度不对啊老铁" - e := gvalid.Check("6.66", rule, msgs) - if e == nil || len(e.Map()) != 2 { - t.Error("规则校验失败") - } else { - if v, ok := e.Map()["integer"]; ok { - if strings.Compare(v, "请输入一个整数") != 0 { - t.Error("错误信息不匹配") - } - } - if v, ok := e.Map()["length"]; ok { - if strings.Compare(v, "参数长度不对啊老铁") != 0 { - t.Error("错误信息不匹配") - } - } - } -} +// Copyright 2019 gf Author(https://github.com/gogf/gf). All Rights Reserved. +// +// This Source Code Form is subject to the terms of the MIT License. +// If a copy of the MIT was not distributed with this file, +// You can obtain one at https://github.com/gogf/gf. + +package gvalid_test + +import ( + "strings" + "testing" + + "github.com/gogf/gf/g/test/gtest" + "github.com/gogf/gf/g/util/gvalid" +) + +func Test_Map(t *testing.T) { + err := &gvalid.Error{} + m := err.Map() + gtest.Assert(m, nil) +} + +func Test_FirstString(t *testing.T) { + err := &gvalid.Error{} + n := err.FirstString() + gtest.Assert(n, "") +} + +func Test_SetDefaultErrorMsgs(t *testing.T) { + rule := "integer|length:6,16" + msgs := map[string]string{ + "integer": "请输入一个整数", + "length": "参数长度不对啊老铁", + } + gvalid.SetDefaultErrorMsgs(msgs) + e := gvalid.Check("6.66", rule, nil) + if e == nil || len(e.Map()) != 2 { + t.Error("规则校验失败") + } else { + if v, ok := e.Map()["integer"]; ok { + if strings.Compare(v, msgs["integer"]) != 0 { + t.Error("错误信息不匹配") + } + } + if v, ok := e.Map()["length"]; ok { + if strings.Compare(v, msgs["length"]) != 0 { + t.Error("错误信息不匹配") + } + } + } +} + +func Test_CustomError1(t *testing.T) { + rule := "integer|length:6,16" + msgs := map[string]string{ + "integer": "请输入一个整数", + "length": "参数长度不对啊老铁", + } + e := gvalid.Check("6.66", rule, msgs) + if e == nil || len(e.Map()) != 2 { + t.Error("规则校验失败") + } else { + if v, ok := e.Map()["integer"]; ok { + if strings.Compare(v, msgs["integer"]) != 0 { + t.Error("错误信息不匹配") + } + } + if v, ok := e.Map()["length"]; ok { + if strings.Compare(v, msgs["length"]) != 0 { + t.Error("错误信息不匹配") + } + } + } +} + +func Test_CustomError2(t *testing.T) { + rule := "integer|length:6,16" + msgs := "请输入一个整数|参数长度不对啊老铁" + e := gvalid.Check("6.66", rule, msgs) + if e == nil || len(e.Map()) != 2 { + t.Error("规则校验失败") + } else { + if v, ok := e.Map()["integer"]; ok { + if strings.Compare(v, "请输入一个整数") != 0 { + t.Error("错误信息不匹配") + } + } + if v, ok := e.Map()["length"]; ok { + if strings.Compare(v, "参数长度不对啊老铁") != 0 { + t.Error("错误信息不匹配") + } + } + } +} From 363dede57c5d85d5c497bfaa4c4d7571706a1ebc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=9B=BD=E6=BD=AE?= <2892931976@qq.com> Date: Thu, 4 Jul 2019 11:19:59 +0800 Subject: [PATCH 2/9] gvalid test 20190704 11:16 --- g/util/gvalid/gvalid_unit_basic_all_test.go | 1734 ++++++++--------- g/util/gvalid/gvalid_unit_checkmap_test.go | 364 ++-- g/util/gvalid/gvalid_unit_checkstruct_test.go | 448 ++--- g/util/gvalid/gvalid_unit_customerror_test.go | 188 +- 4 files changed, 1367 insertions(+), 1367 deletions(-) diff --git a/g/util/gvalid/gvalid_unit_basic_all_test.go b/g/util/gvalid/gvalid_unit_basic_all_test.go index dcd9e2c90..10731887a 100755 --- a/g/util/gvalid/gvalid_unit_basic_all_test.go +++ b/g/util/gvalid/gvalid_unit_basic_all_test.go @@ -1,867 +1,867 @@ -// Copyright 2017 gf Author(https://github.com/gogf/gf). All Rights Reserved. -// -// This Source Code Form is subject to the terms of the MIT License. -// If a copy of the MIT was not distributed with this file, -// You can obtain one at https://github.com/gogf/gf. - -package gvalid_test - -import ( - "testing" - - "github.com/gogf/gf/g" - "github.com/gogf/gf/g/test/gtest" - "github.com/gogf/gf/g/util/gvalid" -) - -func Test_Check(t *testing.T) { - - gtest.Case(t, func() { - rule := "abc:6,16" - val1 := 0 - val2 := 7 - val3 := 20 - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.AssertNE(err3, nil) - }) -} - -func Test_Required(t *testing.T) { - if m := gvalid.Check("1", "required", nil); m != nil { - t.Error(m) - } - if m := gvalid.Check("", "required", nil); m == nil { - t.Error(m) - } - if m := gvalid.Check("", "required-if:id,1,age,18", nil, map[string]interface{}{"id": 1, "age": 19}); m == nil { - t.Error("Required校验失败") - } - if m := gvalid.Check("", "required-if:id,1,age,18", nil, map[string]interface{}{"id": 2, "age": 19}); m != nil { - t.Error("Required校验失败") - } -} - -func Test_RequiredIf(t *testing.T) { - gtest.Case(t, func() { - rule := "required-if:100,200" - val1 := "" - val2 := "100" - val3 := "200" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - gtest.Assert(err1, nil) - gtest.Assert(err2, nil) - gtest.Assert(err3, nil) - }) -} - -func Test_RequiredUnless(t *testing.T) { - gtest.Case(t, func() { - rule := "required-unless:100,200" - val1 := "" - val2 := "100" - val3 := "200" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - gtest.AssertNE(err1, nil) - gtest.Assert(err2, nil) - gtest.Assert(err3, nil) - }) -} - -func Test_RequiredWith(t *testing.T) { - gtest.Case(t, func() { - rule := "required-with:id,name" - val1 := "" - params1 := g.Map{ - "age": 18, - } - params2 := g.Map{ - "id": 100, - } - params3 := g.Map{ - "id": 100, - "name": "john", - } - err1 := gvalid.Check(val1, rule, nil, params1) - err2 := gvalid.Check(val1, rule, nil, params2) - err3 := gvalid.Check(val1, rule, nil, params3) - gtest.Assert(err1, nil) - gtest.AssertNE(err2, nil) - gtest.AssertNE(err3, nil) - }) -} - -func Test_RequiredWithAll(t *testing.T) { - gtest.Case(t, func() { - rule := "required-with-all:id,name" - val1 := "" - params1 := g.Map{ - "age": 18, - } - params2 := g.Map{ - "id": 100, - } - params3 := g.Map{ - "id": 100, - "name": "john", - } - err1 := gvalid.Check(val1, rule, nil, params1) - err2 := gvalid.Check(val1, rule, nil, params2) - err3 := gvalid.Check(val1, rule, nil, params3) - gtest.Assert(err1, nil) - gtest.Assert(err2, nil) - gtest.AssertNE(err3, nil) - }) -} - -func Test_RequiredWithOut(t *testing.T) { - gtest.Case(t, func() { - rule := "required-without:id,name" - val1 := "" - params1 := g.Map{ - "age": 18, - } - params2 := g.Map{ - "id": 100, - } - params3 := g.Map{ - "id": 100, - "name": "john", - } - err1 := gvalid.Check(val1, rule, nil, params1) - err2 := gvalid.Check(val1, rule, nil, params2) - err3 := gvalid.Check(val1, rule, nil, params3) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.Assert(err3, nil) - }) -} - -func Test_RequiredWithOutAll(t *testing.T) { - gtest.Case(t, func() { - rule := "required-without-all:id,name" - val1 := "" - params1 := g.Map{ - "age": 18, - } - params2 := g.Map{ - "id": 100, - } - params3 := g.Map{ - "id": 100, - "name": "john", - } - err1 := gvalid.Check(val1, rule, nil, params1) - err2 := gvalid.Check(val1, rule, nil, params2) - err3 := gvalid.Check(val1, rule, nil, params3) - gtest.AssertNE(err1, nil) - gtest.Assert(err2, nil) - gtest.Assert(err3, nil) - }) -} - -func Test_Date(t *testing.T) { - gtest.Case(t, func() { - rule := "date" - val1 := "2010" - val2 := "201011" - val3 := "20101101" - val4 := "2010-11-01" - val5 := "2010.11.01" - val6 := "2010/11/01" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - err6 := gvalid.Check(val6, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - gtest.Assert(err5, nil) - gtest.Assert(err6, nil) - }) -} - -func Test_DateFormat(t *testing.T) { - gtest.Case(t, func() { - val1 := "2010" - val2 := "201011" - val3 := "2010.11" - val4 := "201011-01" - val5 := "2010~11~01" - val6 := "2010-11~01" - err1 := gvalid.Check(val1, "date-format:Y", nil) - err2 := gvalid.Check(val2, "date-format:Ym", nil) - err3 := gvalid.Check(val3, "date-format:Y.m", nil) - err4 := gvalid.Check(val4, "date-format:Ym-d", nil) - err5 := gvalid.Check(val5, "date-format:Y~m~d", nil) - err6 := gvalid.Check(val6, "date-format:Y~m~d", nil) - gtest.Assert(err1, nil) - gtest.Assert(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - gtest.Assert(err5, nil) - gtest.AssertNE(err6, nil) - }) -} - -func Test_Email(t *testing.T) { - gtest.Case(t, func() { - rule := "email" - value1 := "m@johngcn" - value2 := "m@www@johngcn" - value3 := "m-m_m@mail.johng.cn" - value4 := "m.m-m@johng.cn" - err1 := gvalid.Check(value1, rule, nil) - err2 := gvalid.Check(value2, rule, nil) - err3 := gvalid.Check(value3, rule, nil) - err4 := gvalid.Check(value4, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - }) -} - -func Test_Phone(t *testing.T) { - gtest.Case(t, func() { - err1 := gvalid.Check("1361990897", "phone", nil) - err2 := gvalid.Check("13619908979", "phone", nil) - err3 := gvalid.Check("16719908979", "phone", nil) - err4 := gvalid.Check("19719908989", "phone", nil) - gtest.AssertNE(err1, nil) - gtest.Assert(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - }) -} - -func Test_Telephone(t *testing.T) { - gtest.Case(t, func() { - rule := "telephone" - val1 := "869265" - val2 := "028-869265" - val3 := "86292651" - val4 := "028-8692651" - val5 := "0830-8692651" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - gtest.Assert(err5, nil) - }) -} - -func Test_Passport(t *testing.T) { - gtest.Case(t, func() { - rule := "passport" - val1 := "123456" - val2 := "a12345-6" - val3 := "aaaaa" - val4 := "aaaaaa" - val5 := "a123_456" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.AssertNE(err3, nil) - gtest.Assert(err4, nil) - gtest.Assert(err5, nil) - }) -} - -func Test_Password(t *testing.T) { - gtest.Case(t, func() { - rule := "password" - val1 := "12345" - val2 := "aaaaa" - val3 := "a12345-6" - val4 := ">,/;'[09-" - val5 := "a123_456" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - gtest.Assert(err5, nil) - }) -} - -func Test_Password2(t *testing.T) { - gtest.Case(t, func() { - rule := "password2" - val1 := "12345" - val2 := "Naaaa" - val3 := "a12345-6" - val4 := ">,/;'[09-" - val5 := "a123_456" - val6 := "Nant1986" - val7 := "Nant1986!" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - err6 := gvalid.Check(val6, rule, nil) - err7 := gvalid.Check(val7, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.AssertNE(err3, nil) - gtest.AssertNE(err4, nil) - gtest.AssertNE(err5, nil) - gtest.Assert(err6, nil) - gtest.Assert(err7, nil) - }) -} - -func Test_Password3(t *testing.T) { - gtest.Case(t, func() { - rule := "password3" - val1 := "12345" - val2 := "Naaaa" - val3 := "a12345-6" - val4 := ">,/;'[09-" - val5 := "a123_456" - val6 := "Nant1986" - val7 := "Nant1986!" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - err6 := gvalid.Check(val6, rule, nil) - err7 := gvalid.Check(val7, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.AssertNE(err3, nil) - gtest.AssertNE(err4, nil) - gtest.AssertNE(err5, nil) - gtest.AssertNE(err6, nil) - gtest.Assert(err7, nil) - }) -} - -func Test_Postcode(t *testing.T) { - gtest.Case(t, func() { - rule := "postcode" - val1 := "12345" - val2 := "610036" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - gtest.AssertNE(err1, nil) - gtest.Assert(err2, nil) - }) -} - -func Test_IDNumber(t *testing.T) { - gtest.Case(t, func() { - rule := "id-number" - val1 := "11111111111111" - val2 := "1111111111111111" - val3 := "311128500121201" - val4 := "510521198607185367" - val5 := "51052119860718536x" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - gtest.Assert(err5, nil) - }) -} - -func Test_QQ(t *testing.T) { - gtest.Case(t, func() { - rule := "qq" - val1 := "100" - val2 := "1" - val3 := "10000" - val4 := "38996181" - val5 := "389961817" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - gtest.Assert(err5, nil) - }) -} - -func Test_Ip(t *testing.T) { - if m := gvalid.Check("10.0.0.1", "ip", nil); m != nil { - t.Error(m) - } - if m := gvalid.Check("10.0.0.1", "ipv4", nil); m != nil { - t.Error(m) - } - if m := gvalid.Check("0.0.0.0", "ipv4", nil); m != nil { - t.Error(m) - } - if m := gvalid.Check("1920.0.0.0", "ipv4", nil); m == nil { - t.Error("ipv4校验失败") - } - if m := gvalid.Check("1920.0.0.0", "ip", nil); m == nil { - t.Error("ipv4校验失败") - } - if m := gvalid.Check("fe80::5484:7aff:fefe:9799", "ipv6", nil); m != nil { - t.Error(m) - } - if m := gvalid.Check("fe80::5484:7aff:fefe:9799123", "ipv6", nil); m == nil { - t.Error(m) - } - if m := gvalid.Check("fe80::5484:7aff:fefe:9799", "ip", nil); m != nil { - t.Error(m) - } - if m := gvalid.Check("fe80::5484:7aff:fefe:9799123", "ip", nil); m == nil { - t.Error(m) - } -} - -func Test_IPv4(t *testing.T) { - gtest.Case(t, func() { - rule := "ipv4" - val1 := "0.0.0" - val2 := "0.0.0.0" - val3 := "1.1.1.1" - val4 := "255.255.255.0" - val5 := "127.0.0.1" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - gtest.AssertNE(err1, nil) - gtest.Assert(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - gtest.Assert(err5, nil) - }) -} - -func Test_IPv6(t *testing.T) { - gtest.Case(t, func() { - rule := "ipv6" - val1 := "192.168.1.1" - val2 := "CDCD:910A:2222:5498:8475:1111:3900:2020" - 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.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - gtest.AssertNE(err1, nil) - gtest.Assert(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - gtest.Assert(err5, nil) - }) -} - -func Test_MAC(t *testing.T) { - gtest.Case(t, func() { - rule := "mac" - val1 := "192.168.1.1" - val2 := "44-45-53-54-00-00" - val3 := "01:00:5e:00:00:00" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - gtest.AssertNE(err1, nil) - gtest.Assert(err2, nil) - gtest.Assert(err3, nil) - }) -} - -func Test_URL(t *testing.T) { - gtest.Case(t, func() { - rule := "url" - val1 := "127.0.0.1" - val2 := "https://www.baidu.com" - val3 := "http://127.0.0.1" - val4 := "file:///tmp/test.txt" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - gtest.AssertNE(err1, nil) - gtest.Assert(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - }) -} - -func Test_Domain(t *testing.T) { - gtest.Case(t, func() { - rule := "domain" - val1 := "localhost" - val2 := "baidu.com" - val3 := "www.baidu.com" - val4 := "jn.np" - val5 := "www.jn.np" - val6 := "w.www.jn.np" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - err6 := gvalid.Check(val6, rule, nil) - gtest.AssertNE(err1, nil) - gtest.Assert(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - gtest.Assert(err5, nil) - gtest.Assert(err6, nil) - }) -} - -func Test_Length(t *testing.T) { - rule := "length:6,16" - if m := gvalid.Check("123456", rule, nil); m != nil { - t.Error(m) - } - if m := gvalid.Check("12345", rule, nil); m == nil { - t.Error("长度校验失败") - } -} - -func Test_MinLength(t *testing.T) { - rule := "min-length:6" - msgs := map[string]string{ - "min-length": "地址长度至少为:min位", - } - if m := gvalid.Check("123456", rule, nil); m != nil { - t.Error(m) - } - if m := gvalid.Check("12345", rule, nil); m == nil { - t.Error("长度校验失败") - } - if m := gvalid.Check("12345", rule, msgs); m == nil { - t.Error("长度校验失败") - } - - rule2 := "min-length:abc" - if m := gvalid.Check("123456", rule2, nil); m == nil { - t.Error("长度校验失败") - } -} - -func Test_MaxLength(t *testing.T) { - rule := "max-length:6" - msgs := map[string]string{ - "max-length": "地址长度至大为:max位", - } - if m := gvalid.Check("12345", rule, nil); m != nil { - t.Error(m) - } - if m := gvalid.Check("1234567", rule, nil); m == nil { - t.Error("长度校验失败") - } - if m := gvalid.Check("1234567", rule, msgs); m == nil { - t.Error("长度校验失败") - } - - rule2 := "max-length:abc" - if m := gvalid.Check("123456", rule2, nil); m == nil { - t.Error("长度校验失败") - } -} - -func Test_Between(t *testing.T) { - rule := "between:6.01, 10.01" - if m := gvalid.Check(10, rule, nil); m != nil { - t.Error(m) - } - if m := gvalid.Check(10.02, rule, nil); m == nil { - t.Error("大小范围校验失败") - } - if m := gvalid.Check("a", rule, nil); m == nil { - t.Error("大小范围校验失败") - } -} - -func Test_Min(t *testing.T) { - gtest.Case(t, func() { - rule := "min:100" - val1 := "1" - val2 := "99" - val3 := "100" - val4 := "1000" - val5 := "a" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - gtest.AssertNE(err5, nil) - - rule2 := "min:a" - err6 := gvalid.Check(val1, rule2, nil) - gtest.AssertNE(err6, nil) - }) -} - -func Test_Max(t *testing.T) { - gtest.Case(t, func() { - rule := "max:100" - val1 := "1" - val2 := "99" - val3 := "100" - val4 := "1000" - val5 := "a" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - gtest.Assert(err1, nil) - gtest.Assert(err2, nil) - gtest.Assert(err3, nil) - gtest.AssertNE(err4, nil) - gtest.AssertNE(err5, nil) - - rule2 := "max:a" - err6 := gvalid.Check(val1, rule2, nil) - gtest.AssertNE(err6, nil) - }) -} - -func Test_Json(t *testing.T) { - gtest.Case(t, func() { - rule := "json" - val1 := "" - val2 := "." - val3 := "{}" - val4 := "[]" - val5 := "[1,2,3,4]" - val6 := `{"list":[1,2,3,4]}` - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - err6 := gvalid.Check(val6, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - gtest.Assert(err5, nil) - gtest.Assert(err6, nil) - }) -} - -func Test_Integer(t *testing.T) { - gtest.Case(t, func() { - rule := "integer" - val1 := "" - val2 := "1.0" - val3 := "001" - val4 := "1" - val5 := "100" - val6 := `999999999` - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - err6 := gvalid.Check(val6, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - gtest.Assert(err5, nil) - gtest.Assert(err6, nil) - }) -} - -func Test_Float(t *testing.T) { - gtest.Case(t, func() { - rule := "float" - val1 := "" - val2 := "a" - val3 := "1" - val4 := "1.0" - val5 := "1.1" - val6 := `0.1` - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - err6 := gvalid.Check(val6, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - gtest.Assert(err5, nil) - gtest.Assert(err6, nil) - }) -} - -func Test_Boolean(t *testing.T) { - gtest.Case(t, func() { - rule := "boolean" - val1 := "a" - val2 := "-" - val3 := "" - val4 := "1" - val5 := "true" - val6 := `off` - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - err5 := gvalid.Check(val5, rule, nil) - err6 := gvalid.Check(val6, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - gtest.Assert(err5, nil) - gtest.Assert(err6, nil) - }) -} - -func Test_Same(t *testing.T) { - gtest.Case(t, func() { - rule := "same:id" - val1 := "100" - params1 := g.Map{ - "age": 18, - } - params2 := g.Map{ - "id": 100, - } - params3 := g.Map{ - "id": 100, - "name": "john", - } - err1 := gvalid.Check(val1, rule, nil, params1) - err2 := gvalid.Check(val1, rule, nil, params2) - err3 := gvalid.Check(val1, rule, nil, params3) - gtest.AssertNE(err1, nil) - gtest.Assert(err2, nil) - gtest.Assert(err3, nil) - }) -} - -func Test_Different(t *testing.T) { - gtest.Case(t, func() { - rule := "different:id" - val1 := "100" - params1 := g.Map{ - "age": 18, - } - params2 := g.Map{ - "id": 100, - } - params3 := g.Map{ - "id": 100, - "name": "john", - } - err1 := gvalid.Check(val1, rule, nil, params1) - err2 := gvalid.Check(val1, rule, nil, params2) - err3 := gvalid.Check(val1, rule, nil, params3) - gtest.Assert(err1, nil) - gtest.AssertNE(err2, nil) - gtest.AssertNE(err3, nil) - }) -} - -func Test_In(t *testing.T) { - gtest.Case(t, func() { - rule := "in:100,200" - val1 := "" - val2 := "1" - val3 := "100" - val4 := "200" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.Assert(err3, nil) - gtest.Assert(err4, nil) - }) -} - -func Test_NotIn(t *testing.T) { - gtest.Case(t, func() { - rule := "not-in:100,200" - val1 := "" - val2 := "1" - val3 := "100" - val4 := "200" - err1 := gvalid.Check(val1, rule, nil) - err2 := gvalid.Check(val2, rule, nil) - err3 := gvalid.Check(val3, rule, nil) - err4 := gvalid.Check(val4, rule, nil) - gtest.Assert(err1, nil) - gtest.Assert(err2, nil) - gtest.AssertNE(err3, nil) - gtest.AssertNE(err4, nil) - }) -} - -func Test_Regex1(t *testing.T) { - rule := `regex:\d{6}|\D{6}|length:6,16` - if m := gvalid.Check("123456", rule, nil); m != nil { - t.Error(m) - } - if m := gvalid.Check("abcde6", rule, nil); m == nil { - t.Error("校验失败") - } -} - -func Test_Regex2(t *testing.T) { - gtest.Case(t, func() { - rule := `required|min-length:6|regex:^data:image\/(jpeg|png);base64,` - str1 := "" - str2 := "data" - str3 := "data:image/jpeg;base64,/9jrbattq22r" - err1 := gvalid.Check(str1, rule, nil) - err2 := gvalid.Check(str2, rule, nil) - err3 := gvalid.Check(str3, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.Assert(err3, nil) - - gtest.AssertNE(err1.Map()["required"], nil) - gtest.AssertNE(err2.Map()["min-length"], nil) - }) -} +// Copyright 2017 gf Author(https://github.com/gogf/gf). All Rights Reserved. +// +// This Source Code Form is subject to the terms of the MIT License. +// If a copy of the MIT was not distributed with this file, +// You can obtain one at https://github.com/gogf/gf. + +package gvalid_test + +import ( + "testing" + + "github.com/gogf/gf/g" + "github.com/gogf/gf/g/test/gtest" + "github.com/gogf/gf/g/util/gvalid" +) + +func Test_Check(t *testing.T) { + + gtest.Case(t, func() { + rule := "abc:6,16" + val1 := 0 + val2 := 7 + val3 := 20 + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.AssertNE(err3, nil) + }) +} + +func Test_Required(t *testing.T) { + if m := gvalid.Check("1", "required", nil); m != nil { + t.Error(m) + } + if m := gvalid.Check("", "required", nil); m == nil { + t.Error(m) + } + if m := gvalid.Check("", "required-if:id,1,age,18", nil, map[string]interface{}{"id": 1, "age": 19}); m == nil { + t.Error("Required校验失败") + } + if m := gvalid.Check("", "required-if:id,1,age,18", nil, map[string]interface{}{"id": 2, "age": 19}); m != nil { + t.Error("Required校验失败") + } +} + +func Test_RequiredIf(t *testing.T) { + gtest.Case(t, func() { + rule := "required-if:100,200" + val1 := "" + val2 := "100" + val3 := "200" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + gtest.Assert(err1, nil) + gtest.Assert(err2, nil) + gtest.Assert(err3, nil) + }) +} + +func Test_RequiredUnless(t *testing.T) { + gtest.Case(t, func() { + rule := "required-unless:100,200" + val1 := "" + val2 := "100" + val3 := "200" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + gtest.AssertNE(err1, nil) + gtest.Assert(err2, nil) + gtest.Assert(err3, nil) + }) +} + +func Test_RequiredWith(t *testing.T) { + gtest.Case(t, func() { + rule := "required-with:id,name" + val1 := "" + params1 := g.Map{ + "age": 18, + } + params2 := g.Map{ + "id": 100, + } + params3 := g.Map{ + "id": 100, + "name": "john", + } + err1 := gvalid.Check(val1, rule, nil, params1) + err2 := gvalid.Check(val1, rule, nil, params2) + err3 := gvalid.Check(val1, rule, nil, params3) + gtest.Assert(err1, nil) + gtest.AssertNE(err2, nil) + gtest.AssertNE(err3, nil) + }) +} + +func Test_RequiredWithAll(t *testing.T) { + gtest.Case(t, func() { + rule := "required-with-all:id,name" + val1 := "" + params1 := g.Map{ + "age": 18, + } + params2 := g.Map{ + "id": 100, + } + params3 := g.Map{ + "id": 100, + "name": "john", + } + err1 := gvalid.Check(val1, rule, nil, params1) + err2 := gvalid.Check(val1, rule, nil, params2) + err3 := gvalid.Check(val1, rule, nil, params3) + gtest.Assert(err1, nil) + gtest.Assert(err2, nil) + gtest.AssertNE(err3, nil) + }) +} + +func Test_RequiredWithOut(t *testing.T) { + gtest.Case(t, func() { + rule := "required-without:id,name" + val1 := "" + params1 := g.Map{ + "age": 18, + } + params2 := g.Map{ + "id": 100, + } + params3 := g.Map{ + "id": 100, + "name": "john", + } + err1 := gvalid.Check(val1, rule, nil, params1) + err2 := gvalid.Check(val1, rule, nil, params2) + err3 := gvalid.Check(val1, rule, nil, params3) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.Assert(err3, nil) + }) +} + +func Test_RequiredWithOutAll(t *testing.T) { + gtest.Case(t, func() { + rule := "required-without-all:id,name" + val1 := "" + params1 := g.Map{ + "age": 18, + } + params2 := g.Map{ + "id": 100, + } + params3 := g.Map{ + "id": 100, + "name": "john", + } + err1 := gvalid.Check(val1, rule, nil, params1) + err2 := gvalid.Check(val1, rule, nil, params2) + err3 := gvalid.Check(val1, rule, nil, params3) + gtest.AssertNE(err1, nil) + gtest.Assert(err2, nil) + gtest.Assert(err3, nil) + }) +} + +func Test_Date(t *testing.T) { + gtest.Case(t, func() { + rule := "date" + val1 := "2010" + val2 := "201011" + val3 := "20101101" + val4 := "2010-11-01" + val5 := "2010.11.01" + val6 := "2010/11/01" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + err6 := gvalid.Check(val6, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + gtest.Assert(err5, nil) + gtest.Assert(err6, nil) + }) +} + +func Test_DateFormat(t *testing.T) { + gtest.Case(t, func() { + val1 := "2010" + val2 := "201011" + val3 := "2010.11" + val4 := "201011-01" + val5 := "2010~11~01" + val6 := "2010-11~01" + err1 := gvalid.Check(val1, "date-format:Y", nil) + err2 := gvalid.Check(val2, "date-format:Ym", nil) + err3 := gvalid.Check(val3, "date-format:Y.m", nil) + err4 := gvalid.Check(val4, "date-format:Ym-d", nil) + err5 := gvalid.Check(val5, "date-format:Y~m~d", nil) + err6 := gvalid.Check(val6, "date-format:Y~m~d", nil) + gtest.Assert(err1, nil) + gtest.Assert(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + gtest.Assert(err5, nil) + gtest.AssertNE(err6, nil) + }) +} + +func Test_Email(t *testing.T) { + gtest.Case(t, func() { + rule := "email" + value1 := "m@johngcn" + value2 := "m@www@johngcn" + value3 := "m-m_m@mail.johng.cn" + value4 := "m.m-m@johng.cn" + err1 := gvalid.Check(value1, rule, nil) + err2 := gvalid.Check(value2, rule, nil) + err3 := gvalid.Check(value3, rule, nil) + err4 := gvalid.Check(value4, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + }) +} + +func Test_Phone(t *testing.T) { + gtest.Case(t, func() { + err1 := gvalid.Check("1361990897", "phone", nil) + err2 := gvalid.Check("13619908979", "phone", nil) + err3 := gvalid.Check("16719908979", "phone", nil) + err4 := gvalid.Check("19719908989", "phone", nil) + gtest.AssertNE(err1, nil) + gtest.Assert(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + }) +} + +func Test_Telephone(t *testing.T) { + gtest.Case(t, func() { + rule := "telephone" + val1 := "869265" + val2 := "028-869265" + val3 := "86292651" + val4 := "028-8692651" + val5 := "0830-8692651" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + gtest.Assert(err5, nil) + }) +} + +func Test_Passport(t *testing.T) { + gtest.Case(t, func() { + rule := "passport" + val1 := "123456" + val2 := "a12345-6" + val3 := "aaaaa" + val4 := "aaaaaa" + val5 := "a123_456" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.AssertNE(err3, nil) + gtest.Assert(err4, nil) + gtest.Assert(err5, nil) + }) +} + +func Test_Password(t *testing.T) { + gtest.Case(t, func() { + rule := "password" + val1 := "12345" + val2 := "aaaaa" + val3 := "a12345-6" + val4 := ">,/;'[09-" + val5 := "a123_456" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + gtest.Assert(err5, nil) + }) +} + +func Test_Password2(t *testing.T) { + gtest.Case(t, func() { + rule := "password2" + val1 := "12345" + val2 := "Naaaa" + val3 := "a12345-6" + val4 := ">,/;'[09-" + val5 := "a123_456" + val6 := "Nant1986" + val7 := "Nant1986!" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + err6 := gvalid.Check(val6, rule, nil) + err7 := gvalid.Check(val7, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.AssertNE(err3, nil) + gtest.AssertNE(err4, nil) + gtest.AssertNE(err5, nil) + gtest.Assert(err6, nil) + gtest.Assert(err7, nil) + }) +} + +func Test_Password3(t *testing.T) { + gtest.Case(t, func() { + rule := "password3" + val1 := "12345" + val2 := "Naaaa" + val3 := "a12345-6" + val4 := ">,/;'[09-" + val5 := "a123_456" + val6 := "Nant1986" + val7 := "Nant1986!" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + err6 := gvalid.Check(val6, rule, nil) + err7 := gvalid.Check(val7, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.AssertNE(err3, nil) + gtest.AssertNE(err4, nil) + gtest.AssertNE(err5, nil) + gtest.AssertNE(err6, nil) + gtest.Assert(err7, nil) + }) +} + +func Test_Postcode(t *testing.T) { + gtest.Case(t, func() { + rule := "postcode" + val1 := "12345" + val2 := "610036" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + gtest.AssertNE(err1, nil) + gtest.Assert(err2, nil) + }) +} + +func Test_IDNumber(t *testing.T) { + gtest.Case(t, func() { + rule := "id-number" + val1 := "11111111111111" + val2 := "1111111111111111" + val3 := "311128500121201" + val4 := "510521198607185367" + val5 := "51052119860718536x" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + gtest.Assert(err5, nil) + }) +} + +func Test_QQ(t *testing.T) { + gtest.Case(t, func() { + rule := "qq" + val1 := "100" + val2 := "1" + val3 := "10000" + val4 := "38996181" + val5 := "389961817" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + gtest.Assert(err5, nil) + }) +} + +func Test_Ip(t *testing.T) { + if m := gvalid.Check("10.0.0.1", "ip", nil); m != nil { + t.Error(m) + } + if m := gvalid.Check("10.0.0.1", "ipv4", nil); m != nil { + t.Error(m) + } + if m := gvalid.Check("0.0.0.0", "ipv4", nil); m != nil { + t.Error(m) + } + if m := gvalid.Check("1920.0.0.0", "ipv4", nil); m == nil { + t.Error("ipv4校验失败") + } + if m := gvalid.Check("1920.0.0.0", "ip", nil); m == nil { + t.Error("ipv4校验失败") + } + if m := gvalid.Check("fe80::5484:7aff:fefe:9799", "ipv6", nil); m != nil { + t.Error(m) + } + if m := gvalid.Check("fe80::5484:7aff:fefe:9799123", "ipv6", nil); m == nil { + t.Error(m) + } + if m := gvalid.Check("fe80::5484:7aff:fefe:9799", "ip", nil); m != nil { + t.Error(m) + } + if m := gvalid.Check("fe80::5484:7aff:fefe:9799123", "ip", nil); m == nil { + t.Error(m) + } +} + +func Test_IPv4(t *testing.T) { + gtest.Case(t, func() { + rule := "ipv4" + val1 := "0.0.0" + val2 := "0.0.0.0" + val3 := "1.1.1.1" + val4 := "255.255.255.0" + val5 := "127.0.0.1" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + gtest.AssertNE(err1, nil) + gtest.Assert(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + gtest.Assert(err5, nil) + }) +} + +func Test_IPv6(t *testing.T) { + gtest.Case(t, func() { + rule := "ipv6" + val1 := "192.168.1.1" + val2 := "CDCD:910A:2222:5498:8475:1111:3900:2020" + 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.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + gtest.AssertNE(err1, nil) + gtest.Assert(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + gtest.Assert(err5, nil) + }) +} + +func Test_MAC(t *testing.T) { + gtest.Case(t, func() { + rule := "mac" + val1 := "192.168.1.1" + val2 := "44-45-53-54-00-00" + val3 := "01:00:5e:00:00:00" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + gtest.AssertNE(err1, nil) + gtest.Assert(err2, nil) + gtest.Assert(err3, nil) + }) +} + +func Test_URL(t *testing.T) { + gtest.Case(t, func() { + rule := "url" + val1 := "127.0.0.1" + val2 := "https://www.baidu.com" + val3 := "http://127.0.0.1" + val4 := "file:///tmp/test.txt" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + gtest.AssertNE(err1, nil) + gtest.Assert(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + }) +} + +func Test_Domain(t *testing.T) { + gtest.Case(t, func() { + rule := "domain" + val1 := "localhost" + val2 := "baidu.com" + val3 := "www.baidu.com" + val4 := "jn.np" + val5 := "www.jn.np" + val6 := "w.www.jn.np" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + err6 := gvalid.Check(val6, rule, nil) + gtest.AssertNE(err1, nil) + gtest.Assert(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + gtest.Assert(err5, nil) + gtest.Assert(err6, nil) + }) +} + +func Test_Length(t *testing.T) { + rule := "length:6,16" + if m := gvalid.Check("123456", rule, nil); m != nil { + t.Error(m) + } + if m := gvalid.Check("12345", rule, nil); m == nil { + t.Error("长度校验失败") + } +} + +func Test_MinLength(t *testing.T) { + rule := "min-length:6" + msgs := map[string]string{ + "min-length": "地址长度至少为:min位", + } + if m := gvalid.Check("123456", rule, nil); m != nil { + t.Error(m) + } + if m := gvalid.Check("12345", rule, nil); m == nil { + t.Error("长度校验失败") + } + if m := gvalid.Check("12345", rule, msgs); m == nil { + t.Error("长度校验失败") + } + + rule2 := "min-length:abc" + if m := gvalid.Check("123456", rule2, nil); m == nil { + t.Error("长度校验失败") + } +} + +func Test_MaxLength(t *testing.T) { + rule := "max-length:6" + msgs := map[string]string{ + "max-length": "地址长度至大为:max位", + } + if m := gvalid.Check("12345", rule, nil); m != nil { + t.Error(m) + } + if m := gvalid.Check("1234567", rule, nil); m == nil { + t.Error("长度校验失败") + } + if m := gvalid.Check("1234567", rule, msgs); m == nil { + t.Error("长度校验失败") + } + + rule2 := "max-length:abc" + if m := gvalid.Check("123456", rule2, nil); m == nil { + t.Error("长度校验失败") + } +} + +func Test_Between(t *testing.T) { + rule := "between:6.01, 10.01" + if m := gvalid.Check(10, rule, nil); m != nil { + t.Error(m) + } + if m := gvalid.Check(10.02, rule, nil); m == nil { + t.Error("大小范围校验失败") + } + if m := gvalid.Check("a", rule, nil); m == nil { + t.Error("大小范围校验失败") + } +} + +func Test_Min(t *testing.T) { + gtest.Case(t, func() { + rule := "min:100" + val1 := "1" + val2 := "99" + val3 := "100" + val4 := "1000" + val5 := "a" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + gtest.AssertNE(err5, nil) + + rule2 := "min:a" + err6 := gvalid.Check(val1, rule2, nil) + gtest.AssertNE(err6, nil) + }) +} + +func Test_Max(t *testing.T) { + gtest.Case(t, func() { + rule := "max:100" + val1 := "1" + val2 := "99" + val3 := "100" + val4 := "1000" + val5 := "a" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + gtest.Assert(err1, nil) + gtest.Assert(err2, nil) + gtest.Assert(err3, nil) + gtest.AssertNE(err4, nil) + gtest.AssertNE(err5, nil) + + rule2 := "max:a" + err6 := gvalid.Check(val1, rule2, nil) + gtest.AssertNE(err6, nil) + }) +} + +func Test_Json(t *testing.T) { + gtest.Case(t, func() { + rule := "json" + val1 := "" + val2 := "." + val3 := "{}" + val4 := "[]" + val5 := "[1,2,3,4]" + val6 := `{"list":[1,2,3,4]}` + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + err6 := gvalid.Check(val6, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + gtest.Assert(err5, nil) + gtest.Assert(err6, nil) + }) +} + +func Test_Integer(t *testing.T) { + gtest.Case(t, func() { + rule := "integer" + val1 := "" + val2 := "1.0" + val3 := "001" + val4 := "1" + val5 := "100" + val6 := `999999999` + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + err6 := gvalid.Check(val6, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + gtest.Assert(err5, nil) + gtest.Assert(err6, nil) + }) +} + +func Test_Float(t *testing.T) { + gtest.Case(t, func() { + rule := "float" + val1 := "" + val2 := "a" + val3 := "1" + val4 := "1.0" + val5 := "1.1" + val6 := `0.1` + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + err6 := gvalid.Check(val6, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + gtest.Assert(err5, nil) + gtest.Assert(err6, nil) + }) +} + +func Test_Boolean(t *testing.T) { + gtest.Case(t, func() { + rule := "boolean" + val1 := "a" + val2 := "-" + val3 := "" + val4 := "1" + val5 := "true" + val6 := `off` + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + err5 := gvalid.Check(val5, rule, nil) + err6 := gvalid.Check(val6, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + gtest.Assert(err5, nil) + gtest.Assert(err6, nil) + }) +} + +func Test_Same(t *testing.T) { + gtest.Case(t, func() { + rule := "same:id" + val1 := "100" + params1 := g.Map{ + "age": 18, + } + params2 := g.Map{ + "id": 100, + } + params3 := g.Map{ + "id": 100, + "name": "john", + } + err1 := gvalid.Check(val1, rule, nil, params1) + err2 := gvalid.Check(val1, rule, nil, params2) + err3 := gvalid.Check(val1, rule, nil, params3) + gtest.AssertNE(err1, nil) + gtest.Assert(err2, nil) + gtest.Assert(err3, nil) + }) +} + +func Test_Different(t *testing.T) { + gtest.Case(t, func() { + rule := "different:id" + val1 := "100" + params1 := g.Map{ + "age": 18, + } + params2 := g.Map{ + "id": 100, + } + params3 := g.Map{ + "id": 100, + "name": "john", + } + err1 := gvalid.Check(val1, rule, nil, params1) + err2 := gvalid.Check(val1, rule, nil, params2) + err3 := gvalid.Check(val1, rule, nil, params3) + gtest.Assert(err1, nil) + gtest.AssertNE(err2, nil) + gtest.AssertNE(err3, nil) + }) +} + +func Test_In(t *testing.T) { + gtest.Case(t, func() { + rule := "in:100,200" + val1 := "" + val2 := "1" + val3 := "100" + val4 := "200" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.Assert(err3, nil) + gtest.Assert(err4, nil) + }) +} + +func Test_NotIn(t *testing.T) { + gtest.Case(t, func() { + rule := "not-in:100,200" + val1 := "" + val2 := "1" + val3 := "100" + val4 := "200" + err1 := gvalid.Check(val1, rule, nil) + err2 := gvalid.Check(val2, rule, nil) + err3 := gvalid.Check(val3, rule, nil) + err4 := gvalid.Check(val4, rule, nil) + gtest.Assert(err1, nil) + gtest.Assert(err2, nil) + gtest.AssertNE(err3, nil) + gtest.AssertNE(err4, nil) + }) +} + +func Test_Regex1(t *testing.T) { + rule := `regex:\d{6}|\D{6}|length:6,16` + if m := gvalid.Check("123456", rule, nil); m != nil { + t.Error(m) + } + if m := gvalid.Check("abcde6", rule, nil); m == nil { + t.Error("校验失败") + } +} + +func Test_Regex2(t *testing.T) { + gtest.Case(t, func() { + rule := `required|min-length:6|regex:^data:image\/(jpeg|png);base64,` + str1 := "" + str2 := "data" + str3 := "data:image/jpeg;base64,/9jrbattq22r" + err1 := gvalid.Check(str1, rule, nil) + err2 := gvalid.Check(str2, rule, nil) + err3 := gvalid.Check(str3, rule, nil) + gtest.AssertNE(err1, nil) + gtest.AssertNE(err2, nil) + gtest.Assert(err3, nil) + + gtest.AssertNE(err1.Map()["required"], nil) + gtest.AssertNE(err2.Map()["min-length"], nil) + }) +} diff --git a/g/util/gvalid/gvalid_unit_checkmap_test.go b/g/util/gvalid/gvalid_unit_checkmap_test.go index 009d72bc3..05b519d94 100755 --- a/g/util/gvalid/gvalid_unit_checkmap_test.go +++ b/g/util/gvalid/gvalid_unit_checkmap_test.go @@ -1,182 +1,182 @@ -// Copyright 2019 gf Author(https://github.com/gogf/gf). All Rights Reserved. -// -// This Source Code Form is subject to the terms of the MIT License. -// If a copy of the MIT was not distributed with this file, -// You can obtain one at https://github.com/gogf/gf. - -package gvalid_test - -import ( - "testing" - - "github.com/gogf/gf/g/test/gtest" - "github.com/gogf/gf/g/util/gvalid" -) - -func Test_CheckMap(t *testing.T) { - - var params interface{} - if m := gvalid.CheckMap(params, nil, nil); m == nil { - t.Error("CheckMap校验失败") - } - - kvmap := map[string]interface{}{ - "id": "0", - "name": "john", - } - rules := map[string]string{ - "id": "required|between:1,100", - "name": "required|length:6,16", - } - msgs := gvalid.CustomMsg{ - "id": "ID不能为空|ID范围应当为:min到:max", - "name": map[string]string{ - "required": "名称不能为空", - "length": "名称长度为:min到:max个字符", - }, - } - if m := gvalid.CheckMap(kvmap, rules, msgs); m == nil { - t.Error("CheckMap校验失败") - } - - kvmap = map[string]interface{}{ - "id": "1", - "name": "john", - } - rules = map[string]string{ - "id": "required|between:1,100", - "name": "required|length:4,16", - } - msgs = map[string]interface{}{ - "id": "ID不能为空|ID范围应当为:min到:max", - "name": map[string]string{ - "required": "名称不能为空", - "length": "名称长度为:min到:max个字符", - }, - } - if m := gvalid.CheckMap(kvmap, rules, msgs); m != nil { - t.Error(m) - } - - kvmap = map[string]interface{}{ - "id": "1", - "name": "john", - } - rules = map[string]string{ - "id": "", - "name": "", - } - msgs = map[string]interface{}{ - "id": "ID不能为空|ID范围应当为:min到:max", - "name": map[string]string{ - "required": "名称不能为空", - "length": "名称长度为:min到:max个字符", - }, - } - if m := gvalid.CheckMap(kvmap, rules, msgs); m != nil { - t.Error(m) - } - - kvmap = map[string]interface{}{ - "id": "1", - "name": "john", - } - rules2 := []string{ - "@required|between:1,100", - "@required|length:4,16", - } - msgs = map[string]interface{}{ - "id": "ID不能为空|ID范围应当为:min到:max", - "name": map[string]string{ - "required": "名称不能为空", - "length": "名称长度为:min到:max个字符", - }, - } - if m := gvalid.CheckMap(kvmap, rules2, msgs); m != nil { - t.Error(m) - } - - kvmap = map[string]interface{}{ - "id": "1", - "name": "john", - } - rules2 = []string{ - "id@required|between:1,100", - "name@required|length:4,16#名称不能为空|", - } - msgs = map[string]interface{}{ - "id": "ID不能为空|ID范围应当为:min到:max", - "name": map[string]string{ - "required": "名称不能为空", - "length": "名称长度为:min到:max个字符", - }, - } - if m := gvalid.CheckMap(kvmap, rules2, msgs); m != nil { - t.Error(m) - } - - kvmap = map[string]interface{}{ - "id": "1", - "name": "john", - } - rules2 = []string{ - "id@required|between:1,100", - "name@required|length:4,16#名称不能为空", - } - msgs = map[string]interface{}{ - "id": "ID不能为空|ID范围应当为:min到:max", - "name": map[string]string{ - "required": "名称不能为空", - "length": "名称长度为:min到:max个字符", - }, - } - if m := gvalid.CheckMap(kvmap, rules2, msgs); m != nil { - t.Error(m) - } -} - -// 如果值为nil,并且不需要require*验证时,其他验证失效 -func Test_CheckMapWithNilAndNotRequiredField(t *testing.T) { - data := map[string]interface{}{ - "id": "1", - } - rules := map[string]string{ - "id": "required", - "name": "length:4,16", - } - if m := gvalid.CheckMap(data, rules); m != nil { - t.Error(m) - } -} - -func Test_Sequence(t *testing.T) { - gtest.Case(t, func() { - params := map[string]interface{}{ - "passport": "", - "password": "123456", - "password2": "1234567", - } - rules := []string{ - "passport@required|length:6,16#账号不能为空|账号长度应当在:min到:max之间", - "password@required|length:6,16|same:password2#密码不能为空|密码长度应当在:min到:max之间|两次密码输入不相等", - "password2@required|length:6,16#", - } - err := gvalid.CheckMap(params, rules) - gtest.AssertNE(err, nil) - gtest.Assert(len(err.Map()), 2) - gtest.Assert(err.Map()["required"], "账号不能为空") - gtest.Assert(err.Map()["length"], "账号长度应当在6到16之间") - gtest.Assert(len(err.Maps()), 2) - - gtest.Assert(err.String(), "账号不能为空; 账号长度应当在6到16之间; 两次密码输入不相等") - gtest.Assert(err.Strings(), []string{"账号不能为空", "账号长度应当在6到16之间", "两次密码输入不相等"}) - - k, m := err.FirstItem() - gtest.Assert(k, "passport") - gtest.Assert(m, err.Map()) - - r, s := err.FirstRule() - gtest.Assert(r, "required") - gtest.Assert(s, "账号不能为空") - }) -} +// Copyright 2019 gf Author(https://github.com/gogf/gf). All Rights Reserved. +// +// This Source Code Form is subject to the terms of the MIT License. +// If a copy of the MIT was not distributed with this file, +// You can obtain one at https://github.com/gogf/gf. + +package gvalid_test + +import ( + "testing" + + "github.com/gogf/gf/g/test/gtest" + "github.com/gogf/gf/g/util/gvalid" +) + +func Test_CheckMap(t *testing.T) { + + var params interface{} + if m := gvalid.CheckMap(params, nil, nil); m == nil { + t.Error("CheckMap校验失败") + } + + kvmap := map[string]interface{}{ + "id": "0", + "name": "john", + } + rules := map[string]string{ + "id": "required|between:1,100", + "name": "required|length:6,16", + } + msgs := gvalid.CustomMsg{ + "id": "ID不能为空|ID范围应当为:min到:max", + "name": map[string]string{ + "required": "名称不能为空", + "length": "名称长度为:min到:max个字符", + }, + } + if m := gvalid.CheckMap(kvmap, rules, msgs); m == nil { + t.Error("CheckMap校验失败") + } + + kvmap = map[string]interface{}{ + "id": "1", + "name": "john", + } + rules = map[string]string{ + "id": "required|between:1,100", + "name": "required|length:4,16", + } + msgs = map[string]interface{}{ + "id": "ID不能为空|ID范围应当为:min到:max", + "name": map[string]string{ + "required": "名称不能为空", + "length": "名称长度为:min到:max个字符", + }, + } + if m := gvalid.CheckMap(kvmap, rules, msgs); m != nil { + t.Error(m) + } + + kvmap = map[string]interface{}{ + "id": "1", + "name": "john", + } + rules = map[string]string{ + "id": "", + "name": "", + } + msgs = map[string]interface{}{ + "id": "ID不能为空|ID范围应当为:min到:max", + "name": map[string]string{ + "required": "名称不能为空", + "length": "名称长度为:min到:max个字符", + }, + } + if m := gvalid.CheckMap(kvmap, rules, msgs); m != nil { + t.Error(m) + } + + kvmap = map[string]interface{}{ + "id": "1", + "name": "john", + } + rules2 := []string{ + "@required|between:1,100", + "@required|length:4,16", + } + msgs = map[string]interface{}{ + "id": "ID不能为空|ID范围应当为:min到:max", + "name": map[string]string{ + "required": "名称不能为空", + "length": "名称长度为:min到:max个字符", + }, + } + if m := gvalid.CheckMap(kvmap, rules2, msgs); m != nil { + t.Error(m) + } + + kvmap = map[string]interface{}{ + "id": "1", + "name": "john", + } + rules2 = []string{ + "id@required|between:1,100", + "name@required|length:4,16#名称不能为空|", + } + msgs = map[string]interface{}{ + "id": "ID不能为空|ID范围应当为:min到:max", + "name": map[string]string{ + "required": "名称不能为空", + "length": "名称长度为:min到:max个字符", + }, + } + if m := gvalid.CheckMap(kvmap, rules2, msgs); m != nil { + t.Error(m) + } + + kvmap = map[string]interface{}{ + "id": "1", + "name": "john", + } + rules2 = []string{ + "id@required|between:1,100", + "name@required|length:4,16#名称不能为空", + } + msgs = map[string]interface{}{ + "id": "ID不能为空|ID范围应当为:min到:max", + "name": map[string]string{ + "required": "名称不能为空", + "length": "名称长度为:min到:max个字符", + }, + } + if m := gvalid.CheckMap(kvmap, rules2, msgs); m != nil { + t.Error(m) + } +} + +// 如果值为nil,并且不需要require*验证时,其他验证失效 +func Test_CheckMapWithNilAndNotRequiredField(t *testing.T) { + data := map[string]interface{}{ + "id": "1", + } + rules := map[string]string{ + "id": "required", + "name": "length:4,16", + } + if m := gvalid.CheckMap(data, rules); m != nil { + t.Error(m) + } +} + +func Test_Sequence(t *testing.T) { + gtest.Case(t, func() { + params := map[string]interface{}{ + "passport": "", + "password": "123456", + "password2": "1234567", + } + rules := []string{ + "passport@required|length:6,16#账号不能为空|账号长度应当在:min到:max之间", + "password@required|length:6,16|same:password2#密码不能为空|密码长度应当在:min到:max之间|两次密码输入不相等", + "password2@required|length:6,16#", + } + err := gvalid.CheckMap(params, rules) + gtest.AssertNE(err, nil) + gtest.Assert(len(err.Map()), 2) + gtest.Assert(err.Map()["required"], "账号不能为空") + gtest.Assert(err.Map()["length"], "账号长度应当在6到16之间") + gtest.Assert(len(err.Maps()), 2) + + gtest.Assert(err.String(), "账号不能为空; 账号长度应当在6到16之间; 两次密码输入不相等") + gtest.Assert(err.Strings(), []string{"账号不能为空", "账号长度应当在6到16之间", "两次密码输入不相等"}) + + k, m := err.FirstItem() + gtest.Assert(k, "passport") + gtest.Assert(m, err.Map()) + + r, s := err.FirstRule() + gtest.Assert(r, "required") + gtest.Assert(s, "账号不能为空") + }) +} diff --git a/g/util/gvalid/gvalid_unit_checkstruct_test.go b/g/util/gvalid/gvalid_unit_checkstruct_test.go index 01a2dc2f3..7d8bfc2e9 100755 --- a/g/util/gvalid/gvalid_unit_checkstruct_test.go +++ b/g/util/gvalid/gvalid_unit_checkstruct_test.go @@ -1,224 +1,224 @@ -// Copyright 2019 gf Author(https://github.com/gogf/gf). All Rights Reserved. -// -// This Source Code Form is subject to the terms of the MIT License. -// If a copy of the MIT was not distributed with this file, -// You can obtain one at https://github.com/gogf/gf. - -package gvalid_test - -import ( - "testing" - - "github.com/gogf/gf/g/test/gtest" - "github.com/gogf/gf/g/util/gvalid" -) - -func Test_CheckStruct(t *testing.T) { - gtest.Case(t, func() { - type Object struct { - Name string - Age int - } - rules := []string{ - "@required|length:6,16", - "@between:18,30", - } - msgs := map[string]interface{}{ - "Name": map[string]string{ - "required": "名称不能为空", - "length": "名称长度为:min到:max个字符", - }, - "Age": "年龄为18到30周岁", - } - obj := &Object{"john", 16} - err := gvalid.CheckStruct(obj, rules, msgs) - gtest.Assert(err, nil) - }) - - gtest.Case(t, func() { - type Object struct { - Name string - Age int - } - rules := []string{ - "Name@required|length:6,16#名称不能为空", - "Age@between:18,30", - } - msgs := map[string]interface{}{ - "Name": map[string]string{ - "required": "名称不能为空", - "length": "名称长度为:min到:max个字符", - }, - "Age": "年龄为18到30周岁", - } - obj := &Object{"john", 16} - err := gvalid.CheckStruct(obj, rules, msgs) - gtest.AssertNE(err, nil) - gtest.Assert(len(err.Maps()), 2) - gtest.Assert(err.Maps()["Name"]["required"], "") - gtest.Assert(err.Maps()["Name"]["length"], "名称长度为6到16个字符") - gtest.Assert(err.Maps()["Age"]["between"], "年龄为18到30周岁") - }) - - gtest.Case(t, func() { - type Object struct { - Name string - Age int - } - rules := []string{ - "Name@required|length:6,16#名称不能为空|", - "Age@between:18,30", - } - msgs := map[string]interface{}{ - "Name": map[string]string{ - "required": "名称不能为空", - "length": "名称长度为:min到:max个字符", - }, - "Age": "年龄为18到30周岁", - } - obj := &Object{"john", 16} - err := gvalid.CheckStruct(obj, rules, msgs) - gtest.AssertNE(err, nil) - gtest.Assert(len(err.Maps()), 2) - gtest.Assert(err.Maps()["Name"]["required"], "") - gtest.Assert(err.Maps()["Name"]["length"], "名称长度为6到16个字符") - gtest.Assert(err.Maps()["Age"]["between"], "年龄为18到30周岁") - }) - - gtest.Case(t, func() { - type Object struct { - Name string - Age int - } - rules := map[string]string{ - "Name": "required|length:6,16", - "Age": "between:18,30", - } - msgs := map[string]interface{}{ - "Name": map[string]string{ - "required": "名称不能为空", - "length": "名称长度为:min到:max个字符", - }, - "Age": "年龄为18到30周岁", - } - obj := &Object{"john", 16} - err := gvalid.CheckStruct(obj, rules, msgs) - gtest.AssertNE(err, nil) - gtest.Assert(len(err.Maps()), 2) - gtest.Assert(err.Maps()["Name"]["required"], "") - gtest.Assert(err.Maps()["Name"]["length"], "名称长度为6到16个字符") - gtest.Assert(err.Maps()["Age"]["between"], "年龄为18到30周岁") - }) - - gtest.Case(t, func() { - type LoginRequest struct { - Username string `json:"username" gvalid:"username@required#用户名不能为空"` - Password string `json:"password" gvalid:"password@required#登录密码不能为空"` - } - var login LoginRequest - err := gvalid.CheckStruct(login, nil) - gtest.AssertNE(err, nil) - gtest.Assert(len(err.Maps()), 2) - gtest.Assert(err.Maps()["username"]["required"], "用户名不能为空") - gtest.Assert(err.Maps()["password"]["required"], "登录密码不能为空") - }) - - gtest.Case(t, func() { - type LoginRequest struct { - Username string `json:"username" gvalid:"@required#用户名不能为空"` - Password string `json:"password" gvalid:"@required#登录密码不能为空"` - } - var login LoginRequest - err := gvalid.CheckStruct(login, nil) - gtest.Assert(err, nil) - }) - - gtest.Case(t, func() { - type LoginRequest struct { - username string `json:"username" gvalid:"username@required#用户名不能为空"` - Password string `json:"password" gvalid:"password@required#登录密码不能为空"` - } - var login LoginRequest - err := gvalid.CheckStruct(login, nil) - gtest.AssertNE(err, nil) - gtest.Assert(err.Maps()["password"]["required"], "登录密码不能为空") - }) - - // gvalid tag - gtest.Case(t, func() { - type User struct { - Id int `gvalid:"uid@required|min:10#|ID不能为空"` - Age int `gvalid:"age@required#年龄不能为空"` - Username string `json:"username" gvalid:"username@required#用户名不能为空"` - Password string `json:"password" gvalid:"password@required#登录密码不能为空"` - } - user := &User{ - Id: 1, - Username: "john", - Password: "123456", - } - err := gvalid.CheckStruct(user, nil) - gtest.AssertNE(err, nil) - gtest.Assert(len(err.Maps()), 1) - gtest.Assert(err.Maps()["uid"]["min"], "ID不能为空") - }) - - gtest.Case(t, func() { - type User struct { - Id int `gvalid:"uid@required|min:10#|ID不能为空"` - Age int `gvalid:"age@required#年龄不能为空"` - Username string `json:"username" gvalid:"username@required#用户名不能为空"` - Password string `json:"password" gvalid:"password@required#登录密码不能为空"` - } - user := &User{ - Id: 1, - Username: "john", - Password: "123456", - } - - rules := []string{ - "username@required#用户名不能为空", - } - - err := gvalid.CheckStruct(user, rules) - gtest.AssertNE(err, nil) - gtest.Assert(len(err.Maps()), 1) - gtest.Assert(err.Maps()["uid"]["min"], "ID不能为空") - }) - - gtest.Case(t, func() { - type User struct { - Id int `gvalid:"uid@required|min:10#ID不能为空"` - Age int `gvalid:"age@required#年龄不能为空"` - Username string `json:"username" gvalid:"username@required#用户名不能为空"` - Password string `json:"password" gvalid:"password@required#登录密码不能为空"` - } - user := &User{ - Id: 1, - Username: "john", - Password: "123456", - } - err := gvalid.CheckStruct(user, nil) - gtest.AssertNE(err, nil) - gtest.Assert(len(err.Maps()), 1) - }) - - // valid tag - gtest.Case(t, func() { - type User struct { - Id int `valid:"uid@required|min:10#|ID不能为空"` - Age int `valid:"age@required#年龄不能为空"` - Username string `json:"username" gvalid:"username@required#用户名不能为空"` - Password string `json:"password" gvalid:"password@required#登录密码不能为空"` - } - user := &User{ - Id: 1, - Username: "john", - Password: "123456", - } - err := gvalid.CheckStruct(user, nil) - gtest.AssertNE(err, nil) - gtest.Assert(len(err.Maps()), 1) - gtest.Assert(err.Maps()["uid"]["min"], "ID不能为空") - }) -} +// Copyright 2019 gf Author(https://github.com/gogf/gf). All Rights Reserved. +// +// This Source Code Form is subject to the terms of the MIT License. +// If a copy of the MIT was not distributed with this file, +// You can obtain one at https://github.com/gogf/gf. + +package gvalid_test + +import ( + "testing" + + "github.com/gogf/gf/g/test/gtest" + "github.com/gogf/gf/g/util/gvalid" +) + +func Test_CheckStruct(t *testing.T) { + gtest.Case(t, func() { + type Object struct { + Name string + Age int + } + rules := []string{ + "@required|length:6,16", + "@between:18,30", + } + msgs := map[string]interface{}{ + "Name": map[string]string{ + "required": "名称不能为空", + "length": "名称长度为:min到:max个字符", + }, + "Age": "年龄为18到30周岁", + } + obj := &Object{"john", 16} + err := gvalid.CheckStruct(obj, rules, msgs) + gtest.Assert(err, nil) + }) + + gtest.Case(t, func() { + type Object struct { + Name string + Age int + } + rules := []string{ + "Name@required|length:6,16#名称不能为空", + "Age@between:18,30", + } + msgs := map[string]interface{}{ + "Name": map[string]string{ + "required": "名称不能为空", + "length": "名称长度为:min到:max个字符", + }, + "Age": "年龄为18到30周岁", + } + obj := &Object{"john", 16} + err := gvalid.CheckStruct(obj, rules, msgs) + gtest.AssertNE(err, nil) + gtest.Assert(len(err.Maps()), 2) + gtest.Assert(err.Maps()["Name"]["required"], "") + gtest.Assert(err.Maps()["Name"]["length"], "名称长度为6到16个字符") + gtest.Assert(err.Maps()["Age"]["between"], "年龄为18到30周岁") + }) + + gtest.Case(t, func() { + type Object struct { + Name string + Age int + } + rules := []string{ + "Name@required|length:6,16#名称不能为空|", + "Age@between:18,30", + } + msgs := map[string]interface{}{ + "Name": map[string]string{ + "required": "名称不能为空", + "length": "名称长度为:min到:max个字符", + }, + "Age": "年龄为18到30周岁", + } + obj := &Object{"john", 16} + err := gvalid.CheckStruct(obj, rules, msgs) + gtest.AssertNE(err, nil) + gtest.Assert(len(err.Maps()), 2) + gtest.Assert(err.Maps()["Name"]["required"], "") + gtest.Assert(err.Maps()["Name"]["length"], "名称长度为6到16个字符") + gtest.Assert(err.Maps()["Age"]["between"], "年龄为18到30周岁") + }) + + gtest.Case(t, func() { + type Object struct { + Name string + Age int + } + rules := map[string]string{ + "Name": "required|length:6,16", + "Age": "between:18,30", + } + msgs := map[string]interface{}{ + "Name": map[string]string{ + "required": "名称不能为空", + "length": "名称长度为:min到:max个字符", + }, + "Age": "年龄为18到30周岁", + } + obj := &Object{"john", 16} + err := gvalid.CheckStruct(obj, rules, msgs) + gtest.AssertNE(err, nil) + gtest.Assert(len(err.Maps()), 2) + gtest.Assert(err.Maps()["Name"]["required"], "") + gtest.Assert(err.Maps()["Name"]["length"], "名称长度为6到16个字符") + gtest.Assert(err.Maps()["Age"]["between"], "年龄为18到30周岁") + }) + + gtest.Case(t, func() { + type LoginRequest struct { + Username string `json:"username" gvalid:"username@required#用户名不能为空"` + Password string `json:"password" gvalid:"password@required#登录密码不能为空"` + } + var login LoginRequest + err := gvalid.CheckStruct(login, nil) + gtest.AssertNE(err, nil) + gtest.Assert(len(err.Maps()), 2) + gtest.Assert(err.Maps()["username"]["required"], "用户名不能为空") + gtest.Assert(err.Maps()["password"]["required"], "登录密码不能为空") + }) + + gtest.Case(t, func() { + type LoginRequest struct { + Username string `json:"username" gvalid:"@required#用户名不能为空"` + Password string `json:"password" gvalid:"@required#登录密码不能为空"` + } + var login LoginRequest + err := gvalid.CheckStruct(login, nil) + gtest.Assert(err, nil) + }) + + gtest.Case(t, func() { + type LoginRequest struct { + username string `json:"username" gvalid:"username@required#用户名不能为空"` + Password string `json:"password" gvalid:"password@required#登录密码不能为空"` + } + var login LoginRequest + err := gvalid.CheckStruct(login, nil) + gtest.AssertNE(err, nil) + gtest.Assert(err.Maps()["password"]["required"], "登录密码不能为空") + }) + + // gvalid tag + gtest.Case(t, func() { + type User struct { + Id int `gvalid:"uid@required|min:10#|ID不能为空"` + Age int `gvalid:"age@required#年龄不能为空"` + Username string `json:"username" gvalid:"username@required#用户名不能为空"` + Password string `json:"password" gvalid:"password@required#登录密码不能为空"` + } + user := &User{ + Id: 1, + Username: "john", + Password: "123456", + } + err := gvalid.CheckStruct(user, nil) + gtest.AssertNE(err, nil) + gtest.Assert(len(err.Maps()), 1) + gtest.Assert(err.Maps()["uid"]["min"], "ID不能为空") + }) + + gtest.Case(t, func() { + type User struct { + Id int `gvalid:"uid@required|min:10#|ID不能为空"` + Age int `gvalid:"age@required#年龄不能为空"` + Username string `json:"username" gvalid:"username@required#用户名不能为空"` + Password string `json:"password" gvalid:"password@required#登录密码不能为空"` + } + user := &User{ + Id: 1, + Username: "john", + Password: "123456", + } + + rules := []string{ + "username@required#用户名不能为空", + } + + err := gvalid.CheckStruct(user, rules) + gtest.AssertNE(err, nil) + gtest.Assert(len(err.Maps()), 1) + gtest.Assert(err.Maps()["uid"]["min"], "ID不能为空") + }) + + gtest.Case(t, func() { + type User struct { + Id int `gvalid:"uid@required|min:10#ID不能为空"` + Age int `gvalid:"age@required#年龄不能为空"` + Username string `json:"username" gvalid:"username@required#用户名不能为空"` + Password string `json:"password" gvalid:"password@required#登录密码不能为空"` + } + user := &User{ + Id: 1, + Username: "john", + Password: "123456", + } + err := gvalid.CheckStruct(user, nil) + gtest.AssertNE(err, nil) + gtest.Assert(len(err.Maps()), 1) + }) + + // valid tag + gtest.Case(t, func() { + type User struct { + Id int `valid:"uid@required|min:10#|ID不能为空"` + Age int `valid:"age@required#年龄不能为空"` + Username string `json:"username" gvalid:"username@required#用户名不能为空"` + Password string `json:"password" gvalid:"password@required#登录密码不能为空"` + } + user := &User{ + Id: 1, + Username: "john", + Password: "123456", + } + err := gvalid.CheckStruct(user, nil) + gtest.AssertNE(err, nil) + gtest.Assert(len(err.Maps()), 1) + gtest.Assert(err.Maps()["uid"]["min"], "ID不能为空") + }) +} diff --git a/g/util/gvalid/gvalid_unit_customerror_test.go b/g/util/gvalid/gvalid_unit_customerror_test.go index 26f512552..e3d06e8f7 100755 --- a/g/util/gvalid/gvalid_unit_customerror_test.go +++ b/g/util/gvalid/gvalid_unit_customerror_test.go @@ -1,94 +1,94 @@ -// Copyright 2019 gf Author(https://github.com/gogf/gf). All Rights Reserved. -// -// This Source Code Form is subject to the terms of the MIT License. -// If a copy of the MIT was not distributed with this file, -// You can obtain one at https://github.com/gogf/gf. - -package gvalid_test - -import ( - "strings" - "testing" - - "github.com/gogf/gf/g/test/gtest" - "github.com/gogf/gf/g/util/gvalid" -) - -func Test_Map(t *testing.T) { - err := &gvalid.Error{} - m := err.Map() - gtest.Assert(m, nil) -} - -func Test_FirstString(t *testing.T) { - err := &gvalid.Error{} - n := err.FirstString() - gtest.Assert(n, "") -} - -func Test_SetDefaultErrorMsgs(t *testing.T) { - rule := "integer|length:6,16" - msgs := map[string]string{ - "integer": "请输入一个整数", - "length": "参数长度不对啊老铁", - } - gvalid.SetDefaultErrorMsgs(msgs) - e := gvalid.Check("6.66", rule, nil) - if e == nil || len(e.Map()) != 2 { - t.Error("规则校验失败") - } else { - if v, ok := e.Map()["integer"]; ok { - if strings.Compare(v, msgs["integer"]) != 0 { - t.Error("错误信息不匹配") - } - } - if v, ok := e.Map()["length"]; ok { - if strings.Compare(v, msgs["length"]) != 0 { - t.Error("错误信息不匹配") - } - } - } -} - -func Test_CustomError1(t *testing.T) { - rule := "integer|length:6,16" - msgs := map[string]string{ - "integer": "请输入一个整数", - "length": "参数长度不对啊老铁", - } - e := gvalid.Check("6.66", rule, msgs) - if e == nil || len(e.Map()) != 2 { - t.Error("规则校验失败") - } else { - if v, ok := e.Map()["integer"]; ok { - if strings.Compare(v, msgs["integer"]) != 0 { - t.Error("错误信息不匹配") - } - } - if v, ok := e.Map()["length"]; ok { - if strings.Compare(v, msgs["length"]) != 0 { - t.Error("错误信息不匹配") - } - } - } -} - -func Test_CustomError2(t *testing.T) { - rule := "integer|length:6,16" - msgs := "请输入一个整数|参数长度不对啊老铁" - e := gvalid.Check("6.66", rule, msgs) - if e == nil || len(e.Map()) != 2 { - t.Error("规则校验失败") - } else { - if v, ok := e.Map()["integer"]; ok { - if strings.Compare(v, "请输入一个整数") != 0 { - t.Error("错误信息不匹配") - } - } - if v, ok := e.Map()["length"]; ok { - if strings.Compare(v, "参数长度不对啊老铁") != 0 { - t.Error("错误信息不匹配") - } - } - } -} +// Copyright 2019 gf Author(https://github.com/gogf/gf). All Rights Reserved. +// +// This Source Code Form is subject to the terms of the MIT License. +// If a copy of the MIT was not distributed with this file, +// You can obtain one at https://github.com/gogf/gf. + +package gvalid_test + +import ( + "strings" + "testing" + + "github.com/gogf/gf/g/test/gtest" + "github.com/gogf/gf/g/util/gvalid" +) + +func Test_Map(t *testing.T) { + err := &gvalid.Error{} + m := err.Map() + gtest.Assert(m, nil) +} + +func Test_FirstString(t *testing.T) { + err := &gvalid.Error{} + n := err.FirstString() + gtest.Assert(n, "") +} + +func Test_SetDefaultErrorMsgs(t *testing.T) { + rule := "integer|length:6,16" + msgs := map[string]string{ + "integer": "请输入一个整数", + "length": "参数长度不对啊老铁", + } + gvalid.SetDefaultErrorMsgs(msgs) + e := gvalid.Check("6.66", rule, nil) + if e == nil || len(e.Map()) != 2 { + t.Error("规则校验失败") + } else { + if v, ok := e.Map()["integer"]; ok { + if strings.Compare(v, msgs["integer"]) != 0 { + t.Error("错误信息不匹配") + } + } + if v, ok := e.Map()["length"]; ok { + if strings.Compare(v, msgs["length"]) != 0 { + t.Error("错误信息不匹配") + } + } + } +} + +func Test_CustomError1(t *testing.T) { + rule := "integer|length:6,16" + msgs := map[string]string{ + "integer": "请输入一个整数", + "length": "参数长度不对啊老铁", + } + e := gvalid.Check("6.66", rule, msgs) + if e == nil || len(e.Map()) != 2 { + t.Error("规则校验失败") + } else { + if v, ok := e.Map()["integer"]; ok { + if strings.Compare(v, msgs["integer"]) != 0 { + t.Error("错误信息不匹配") + } + } + if v, ok := e.Map()["length"]; ok { + if strings.Compare(v, msgs["length"]) != 0 { + t.Error("错误信息不匹配") + } + } + } +} + +func Test_CustomError2(t *testing.T) { + rule := "integer|length:6,16" + msgs := "请输入一个整数|参数长度不对啊老铁" + e := gvalid.Check("6.66", rule, msgs) + if e == nil || len(e.Map()) != 2 { + t.Error("规则校验失败") + } else { + if v, ok := e.Map()["integer"]; ok { + if strings.Compare(v, "请输入一个整数") != 0 { + t.Error("错误信息不匹配") + } + } + if v, ok := e.Map()["length"]; ok { + if strings.Compare(v, "参数长度不对啊老铁") != 0 { + t.Error("错误信息不匹配") + } + } + } +} From 1c713407196b1ce868c8b03562f20bd428ff07d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=9B=BD=E6=BD=AE?= <2892931976@qq.com> Date: Thu, 4 Jul 2019 15:03:56 +0800 Subject: [PATCH 3/9] gfcache test 20190704 15:00 --- g/os/gfcache/gfcache_z_unit_test.go | 65 +++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100755 g/os/gfcache/gfcache_z_unit_test.go diff --git a/g/os/gfcache/gfcache_z_unit_test.go b/g/os/gfcache/gfcache_z_unit_test.go new file mode 100755 index 000000000..77b02403a --- /dev/null +++ b/g/os/gfcache/gfcache_z_unit_test.go @@ -0,0 +1,65 @@ +// Copyright 2017 gf Author(https://github.com/gogf/gf). All Rights Reserved. +// +// This Source Code Form is subject to the terms of the MIT License. +// If a copy of the MIT was not distributed with this file, +// You can obtain one at https://github.com/gogf/gf. + +// go test *.go -bench=".*" -benchmem + +package gfcache_test + +import ( + "os" + "testing" + "time" + + "github.com/gogf/gf/g/os/gfcache" + "github.com/gogf/gf/g/os/gfile" + "github.com/gogf/gf/g/test/gtest" +) + +func TestGetContents(t *testing.T) { + gtest.Case(t, func() { + + var f *os.File + var err error + fileName := "test.txt" + strTest := "123" + + if !gfile.Exists(fileName) { + f, err = gfile.Create(fileName) + if err != nil { + t.Error("create file fail") + } + } + + cache := gfcache.GetContents(fileName, 2) + + if gfile.Exists(fileName) { + f, err = gfile.OpenFile(fileName, os.O_APPEND|os.O_WRONLY, os.ModeAppend) + if err != nil { + t.Error("file open fail", err) + } + } + + defer f.Close() + + _, err = f.Write([]byte(strTest)) + if err != nil { + t.Error("write error", err) + } + + cache = gfcache.GetContents(fileName) + gtest.Assert(cache, "") + + time.Sleep(time.Duration(4) * time.Second) + + if gfile.Exists(fileName) { + err = gfile.Remove(fileName) + if err != nil { + t.Error("file remove fail", err) + } + } + }) + +} From 125af33941e5175c50ed9bf595869430ddddcc36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=9B=BD=E6=BD=AE?= <2892931976@qq.com> Date: Tue, 9 Jul 2019 15:10:02 +0800 Subject: [PATCH 4/9] gvalid and gfcache test 20190709 15:06 --- g/os/gfcache/gfcache_z_unit_test.go | 63 +++++++++++++++------ g/util/gvalid/gvalid_unit_basic_all_test.go | 6 +- 2 files changed, 48 insertions(+), 21 deletions(-) diff --git a/g/os/gfcache/gfcache_z_unit_test.go b/g/os/gfcache/gfcache_z_unit_test.go index 77b02403a..b45a1fe13 100755 --- a/g/os/gfcache/gfcache_z_unit_test.go +++ b/g/os/gfcache/gfcache_z_unit_test.go @@ -9,6 +9,7 @@ package gfcache_test import ( + "io/ioutil" "os" "testing" "time" @@ -23,43 +24,69 @@ func TestGetContents(t *testing.T) { var f *os.File var err error - fileName := "test.txt" + fileName := "test" strTest := "123" if !gfile.Exists(fileName) { - f, err = gfile.Create(fileName) + f, err = ioutil.TempFile("", fileName) if err != nil { t.Error("create file fail") } } - cache := gfcache.GetContents(fileName, 2) + defer f.Close() + defer os.Remove(f.Name()) - if gfile.Exists(fileName) { - f, err = gfile.OpenFile(fileName, os.O_APPEND|os.O_WRONLY, os.ModeAppend) + if gfile.Exists(f.Name()) { + + f, err = gfile.OpenFile(f.Name(), os.O_APPEND|os.O_WRONLY, os.ModeAppend) if err != nil { t.Error("file open fail", err) } + + err = gfile.PutContents(f.Name(), strTest) + if err != nil { + t.Error("write error", err) + } + + cache := gfcache.GetContents(f.Name(), 1) + gtest.Assert(cache, strTest) + } + }) + + gtest.Case(t, func() { + + var f *os.File + var err error + fileName := "test2" + strTest := "123" + + if !gfile.Exists(fileName) { + f, err = ioutil.TempFile("", fileName) + if err != nil { + t.Error("create file fail") + } } defer f.Close() + defer os.Remove(f.Name()) - _, err = f.Write([]byte(strTest)) - if err != nil { - t.Error("write error", err) - } + if gfile.Exists(f.Name()) { + cache := gfcache.GetContents(f.Name()) - cache = gfcache.GetContents(fileName) - gtest.Assert(cache, "") - - time.Sleep(time.Duration(4) * time.Second) - - if gfile.Exists(fileName) { - err = gfile.Remove(fileName) + f, err = gfile.OpenFile(f.Name(), os.O_APPEND|os.O_WRONLY, os.ModeAppend) if err != nil { - t.Error("file remove fail", err) + t.Error("file open fail", err) } + + err = gfile.PutContents(f.Name(), strTest) + if err != nil { + t.Error("write error", err) + } + + gtest.Assert(cache, "") + + time.Sleep(100 * time.Millisecond) } }) - } diff --git a/g/util/gvalid/gvalid_unit_basic_all_test.go b/g/util/gvalid/gvalid_unit_basic_all_test.go index 10731887a..7345e69de 100755 --- a/g/util/gvalid/gvalid_unit_basic_all_test.go +++ b/g/util/gvalid/gvalid_unit_basic_all_test.go @@ -24,9 +24,9 @@ func Test_Check(t *testing.T) { err1 := gvalid.Check(val1, rule, nil) err2 := gvalid.Check(val2, rule, nil) err3 := gvalid.Check(val3, rule, nil) - gtest.AssertNE(err1, nil) - gtest.AssertNE(err2, nil) - gtest.AssertNE(err3, nil) + gtest.Assert(err1, "invalid rules:abc:6,16") + gtest.Assert(err2, "invalid rules:abc:6,16") + gtest.Assert(err3, "invalid rules:abc:6,16") }) } From 759be06ebc54dc66605be31a7cc8fa7ef280ab19 Mon Sep 17 00:00:00 2001 From: yc <434848237@qq.com> Date: Thu, 11 Jul 2019 10:02:44 +0800 Subject: [PATCH 5/9] Function BuildParams add 'UnUrlEncode' param, default false. --- g/net/ghttp/ghttp_func.go | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/g/net/ghttp/ghttp_func.go b/g/net/ghttp/ghttp_func.go index ff09907d2..1950b4095 100644 --- a/g/net/ghttp/ghttp_func.go +++ b/g/net/ghttp/ghttp_func.go @@ -13,23 +13,25 @@ import ( ) // 构建请求参数,参数支持任意数据类型,常见参数类型为string/map。 -// 如果参数为map类型,参数值将会进行urlencode编码。 -func BuildParams(params interface{}) (encodedParamStr string) { - m := gconv.Map(params) +// 如果参数为map类型,参数值将会进行urlencode编码;可以通过unUrlEncode:true参数取消编码。 +func BuildParams(params interface{}, unUrlEncode ...bool) (encodedParamStr string) { + m, urlEncode := gconv.Map(params), true if len(m) == 0 { return gconv.String(params) } + if len(unUrlEncode) == 1 { + urlEncode = !unUrlEncode[0] + } s := "" for k, v := range m { if len(encodedParamStr) > 0 { encodedParamStr += "&" } s = gconv.String(v) - if len(s) > 6 && strings.Compare(s[0:6], "@file:") == 0 { - encodedParamStr += k + "=" + s - } else { - encodedParamStr += k + "=" + gurl.Encode(s) + if urlEncode && len(s) > 6 && strings.Compare(s[0:6], "@file:") != 0 { + s = gurl.Encode(s) } + encodedParamStr += k + "=" + s } return } From 5576adbd0bbf03b012d03a14d29e7f6ef4feee69 Mon Sep 17 00:00:00 2001 From: John Date: Thu, 11 Jul 2019 19:47:15 +0800 Subject: [PATCH 6/9] update ghttp. --- g/net/ghttp/ghttp_func.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/g/net/ghttp/ghttp_func.go b/g/net/ghttp/ghttp_func.go index 1950b4095..a4474ed90 100644 --- a/g/net/ghttp/ghttp_func.go +++ b/g/net/ghttp/ghttp_func.go @@ -7,20 +7,21 @@ package ghttp import ( + "strings" + "github.com/gogf/gf/g/encoding/gurl" "github.com/gogf/gf/g/util/gconv" - "strings" ) // 构建请求参数,参数支持任意数据类型,常见参数类型为string/map。 -// 如果参数为map类型,参数值将会进行urlencode编码;可以通过unUrlEncode:true参数取消编码。 -func BuildParams(params interface{}, unUrlEncode ...bool) (encodedParamStr string) { +// 如果参数为map类型,参数值将会进行urlencode编码;可以通过 noUrlEncode:true 参数取消编码。 +func BuildParams(params interface{}, noUrlEncode ...bool) (encodedParamStr string) { m, urlEncode := gconv.Map(params), true if len(m) == 0 { return gconv.String(params) } - if len(unUrlEncode) == 1 { - urlEncode = !unUrlEncode[0] + if len(noUrlEncode) == 1 { + urlEncode = !noUrlEncode[0] } s := "" for k, v := range m { From 0481b4025b12ac588ab1661f4ec9866bdb4514bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=9B=BD=E6=BD=AE?= <2892931976@qq.com> Date: Fri, 12 Jul 2019 10:23:28 +0800 Subject: [PATCH 7/9] gvalid test 20190712 10:20 --- g/util/gvalid/gvalid_unit_customerror_test.go | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/g/util/gvalid/gvalid_unit_customerror_test.go b/g/util/gvalid/gvalid_unit_customerror_test.go index e3d06e8f7..c7cea0db8 100755 --- a/g/util/gvalid/gvalid_unit_customerror_test.go +++ b/g/util/gvalid/gvalid_unit_customerror_test.go @@ -15,15 +15,23 @@ import ( ) func Test_Map(t *testing.T) { - err := &gvalid.Error{} - m := err.Map() - gtest.Assert(m, nil) + rule := "ipv4" + val := "0.0.0" + msg := map[string]string{ + "ipv4": "IPv4地址格式不正确", + } + + err := gvalid.Check(val, rule, nil) + gtest.Assert(err.Map(), msg) } func Test_FirstString(t *testing.T) { - err := &gvalid.Error{} + rule := "ipv4" + val := "0.0.0" + + err := gvalid.Check(val, rule, nil) n := err.FirstString() - gtest.Assert(n, "") + gtest.Assert(n, "IPv4地址格式不正确") } func Test_SetDefaultErrorMsgs(t *testing.T) { From 4de574ee868266c4f00db5857a1c92a6429064c3 Mon Sep 17 00:00:00 2001 From: John Date: Fri, 12 Jul 2019 20:56:45 +0800 Subject: [PATCH 8/9] auto create struct for ghttp.Request.GetToStruct --- g/internal/structs/structs_tag.go | 14 ++++- g/net/ghttp/ghttp_unit_param_struct_test.go | 67 +++++++++++++++++++++ geg/util/gvalid/gvalid_struct3.go | 8 +-- 3 files changed, 83 insertions(+), 6 deletions(-) create mode 100644 g/net/ghttp/ghttp_unit_param_struct_test.go diff --git a/g/internal/structs/structs_tag.go b/g/internal/structs/structs_tag.go index 9040e9560..52167b3cf 100644 --- a/g/internal/structs/structs_tag.go +++ b/g/internal/structs/structs_tag.go @@ -40,7 +40,19 @@ func TagMapField(pointer interface{}, priority []string, recursive bool) map[str if v, ok := pointer.(reflect.Value); ok { fields = structs.Fields(v.Interface()) } else { - fields = structs.Fields(pointer) + rv := reflect.ValueOf(pointer) + kind := rv.Kind() + if kind == reflect.Ptr { + rv = rv.Elem() + kind = rv.Kind() + } + // If pointer is type of **struct and nil, then automatically create a temporary struct, + // which is used for structs.Fields. + if kind == reflect.Ptr && (!rv.IsValid() || rv.IsNil()) { + fields = structs.Fields(reflect.New(rv.Type().Elem()).Elem().Interface()) + } else { + fields = structs.Fields(pointer) + } } tag := "" name := "" diff --git a/g/net/ghttp/ghttp_unit_param_struct_test.go b/g/net/ghttp/ghttp_unit_param_struct_test.go new file mode 100644 index 000000000..382f24642 --- /dev/null +++ b/g/net/ghttp/ghttp_unit_param_struct_test.go @@ -0,0 +1,67 @@ +// Copyright 2018 gf Author(https://github.com/gogf/gf). All Rights Reserved. +// +// This Source Code Form is subject to the terms of the MIT License. +// If a copy of the MIT was not distributed with this file, +// You can obtain one at https://github.com/gogf/gf. + +package ghttp_test + +import ( + "fmt" + "testing" + "time" + + "github.com/gogf/gf/g/util/gvalid" + + "github.com/gogf/gf/g" + "github.com/gogf/gf/g/net/ghttp" + "github.com/gogf/gf/g/test/gtest" +) + +func Test_Params_Struct(t *testing.T) { + type User struct { + Id int + Name string + Pass1 string `params:"password1"` + Pass2 string `params:"password2" gvalid:"passwd1 @required|length:2,20|password3||密码强度不足"` + } + p := ports.PopRand() + s := g.Server(p) + s.BindHandler("/struct1", func(r *ghttp.Request) { + if m := r.GetMap(); len(m) > 0 { + user := new(User) + r.GetToStruct(user) + r.Response.Write(user.Id, user.Name, user.Pass1, user.Pass2) + } + }) + s.BindHandler("/struct2", func(r *ghttp.Request) { + if m := r.GetMap(); len(m) > 0 { + user := (*User)(nil) + r.GetToStruct(&user) + r.Response.Write(user.Id, user.Name, user.Pass1, user.Pass2) + } + }) + s.BindHandler("/struct-valid", func(r *ghttp.Request) { + if m := r.GetMap(); len(m) > 0 { + user := new(User) + r.GetToStruct(user) + err := gvalid.CheckStruct(user, nil) + r.Response.Write(err.Maps()) + } + }) + s.SetPort(p) + s.SetDumpRouteMap(false) + s.Start() + defer s.Shutdown() + + // 等待启动完成 + time.Sleep(time.Second) + gtest.Case(t, func() { + client := ghttp.NewClient() + client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) + gtest.Assert(client.GetContent("/struct1", `id=1&name=john&password1=123&password2=456`), `1john123456`) + gtest.Assert(client.PostContent("/struct1", `id=1&name=john&password1=123&password2=456`), `1john123456`) + gtest.Assert(client.PostContent("/struct2", `id=1&name=john&password1=123&password2=456`), `1john123456`) + gtest.Assert(client.PostContent("/struct-valid", `id=1&name=john&password1=123&password2=0`), `{"passwd1":{"length":"字段长度为2到20个字符","password3":"密码格式不合法,密码格式为任意6-18位的可见字符,必须包含大小写字母、数字和特殊字符"}}`) + }) +} diff --git a/geg/util/gvalid/gvalid_struct3.go b/geg/util/gvalid/gvalid_struct3.go index cfe55a33e..7b0b9e356 100644 --- a/geg/util/gvalid/gvalid_struct3.go +++ b/geg/util/gvalid/gvalid_struct3.go @@ -8,14 +8,12 @@ import ( // same校验 func main() { type User struct { - Password string `gvalid:"password@password"` - ConfirmPassword string `gvalid:"confirm_password@password|same:password#|密码与确认密码不一致"` + Pass string `gvalid:"passwd1 @required|length:2,20|password3||密码强度不足"` } user := &User{ - Password: "123456", - ConfirmPassword: "", + Pass: "1", } - g.Dump(gvalid.CheckStruct(user, nil)) + g.Dump(gvalid.CheckStruct(user, nil).Maps()) } From 9cd445ad4089cc9913bdf23216b3a2a52fd7ec9a Mon Sep 17 00:00:00 2001 From: john Date: Fri, 12 Jul 2019 21:37:48 +0800 Subject: [PATCH 9/9] improve gvalid tag for gvalid package --- g/util/gvalid/gvalid_check.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/g/util/gvalid/gvalid_check.go b/g/util/gvalid/gvalid_check.go index 5e3460c9d..10a46ee75 100644 --- a/g/util/gvalid/gvalid_check.go +++ b/g/util/gvalid/gvalid_check.go @@ -138,11 +138,11 @@ func Check(value interface{}, rules string, msgs interface{}, params ...interfac for i := 0; ; { array := strings.Split(ruleItems[i], ":") if _, ok := allSupportedRules[array[0]]; !ok { - if i > 0 { + if i > 0 && ruleItems[i-1][:5] == "regex" { ruleItems[i-1] += "|" + ruleItems[i] ruleItems = append(ruleItems[:i], ruleItems[i+1:]...) } else { - return newErrorStr("invalid_rules", "invalid rules:"+rules) + return newErrorStr("parse_error", "invalid rules:"+rules) } } else { i++