示例#1
0
        public void ProcessRequestWithNormalControlFlowForAsynchronousController()
        {
            // Arrange
            Mock <HttpContextBase> mockHttpContext = new Mock <HttpContextBase>();

            mockHttpContext.Expect(c => c.Response.AppendHeader(MvcHandler.MvcVersionHeaderName, "1.0")).Verifiable();

            RequestContext  requestContext = new RequestContext(mockHttpContext.Object, GetRouteData());
            MvcAsyncHandler handler        = new MvcAsyncHandler(requestContext);

            MockAsyncResult         asyncResult    = new MockAsyncResult();
            Mock <IAsyncController> mockController = new Mock <IAsyncController>();

            mockController.Expect(c => c.BeginExecute(requestContext, It.IsAny <AsyncCallback>(), It.IsAny <object>())).Returns(asyncResult).Verifiable();
            mockController.Expect(c => c.EndExecute(asyncResult)).Verifiable();
            mockController.As <IDisposable>().Expect(c => c.Dispose()).AtMostOnce().Verifiable();

            ControllerBuilder builder = new ControllerBuilder();

            builder.SetControllerFactory(new SimpleControllerFactory(mockController.Object));
            handler.ControllerBuilder = builder;

            // Act
            IAsyncResult returnedAsyncResult = handler.BeginProcessRequest(mockHttpContext.Object, null, null);

            handler.EndProcessRequest(returnedAsyncResult);

            mockHttpContext.Verify();
            mockController.Verify();
        }
示例#2
0
        public void ProcessRequestWhereControllerBeginExecuteThrows()
        {
            // Arrange
            Mock <HttpContextBase> mockHttpContext = new Mock <HttpContextBase>();

            mockHttpContext.Expect(c => c.Response.AppendHeader(MvcHandler.MvcVersionHeaderName, "1.0")).Verifiable();

            RequestContext  requestContext = new RequestContext(mockHttpContext.Object, GetRouteData());
            MvcAsyncHandler handler        = new MvcAsyncHandler(requestContext);

            Mock <IAsyncController> mockController = new Mock <IAsyncController>();

            mockController.Expect(c => c.BeginExecute(requestContext, It.IsAny <AsyncCallback>(), It.IsAny <object>())).Throws(new InvalidOperationException("Some exception text.")).Verifiable();
            mockController.As <IDisposable>().Expect(c => c.Dispose()).AtMostOnce().Verifiable();

            ControllerBuilder builder = new ControllerBuilder();

            builder.SetControllerFactory(new SimpleControllerFactory(mockController.Object));
            handler.ControllerBuilder = builder;

            // Act
            ExceptionHelper.ExpectInvalidOperationException(
                delegate {
                handler.BeginProcessRequest(mockHttpContext.Object, null, null);
            },
                @"Some exception text.");

            mockHttpContext.Verify();
            mockController.Verify();
        }
示例#3
0
        public void SynchronizationContextPropertyHasDefaultValue()
        {
            // Arrange
            RequestContext requestContext = new RequestContext(new Mock <HttpContextBase>().Object, GetRouteData());

            // Act
            MvcAsyncHandler invoker = new MvcAsyncHandler(requestContext);

            // Assert
            Assert.IsNotNull(invoker.SynchronizationContext);
        }
示例#4
0
        public void SynchronizationContextPropertyExplicitlySetByConstructor()
        {
            // Arrange
            SynchronizationContext syncContext    = new SynchronizationContext();
            RequestContext         requestContext = new RequestContext(new Mock <HttpContextBase>().Object, GetRouteData());

            // Act
            MvcAsyncHandler invoker = new MvcAsyncHandler(requestContext, syncContext);

            // Assert
            Assert.AreEqual(syncContext, invoker.SynchronizationContext);
        }
示例#5
0
        public void GetHttpHandler()
        {
            // Arrange
            RequestContext requestContext = new RequestContext(new Mock <HttpContextBase>().Object, new RouteData());
            IRouteHandler  routeHandler   = new MvcAsyncRouteHandler();

            // Act
            IHttpHandler httpHandler = routeHandler.GetHttpHandler(requestContext);

            // Assert
            Assert.IsInstanceOfType(httpHandler, typeof(MvcAsyncHandler));
            MvcAsyncHandler castHttpHandler = (MvcAsyncHandler)httpHandler;

            Assert.AreEqual(requestContext, castHttpHandler.RequestContext);
        }
示例#6
0
        public void ProcessRequestWithRouteWithoutControllerThrows()
        {
            // Arrange
            Mock <HttpContextBase> mockHttpContext = new Mock <HttpContextBase>();

            mockHttpContext.Expect(c => c.Response.AppendHeader(MvcHandler.MvcVersionHeaderName, "1.0")).Verifiable();

            RequestContext  requestContext = new RequestContext(mockHttpContext.Object, new RouteData());
            MvcAsyncHandler handler        = new MvcAsyncHandler(requestContext);

            // Act & assert
            ExceptionHelper.ExpectInvalidOperationException(
                delegate {
                handler.BeginProcessRequest(mockHttpContext.Object, null, null);
            },
                @"The RouteData must contain an item named 'controller' with a non-empty string value.");

            mockHttpContext.Verify();
        }
示例#7
0
        public void ProcessRequestThrowsIfControllerNotFound()
        {
            // Arrange
            Mock <HttpContextBase> mockHttpContext = new Mock <HttpContextBase>();

            mockHttpContext.Expect(c => c.Response.AppendHeader(MvcHandler.MvcVersionHeaderName, "1.0")).Verifiable();

            RequestContext  requestContext = new RequestContext(mockHttpContext.Object, GetRouteData());
            MvcAsyncHandler handler        = new MvcAsyncHandler(requestContext);

            ControllerBuilder builder = new ControllerBuilder();

            builder.SetControllerFactory(new SimpleControllerFactory(null));
            handler.ControllerBuilder = builder;

            // Act & assert
            ExceptionHelper.ExpectInvalidOperationException(
                delegate {
                handler.BeginProcessRequest(mockHttpContext.Object, null, null);
            },
                @"The IControllerFactory 'Microsoft.Web.Mvc.Test.MvcAsyncHandlerTest+SimpleControllerFactory' did not return a controller for a controller named 'Foo'.");

            mockHttpContext.Verify();
        }