Skip to content

Commit

Permalink
Merge pull request #5 from utahta/fix-optional-in-array
Browse files Browse the repository at this point in the history
Fix: tag parser
  • Loading branch information
utahta authored Jan 20, 2019
2 parents b136f69 + 3627df0 commit 25c931e
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 5 deletions.
3 changes: 2 additions & 1 deletion tag_parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,8 @@ loop:

if rootTagChunk.Next == nil {
rootTagChunk.Next = &tagChunk{
Tags: rootTagChunk.Tags[:],
Tags: rootTagChunk.Tags[:],
Optional: rootTagChunk.Optional,
}
}
v.tagCache.Store(rawTag, &rootTagChunk)
Expand Down
13 changes: 9 additions & 4 deletions tag_parser_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,8 @@ func Test_tagParse(t *testing.T) {
Tags: []Tag{},
Optional: true,
Next: &tagChunk{
Tags: []Tag{},
Tags: []Tag{},
Optional: true,
},
},
},
Expand All @@ -151,7 +152,8 @@ func Test_tagParse(t *testing.T) {
Tags: []Tag{{Name: "required"}},
Optional: true,
Next: &tagChunk{
Tags: []Tag{{Name: "required"}},
Tags: []Tag{{Name: "required"}},
Optional: true,
},
},
},
Expand All @@ -161,7 +163,8 @@ func Test_tagParse(t *testing.T) {
Tags: []Tag{{Name: "required"}},
Optional: true,
Next: &tagChunk{
Tags: []Tag{{Name: "required"}},
Tags: []Tag{{Name: "required"}},
Optional: true,
},
},
},
Expand All @@ -178,6 +181,7 @@ func Test_tagParse(t *testing.T) {
{Name: "len", Params: []string{"3"}},
{Name: "required"},
},
Optional: true,
},
},
},
Expand Down Expand Up @@ -279,7 +283,8 @@ func Test_tagParse(t *testing.T) {
Tags: []Tag{{Name: "or", Params: []string{"alpha", "numeric"}}},
Optional: true,
Next: &tagChunk{
Tags: []Tag{{Name: "or", Params: []string{"alpha", "numeric"}}},
Tags: []Tag{{Name: "or", Params: []string{"alpha", "numeric"}}},
Optional: true,
},
},
},
Expand Down
72 changes: 72 additions & 0 deletions validator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,10 @@ func TestValidateStruct_Array(t *testing.T) {
S []Cat `valid:"optional ; optional"`
}

OptionalArrayOptionalCatTest2 struct {
S []Cat `valid:"optional"`
}

ArrayInterfaceTest struct {
S []interface{} `valid:"required"`
}
Expand Down Expand Up @@ -343,6 +347,36 @@ func TestValidateStruct_Array(t *testing.T) {
wantMessage: "S[0].Name: '123' does validate as 'alpha'",
},

// OptionalArrayOptionalCatTest2
{
name: "Valid OptionalArrayOptionalCatTest2 empty",
s: OptionalArrayOptionalCatTest2{
S: []Cat{},
},
wantNoErr: true,
},
{
name: "Valid OptionalArrayOptionalCatTest2 nil",
s: OptionalArrayOptionalCatTest2{
S: nil,
},
wantNoErr: true,
},
{
name: "Valid OptionalArrayOptionalCatTest2",
s: OptionalArrayOptionalCatTest2{
S: []Cat{{}},
},
wantNoErr: true,
},
{
name: "Invalid OptionalArrayOptionalCatTest2.S[0]",
s: OptionalArrayOptionalCatTest2{
S: []Cat{{Name: "123", Age: 5}},
},
wantMessage: "S[0].Name: '123' does validate as 'alpha'",
},

// ArrayInterfaceTest
{
name: "Valid ArrayInterfaceTest",
Expand Down Expand Up @@ -433,6 +467,10 @@ func TestValidateStruct_Map(t *testing.T) {
M map[string]Cat `valid:"optional ; optional"`
}

OptionalMapOptionalCatTest2 struct {
M map[string]Cat `valid:"optional"`
}

MapInterfaceTest struct {
M map[string]interface{} `valid:"required"`
}
Expand Down Expand Up @@ -628,6 +666,40 @@ func TestValidateStruct_Map(t *testing.T) {
wantMessage: "M[key1].Name: '123' does validate as 'alpha'",
},

// OptionalMapOptionalCatTest2
{
name: "Valid OptionalMapOptionalCatTest2 empty",
s: OptionalMapOptionalCatTest2{
M: map[string]Cat{},
},
wantNoErr: true,
},
{
name: "Valid OptionalMapOptionalCatTest2 nil",
s: OptionalMapOptionalCatTest2{
M: nil,
},
wantNoErr: true,
},
{
name: "Valid OptionalMapOptionalCatTest2",
s: OptionalMapOptionalCatTest2{
M: map[string]Cat{
"key1": {},
},
},
wantNoErr: true,
},
{
name: "Invalid OptionalMapOptionalCatTest2.M[key1]",
s: OptionalMapOptionalCatTest2{
M: map[string]Cat{
"key1": {Name: "123", Age: 5},
},
},
wantMessage: "M[key1].Name: '123' does validate as 'alpha'",
},

// MapInterfaceTest
{
name: "Valid MapInterfaceTest",
Expand Down

0 comments on commit 25c931e

Please sign in to comment.