Пример #1
0
        public void When_two_args_in_route_expect_all_to_be_present_in_order_to_match()
        {
            var route = new RegexRoute("/<one>/<two>");

            Assert.That(route.HasMatch("/one/two"));
            Assert.That(route.HasMatch("/one"), Is.False);
        }
        public static RegexRoute MapRegexRoute(this AreaRegistrationContext context, string name, string url, string pattern, object defaults, object constraints, string[] namespaces)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            if (url == null)
            {
                throw new ArgumentNullException("url");
            }

            if (pattern == null)
            {
                throw new ArgumentNullException("pattern");
            }

            var route = new RegexRoute(url, pattern, constraints, new MvcRouteHandler())
            {
                DataTokens = new RouteValueDictionary(),
                Defaults   = new RouteValueDictionary(defaults)
            };

            route.DataTokens.Add("Area", context.AreaName);

            if (namespaces != null && namespaces.Length > 0)
            {
                route.DataTokens["Namespaces"] = namespaces;
            }

            context.Routes.Add(name, route);

            return(route);
        }
        public void ShouldReturnNullIfRouteIsNotMatched()
        {
            var       route     = new RegexRoute("asdf", handler);
            RouteData routeData = route.GetRouteData("fdsa");

            Assert.IsNull(routeData, "routedata should be null if the path didn't match");
        }
        public void ShouldNotBeNullIfRouteIsMatched()
        {
            var       route     = new RegexRoute("asdf", handler);
            RouteData routeData = route.GetRouteData("asdf");

            Assert.AreSame(handler, routeData.RouteHandler);
            Assert.IsNotNull(routeData, "routeData should not be null if the path matched the regex");
        }
Пример #5
0
        public void When_route_contains_parameters_parameters_are_populated()
        {
            var route = new RegexRoute(@"foo/<bar>/");

            Assert.That(route.Parameters, Is.Not.Null);
            Assert.That(route.Parameters, Is.Not.Empty);
            Assert.That(route.Parameters.Length, Is.EqualTo(1));
            Assert.That(route.Parameters, Contains.Item("bar"));
        }
Пример #6
0
        public void When_route_contains_parameters_parameters_are_populated()
        {
            var route = new RegexRoute(@"foo/<bar>/");

            Assert.That(route.Parameters, Is.Not.Null);
            Assert.That(route.Parameters, Is.Not.Empty);
            Assert.That(route.Parameters.Length, Is.EqualTo(1));
            Assert.That(route.Parameters, Contains.Item("bar"));
        }
        public void ShouldHaveMatchedPairIfValueFound()
        {
            var       route     = new RegexRoute(@"(?<Controller>[a-zA-Z]+)_((?<Action>[a-zA-Z]+)_)?(?<Id>\d+)?", handler);
            RouteData routeData = route.GetRouteData("Products_View_0");

            Assert.AreSame(handler, routeData.RouteHandler);
            Assert.AreEqual("Products", routeData.Values["Controller"]);
            Assert.AreEqual("View", routeData.Values["Action"]);
            Assert.AreEqual("0", routeData.Values["Id"]);
        }
        public void ShouldHaveDefaultValuesIfPairFoundButDoesNotMatchAnything()
        {
            var       defaults  = new RouteValueDictionary(new { a = "A" });
            var       route     = new RegexRoute("asdf", defaults, handler);
            RouteData routeData = route.GetRouteData("asdf");

            Assert.AreSame(handler, routeData.RouteHandler);
            Assert.IsNotNull(routeData, "routeData should not be null if the path matched the regex");
            Assert.IsTrue(routeData.Values.ContainsKey("a"));
            Assert.AreEqual("A", routeData.Values["a"], "if the match failed, the value should be default");
        }
Пример #9
0
        private static Regex PrepareRegexRoutePattern(RegexRoute regexRoute)
        {
            Regex regex;

            if (!regexPatterns.TryGetValue(regexRoute.RegexRoutePattern, out regex))
            {
                regex = regexPatterns[regexRoute.RegexRoutePattern] = new Regex($"^{RouteHandler.RemoveAccents(regexRoute.RegexRoutePattern)}$", RegexOptions.Compiled | RegexOptions.IgnoreCase);
            }

            return(regex);
        }
        public void RouteGeneratorReturnsNullWhenNotAllParametersFilledIn()
        {
            var route = new RegexRoute(@"(?<Controller>[a-zA-Z]+)(_(?<Action>[a-zA-Z]+))?(_?<Id>\d+)?",
                                       "{Controller}_{Action}_{Id}", handler);
            RouteData       routeData = route.GetRouteData("Products_View_0");
            VirtualPathData pathData  = route.GetVirtualPath(new RequestContext(mr.PartialMock <HttpContextBase>(), routeData),
                                                             new RouteValueDictionary(
                                                                 new { Controller = "Accounts", Action = "Delete" }));

            Assert.IsNull(pathData);
        }
        public void RouteGeneratorGeneratesValidRouteWithoutDefaults()
        {
            var route = new RegexRoute(@"(?<Controller>[a-zA-Z]+)(_(?<Action>[a-zA-Z]+))?(_?<Id>\d+)?",
                                       "{Controller}_{Action}_{Id}", handler);
            RouteData       routeData = route.GetRouteData("Products_View_0");
            VirtualPathData pathData  = route.GetVirtualPath(new RequestContext(mr.PartialMock <HttpContextBase>(), routeData),
                                                             new RouteValueDictionary(
                                                                 new { Controller = "Accounts", Action = "Delete", Id = 0 }));

            Assert.AreEqual("Accounts_Delete_0", pathData.VirtualPath);
        }
Пример #12
0
        private static IDictionary <string, object> PrepareRouteData(string text, RegexRoute regexRoute)
        {
            var match = PrepareRegexRoutePattern(regexRoute).Match(RouteHandler.RemoveAccents(text));

            if (match.Success)
            {
                match = Regex.Match(text, regexRoute.RegexRoutePattern, RegexOptions.IgnoreCase);
                var routeData = new Dictionary <string, object>();
                var groups    = match.Groups;
                for (var i = 1; i < groups.Count; i++)
                {
                    var key = regexRoute.RegexRouteParameters[i - 1];
                    routeData[key] = groups[i].Value;
                }

                return(routeData);
            }

            return(null);
        }
        public void RouteGeneratorCallsCustomFunctionIfProvided()
        {
            bool                 called           = false;
            RequestContext       innerContext     = null;
            RouteValueDictionary innerRouteValues = null;
            RegexRoute           innerRoute       = null;
            VirtualPathData      innerPathData    = null;
            var route = new RegexRoute(
                @"(?<Controller>[a-zA-Z]+)(_(?<Action>[a-zA-Z]+))?(_?<Id>\d+)?",
                delegate(RequestContext context, RouteValueDictionary routeValues, RegexRoute thisRoute)
            {
                called           = true;
                innerContext     = context;
                innerRouteValues = routeValues;
                innerRoute       = thisRoute;
                innerPathData    = new VirtualPathData(thisRoute, "");
                return(innerPathData);
            },
                handler);
            RouteData       routeData      = route.GetRouteData("Products_View_0");
            var             values         = new RouteValueDictionary(new { Controller = "Accounts", Action = "Delete", Id = 0 });
            var             requestContext = new RequestContext(mr.PartialMock <HttpContextBase>(), routeData);
            VirtualPathData pathData       = route.GetVirtualPath(
                requestContext,
                values);

            Assert.IsTrue(called);
            Assert.IsNotNull(innerContext);
            Assert.AreSame(requestContext, innerContext);
            Assert.IsNotNull(innerRouteValues);
            Assert.AreSame(values, innerRouteValues);
            Assert.IsNotNull(innerRoute);
            Assert.AreSame(route, innerRoute);
            Assert.IsNotNull(pathData);
            Assert.AreSame(pathData, innerPathData);
        }
Пример #14
0
 public void When_route_path_different_to_request_path_match_is_not_successful()
 {
     var route = new RegexRoute("foo/");
     Assert.That(route.HasMatch("bar/"), Is.False);
 }
Пример #15
0
 public void When_route_path_same_as_request_path_match_is_successful()
 {
     var route = new RegexRoute("foo/");
     Assert.That(route.HasMatch("foo/"), Is.True);
 }
Пример #16
0
 public void When_two_args_in_route_expect_all_to_be_present_in_order_to_match()
 {
     var route = new RegexRoute("/<one>/<two>");
     Assert.That(route.HasMatch("/one/two"));
     Assert.That(route.HasMatch("/one"), Is.False);
 }
Пример #17
0
        public void When_route_that_has_parameter_has_parameter_queried_expect_value_is_returned()
        {
            var route = new RegexRoute(@"foo/<bar>/");

            Assert.That(route.GetParameterValue("foo/moishere/", "bar"), Is.EqualTo("moishere"));
        }
Пример #18
0
 public void When_route_path_contains_regex_and_path_that_matches_regex_match_is_successful()
 {
     var route = new RegexRoute(@"foo/<bar>/");
     Assert.That(route.HasMatch("foo/bar/"), Is.True);
 }
Пример #19
0
        public void When_route_path_same_as_request_path_match_is_successful()
        {
            var route = new RegexRoute("foo/");

            Assert.That(route.HasMatch("foo/"), Is.True);
        }
Пример #20
0
        public void When_route_that_has_parameter_has_parameter_queried_expect_value_is_returned()
        {
            var route = new RegexRoute(@"foo/<bar>/");

            Assert.That(route.GetParameterValue("foo/moishere/", "bar"), Is.EqualTo("moishere"));
        }
Пример #21
0
        public void When_route_path_different_to_request_path_match_is_not_successful()
        {
            var route = new RegexRoute("foo/");

            Assert.That(route.HasMatch("bar/"), Is.False);
        }
Пример #22
0
        public void When_route_path_contains_regex_and_path_that_matches_regex_match_is_successful()
        {
            var route = new RegexRoute(@"foo/<bar>/");

            Assert.That(route.HasMatch("foo/bar/"), Is.True);
        }