public static void AssertNoMethodCallWithArguments <TMockObject>(this TMockObject mockObject, Expression <Action <TMockObject> > expectedMethodCallExpression)
            where TMockObject : MockObject
        {
            if (mockObject == null)
            {
                throw new ArgumentNullException("mockObject");
            }

            if (expectedMethodCallExpression == null)
            {
                throw new ArgumentNullException("expectedMethodCallExpression");
            }

            MethodCallExpressionVisitor visitor = new MethodCallExpressionVisitor();

            visitor.Visit(expectedMethodCallExpression);

            RecordedMethodCall[] recordedMethodCalls = mockObject.RecordedMethodCalls
                                                       .Where(c => c.Method == visitor.MethodCallInfo)
                                                       .ToArray();

            Type[] parameterTypes = visitor.MethodCallInfo.GetParameters()
                                    .Select(p => p.ParameterType)
                                    .ToArray();

            Assert.IsFalse(recordedMethodCalls.Any(recordedMethodCall =>
                                                   UnitTestHelpers.CompareMethodCallArguments(parameterTypes, visitor.MethodCallArguments, recordedMethodCall.Arguments, mockObject.EqualityComparerFactory)));
        }
        public static void AssertMethodCallsCount <TMockObject>(this TMockObject mockObject, int expectedMethodCallsCount, Expression <Action <TMockObject> > expectedMethodCallExpression)
            where TMockObject : MockObject
        {
            if (mockObject == null)
            {
                throw new ArgumentNullException("mockObject");
            }

            if (expectedMethodCallExpression == null)
            {
                throw new ArgumentNullException("expectedMethodCallExpression");
            }

            if (expectedMethodCallsCount < 0)
            {
                throw new ArgumentOutOfRangeException("expectedMethodCallsCount");
            }

            MethodCallExpressionVisitor visitor = new MethodCallExpressionVisitor();

            visitor.Visit(expectedMethodCallExpression);

            RecordedMethodCall[] recordedMethodCalls = mockObject.RecordedMethodCalls
                                                       .Where(c => c.Method == visitor.MethodCallInfo)
                                                       .ToArray();

            Assert.AreEqual(expectedMethodCallsCount, recordedMethodCalls.Length);

            foreach (RecordedMethodCall record in recordedMethodCalls)
            {
                mockObject.RecordedMethodCalls.Remove(record);
            }
        }
        public static void AssertMethodCallWithArguments <TMockObject>(this TMockObject mockObject, Expression <Action <TMockObject> > expectedMethodCallExpression)
            where TMockObject : MockObject
        {
            if (mockObject == null)
            {
                throw new ArgumentNullException("mockObject");
            }

            if (expectedMethodCallExpression == null)
            {
                throw new ArgumentNullException("expectedMethodCallExpression");
            }

            MethodCallExpressionVisitor visitor = new MethodCallExpressionVisitor();

            visitor.Visit(expectedMethodCallExpression);

            RecordedMethodCall[] recordedMethodCalls = mockObject.RecordedMethodCalls
                                                       .Where(c => c.Method == visitor.MethodCallInfo)
                                                       .ToArray();

            Type[] parameterTypes = visitor.MethodCallInfo.GetParameters()
                                    .Select(p => p.ParameterType)
                                    .ToArray();

            RecordedMethodCall methodCallMatch = recordedMethodCalls.FirstOrDefault(recordedMethodCall =>
                                                                                    UnitTestHelpers.CompareMethodCallArguments(parameterTypes, visitor.MethodCallArguments, recordedMethodCall.Arguments, mockObject.EqualityComparerFactory));

            Assert.IsNotNull(methodCallMatch, "Method '{0}' was not called.", visitor.MethodCallInfo);

            mockObject.RecordedMethodCalls.Remove(methodCallMatch);
        }
        private static RecordedMethodCall AssertMethodCallOnceInternal <TMockObject>(this TMockObject mockObject, Expression <Action <TMockObject> > expectedMethodCallExpression, bool compareArguments)
            where TMockObject : MockObject
        {
            if (mockObject == null)
            {
                throw new ArgumentNullException("mockObject");
            }

            if (expectedMethodCallExpression == null)
            {
                throw new ArgumentNullException("expectedMethodCallExpression");
            }

            MethodCallExpressionVisitor visitor = new MethodCallExpressionVisitor();

            visitor.Visit(expectedMethodCallExpression);

            RecordedMethodCall[] recordedMethodCalls;

            lock (mockObject.RecordedMethodCalls)
            {
                recordedMethodCalls = mockObject.RecordedMethodCalls
                                      .Where(c => c.Method == visitor.MethodCallInfo)
                                      .ToArray();
            }

            switch (recordedMethodCalls.Length)
            {
            case 0:
                Assert.Fail("Method '{0}' was not called.", visitor.MethodCallInfo.Name);
                break;

            case 1:
                break;

            default:
                Assert.Fail("Method '{0}' was called {1} times instead of 1.", visitor.MethodCallInfo.Name, recordedMethodCalls.Length);
                break;
            }

            RecordedMethodCall result = recordedMethodCalls.First();

            if (compareArguments)
            {
                Type[] parameterTypes = visitor.MethodCallInfo.GetParameters()
                                        .Select(p => p.ParameterType)
                                        .ToArray();

                Assert.IsTrue(UnitTestHelpers.CompareMethodCallArguments(parameterTypes, visitor.MethodCallArguments, result.Arguments, mockObject.EqualityComparerFactory));
            }

            mockObject.RecordedMethodCalls.Remove(result);

            return(result);
        }
Esempio n. 5
0
        public void NoArguments()
        {
            MethodCallExpressionVisitor visitor = new MethodCallExpressionVisitor();

            ArrayList collection = new ArrayList();

            Expression <Action> expression = () => collection.Clear();

            visitor.Visit(expression);

            Assert.AreEqual(0, visitor.MethodCallArguments.Count);
        }
Esempio n. 6
0
        public void ConstantArgument()
        {
            MethodCallExpressionVisitor visitor = new MethodCallExpressionVisitor();

            ArrayList collection = new ArrayList();

            Expression <Action> expression = () => collection.Add(1);

            visitor.Visit(expression);

            Assert.AreEqual(1, visitor.MethodCallArguments.Count);
            Assert.AreEqual(1, visitor.MethodCallArguments[0]);
        }
        public static void PredefineResult <TMockObject, TResult>(this TMockObject mockObject, TResult result, Expression <Func <TMockObject, TResult> > expression)
            where TMockObject : MockObject
        {
            if (expression == null)
            {
                throw new ArgumentNullException("expression");
            }

            MethodCallExpressionVisitor visitor = new MethodCallExpressionVisitor();

            visitor.Visit(expression);

            mockObject.PredefineResult(visitor.MethodCallInfo, visitor.MethodCallArguments, result);
        }
Esempio n. 8
0
        public void StaticMethodCallWithParametersArgument()
        {
            MethodCallExpressionVisitor visitor = new MethodCallExpressionVisitor();

            ArrayList collection = new ArrayList();

            Expression <Action> expression = () => collection.Add(DateTime.DaysInMonth(2015, 1));

            visitor.Visit(expression);

            Assert.AreEqual(1, visitor.MethodCallArguments.Count);

            Assert.AreEqual(31, visitor.MethodCallArguments[0]);
        }
Esempio n. 9
0
        public void MethodCallWithoutParametersArgument()
        {
            MethodCallExpressionVisitor visitor = new MethodCallExpressionVisitor();

            ArrayList collection = new ArrayList();

            Expression <Action> expression = () => collection.Add(collection.GetType());

            visitor.Visit(expression);

            Assert.AreEqual(1, visitor.MethodCallArguments.Count);

            Assert.AreEqual(collection.GetType(), visitor.MethodCallArguments[0]);
        }
Esempio n. 10
0
        public void DateTimePlusTimeSpanArgument()
        {
            MethodCallExpressionVisitor visitor = new MethodCallExpressionVisitor();

            ArrayList collection = new ArrayList();

            Expression <Action> expression = () => collection.Add(DateTime.Today + DateTime.Today.TimeOfDay);

            visitor.Visit(expression);

            Assert.AreEqual(1, visitor.MethodCallArguments.Count);

            Assert.AreEqual(DateTime.Today, visitor.MethodCallArguments[0]);
        }
Esempio n. 11
0
        public void IntegerSumArgument()
        {
            MethodCallExpressionVisitor visitor = new MethodCallExpressionVisitor();

            ArrayList collection = new ArrayList();

            Expression <Action> expression = () => collection.Add(DateTime.Now.Day + DateTime.Now.Month);

            visitor.Visit(expression);

            Assert.AreEqual(1, visitor.MethodCallArguments.Count);

            Assert.AreEqual(DateTime.Now.Day + DateTime.Now.Month, visitor.MethodCallArguments[0]);
        }
Esempio n. 12
0
        public void StaticPropertyChainArgument()
        {
            MethodCallExpressionVisitor visitor = new MethodCallExpressionVisitor();

            ArrayList collection = new ArrayList();

            Expression <Action> expression = () => collection.Equals(DateTime.Now.Date.Year);

            visitor.Visit(expression);

            Assert.AreEqual(1, visitor.MethodCallArguments.Count);

            Assert.AreEqual(DateTime.Today.Year, visitor.MethodCallArguments[0]);
        }
Esempio n. 13
0
        public void LocalVariableNullArgument()
        {
            MethodCallExpressionVisitor visitor = new MethodCallExpressionVisitor();

            ArrayList collection = new ArrayList();

            object[] buffer = null;

            Expression <Action> expression = () => collection.CopyTo(buffer);

            visitor.Visit(expression);

            Assert.AreEqual(1, visitor.MethodCallArguments.Count);

            Assert.IsNull(visitor.MethodCallArguments[0]);
        }
Esempio n. 14
0
        public void MethodCallWithParametersArgument()
        {
            MethodCallExpressionVisitor visitor = new MethodCallExpressionVisitor();

            ArrayList collection = new ArrayList();

            DateTime timestamp = new DateTime(2015, 1, 1);

            Expression <Action> expression = () => collection.Add(timestamp.AddYears(1));

            visitor.Visit(expression);

            Assert.AreEqual(1, visitor.MethodCallArguments.Count);

            Assert.AreEqual(new DateTime(2016, 1, 1), visitor.MethodCallArguments[0]);
        }
Esempio n. 15
0
        public void PropertyChainArgument()
        {
            MethodCallExpressionVisitor visitor = new MethodCallExpressionVisitor();

            ArrayList collection = new ArrayList();

            DateTime timestamp = new DateTime(2015, 1, 1);

            Expression <Action> expression = () => collection.Equals(timestamp.Date.Year);

            visitor.Visit(expression);

            Assert.AreEqual(1, visitor.MethodCallArguments.Count);

            Assert.AreEqual(2015, visitor.MethodCallArguments[0]);
        }
Esempio n. 16
0
        public void NewEmptyListArgument()
        {
            MethodCallExpressionVisitor visitor = new MethodCallExpressionVisitor();

            ArrayList collection = new ArrayList();

            Expression <Action> expression = () => collection.Equals(new List <int>());

            visitor.Visit(expression);

            Assert.AreEqual(1, visitor.MethodCallArguments.Count);

            Assert.IsInstanceOfType(visitor.MethodCallArguments[0], typeof(List <int>));

            Assert.IsTrue(((List <int>)visitor.MethodCallArguments[0]).IsEmpty());
        }
Esempio n. 17
0
        public void NewOneElementArrayArgument()
        {
            MethodCallExpressionVisitor visitor = new MethodCallExpressionVisitor();

            ArrayList collection = new ArrayList();

            Expression <Action> expression = () => collection.CopyTo(new object[] { 5 });

            visitor.Visit(expression);

            Assert.AreEqual(1, visitor.MethodCallArguments.Count);

            Assert.IsInstanceOfType(visitor.MethodCallArguments[0], typeof(object[]));

            Assert.AreEqual(1, ((object[])visitor.MethodCallArguments[0]).Length);
            Assert.AreEqual(5, ((object[])visitor.MethodCallArguments[0])[0]);
        }
Esempio n. 18
0
        public void PropertyInitializationEmptyConstructor()
        {
            MethodCallExpressionVisitor visitor = new MethodCallExpressionVisitor();

            ArrayList collection = new ArrayList();

            Expression <Action> expression = () => collection.Add(new Timer()
            {
                AutoReset = false
            });

            visitor.Visit(expression);

            Assert.AreEqual(1, visitor.MethodCallArguments.Count);

            Assert.IsInstanceOfType(visitor.MethodCallArguments[0], typeof(Timer));

            Assert.IsFalse(((Timer)visitor.MethodCallArguments[0]).AutoReset);
        }
        public static void AssertNoMethodCall <TMockObject>(this TMockObject mockObject, Expression <Action <TMockObject> > expectedMethodCallExpression)
            where TMockObject : MockObject
        {
            if (mockObject == null)
            {
                throw new ArgumentNullException("mockObject");
            }

            if (expectedMethodCallExpression == null)
            {
                throw new ArgumentNullException("expectedMethodCallExpression");
            }

            MethodCallExpressionVisitor visitor = new MethodCallExpressionVisitor();

            visitor.Visit(expectedMethodCallExpression);

            Assert.IsFalse(mockObject.RecordedMethodCalls.Any(c => c.Method == visitor.MethodCallInfo));
        }
        public static void PredefineMethodCall <TMockObject>(this TMockObject mockObject, Expression <Action <TMockObject> > expression, Action callback)
            where TMockObject : MockObject
        {
            if (mockObject == null)
            {
                throw new ArgumentNullException("mockObject");
            }

            if (expression == null)
            {
                throw new ArgumentNullException("expression");
            }

            if (callback == null)
            {
                throw new ArgumentNullException("callback");
            }

            MethodCallExpressionVisitor visitor = new MethodCallExpressionVisitor();

            visitor.Visit(expression);

            mockObject.PredefineMethodCall(visitor.MethodCallInfo, visitor.MethodCallArguments, callback);
        }