public void Visit_CompareSameMethodsOnSameObject_ThrowsWarning()
        {
            var account = new Account();
            var inspector = new InspectExpressionVisitor();
            Expression<Func<bool>> expression = () => account.GetName() == account.GetName();

            TestDelegate action = () => inspector.Visit(expression);

            Assert.That(action, Throws.TypeOf<InspectionWarning>());
        }
        public void Print_MemberAccess_Prints()
        {
            var account = new Account();
            var initialDeposit = 100;
            account.Deposit(initialDeposit);
            var visitor = new AssertionExpressionVisitor();
            Expression<Func<decimal>> memberAccess = () => account.Balance;

            visitor.Visit(memberAccess);

            var message = GetMessage(visitor);
            Expect(message, Is.EqualTo("account.Balance [100]"));
        }
        public void Visit_CompareSameMethodsOnDifferntObjects_ThrowsWarning()
        {
            var account = new Account();
            account.SetName("A");
            var otherAccount = new Account();
            account.SetName("B");
            var inspector = new InspectExpressionVisitor();
            Expression<Func<bool>> expression = () => account.GetMe().GetName() == otherAccount.GetMe().GetName();

            TestDelegate action = () => inspector.Visit(expression);

            Assert.That(action, Throws.Nothing);
        }
        public void Visit_DifferentMembers_DoesNotThrowWarning()
        {
            var account = new Account();
            var otherAccount = new Account();
            var inspector = new InspectExpressionVisitor();
            Expression<Func<bool>> expression = () => account == otherAccount;

            TestDelegate action = () => inspector.Visit(expression);

            Assert.That(action, Throws.Nothing);
        }
        public void Print_MethodCall_Prints()
        {
            var account = new Account();
            account.SetName("Bob");
            var visitor = new AssertionExpressionVisitor();
            Expression<Func<string>> methodCall = () => account.GetName();

            visitor.Visit(methodCall);

            var message = GetMessage(visitor);
            Expect(message, Is.EqualTo("account.GetName() ['Bob']"));
        }
        public void Print_QueryWithArgument_Prints()
        {
            var account = new Account();
            var visitor = new AssertionExpressionVisitor();
            int a = 2;
            Expression<Action> queryWithArgument = () => account.AddNumbers(a, 1);

            visitor.Visit(queryWithArgument);

            var message = GetMessage(visitor);
            Expect(message, Is.EqualTo("account.AddNumbers(a [2], 1) [3]"));
        }
        public void Print_MethodWithArgument_Prints()
        {
            var account = new Account();
            account.SetName("Bob");
            var visitor = new AssertionExpressionVisitor();
            decimal amount = 100;
            decimal otherAmount = 200;
            Expression<Action> methodWithArgument = () => account.Deposits(amount, otherAmount);

            visitor.Visit(methodWithArgument);

            var message = GetMessage(visitor);
            Expect(message, Is.EqualTo("account.Deposits(amount [100], otherAmount [200])"));
        }
 public void Expect_CompareSameThings_Warns()
 {
     var account = new Account();
     Assert.That(() => Expect(() => account == account), Throws.TypeOf<InspectionWarning>());
 }