public CompletedFakeObjectCall(IInterceptedFakeObjectCall interceptedCall, object[] arguments)
 {
     this.FakedObject        = interceptedCall.FakedObject;
     this.Method             = interceptedCall.Method;
     this.Arguments          = new ArgumentCollection(arguments, this.Method);
     this.ArgumentsAfterCall = interceptedCall.Arguments;
     this.SequenceNumber     = SequenceNumberManager.GetNextSequenceNumber();
 }
        public virtual void AssertWasCalled(
            Func<ICompletedFakeObjectCall, bool> callPredicate, Action<IOutputWriter> callDescriber, CallCountConstraint callCountConstraint)
        {
            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 (!callCountConstraint.Matches(matchedCallCount))
            {
                var description = this.outputWriterFactory(new StringBuilder());
                callDescriber.Invoke(description);

                var message = this.CreateExceptionMessage(this.calls.Where(IsBeforeAssertionStart), description.Builder.ToString(), callCountConstraint.ToString(), matchedCallCount);
                throw new ExpectationException(message);
            }
        }
Example #3
0
        public void CheckNextCall(
            FakeManager fakeManager,
            Func <IFakeObjectCall, bool> callPredicate,
            string callDescription,
            Repeated repeatConstraint)
        {
            Guard.AgainstNull(fakeManager, "fakeManager");
            Guard.AgainstNull(callPredicate, "callPredicate");
            Guard.AgainstNull(callDescription, "callDescription");
            Guard.AgainstNull(repeatConstraint, "repeatConstraint");
            this.fakeManagers.Add(fakeManager);
            this.assertedCalls.Add(
                new AssertedCall {
                CallDescription = callDescription, RepeatDescription = repeatConstraint.ToString()
            });

            var allCalls = this.fakeManagers.SelectMany(f => f.GetRecordedCalls()).OrderBy(SequenceNumberManager.GetSequenceNumber).ToList();

            int matchedCallCount = 0;

            foreach (var currentCall in allCalls.SkipWhile(c => SequenceNumberManager.GetSequenceNumber(c) <= this.currentSequenceNumber))
            {
                if (repeatConstraint.Matches(matchedCallCount))
                {
                    return;
                }

                if (callPredicate(currentCall))
                {
                    matchedCallCount++;
                    this.currentSequenceNumber = SequenceNumberManager.GetSequenceNumber(currentCall);
                }
            }

            if (!repeatConstraint.Matches(matchedCallCount))
            {
                ThrowExceptionWhenAssertionFailed(this.assertedCalls, this.callWriter, allCalls);
            }
        }
Example #4
0
        public void CheckNextCall(
            FakeManager fakeManager,
            Func <IFakeObjectCall, bool> callPredicate,
            Action <IOutputWriter> callDescriber,
            CallCountConstraint callCountConstraint)
        {
            Guard.AgainstNull(fakeManager, nameof(fakeManager));
            Guard.AgainstNull(callPredicate, nameof(callPredicate));
            Guard.AgainstNull(callDescriber, nameof(callDescriber));
            Guard.AgainstNull(callCountConstraint, nameof(callCountConstraint));
            this.fakeManagers.Add(fakeManager);
            this.assertedCalls.Add(
                new AssertedCall {
                CallDescriber = callDescriber, MatchingCountDescription = callCountConstraint.ToString()
            });

            var allCalls = this.fakeManagers.SelectMany(f => f.GetRecordedCalls()).OrderBy(SequenceNumberManager.GetSequenceNumber).ToList();

            int matchedCallCount = 0;

            foreach (var currentCall in allCalls.SkipWhile(c => SequenceNumberManager.GetSequenceNumber(c) <= this.currentSequenceNumber))
            {
                if (callCountConstraint.Matches(matchedCallCount))
                {
                    return;
                }

                if (callPredicate(currentCall))
                {
                    matchedCallCount++;
                    this.currentSequenceNumber = SequenceNumberManager.GetSequenceNumber(currentCall);
                }
            }

            if (!callCountConstraint.Matches(matchedCallCount))
            {
                this.ThrowExceptionWhenAssertionFailed(allCalls);
            }
        }
Example #5
0
 /// <summary>
 /// Records that a call has occurred on the managed object.
 /// </summary>
 /// <param name="call">The call to remember.</param>
 internal void RecordCall(ICompletedFakeObjectCall call)
 {
     SequenceNumberManager.RecordSequenceNumber(call);
     this.recordedCalls.Enqueue(call);
 }