public static CapturingConstraint CaptureArgumentsFor <MOCK, DELEGATETYPE, OPTIONTYPE>(MOCK mock, Expression <DELEGATETYPE> methodExpression, Func <MOCK, IMethodOptions <OPTIONTYPE> > expectAction, Action <IMethodOptions <OPTIONTYPE> > optionsAction) where MOCK : class { var method = ReflectionHelper.GetMethod(methodExpression); var constraint = new CapturingConstraint(); var constraints = new List <AbstractConstraint>(); method.GetParameters().Each(p => constraints.Add(constraint)); var expectation = expectAction(mock).Constraints(constraints.ToArray()).Repeat.Any(); optionsAction(expectation); return(constraint); }
private static CapturingConstraint SetupConstraint <T>(MethodInfo method, IMethodOptions <T> options, Action <IMethodOptions <T> > optionsAction) { var constraint = new CapturingConstraint(); var constraints = new List <AbstractConstraint>(); foreach (ParameterInfo arg in method.GetParameters()) { constraints.Add(constraint); } options = options.Constraints(constraints.ToArray()).Repeat.Any(); if (optionsAction != null) { optionsAction(options); } return(constraint); }
public void GetVirtualPath_ConstraintsSeeDefaults_IfTheyAreSpecifiedOrAmbient() { // Arrange var constraint = new CapturingConstraint(); var route = CreateRoute( template: "slug/{controller}/{action}", defaults: new { otherthing = "17", thirdthing = "13" }, accept: true, constraints: new { c = constraint }); var context = CreateVirtualPathContext( values: new { action = "Store", thirdthing = "13" }, ambientValues: new { Controller = "Home", action = "Blog", otherthing = "17" }); var expectedValues = new RouteValueDictionary( new { controller = "Home", action = "Store", otherthing = "17", thirdthing = "13" }); // Act var path = route.GetVirtualPath(context); // Assert Assert.Equal("slug/Home/Store", path); Assert.Equal(expectedValues.OrderBy(kvp => kvp.Key), constraint.Values.OrderBy(kvp => kvp.Key)); }
public void GetVirtualPath_ConstraintsSeesDefault_WhenThereItsAParamter() { // Arrange var constraint = new CapturingConstraint(); var route = CreateRoute( template: "slug/{controller}/{action}", defaults: new { action = "Index" }, accept: true, constraints: new { c = constraint }); var context = CreateVirtualPathContext( values: new { controller = "Shopping" }, ambientValues: new { Controller = "Home", action = "Blog" }); var expectedValues = new RouteValueDictionary( new { controller = "Shopping", action = "Index" }); // Act var path = route.GetVirtualPath(context); // Assert Assert.Equal("slug/Shopping", path); Assert.Equal(expectedValues, constraint.Values); }
public void GetVirtualPath_ConstraintsDontSeeDefaults_WhenTheyArentParameters() { // Arrange var constraint = new CapturingConstraint(); var route = CreateRoute( template: "slug/{controller}/{action}", defaults: new { otherthing = "17" }, accept: true, constraints: new { c = constraint }); var context = CreateVirtualPathContext( values: new { action = "Store" }, ambientValues: new { Controller = "Home", action = "Blog" }); var expectedValues = new RouteValueDictionary( new { controller = "Home", action = "Store" }); // Act var path = route.GetVirtualPath(context); // Assert Assert.Equal("slug/Home/Store", path); Assert.Equal(expectedValues, constraint.Values); }
public void GetVirtualPath_ConstraintsDontSeeDefaults_WhenTheyArentParameters() { // Arrange var constraint = new CapturingConstraint(); var route = CreateRoute( template: "slug/{controller}/{action}", defaults: new { otherthing = "17" }, handleRequest: true, constraints: new { c = constraint }); var context = CreateVirtualPathContext( values: new { action = "Store" }, ambientValues: new { Controller = "Home", action = "Blog" }); var expectedValues = new RouteValueDictionary( new { controller = "Home", action = "Store" }); // Act var pathData = route.GetVirtualPath(context); // Assert Assert.Equal("/slug/Home/Store", pathData.VirtualPath); Assert.Same(route, pathData.Router); Assert.Empty(pathData.DataTokens); Assert.Equal(expectedValues, constraint.Values); }
public async Task RouteAsync_MergesExistingRouteData_PassedToConstraint() { // Arrange var template = "{controller}/{action}/{id:int}"; var context = CreateRouteContext("/Home/Index/5"); var originalRouteDataValues = context.RouteData.Values; originalRouteDataValues.Add("country", "USA"); var originalDataTokens = context.RouteData.DataTokens; originalDataTokens.Add("company", "Contoso"); IDictionary<string, object> routeValues = null; var mockTarget = new Mock<IRouter>(MockBehavior.Strict); mockTarget .Setup(s => s.RouteAsync(It.IsAny<RouteContext>())) .Callback<RouteContext>(ctx => { routeValues = ctx.RouteData.Values; ctx.Handler = NullHandler; }) .Returns(Task.FromResult(true)); var constraint = new CapturingConstraint(); var route = new Route( mockTarget.Object, template, defaults: null, constraints: new RouteValueDictionary(new { action = constraint }), dataTokens: new RouteValueDictionary(new { today = "Friday" }), inlineConstraintResolver: _inlineConstraintResolver); // Act await route.RouteAsync(context); // Assert Assert.NotNull(routeValues); Assert.True(routeValues.ContainsKey("country")); Assert.Equal("USA", routeValues["country"]); Assert.True(routeValues.ContainsKey("id")); Assert.Equal("5", routeValues["id"]); Assert.True(constraint.Values.ContainsKey("country")); Assert.Equal("USA", constraint.Values["country"]); Assert.True(constraint.Values.ContainsKey("id")); Assert.Equal("5", constraint.Values["id"]); Assert.True(context.RouteData.Values.ContainsKey("country")); Assert.Equal("USA", context.RouteData.Values["country"]); Assert.True(context.RouteData.Values.ContainsKey("id")); Assert.Equal("5", context.RouteData.Values["id"]); Assert.Same(originalRouteDataValues, context.RouteData.Values); Assert.Equal("Contoso", context.RouteData.DataTokens["company"]); Assert.Equal("Friday", context.RouteData.DataTokens["today"]); Assert.Same(originalDataTokens, context.RouteData.DataTokens); }
public void GetVirtualPath_ConstraintsSeeDefaults_IfTheyAreSpecifiedOrAmbient() { // Arrange var constraint = new CapturingConstraint(); var route = CreateRoute( template: "slug/{controller}/{action}", defaults: new { otherthing = "17", thirdthing = "13" }, accept: true, constraints: new { c = constraint }); var context = CreateVirtualPathContext( values: new { action = "Store", thirdthing = "13" }, ambientValues: new { Controller = "Home", action = "Blog", otherthing = "17" }); var expectedValues = new RouteValueDictionary( new { controller = "Home", action = "Store", otherthing = "17", thirdthing = "13" }); // Act var pathData = route.GetVirtualPath(context); // Assert Assert.Equal(new PathString("/slug/Home/Store"), pathData.VirtualPath); Assert.Same(route, pathData.Router); Assert.Empty(pathData.DataTokens); Assert.Equal(expectedValues.OrderBy(kvp => kvp.Key), constraint.Values.OrderBy(kvp => kvp.Key)); }
public void GetVirtualPath_ConstraintsSeesDefault_WhenThereItsAParamter() { // Arrange var constraint = new CapturingConstraint(); var route = CreateRoute( template: "slug/{controller}/{action}", defaults: new { action = "Index" }, accept: true, constraints: new { c = constraint }); var context = CreateVirtualPathContext( values: new { controller = "Shopping" }, ambientValues: new { Controller = "Home", action = "Blog" }); var expectedValues = new RouteValueDictionary( new { controller = "Shopping", action = "Index" }); // Act var pathData = route.GetVirtualPath(context); // Assert Assert.Equal(new PathString("/slug/Shopping"), pathData.VirtualPath); Assert.Same(route, pathData.Router); Assert.Empty(pathData.DataTokens); Assert.Equal(expectedValues, constraint.Values); }