예제 #1
0
 public void RootRouteResolves()
 {
     var router = new Router();
     var handler = new object();
     router.AddRoute("GET", "", MakeNoArgumentHandler(handler));
     Assert.Equal(handler, router.ResolveRoute("GET", "/", _request.RouteTokens).HandleRequest(_request, _binders));
 }
예제 #2
0
 public void MissingRouteIsNull()
 {
     var router = new Router();
     var handler = new object();
     router.AddRoute("GET", "foo", MakeNoArgumentHandler(handler));
     Assert.Null(router.ResolveRoute("GET", "foo/bar", _request.RouteTokens));
 }
예제 #3
0
 public void MultiPartRouteResolvesWithDifferentSlashes()
 {
     var router = new Router();
     var handler = new object();
     router.AddRoute("GET", "foo/bar", MakeNoArgumentHandler(handler));
     Assert.Equal(handler, router.ResolveRoute("GET", "/foo/bar", _request.RouteTokens).HandleRequest(_request, _binders));
     Assert.Equal(handler, router.ResolveRoute("GET", "/foo/bar/", _request.RouteTokens).HandleRequest(_request, _binders));
     Assert.Equal(handler, router.ResolveRoute("GET", "foo/bar", _request.RouteTokens).HandleRequest(_request, _binders));
     Assert.Equal(handler, router.ResolveRoute("GET", "foo/bar/", _request.RouteTokens).HandleRequest(_request, _binders));
 }
예제 #4
0
 public void MultipleMultiPartRoutes()
 {
     var router = new Router();
     var handler1 = new object();
     var handler2 = new object();
     var handler3 = new object();
     var handler4 = new object();
     var handler5 = new object();
     router.AddRoute("GET", "", MakeNoArgumentHandler(handler1));
     router.AddRoute("GET", "foo", MakeNoArgumentHandler(handler2));
     router.AddRoute("GET", "foo/bar", MakeNoArgumentHandler(handler3));
     router.AddRoute("GET", "bar", MakeNoArgumentHandler(handler4));
     router.AddRoute("GET", "bar/foo", MakeNoArgumentHandler(handler5));
     Assert.Equal(handler1, router.ResolveRoute("GET", "/", _request.RouteTokens).HandleRequest(_request, _binders));
     Assert.Equal(handler2, router.ResolveRoute("GET", "/foo", _request.RouteTokens).HandleRequest(_request, _binders));
     Assert.Equal(handler3, router.ResolveRoute("GET", "/foo/bar", _request.RouteTokens).HandleRequest(_request, _binders));
     Assert.Equal(handler4, router.ResolveRoute("GET", "bar/", _request.RouteTokens).HandleRequest(_request, _binders));
     Assert.Equal(handler5, router.ResolveRoute("GET", "bar/foo/", _request.RouteTokens).HandleRequest(_request, _binders));
 }
예제 #5
0
 public void TokenizedRoutesSetValuesInRouteTokens()
 {
     var router = new Router();
     var handler = new object();
     var handler2 = new object();
     
     router.AddRoute("GET", "foo/{nah}", MakeNoArgumentHandler(handler));
     router.AddRoute("GET", "foo/{yep}/bar", MakeNoArgumentHandler(handler2));
     
     //since these tests should write to the dictionary use a local instead of being lazy
     var routeTokens = new Dictionary<string, string>();
     
     Assert.Equal(handler, router.ResolveRoute("GET", "foo/bar", routeTokens).HandleRequest(_request, _binders));
     Assert.Equal(routeTokens.Count, 1);
     Assert.Equal(routeTokens["nah"], "bar");
     Assert.Equal(handler2, router.ResolveRoute("GET", "foo/buzz/bar", routeTokens).HandleRequest(_request, _binders));
     
     Assert.Equal(routeTokens["yep"], "buzz");
 }
예제 #6
0
 public void DuplicatePathsShouldThrow()
 {
     var router = new Router();
     var handler = new object();
     router.AddRoute("GET", "foo", MakeNoArgumentHandler(handler));
     router.AddRoute("POST", "foo", MakeNoArgumentHandler(new object()));
     
     //using a new object because double registering the same handler should throw now, but I don't know if I want that
     Assert.Throws<DuplicateRouteRegistrationException>(() => router.AddRoute("GET", "/foo", MakeNoArgumentHandler(new object())));
 }