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 {
return r.getNamedRoutes()[name] 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 // 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 // Special case: when a route sets a path prefix, strict slash is
// automatically set to false for that route because the redirect behavior // automatically set to false for that route because the redirect behavior

27
mux_test.go

@ -151,6 +151,33 @@ func TestPath(t *testing.T) {
path: "/111/222/333", path: "/111/222/333",
shouldMatch: true, 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", title: "Path route, wrong path in request in request URL",
route: new(Route).Path("/111/222/333"), route: new(Route).Path("/111/222/333"),

13
route.go

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

Loading…
Cancel
Save