public void FindAction_DoesNotMatchCompletedMethod() { // Arrange Type controllerType = typeof(MethodLocatorController); AsyncActionMethodSelector selector = new AsyncActionMethodSelector(controllerType); // Act ActionDescriptorCreator creator = selector.FindAction(null, "EventPatternCompleted"); // Assert Assert.IsNull(creator, "No method should have matched."); }
public void FindAction_DoesNotMatchAsyncMethod() { // Arrange Type controllerType = typeof(MethodLocatorController); AsyncActionMethodSelector selector = new AsyncActionMethodSelector(controllerType); // Act ActionDescriptorCreator creator = selector.FindAction(null, "EventPatternAsync"); // Assert Assert.Null(creator); }
public void FindAction_ReturnsMatchingMethodIfOneMethodMatches() { // Arrange Type controllerType = typeof(SelectionAttributeController); AsyncActionMethodSelector selector = new AsyncActionMethodSelector(controllerType); // Act ActionDescriptorCreator creator = selector.FindAction(null, "OneMatch"); ActionDescriptor actionDescriptor = creator("someName", new Mock<ControllerDescriptor>().Object); // Assert var castActionDescriptor = Assert.IsType<ReflectedActionDescriptor>(actionDescriptor); Assert.Equal("OneMatch", castActionDescriptor.MethodInfo.Name); Assert.Equal(typeof(string), castActionDescriptor.MethodInfo.GetParameters()[0].ParameterType); }
public void FindActionMethod_GenericTask() { // Arrange Type controllerType = typeof(MethodLocatorController); AsyncActionMethodSelector selector = new AsyncActionMethodSelector(controllerType); // Act ActionDescriptorCreator creator = selector.FindAction(new ControllerContext(), "GenericTaskPattern"); ActionDescriptor actionDescriptor = creator("someName", new Mock <ControllerDescriptor>().Object); // Assert var castActionDescriptor = Assert.IsType <TaskAsyncActionDescriptor>(actionDescriptor); Assert.Equal("GenericTaskPattern", castActionDescriptor.TaskMethodInfo.Name); Assert.Equal(typeof(Task <string>), castActionDescriptor.TaskMethodInfo.ReturnType); }
public void FindAction_ReturnsMatchingMethodIfOneMethodMatches() { // Arrange Type controllerType = typeof(SelectionAttributeController); AsyncActionMethodSelector selector = new AsyncActionMethodSelector(controllerType); // Act ActionDescriptorCreator creator = selector.FindAction(new ControllerContext(), "OneMatch"); ActionDescriptor actionDescriptor = creator("someName", new Mock <ControllerDescriptor>().Object); // Assert var castActionDescriptor = Assert.IsType <ReflectedActionDescriptor>(actionDescriptor); Assert.Equal("OneMatch", castActionDescriptor.MethodInfo.Name); Assert.Equal(typeof(string), castActionDescriptor.MethodInfo.GetParameters()[0].ParameterType); }
public void FindAction_ReturnsMatchingMethodIfOneMethodMatches() { // Arrange Type controllerType = typeof(SelectionAttributeController); AsyncActionMethodSelector selector = new AsyncActionMethodSelector(controllerType); // Act ActionDescriptorCreator creator = selector.FindAction(null, "OneMatch"); ActionDescriptor actionDescriptor = creator("someName", new Mock<ControllerDescriptor>().Object); // Assert Assert.IsInstanceOfType(actionDescriptor, typeof(ReflectedActionDescriptor)); ReflectedActionDescriptor castActionDescriptor = (ReflectedActionDescriptor)actionDescriptor; Assert.AreEqual("OneMatch", castActionDescriptor.MethodInfo.Name, "Method named OneMatch() should have matched."); Assert.AreEqual(typeof(string), castActionDescriptor.MethodInfo.GetParameters()[0].ParameterType, "Method overload OneMatch(string) should have matched."); }
public void FindActionMethod_Asynchronous() { // Arrange Type controllerType = typeof(MethodLocatorController); AsyncActionMethodSelector selector = new AsyncActionMethodSelector(controllerType); // Act ActionDescriptorCreator creator = selector.FindAction(new ControllerContext(), "EventPattern"); ActionDescriptor actionDescriptor = creator("someName", new Mock <ControllerDescriptor>().Object); // Assert var castActionDescriptor = Assert.IsType <ReflectedAsyncActionDescriptor>(actionDescriptor); Assert.Equal("EventPatternAsync", castActionDescriptor.AsyncMethodInfo.Name); Assert.Equal("EventPatternCompleted", castActionDescriptor.CompletedMethodInfo.Name); }
public void FindAction_ReturnsMatchingMethodIfOneMethodMatches() { // Arrange Type controllerType = typeof(SelectionAttributeController); AsyncActionMethodSelector selector = new AsyncActionMethodSelector(controllerType); // Act ActionDescriptorCreator creator = selector.FindAction(null, "OneMatch"); ActionDescriptor actionDescriptor = creator("someName", new Mock <ControllerDescriptor>().Object); // Assert Assert.IsInstanceOfType(actionDescriptor, typeof(ReflectedActionDescriptor)); ReflectedActionDescriptor castActionDescriptor = (ReflectedActionDescriptor)actionDescriptor; Assert.AreEqual("OneMatch", castActionDescriptor.MethodInfo.Name, "Method named OneMatch() should have matched."); Assert.AreEqual(typeof(string), castActionDescriptor.MethodInfo.GetParameters()[0].ParameterType, "Method overload OneMatch(string) should have matched."); }
public void FindActionMethod_Asynchronous() { // Arrange Type controllerType = typeof(MethodLocatorController); AsyncActionMethodSelector selector = new AsyncActionMethodSelector(controllerType); // Act ActionDescriptorCreator creator = selector.FindAction(null, "EventPattern"); ActionDescriptor actionDescriptor = creator("someName", new Mock <ControllerDescriptor>().Object); // Assert Assert.IsInstanceOfType(actionDescriptor, typeof(ReflectedAsyncActionDescriptor)); ReflectedAsyncActionDescriptor castActionDescriptor = (ReflectedAsyncActionDescriptor)actionDescriptor; Assert.AreEqual("EventPatternAsync", castActionDescriptor.AsyncMethodInfo.Name); Assert.AreEqual("EventPatternCompleted", castActionDescriptor.CompletedMethodInfo.Name); }
public void FindAction_ReturnsMethodWithActionSelectionAttributeIfMultipleMethodsMatchRequest() { // DevDiv Bugs 212062: If multiple action methods match a request, we should match only the methods with an // [ActionMethod] attribute since we assume those methods are more specific. // Arrange Type controllerType = typeof(SelectionAttributeController); AsyncActionMethodSelector selector = new AsyncActionMethodSelector(controllerType); // Act ActionDescriptorCreator creator = selector.FindAction(new ControllerContext(), "ShouldMatchMethodWithSelectionAttribute"); ActionDescriptor actionDescriptor = creator("someName", new Mock <ControllerDescriptor>().Object); // Assert var castActionDescriptor = Assert.IsType <ReflectedActionDescriptor>(actionDescriptor); Assert.Equal("MethodHasSelectionAttribute1", castActionDescriptor.MethodInfo.Name); }
public void FindAction_MultipleMethodsSameActionOneWithRouteAttributeAndRouteWasMatched_ReturnsMethodWithRoutingAttribute() { // Arrange Type controllerType = typeof(WithRoutingAttributeController); AsyncActionMethodSelector selector = new AsyncActionMethodSelector(controllerType); var context = new ControllerContext(); context.RouteData = new RouteData(); context.RouteData.Route = DirectRouteTestHelpers.BuildDirectRouteStubsFrom <WithRoutingAttributeController>(c => c.Action())[0]; // Act ActionDescriptor matchedAction = selector.FindAction(context, "Action")("Action", new ReflectedAsyncControllerDescriptor(controllerType)); var matchedMethod = ((ReflectedActionDescriptor)matchedAction).MethodInfo; // Assert Assert.Equal(context.RouteData.GetTargetActionMethod(), matchedMethod); }
public void FindActionMethod_Asynchronous_ThrowsIfCompletionMethodNotFound() { // Arrange Type controllerType = typeof(MethodLocatorController); AsyncActionMethodSelector selector = new AsyncActionMethodSelector(controllerType); // Act & assert Assert.Throws <InvalidOperationException>( delegate { ActionDescriptorCreator creator = selector.FindAction( new ControllerContext(), "EventPatternWithoutCompletionMethod" ); }, @"Could not locate a method named 'EventPatternWithoutCompletionMethodCompleted' on controller type System.Web.Mvc.Async.Test.AsyncActionMethodSelectorTest+MethodLocatorController." ); }
public void FindAction_ThrowsIfMultipleMethodsMatch() { // Arrange Type controllerType = typeof(SelectionAttributeController); AsyncActionMethodSelector selector = new AsyncActionMethodSelector(controllerType); // Act & veriy Assert.Throws <AmbiguousMatchException>( delegate { selector.FindAction(new ControllerContext(), "TwoMatch"); }, "The current request for action 'TwoMatch' on controller type 'SelectionAttributeController' is ambiguous between the following action methods:" + Environment.NewLine + "Void TwoMatch2() on type System.Web.Mvc.Async.Test.AsyncActionMethodSelectorTest+SelectionAttributeController" + Environment.NewLine + "Void TwoMatch() on type System.Web.Mvc.Async.Test.AsyncActionMethodSelectorTest+SelectionAttributeController" ); }
public void FindActionMethod_Asynchronous_ThrowsIfMultipleCompletedMethodsMatched() { // Arrange Type controllerType = typeof(MethodLocatorController); AsyncActionMethodSelector selector = new AsyncActionMethodSelector(controllerType); // Act & assert Assert.Throws <AmbiguousMatchException>( delegate { ActionDescriptorCreator creator = selector.FindAction( new ControllerContext(), "EventPatternAmbiguous" ); }, "Lookup for method 'EventPatternAmbiguousCompleted' on controller type 'MethodLocatorController' failed because of an ambiguity between the following methods:" + Environment.NewLine + "Void EventPatternAmbiguousCompleted(Int32) on type System.Web.Mvc.Async.Test.AsyncActionMethodSelectorTest+MethodLocatorController" + Environment.NewLine + "Void EventPatternAmbiguousCompleted(System.String) on type System.Web.Mvc.Async.Test.AsyncActionMethodSelectorTest+MethodLocatorController" ); }
public void FindAction_ReturnsMethodWithActionSelectionAttributeIfMultipleMethodsMatchRequest() { // DevDiv Bugs 212062: If multiple action methods match a request, we should match only the methods with an // [ActionMethod] attribute since we assume those methods are more specific. // Arrange Type controllerType = typeof(SelectionAttributeController); AsyncActionMethodSelector selector = new AsyncActionMethodSelector(controllerType); // Act ActionDescriptorCreator creator = selector.FindAction(null, "ShouldMatchMethodWithSelectionAttribute"); ActionDescriptor actionDescriptor = creator("someName", new Mock<ControllerDescriptor>().Object); // Assert var castActionDescriptor = Assert.IsType<ReflectedActionDescriptor>(actionDescriptor); Assert.Equal("MethodHasSelectionAttribute1", castActionDescriptor.MethodInfo.Name); }
public void FindActionMethod_Asynchronous_ThrowsIfMultipleCompletedMethodsMatched() { // Arrange Type controllerType = typeof(MethodLocatorController); AsyncActionMethodSelector selector = new AsyncActionMethodSelector(controllerType); // Act & assert Assert.Throws<AmbiguousMatchException>( delegate { ActionDescriptorCreator creator = selector.FindAction(null, "EventPatternAmbiguous"); }, @"Lookup for method 'EventPatternAmbiguousCompleted' on controller type 'MethodLocatorController' failed because of an ambiguity between the following methods: Void EventPatternAmbiguousCompleted(Int32) on type System.Web.Mvc.Async.Test.AsyncActionMethodSelectorTest+MethodLocatorController Void EventPatternAmbiguousCompleted(System.String) on type System.Web.Mvc.Async.Test.AsyncActionMethodSelectorTest+MethodLocatorController"); }
public void FindActionMethod_Asynchronous_ThrowsIfCompletionMethodNotFound() { // Arrange Type controllerType = typeof(MethodLocatorController); AsyncActionMethodSelector selector = new AsyncActionMethodSelector(controllerType); // Act & assert Assert.Throws<InvalidOperationException>( delegate { ActionDescriptorCreator creator = selector.FindAction(null, "EventPatternWithoutCompletionMethod"); }, @"Could not locate a method named 'EventPatternWithoutCompletionMethodCompleted' on controller type System.Web.Mvc.Async.Test.AsyncActionMethodSelectorTest+MethodLocatorController."); }
public void FindActionMethod_GenericTask() { // Arrange Type controllerType = typeof(MethodLocatorController); AsyncActionMethodSelector selector = new AsyncActionMethodSelector(controllerType); // Act ActionDescriptorCreator creator = selector.FindAction(null, "GenericTaskPattern"); ActionDescriptor actionDescriptor = creator("someName", new Mock<ControllerDescriptor>().Object); // Assert var castActionDescriptor = Assert.IsType<TaskAsyncActionDescriptor>(actionDescriptor); Assert.Equal("GenericTaskPattern", castActionDescriptor.TaskMethodInfo.Name); Assert.Equal(typeof(Task<string>), castActionDescriptor.TaskMethodInfo.ReturnType); }
public void FindActionMethod_Asynchronous() { // Arrange Type controllerType = typeof(MethodLocatorController); AsyncActionMethodSelector selector = new AsyncActionMethodSelector(controllerType); // Act ActionDescriptorCreator creator = selector.FindAction(null, "EventPattern"); ActionDescriptor actionDescriptor = creator("someName", new Mock<ControllerDescriptor>().Object); // Assert var castActionDescriptor = Assert.IsType<ReflectedAsyncActionDescriptor>(actionDescriptor); Assert.Equal("EventPatternAsync", castActionDescriptor.AsyncMethodInfo.Name); Assert.Equal("EventPatternCompleted", castActionDescriptor.CompletedMethodInfo.Name); }
public void FindAction_ThrowsIfMultipleMethodsMatch() { // Arrange Type controllerType = typeof(SelectionAttributeController); AsyncActionMethodSelector selector = new AsyncActionMethodSelector(controllerType); // Act & veriy Assert.Throws<AmbiguousMatchException>( delegate { selector.FindAction(null, "TwoMatch"); }, @"The current request for action 'TwoMatch' on controller type 'SelectionAttributeController' is ambiguous between the following action methods: Void TwoMatch2() on type System.Web.Mvc.Async.Test.AsyncActionMethodSelectorTest+SelectionAttributeController Void TwoMatch() on type System.Web.Mvc.Async.Test.AsyncActionMethodSelectorTest+SelectionAttributeController"); }
public void FindAction_ReturnsNullIfNoMethodMatches() { // Arrange Type controllerType = typeof(SelectionAttributeController); AsyncActionMethodSelector selector = new AsyncActionMethodSelector(controllerType); // Act ActionDescriptorCreator creator = selector.FindAction(null, "ZeroMatch"); // Assert Assert.Null(creator); }
public void FindAction_NullContext_Throws() { // Arrange Type controllerType = typeof(MethodLocatorController); AsyncActionMethodSelector selector = new AsyncActionMethodSelector(controllerType); // Act & Assert Assert.Throws<ArgumentNullException>(() => selector.FindAction(null, "Action")); }
public void FindAction_MultipleMethodsSameActionOneWithRouteAttributeAndRouteWasMatched_ReturnsMethodWithRoutingAttribute() { // Arrange Type controllerType = typeof(WithRoutingAttributeController); AsyncActionMethodSelector selector = new AsyncActionMethodSelector(controllerType); var context = new ControllerContext(); context.RouteData = new RouteData(); context.RouteData.Route = DirectRouteTestHelpers.BuildDirectRouteStubsFrom<WithRoutingAttributeController>(c => c.Action())[0]; // Act ActionDescriptor matchedAction = selector.FindAction(context, "Action")("Action", new ReflectedAsyncControllerDescriptor(controllerType)); var matchedMethod = ((ReflectedActionDescriptor)matchedAction).MethodInfo; // Assert Assert.Equal(context.RouteData.GetTargetActionMethod(), matchedMethod); }