if n != nil { parts := parsePattern(n.pattern) for index, part := range parts { if part[0] == ':' { params[part[1:]] = searchParts[index] } if part[0] == '*' && len(part) > 1 { params[part[1:]] = strings.Join(searchParts[index:], "/") break } } return n, params }
funcTestParsePattern(t *testing.T) { ok := reflect.DeepEqual(parsePattern("/p/:name"), []string{"p", ":name"}) ok = ok && reflect.DeepEqual(parsePattern("/p/*"), []string{"p", "*"}) ok = ok && reflect.DeepEqual(parsePattern("/p/*name/*"), []string{"p", "*name"}) if !ok { t.Fatal("test parsePattern failed") } }
funcTestGetRoute(t *testing.T) { r := newTestRouter() n, ps := r.getRoute("GET", "/hello/geektutu")
if n == nil { t.Fatal("nil shouldn't be returned") }
if n.pattern != "/hello/:name" { t.Fatal("should match /hello/:name") }
if ps["name"] != "geektutu" { t.Fatal("name should be equal to 'geektutu'") }
if n != nil { parts := parsePattern(n.pattern) for index, part := range parts { if part[0] == ':' { params[part[1:]] = searchParts[index] } if part[0] == '*' && len(part) > 1 { params[part[1:]] = strings.Join(searchParts[index:], "/") break } } return n, params }
funcTestParsePattern(t *testing.T) { ok := reflect.DeepEqual(parsePattern("/p/:name"), []string{"p", ":name"}) ok = ok && reflect.DeepEqual(parsePattern("/p/*"), []string{"p", "*"}) ok = ok && reflect.DeepEqual(parsePattern("/p/*name/*"), []string{"p", "*name"}) if !ok { t.Fatal("test parsePattern failed") } }
funcTestGetRoute(t *testing.T) { r := newTestRouter() n, ps := r.getRoute("GET", "/hello/geektutu")
if n == nil { t.Fatal("nil shouldn't be returned") }
if n.pattern != "/hello/:name" { t.Fatal("should match /hello/:name") }
if ps["name"] != "geektutu" { t.Fatal("name should be equal to 'geektutu'") }