Exemplo n.º 1
0
        public void EndExecuteThrowsIfCalledPrematurely()
        {
            // Arrange
            ExecuteController        controller            = new ExecuteController();
            Mock <ControllerContext> mockControllerContext = new Mock <ControllerContext>();

            mockControllerContext.Expect(c => c.Controller).Returns(controller);
            ControllerContext controllerContext = mockControllerContext.Object;

            Dictionary <string, object> parameters = new Dictionary <string, object>()
            {
                { "id", 42 }
            };

            ReflectedDelegatePatternActionDescriptor ad = GetActionDescriptor(_actionMethod);

            // Act & assert
            controller.AsyncManager.OutstandingOperations.Increment();
            IAsyncResult asyncResult = ad.BeginExecute(controllerContext, parameters, null, null);

            ExceptionHelper.ExpectInvalidOperationException(
                delegate {
                ad.EndExecute(asyncResult);
            },
                @"EndExecute() was called prematurely.");
        }
Exemplo n.º 2
0
        public void GetFiltersUsesMethodReflectedTypeRatherThanMethodDeclaringType()
        {
            // DevDiv 208062: Action filters specified on derived class won't run if the action method is on a base class

            // Arrange
            ControllerBase    controller = new GetMemberChainDerivedController();
            ControllerContext context    = new Mock <ControllerContext>().Object;
            MethodInfo        methodInfo = typeof(GetMemberChainDerivedController).GetMethod("SomeVirtual");
            ReflectedDelegatePatternActionDescriptor ad = GetActionDescriptor(methodInfo);

            // Act
            FilterInfo filters = ad.GetFilters();

            // Assert
            Assert.AreEqual(2, filters.AuthorizationFilters.Count, "Wrong number of authorization filters.");
            Assert.AreEqual("BaseClass", ((KeyedFilterAttribute)filters.AuthorizationFilters[0]).Key);
            Assert.AreEqual("BaseMethod", ((KeyedFilterAttribute)filters.AuthorizationFilters[1]).Key);

            Assert.AreEqual(3, filters.ActionFilters.Count, "Wrong number of action filters.");
            Assert.AreEqual("BaseClass", ((KeyedFilterAttribute)filters.ActionFilters[0]).Key);
            Assert.AreEqual("BaseMethod", ((KeyedFilterAttribute)filters.ActionFilters[1]).Key);
            Assert.AreEqual("DerivedClass", ((KeyedFilterAttribute)filters.ActionFilters[2]).Key);

            Assert.AreEqual(3, filters.ResultFilters.Count, "Wrong number of result filters.");
            Assert.AreEqual("BaseClass", ((KeyedFilterAttribute)filters.ResultFilters[0]).Key);
            Assert.AreEqual("BaseMethod", ((KeyedFilterAttribute)filters.ResultFilters[1]).Key);
            Assert.AreEqual("DerivedClass", ((KeyedFilterAttribute)filters.ResultFilters[2]).Key);

            Assert.AreEqual(1, filters.ExceptionFilters.Count, "Wrong number of exception filters.");
            Assert.AreEqual("BaseClass", ((KeyedFilterAttribute)filters.ExceptionFilters[0]).Key);
        }
Exemplo n.º 3
0
        public void Execute()
        {
            // Arrange
            Mock <ControllerContext> mockControllerContext = new Mock <ControllerContext>();

            mockControllerContext.Expect(c => c.Controller).Returns(new ExecuteController());
            ControllerContext controllerContext = mockControllerContext.Object;

            Dictionary <string, object> parameters = new Dictionary <string, object>()
            {
                { "id", 42 }
            };

            ReflectedDelegatePatternActionDescriptor ad = GetActionDescriptor(_actionMethod);

            SignalContainer <object> resultContainer = new SignalContainer <object>();
            AsyncCallback            callback        = ar => {
                object o = ad.EndExecute(ar);
                resultContainer.Signal(o);
            };

            // Act
            ad.BeginExecute(controllerContext, parameters, callback, null);
            object retVal = resultContainer.Wait();

            // Assert
            Assert.AreEqual(84, retVal);
        }
Exemplo n.º 4
0
        public void GetFilters()
        {
            // Arrange
            ControllerBase    controller = new GetMemberChainSubderivedController();
            ControllerContext context    = new Mock <ControllerContext>().Object;
            MethodInfo        methodInfo = typeof(GetMemberChainSubderivedController).GetMethod("SomeVirtual");
            ReflectedDelegatePatternActionDescriptor ad = GetActionDescriptor(methodInfo);

            // Act
            FilterInfo filters = ad.GetFilters();

            // Assert
            Assert.AreEqual(2, filters.AuthorizationFilters.Count, "Wrong number of authorization filters.");
            Assert.AreEqual("BaseClass", ((KeyedFilterAttribute)filters.AuthorizationFilters[0]).Key);
            Assert.AreEqual("BaseMethod", ((KeyedFilterAttribute)filters.AuthorizationFilters[1]).Key);

            Assert.AreEqual(5, filters.ActionFilters.Count, "Wrong number of action filters.");
            Assert.AreEqual("BaseClass", ((KeyedFilterAttribute)filters.ActionFilters[0]).Key);
            Assert.AreEqual("BaseMethod", ((KeyedFilterAttribute)filters.ActionFilters[1]).Key);
            Assert.AreEqual("DerivedClass", ((KeyedFilterAttribute)filters.ActionFilters[2]).Key);
            Assert.AreEqual("SubderivedClass", ((KeyedFilterAttribute)filters.ActionFilters[3]).Key);
            Assert.AreEqual("SubderivedMethod", ((KeyedFilterAttribute)filters.ActionFilters[4]).Key);

            Assert.AreEqual(5, filters.ResultFilters.Count, "Wrong number of result filters.");
            Assert.AreEqual("BaseClass", ((KeyedFilterAttribute)filters.ResultFilters[0]).Key);
            Assert.AreEqual("BaseMethod", ((KeyedFilterAttribute)filters.ResultFilters[1]).Key);
            Assert.AreEqual("DerivedClass", ((KeyedFilterAttribute)filters.ResultFilters[2]).Key);
            Assert.AreEqual("SubderivedClass", ((KeyedFilterAttribute)filters.ResultFilters[3]).Key);
            Assert.AreEqual("SubderivedMethod", ((KeyedFilterAttribute)filters.ResultFilters[4]).Key);

            Assert.AreEqual(1, filters.ExceptionFilters.Count, "Wrong number of exception filters.");
            Assert.AreEqual("BaseClass", ((KeyedFilterAttribute)filters.ExceptionFilters[0]).Key);
        }
Exemplo n.º 5
0
        public void IsDefined()
        {
            // Arrange
            ReflectedDelegatePatternActionDescriptor ad = new ReflectedDelegatePatternActionDescriptor(_actionMethod, "SomeAction", new Mock <ControllerDescriptor>().Object);

            // Act
            bool isDefined = ad.IsDefined(typeof(AuthorizeAttribute), true /* inherit */);

            // Assert
            Assert.IsTrue(isDefined);
        }
Exemplo n.º 6
0
        public void GetCustomAttributesFilterByType()
        {
            // Arrange
            ReflectedDelegatePatternActionDescriptor ad = GetActionDescriptor(_actionMethod);

            // Act
            object[] attributes = ad.GetCustomAttributes(typeof(OutputCacheAttribute), true /* inherit */);

            // Assert
            Assert.AreEqual(0, attributes.Length);
        }
Exemplo n.º 7
0
        public void ExecuteThrowsIfControllerContextIsNull()
        {
            // Arrange
            ReflectedDelegatePatternActionDescriptor ad = GetActionDescriptor(null);

            // Act & assert
            ExceptionHelper.ExpectArgumentNullException(
                delegate {
                ad.BeginExecute(null, null, null, null);
            }, "controllerContext");
        }
Exemplo n.º 8
0
        public void GetCustomAttributes()
        {
            // Arrange
            ReflectedDelegatePatternActionDescriptor ad = GetActionDescriptor(_actionMethod);

            // Act
            object[] attributes = ad.GetCustomAttributes(true /* inherit */);

            // Assert
            Assert.AreEqual(1, attributes.Length);
            Assert.IsInstanceOfType(attributes[0], typeof(AuthorizeAttribute));
        }
Exemplo n.º 9
0
        public void ExecuteThrowsIfParametersIsNull()
        {
            // Arrange
            ReflectedDelegatePatternActionDescriptor ad = GetActionDescriptor(null);
            ControllerContext controllerContext         = new Mock <ControllerContext>().Object;

            // Act & assert
            ExceptionHelper.ExpectArgumentNullException(
                delegate {
                ad.BeginExecute(controllerContext, null, null, null);
            }, "parameters");
        }
Exemplo n.º 10
0
        public void ExecuteThrowsIfCalledSynchronously()
        {
            // Arrange
            ReflectedDelegatePatternActionDescriptor ad = GetActionDescriptor(null);

            // Act & assert
            ExceptionHelper.ExpectInvalidOperationException(
                delegate {
                ad.Execute(null, null);
            },
                @"The action 'someName' cannot be called synchronously.");
        }
Exemplo n.º 11
0
        public void ConstructorSetsProperties()
        {
            // Arrange
            string actionName       = "SomeAction";
            ControllerDescriptor cd = new Mock <ControllerDescriptor>().Object;

            // Act
            ReflectedDelegatePatternActionDescriptor ad = new ReflectedDelegatePatternActionDescriptor(_actionMethod, actionName, cd);

            // Assert
            Assert.AreEqual(_actionMethod, ad.ActionMethod);
            Assert.AreEqual(actionName, ad.ActionName);
            Assert.AreEqual(cd, ad.ControllerDescriptor);
        }
        public void FindActionMethodWithDelegatePatternType()
        {
            // Arrange
            Type controllerType = typeof(MethodLocatorController);
            AsyncActionMethodSelector selector = new AsyncActionMethodSelector(controllerType);

            // Act
            ActionDescriptorCreator creator          = selector.FindActionMethod(null, "DelegatePattern");
            ActionDescriptor        actionDescriptor = creator("someName", new Mock <ControllerDescriptor>().Object);

            // Assert
            Assert.IsInstanceOfType(actionDescriptor, typeof(ReflectedDelegatePatternActionDescriptor));
            ReflectedDelegatePatternActionDescriptor castActionDescriptor = (ReflectedDelegatePatternActionDescriptor)actionDescriptor;

            Assert.AreEqual("DelegatePattern", castActionDescriptor.ActionMethod.Name);
        }
Exemplo n.º 13
0
        public void ExecuteThrowsIfActionMethodReturnsNull()
        {
            // Arrange
            Mock <ControllerContext> mockControllerContext = new Mock <ControllerContext>();

            mockControllerContext.Expect(c => c.Controller).Returns(new ExecuteController());
            ControllerContext controllerContext = mockControllerContext.Object;

            MethodInfo actionMethod = typeof(ExecuteController).GetMethod("FooReturnsNull");
            Dictionary <string, object> parameters = new Dictionary <string, object>();

            ReflectedDelegatePatternActionDescriptor ad = GetActionDescriptor(actionMethod);

            // Act & assert
            ExceptionHelper.ExpectInvalidOperationException(
                delegate {
                ad.BeginExecute(controllerContext, parameters, null, null);
            },
                @"Method 'System.Func`1[System.Int32] FooReturnsNull()' returned null. The method must return a value.");
        }
Exemplo n.º 14
0
        public void GetParametersWrapsParameterInfos()
        {
            // Arrange
            ParameterInfo pInfo = _actionMethod.GetParameters()[0];
            ReflectedDelegatePatternActionDescriptor ad = new ReflectedDelegatePatternActionDescriptor(_actionMethod, "SomeAction", new Mock <ControllerDescriptor>().Object);

            // Act
            ParameterDescriptor[] pDescsFirstCall  = ad.GetParameters();
            ParameterDescriptor[] pDescsSecondCall = ad.GetParameters();

            // Assert
            Assert.AreNotSame(pDescsFirstCall, pDescsSecondCall, "GetParameters() should return a new array on each invocation.");
            Assert.IsTrue(pDescsFirstCall.SequenceEqual(pDescsSecondCall), "Array elements were not equal.");
            Assert.AreEqual(1, pDescsFirstCall.Length);

            ReflectedParameterDescriptor pDesc = pDescsFirstCall[0] as ReflectedParameterDescriptor;

            Assert.IsNotNull(pDesc, "Parameter 0 should have been of type ReflectedParameterDescriptor.");
            Assert.AreSame(ad, pDesc.ActionDescriptor, "Parameter 0 Action did not match.");
            Assert.AreSame(pInfo, pDesc.ParameterInfo, "Parameter 0 ParameterInfo did not match.");
        }
Exemplo n.º 15
0
        public void GetSelectorsWrapsSelectorAttributes()
        {
            // Arrange
            ControllerContext controllerContext = new Mock <ControllerContext>().Object;
            Mock <MethodInfo> mockMethod        = new Mock <MethodInfo>();

            Mock <ActionMethodSelectorAttribute> mockAttr = new Mock <ActionMethodSelectorAttribute>();

            mockAttr.Expect(attr => attr.IsValidForRequest(controllerContext, mockMethod.Object)).Returns(true).Verifiable();
            mockMethod.Expect(m => m.GetCustomAttributes(typeof(ActionMethodSelectorAttribute), true)).Returns(new ActionMethodSelectorAttribute[] { mockAttr.Object });

            ReflectedDelegatePatternActionDescriptor ad = GetActionDescriptor(mockMethod.Object);

            // Act
            ICollection <ActionSelector> selectors = ad.GetSelectors();
            bool executedSuccessfully = selectors.All(s => s(controllerContext));

            // Assert
            Assert.AreEqual(1, selectors.Count);
            Assert.IsTrue(executedSuccessfully);
            mockAttr.Verify();
        }