Exemplo n.º 1
0
        public void ExecuteThrowsIfParametersIsNull()
        {
            // Arrange
            ReflectedActionDescriptor ad = GetActionDescriptor();

            // Act & assert
            Assert.ThrowsArgumentNull(
                delegate { ad.Execute(new Mock <ControllerContext>().Object, null); }, "parameters");
        }
Exemplo n.º 2
0
        public void ExecuteThrowsIfControllerContextIsNull()
        {
            // Arrange
            ReflectedActionDescriptor ad = GetActionDescriptor();

            // Act & assert
            Assert.ThrowsArgumentNull(
                delegate { ad.Execute(null, new Dictionary <string, object>()); }, "controllerContext");
        }
Exemplo n.º 3
0
        public void ExecuteThrowsIfParametersIsMissingAValue()
        {
            // Arrange
            ReflectedActionDescriptor   ad         = GetActionDescriptor(_int32EqualsIntMethod);
            Dictionary <string, object> parameters = new Dictionary <string, object>();

            // Act & assert
            Assert.Throws <ArgumentException>(
                delegate { ad.Execute(new Mock <ControllerContext>().Object, parameters); },
                @"The parameters dictionary does not contain an entry for parameter 'obj' of type 'System.Int32' for method 'Boolean Equals(Int32)' in 'System.Int32'. The dictionary must contain an entry for each parameter, including parameters that have null values.
Parameter name: parameters");
        }
Exemplo n.º 4
0
        public void ExecuteThrowsIfParametersContainsValueOfWrongTypeForParameter()
        {
            // Arrange
            ReflectedActionDescriptor   ad         = GetActionDescriptor(_int32EqualsIntMethod);
            Dictionary <string, object> parameters = new Dictionary <string, object>()
            {
                { "obj", "notAnInteger" }
            };

            // Act & assert
            Assert.Throws <ArgumentException>(
                delegate { ad.Execute(new Mock <ControllerContext>().Object, parameters); },
                @"The parameters dictionary contains an invalid entry for parameter 'obj' for method 'Boolean Equals(Int32)' in 'System.Int32'. The dictionary contains a value of type 'System.String', but the parameter requires a value of type 'System.Int32'.
Parameter name: parameters");
        }
Exemplo n.º 5
0
        public void ExecuteThrowsIfParametersContainsNullForNonNullableParameter()
        {
            // Arrange
            ReflectedActionDescriptor   ad         = GetActionDescriptor(_int32EqualsIntMethod);
            Dictionary <string, object> parameters = new Dictionary <string, object>()
            {
                { "obj", null }
            };

            // Act & assert
            Assert.Throws <ArgumentException>(
                delegate { ad.Execute(new Mock <ControllerContext>().Object, parameters); },
                @"The parameters dictionary contains a null entry for parameter 'obj' of non-nullable type 'System.Int32' for method 'Boolean Equals(Int32)' in 'System.Int32'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
Parameter name: parameters");
        }
        public void ExecuteThrowsIfParametersContainsNullForNonNullableParameter()
        {
            // Arrange
            ReflectedActionDescriptor   ad         = GetActionDescriptor(_int32EqualsIntMethod);
            Dictionary <string, object> parameters = new Dictionary <string, object>()
            {
                { "obj", null }
            };

            // Act & assert
            ExceptionHelper.ExpectArgumentException(
                delegate {
                ad.Execute(new Mock <ControllerContext>().Object, parameters);
            },
                @"The parameters dictionary contains a null entry for parameter 'obj' of non-nullable type 'System.Int32' for method 'Boolean Equals(Int32)' in 'System.Int32'. To make a parameter optional its type should be either a reference type or a Nullable type.
Parameter name: parameters");
        }
Exemplo n.º 7
0
        /// <summary>
        /// Начинает выполнение асинхронной операции, описанной в action'e
        /// </summary>
        /// <param name="controllerContext">текущий контекст контроллера</param>
        /// <param name="parameters">параметры action'а</param>
        /// <param name="callback">делегат, который вызывается после завершения
        /// асинхронной операции</param>
        /// <param name="state">дополнительное состояние</param>
        /// <returns>возвращает асинхронную операцию в виде <see cref="IAsyncResult" /></returns>
        public override IAsyncResult BeginExecute(
            ControllerContext controllerContext, IDictionary <string, object> parameters, AsyncCallback callback, object state)
        {
            var rad    = new ReflectedActionDescriptor(_methodInfo, ActionName, ControllerDescriptor);
            var result = rad.Execute(controllerContext, parameters) as Task;

            if (result == null)
            {
                throw new InvalidOperationException(
                          String.Format("Метод {0} должен был вернуть Task!", _methodInfo));
            }

            if (callback != null)
            {
                result.ContinueWith(_ => callback(result));
            }

            return(result);
        }
Exemplo n.º 8
0
        public void ExecuteCallsMethodInfoOnSuccess()
        {
            // Arrange
            Mock <ControllerContext> mockControllerContext = new Mock <ControllerContext>();

            mockControllerContext.Setup(c => c.Controller).Returns(new ConcatController());
            Dictionary <string, object> parameters = new Dictionary <string, object>()
            {
                { "a", "hello " },
                { "b", "world" }
            };

            ReflectedActionDescriptor ad = GetActionDescriptor(typeof(ConcatController).GetMethod("Concat"));

            // Act
            object result = ad.Execute(mockControllerContext.Object, parameters);

            // Assert
            Assert.Equal("hello world", result);
        }