diff --git a/.gitignore b/.gitignore index 600d2d3..6d0ee45 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -.vscode \ No newline at end of file +.vscode +.DS_Store \ No newline at end of file diff --git a/tree.go b/tree.go index c04d41d..119bc64 100644 --- a/tree.go +++ b/tree.go @@ -170,6 +170,7 @@ func (n *node) insertNode(key string, fullpath string) { } func (n *node) find(path string) (result resultFind) { + result.params = make(map[string]string) if path == "/" && n.key == path { if n.isRealNode { result.node = n @@ -194,7 +195,6 @@ func (n *node) find(path string) (result resultFind) { var ok bool var start, lenstr = 1, len(path) - result.params = make(map[string]string) for i := start; i < lenstr; i++ { if path[i] == '/' { key := path[start:i] @@ -227,7 +227,7 @@ func (n *node) find(path string) (result resultFind) { } key := path[start:] child, ok = n.children[key] - if !ok { + if !ok && key != "/" { child, ok = n.children[keyParam] if ok { result.params[child.paramName] = key diff --git a/tree_test.go b/tree_test.go index 9c82306..dfcef47 100644 --- a/tree_test.go +++ b/tree_test.go @@ -126,6 +126,27 @@ func TestTree(t *testing.T) { } } } +func TestEmptyParam(t *testing.T) { + tree := newTree() + tree.add("/test/:conf", nil) + tree.add("/test1/:conf/:test", nil) + + result := tree.root.find("/test/abc") + assert.Equal(t, map[string]string{ + "conf": "abc", + }, result.params) + + // not match anything + result = tree.root.find("/test/") + assert.Equal(t, map[string]string{}, result.params) + // not match anything + result = tree.root.find("/") + assert.Equal(t, map[string]string{}, result.params) + + // not match anything + result = tree.root.find("/test1/") + assert.Equal(t, map[string]string{}, result.params) +} func TestTreeNotFound(t *testing.T) { tree := newTree() tree.add("/v1/a", nil)