Fix match rule

This commit is contained in:
wweir
2019-01-25 15:27:56 +08:00
parent bde27f64ec
commit d5260d66df
2 changed files with 60 additions and 8 deletions
+4 -8
View File
@@ -52,7 +52,7 @@ func (n *node) add(secs []string) {
case 0:
return
case 1:
n.node[secs[length-1]] = &node{node: map[string]*node{}}
n.node[secs[length-1]] = &node{node: map[string]*node{"": &node{}}}
default:
subNode, ok := n.node[secs[length-1]]
if !ok {
@@ -70,15 +70,11 @@ func (n *Node) Match(item string) bool {
func (n *node) matchSecs(secs []string) bool {
length := len(secs)
if length == 0 {
switch len(n.node) {
case 0:
if _, ok := n.node[""]; ok {
return true
case 1:
_, ok := n.node["*"]
return ok
default:
return false
}
_, ok := n.node["*"]
return ok
}
if n, ok := n.node[secs[length-1]]; ok {
+56
View File
@@ -0,0 +1,56 @@
package util
import (
"testing"
)
func TestNode_Match(t *testing.T) {
type test struct {
arg string
want bool
}
tests := []struct {
name string
node *Node
tests []test
}{{
"simple",
NewNodeFromRules(".", "a.wweir.cc", "b.wweir.cc"),
[]test{
{"a.wweir.cc", true},
{"b.wweir.cc", true},
},
}, {
"parent",
NewNodeFromRules(".", "wweir.cc", "a.wweir.cc"),
[]test{
{"wweir.cc", true},
{"a.wweir.cc", true},
{"b.wweir.cc", false},
},
}, {
"fuzz1",
NewNodeFromRules(".", "wweir.cc", "*.wweir.cc"),
[]test{
{"wweir.cc", true},
{"a.wweir.cc", true},
},
}, {
"fuzz2",
NewNodeFromRules(".", "a.wweir.cc", "*.wweir.cc"),
[]test{
{"wweir.cc", true},
{"a.wweir.cc", true},
{"b.wweir.cc", true},
},
}}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
for _, test := range tt.tests {
if got := tt.node.Match(test.arg); got != test.want {
t.Errorf("Node.Match(%s) = %v, want %v", test.arg, got, test.want)
}
}
})
}
}