public void Should_not_invoke_expression_more_than_once()
        {
            // Arrange
            int invokedNumberOfTimes = 0;
            var invokation           = FuncFromAction(() => invokedNumberOfTimes++);

            var expression = BuilderForExpression.GetBody(() => invokation());

            this.StubTrapperToReturnNoConstraints();

            // Act
            this.factory.GetArgumentConstraint(BuilderForParsedArgumentExpression.Build(x => x.WithExpression(expression)));

            // Assert
            Assert.That(invokedNumberOfTimes, Is.EqualTo(1));
        }
        public void Should_not_invoke_expression_more_than_once()
        {
            // Arrange
            ExpressionArgumentConstraintFactory factory = new ExpressionArgumentConstraintFactory(new ArgumentConstraintTrap());
            int           invokedNumberOfTimes          = 0;
            Func <object> invocation = () =>
            {
                invokedNumberOfTimes++;
                return(null);
            };
            var expression = BuilderForExpression.GetBody(() => invocation());

            // Act
            factory.GetArgumentConstraint(BuilderForParsedArgumentExpression.Build(x => x.WithExpression(expression)));

            // Assert
            invokedNumberOfTimes.Should().Be(1);
        }
        public void Should_pass_action_that_invokes_expression_to_trapper()
        {
            // Arrange
            bool wasInvoked = false;
            var  invokation = FuncFromAction(() => wasInvoked = true);

            var expression = BuilderForExpression.GetBody(() => invokation());

            // Act
            this.factory.GetArgumentConstraint(BuilderForParsedArgumentExpression.Build(x => x.WithExpression(expression)));

            // Assert
            var actionToTrapper = Fake.GetCalls(this.trapper).Single().GetArgument <Action>(0);

            wasInvoked = false;
            actionToTrapper.Invoke();

            Assert.That(wasInvoked, Is.True);
        }