private IEnumerable <RouteDataItemModel> ProcessRouteData(MvcRouteValueDictionary dataDefaults, RouteDataMessage routeMessage) { if (dataDefaults == null || dataDefaults.Count == 0) { return(null); } List <RouteDataItemModel> routeData = new List <RouteDataItemModel>(); foreach (KeyValuePair <string, object> dataDefault in dataDefaults) { RouteDataItemModel routeDataItemModel = new RouteDataItemModel(); routeDataItemModel.PlaceHolder = dataDefault.Key; routeDataItemModel.DefaultValue = dataDefault.Value; if (routeMessage != null && routeMessage.Values != null) { routeDataItemModel.ActualValue = routeMessage.Values[dataDefault.Key]; } routeData.Add(routeDataItemModel); } return(routeData); }
public void MatchConstraintMessageToRoute(Routes tab, ITabContext context, System.Web.Routing.IRouteConstraint constraint, RoutesInspector routeInspector, IInspectorContext routeInspectorContext) { var route = new System.Web.Routing.Route("url", new System.Web.Routing.RouteValueDictionary { { "Test", "Other" } }, new System.Web.Routing.RouteValueDictionary { { "Test", constraint } }, new System.Web.Routing.RouteValueDictionary { { "Data", "Tokens" } }, new System.Web.Routing.PageRouteHandler("~/Path")); System.Web.Routing.RouteTable.Routes.Clear(); System.Web.Routing.RouteTable.Routes.Add(route); routeInspectorContext.Setup(x => x.ProxyFactory).Returns(new CastleDynamicProxyFactory(routeInspectorContext.Logger, routeInspectorContext.MessageBroker, () => new ExecutionTimer(new Stopwatch()), () => new RuntimePolicy())); routeInspector.Setup(routeInspectorContext); route = (System.Web.Routing.Route)System.Web.Routing.RouteTable.Routes[0]; var routeMessage = new RouteDataMessage(route.GetHashCode(), new System.Web.Routing.RouteData(), "routeName") .AsSourceMessage(route.GetType(), null) .AsTimedMessage(new TimerResult { Duration = TimeSpan.FromMilliseconds(19) }); var constraintMessage = new ProcessConstraintMessage(route.GetHashCode(), constraint.GetHashCode(), true, "test", constraint, (System.Web.Routing.RouteValueDictionary)null, System.Web.Routing.RouteDirection.IncomingRequest) .AsTimedMessage(new TimerResult { Duration = TimeSpan.FromMilliseconds(25) }) .AsSourceMessage(route.GetType(), null); context.TabStore.Setup(mb => mb.Contains(typeof(IList <ProcessConstraintMessage>).AssemblyQualifiedName)).Returns(true).Verifiable(); context.TabStore.Setup(mb => mb.Contains(typeof(IList <RouteDataMessage>).AssemblyQualifiedName)).Returns(true).Verifiable(); context.TabStore.Setup(mb => mb.Get(typeof(IList <ProcessConstraintMessage>).AssemblyQualifiedName)).Returns(new List <ProcessConstraintMessage> { constraintMessage }).Verifiable(); context.TabStore.Setup(mb => mb.Get(typeof(IList <RouteDataMessage>).AssemblyQualifiedName)).Returns(new List <RouteDataMessage> { routeMessage }).Verifiable(); var model = tab.GetData(context) as List <RouteModel>; var itemModel = model[0]; Assert.NotNull(model); Assert.Equal(1, model.Count); Assert.NotNull(itemModel.Constraints); Assert.True(itemModel.IsMatch); Assert.Equal("Test", ((List <RouteConstraintModel>)itemModel.Constraints)[0].ParameterName); Assert.Equal(true, ((List <RouteConstraintModel>)itemModel.Constraints)[0].IsMatch); Assert.NotNull(itemModel.DataTokens); Assert.Equal("Tokens", itemModel.DataTokens["Data"]); Assert.NotNull(itemModel.RouteData); Assert.Equal("Other", ((List <RouteDataItemModel>)itemModel.RouteData)[0].DefaultValue); }
private RouteModel GetRouteModelForRoute(ITabContext context, MvcRouteBase routeBase, Dictionary <int, List <RouteDataMessage> > routeMessages, Dictionary <int, Dictionary <int, List <ProcessConstraintMessage> > > constraintMessages) { RouteModel routeModel = new RouteModel(); RouteDataMessage routeMessage = SafeFirstOrDefault(routeMessages.GetValueOrDefault(routeBase.GetHashCode())); if (routeMessage != null) { routeModel.Duration = routeMessage.Duration; routeModel.IsMatch = routeMessage.IsMatch; } MvcRoute route = routeBase as MvcRoute; if (route != null) { routeModel.Area = (route.DataTokens != null && route.DataTokens.ContainsKey("area")) ? route.DataTokens["area"].ToString() : null; routeModel.Url = route.Url; // Append localizations if possible LocalizationCollectionRoute localizationCollectionRoute = null; FieldInfo fieldInfo = route.GetType().GetField("__target"); if (fieldInfo != null) { localizationCollectionRoute = fieldInfo.GetValue(route) as LocalizationCollectionRoute; } if (localizationCollectionRoute != null) { routeModel.Url += " (LocalizationRoute)"; routeModel.Url += Environment.NewLine; foreach (LocalizationRoute localizationRoute in localizationCollectionRoute.LocalizedRoutes.OrderBy(x => x.Culture)) { routeModel.Url += string.Format(Environment.NewLine + "{0} ({1})", localizationRoute.Url(), !string.IsNullOrEmpty(localizationRoute.Culture) ? localizationRoute.Culture : "neutral"); } if (!localizationCollectionRoute.LocalizedRoutes.Any()) { routeModel.Url += Environment.NewLine + "! No translations exists - this route will not be accessible !"; } } routeModel.RouteData = ProcessRouteData(route.Defaults, routeMessage); routeModel.Constraints = ProcessConstraints(context, route, constraintMessages); routeModel.DataTokens = ProcessDataTokens(route.DataTokens); } else { routeModel.Url = routeBase.ToString(); } IRouteNameMixin routeName = routeBase as IRouteNameMixin; if (routeName != null) { routeModel.Name = routeName.Name; } return(routeModel); }