예제 #1
0
        public void SetUp()
        {
            Fake.InitializeFixture(this);

            A.CallTo(() => this.callFormatter.GetDescription(A<IFakeObjectCall>._))
                .Returns("Default call description");

            this.calls = new List<IFakeObjectCall>();
            this.writer = new StringBuilderOutputWriter();
        }
                private static void WriteArgumentList(StringBuilderOutputWriter builder, IEnumerable <ArgumentInfo> arguments)
                {
                    int lengthWhenStarting = builder.Builder.Length;

                    foreach (var argument in arguments)
                    {
                        if (builder.Builder.Length > lengthWhenStarting)
                        {
                            builder.Write(", ");
                        }

                        WriteArgument(builder, argument);
                    }
                }
                    private void WriteArgumentList(StringBuilderOutputWriter builder)
                    {
                        int lengthWhenStarting = builder.Builder.Length;

                        foreach (var argument in this.Arguments)
                        {
                            if (builder.Builder.Length > lengthWhenStarting)
                            {
                                builder.Write(", ");
                            }

                            builder.WriteArgumentValue(argument);
                        }
                    }
예제 #4
0
        public UnorderedCallAssertion MustHaveHappened(Repeated repeatConstraint)
        {
            Guard.AgainstNull(repeatConstraint, nameof(repeatConstraint));

            var asserter = this.asserterFactory.Invoke(this.Calls);

            var description = new StringBuilderOutputWriter();

            this.RuleBeingBuilt.WriteDescriptionOfValidCall(description);

            asserter.AssertWasCalled(this.Matcher.Matches, description.Builder.ToString(), repeatConstraint.Matches, repeatConstraint.ToString());

            return(new UnorderedCallAssertion(this.manager, this.Matcher, description.Builder.ToString(), repeatConstraint));
        }
        internal static Action <IOutputWriter> Writes(
            this IArgumentConstraintManager <Action <IOutputWriter> > manager,
            string expectedValue)
        {
            return(manager.NullCheckedMatches(
                       x =>
            {
                var writer = new StringBuilderOutputWriter();
                x.Invoke(writer);

                return string.Equals(writer.Builder.ToString(), expectedValue, StringComparison.Ordinal);
            },
                       x => x.Write("action that writes ").WriteArgumentValue(expectedValue).Write(" to output.")));
        }
예제 #6
0
            public void BeNullGuarded()
            {
                var matches = this.Matches(this.call);
                if (matches)
                {
                    return;
                }

                var builder = new StringBuilderOutputWriter();
                this.WriteDescriptionTo(builder);
                builder.WriteLine();
                this.WriteActualValueTo(builder);
                var reason = builder.Builder.ToString();
                Execute.Assertion.FailWith(reason);
            }
예제 #7
0
        public IAfterMustHaveHappenedConfiguration MustHaveHappened(Repeated repeatConstraint)
        {
            Guard.AgainstNull(repeatConstraint, "repeatConstraint");

            this.manager.RemoveRule(this.RuleBeingBuilt);
            var asserter = this.asserterFactory.Invoke(this.Calls.Cast <IFakeObjectCall>());

            var description = new StringBuilderOutputWriter();

            this.RuleBeingBuilt.WriteDescriptionOfValidCall(description);

            asserter.AssertWasCalled(this.Matcher.Matches, description.Builder.ToString(), repeatConstraint.Matches, repeatConstraint.ToString());

            return(new AfterMustHaveHappenedConfiguration(this.manager, this.Matcher, description.Builder.ToString(), repeatConstraint));
        }
예제 #8
0
        private static string CreateExceptionMessage(
            IEnumerable<IFakeObjectCall> calls, CallWriter callWriter, string callDescription, string repeatDescription, int matchedCallCount)
        {
            var writer = new StringBuilderOutputWriter();
            writer.WriteLine();

            using (writer.Indent())
            {
                AppendCallDescription(callDescription, writer);
                AppendExpectation(calls, repeatDescription, matchedCallCount, writer);
                AppendCallList(calls, callWriter, writer);
                writer.WriteLine();
            }

            return writer.Builder.ToString();
        }
예제 #9
0
        private string CreateExceptionMessage(string callDescription, string repeatDescription, int repeat)
        {
            var outputWriter = new StringBuilderOutputWriter();

            outputWriter.WriteLine();

            using (outputWriter.Indent())
            {
                AppendCallDescription(callDescription, outputWriter);
                this.AppendExpectation(repeatDescription, repeat, outputWriter);
                this.AppendCallList(outputWriter);
                outputWriter.WriteLine();
            }

            return(outputWriter.Builder.ToString());
        }
예제 #10
0
        private static string CreateExceptionMessage(
            IEnumerable <IFakeObjectCall> calls, CallWriter callWriter, string callDescription, string repeatDescription, int matchedCallCount)
        {
            var writer = new StringBuilderOutputWriter();

            writer.WriteLine();

            using (writer.Indent())
            {
                AppendCallDescription(callDescription, writer);
                AppendExpectation(calls, repeatDescription, matchedCallCount, writer);
                AppendCallList(calls, callWriter, writer);
                writer.WriteLine();
            }

            return(writer.Builder.ToString());
        }
        public void Should_append_where_predicates_to_description_correctly()
        {
            // Arrange
            this.rule.DescriptionOfValidCallReturnValue = "description";
            this.rule.ApplyWherePredicate(x => true, x => x.Write("description of first where"));
            this.rule.ApplyWherePredicate(x => true, x => x.Write("description of second where"));

            var descriptionWriter = new StringBuilderOutputWriter();

            // Act
            this.rule.WriteDescriptionOfValidCall(descriptionWriter);

            // Assert
            Assert.That(descriptionWriter.Builder.ToString(),
                        Is.EqualTo(@"description
  where description of first where
  and description of second where"));
        }
예제 #12
0
            public void BeNullGuarded()
            {
                var matches = this.Matches(this.call);

                if (matches)
                {
                    return;
                }

                var builder = new StringBuilderOutputWriter();

                this.WriteDescriptionTo(builder);
                builder.WriteLine();
                this.WriteActualValueTo(builder);
                var reason = builder.Builder.ToString();

                Execute.Assertion.FailWith(reason);
            }
예제 #13
0
        public virtual void AssertWasCalled(
            Func <ICompletedFakeObjectCall, bool> callPredicate, Action <IOutputWriter> callDescriber, Repeated repeatConstraint)
        {
            var lastCall           = this.calls.LastOrDefault();
            int lastSequenceNumber = lastCall != null?SequenceNumberManager.GetSequenceNumber(lastCall) : -1;

            bool IsBeforeAssertionStart(ICompletedFakeObjectCall call) => SequenceNumberManager.GetSequenceNumber(call) <= lastSequenceNumber;

            var matchedCallCount = this.calls.Count(c => IsBeforeAssertionStart(c) && callPredicate(c));

            if (!repeatConstraint.Matches(matchedCallCount))
            {
                var description = new StringBuilderOutputWriter();
                callDescriber.Invoke(description);

                var message = CreateExceptionMessage(this.calls.Where(IsBeforeAssertionStart), this.callWriter, description.Builder.ToString(), repeatConstraint.ToString(), matchedCallCount);
                throw new ExpectationException(message);
            }
        }
예제 #14
0
 private void WriteFailReason(StringBuilderOutputWriter description)
 {
     if (this.thrown is null)
     {
         description.Write("did not throw any exception.");
     }
     else
     {
         var argumentNullException = this.thrown as ArgumentNullException;
         if (argumentNullException is object)
         {
             description.Write(
                 $"threw ArgumentNullException with wrong argument name, it should be {this.ArgumentName}.");
         }
         else
         {
             description.Write($"threw unexpected {this.thrown.GetType()}.");
         }
     }
 }
예제 #15
0
 private void WriteFailReason(StringBuilderOutputWriter description)
 {
     if (this.thrown == null)
     {
         description.Write("did not throw any exception.");
     }
     else
     {
         var argumentNullException = this.thrown as ArgumentNullException;
         if (argumentNullException != null)
         {
             description.Write(
                 "threw ArgumentNullException with wrong argument name, it should be \"{0}\"."
                 .FormatInvariant(this.ArgumentName));
         }
         else
         {
             description.Write("threw unexpected {0}.".FormatInvariant(this.thrown.GetType().FullName));
         }
     }
 }
        private static void ThrowExceptionWhenAssertionFailed(
            List<AssertedCall> assertedCalls, CallWriter callWriter, IEnumerable<IFakeObjectCall> originalCallList)
        {
            var message = new StringBuilderOutputWriter();

            message.WriteLine();
            message.WriteLine();

            using (message.Indent())
            {
                message.Write("Assertion failed for the following calls:");
                message.WriteLine();

                using (message.Indent())
                {
                    foreach (var call in assertedCalls)
                    {
                        message.Write("'");
                        message.Write(call.CallDescription);
                        message.Write("' ");
                        message.Write("repeated ");
                        message.Write(call.RepeatDescription);
                        message.WriteLine();
                    }
                }

                message.Write("The calls where found but not in the correct order among the calls:");
                message.WriteLine();

                using (message.Indent())
                {
                    callWriter.WriteCalls(originalCallList, message);
                }
            }

            throw new ExpectationException(message.Builder.ToString());
        }
예제 #17
0
        private static void ThrowExceptionWhenAssertionFailed(
            List <AssertedCall> assertedCalls, CallWriter callWriter, List <ICompletedFakeObjectCall> originalCallList)
        {
            var message = new StringBuilderOutputWriter();

            message.WriteLine();
            message.WriteLine();

            using (message.Indent())
            {
                message.Write("Assertion failed for the following calls:");
                message.WriteLine();

                using (message.Indent())
                {
                    foreach (var call in assertedCalls)
                    {
                        message.Write("'");
                        message.Write(call.CallDescription);
                        message.Write("' ");
                        message.Write("repeated ");
                        message.Write(call.RepeatDescription);
                        message.WriteLine();
                    }
                }

                message.Write("The calls where found but not in the correct order among the calls:");
                message.WriteLine();

                using (message.Indent())
                {
                    callWriter.WriteCalls(originalCallList, message);
                }
            }

            throw new ExpectationException(message.Builder.ToString());
        }
        public void Should_append_where_predicates_to_description_correctly()
        {
            // Arrange
            this.rule.DescriptionOfValidCallReturnValue = "description";
            this.rule.ApplyWherePredicate(x => true, x => x.Write("description of first where"));
            this.rule.ApplyWherePredicate(x => true, x => x.Write("description of second where"));

            var descriptionWriter = new StringBuilderOutputWriter();

            // Act
            this.rule.WriteDescriptionOfValidCall(descriptionWriter);

            // Assert
            var expectedDescription =
@"description
  where description of first where
  and description of second where";

            descriptionWriter.Builder.ToString().Should().Be(expectedDescription);
        }
        public void Should_write_description_of_valid_call_by_calling_the_description_property()
        {
            // Arrange           
            this.rule.DescriptionOfValidCallReturnValue = "description";

            var writer = new StringBuilderOutputWriter();

            // Act
            this.rule.WriteDescriptionOfValidCall(writer);

            // Assert
            writer.Builder.ToString().Should().Be("description");
        }
예제 #20
0
                public void WriteTo(StringBuilderOutputWriter builder)
                {
                    builder.Write(this.CallDescription);
                    builder.Write("(");

                    WriteArgumentList(builder, this.ValidArguments);
                    builder.Write(")");
                }
예제 #21
0
 private void WriteActualValueTo(StringBuilderOutputWriter builder)
 {
     builder.Write(
         "When called with the following arguments the method did not throw the appropriate exception:");
     builder.WriteLine();
     this.state.WriteFailingCallsDescriptions(builder);
 }
예제 #22
0
                private static void WriteArgumentList(StringBuilderOutputWriter builder, IEnumerable<ArgumentInfo> arguments)
                {
                    int lengthWhenStarting = builder.Builder.Length;
                    foreach (var argument in arguments)
                    {
                        if (builder.Builder.Length > lengthWhenStarting)
                        {
                            builder.Write(", ");
                        }

                        WriteArgument(builder, argument);
                    }
                }
예제 #23
0
 public void WriteFailingCallDescription(StringBuilderOutputWriter builder)
 {
     builder.Write("(");
     this.WriteArgumentList(builder);
     builder.Write(") ");
     this.WriteFailReason(builder);
 }
예제 #24
0
 public void WriteFailingCallsDescriptions(StringBuilderOutputWriter builder)
 {
     using (builder.Indent())
     {
         foreach (var call in this.unguardedCalls)
         {
             call.WriteFailingCallDescription(builder);
             builder.WriteLine();
         }
     }
 }
예제 #25
0
                    private void WriteArgumentList(StringBuilderOutputWriter builder)
                    {
                        int lengthWhenStarting = builder.Builder.Length;
                        foreach (var argument in this.Arguments)
                        {
                            if (builder.Builder.Length > lengthWhenStarting)
                            {
                                builder.Write(", ");
                            }

                            builder.WriteArgumentValue(argument);
                        }
                    }
예제 #26
0
 private void WriteFailReason(StringBuilderOutputWriter description)
 {
     if (this.thrown == null)
     {
         description.Write("did not throw any exception.");
     }
     else
     {
         var argumentNullException = this.thrown as ArgumentNullException;
         if (argumentNullException != null)
         {
             description.Write(
                 "threw ArgumentNullException with wrong argument name, it should be \"{0}\"."
                     .FormatInvariant(this.ArgumentName));
         }
         else
         {
             description.Write("threw unexpected {0}.".FormatInvariant(this.thrown.GetType().FullName));
         }
     }
 }
예제 #27
0
 private void WriteDescriptionTo(StringBuilderOutputWriter builder)
 {
     builder.Write("Expected calls to ");
     this.state.WriteTo(builder);
     builder.Write(" to be null guarded.");
 }
        public void Should_create_constraint_that_writes_beginning_and_end_of_argument_constraint()
        {
            // Arrange
            var writer = new StringBuilderOutputWriter();

            // Act
            this.constraintManager.Matches(x => true, x => x.Write("foo"));

            // Assert
            this.createdConstraint.WriteDescription(writer);
            Assert.That(writer.Builder.ToString(), Is.EqualTo("<foo>"));
        }
예제 #29
0
 private static void WriteArgument(StringBuilderOutputWriter builder, ArgumentInfo argument)
 {
     builder.Write("[");
     builder.Write(argument.ArgumentType.Name);
     builder.Write("]");
     builder.Write(" ");
     builder.Write(argument.Name);
 }
예제 #30
0
 private void WriteDescriptionTo(StringBuilderOutputWriter builder)
 {
     builder.Write("Expected calls to ");
     this.state.WriteTo(builder);
     builder.Write(" to be null guarded.");
 }
예제 #31
0
        private string CreateExceptionMessage(string callDescription, string repeatDescription, int repeat)
        {
            var outputWriter = new StringBuilderOutputWriter();
            outputWriter.WriteLine();

            using (outputWriter.Indent())
            {
                AppendCallDescription(callDescription, outputWriter);
                this.AppendExpectation(repeatDescription, repeat, outputWriter);
                this.AppendCallList(outputWriter);
                outputWriter.WriteLine();
            }

            return outputWriter.Builder.ToString();
        }