thinkerou 2022-11-06 17:02:40 +08:00 committed by GitHub
parent 51aea73ba0
commit 8b9c55e8b0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 1 deletions

View File

@ -107,7 +107,8 @@ func countSections(path string) uint16 {
type nodeType uint8
const (
root nodeType = iota + 1
static nodeType = iota
root
param
catchAll
)
@ -173,6 +174,7 @@ walk:
child := node{
path: n.path[i:],
wildChild: n.wildChild,
nType: static,
indices: n.indices,
children: n.children,
handlers: n.handlers,
@ -604,6 +606,11 @@ walk: // Outer loop for walking the tree
return
}
if path == "/" && n.nType == static {
value.tsr = true
return
}
// No handle found. Check if a handle for this path + a
// trailing slash exists for trailing slash recommendation
for i, c := range []byte(n.indices) {

View File

@ -684,6 +684,26 @@ func TestTreeRootTrailingSlashRedirect(t *testing.T) {
}
}
func TestRedirectTrailingSlash(t *testing.T) {
var data = []struct {
path string
}{
{"/hello/:name"},
{"/hello/:name/123"},
{"/hello/:name/234"},
}
node := &node{}
for _, item := range data {
node.addRoute(item.path, fakeHandler("test"))
}
value := node.getValue("/hello/abx/", nil, getSkippedNodes(), false)
if value.tsr != true {
t.Fatalf("want true, is false")
}
}
func TestTreeFindCaseInsensitivePath(t *testing.T) {
tree := &node{}