Browse Source

Document behaviour of StrictSlash and PathPrefix better, and add tests to nail this down

pull/51/head
Thomas ten Cate 12 years ago
parent
commit
033224c12e
  1. 9
      mux.go
  2. 27
      mux_test.go
  3. 13
      route.go

9
mux.go

@ -109,10 +109,15 @@ func (r *Router) GetRoute(name string) *Route { @@ -109,10 +109,15 @@ func (r *Router) GetRoute(name string) *Route {
return r.getNamedRoutes()[name]
}
// StrictSlash defines the slash behavior for new routes.
// StrictSlash defines the trailing slash behavior for new routes. The initial
// value is false.
//
// When true, if the route path is "/path/", accessing "/path" will redirect
// to the former and vice versa.
// to the former and vice versa. In other words, your application will always
// see the path as specified in the route.
//
// When false, if the route path is "/path", accessing "/path/" will not match
// this route and vice versa.
//
// Special case: when a route sets a path prefix, strict slash is
// automatically set to false for that route because the redirect behavior

27
mux_test.go

@ -151,6 +151,33 @@ func TestPath(t *testing.T) { @@ -151,6 +151,33 @@ func TestPath(t *testing.T) {
path: "/111/222/333",
shouldMatch: true,
},
{
title: "Path route, match with trailing slash in request and path",
route: new(Route).Path("/111/"),
request: newRequest("GET", "http://localhost/111/"),
vars: map[string]string{},
host: "",
path: "/111/",
shouldMatch: true,
},
{
title: "Path route, do not match with trailing slash in path",
route: new(Route).Path("/111/"),
request: newRequest("GET", "http://localhost/111"),
vars: map[string]string{},
host: "",
path: "/111",
shouldMatch: false,
},
{
title: "Path route, do not match with trailing slash in request",
route: new(Route).Path("/111"),
request: newRequest("GET", "http://localhost/111/"),
vars: map[string]string{},
host: "",
path: "/111/",
shouldMatch: false,
},
{
title: "Path route, wrong path in request in request URL",
route: new(Route).Path("/111/222/333"),

13
route.go

@ -284,10 +284,15 @@ func (r *Route) Path(tpl string) *Route { @@ -284,10 +284,15 @@ func (r *Route) Path(tpl string) *Route {
// PathPrefix -----------------------------------------------------------------
// PathPrefix adds a matcher for the URL path prefix. Note that it does not
// treat slashes specially ("/foobar/" will be matched by the prefix "/foo") so
// in most cases you'll want to use a trailing slash here. See Route.Path() for
// details on the tpl argument.
// PathPrefix adds a matcher for the URL path prefix. This matches if the given
// template is a prefix of the full URL path. See Route.Path() for details on
// the tpl argument.
//
// Note that it does not treat slashes specially ("/foobar/" will be matched by
// the prefix "/foo") so you may want to use a trailing slash here.
//
// Also note that the setting of Router.StrictSlash() has no effect on routes
// with a PathPrefix matcher.
func (r *Route) PathPrefix(tpl string) *Route {
r.strictSlash = false
r.err = r.addRegexpMatcher(tpl, false, true)

Loading…
Cancel
Save