private bool ExecuteChain(Scenario scenario, ScenarioContext storyContext, InvocationChain chain, string line)
        {
            string successPart = "";
            _lastResult = null;
            foreach (var invocation in chain.Invocations)
            {
                try
                {
                    InvokeContextMember(storyContext, invocation);
                    successPart += invocation.MatchedText + " ";
                }
                catch (TargetInvocationException ex)
                {
                    if (ex.InnerException is ScenarioPendingException)
                    {
                        _listener.ScenarioPending(new ScenarioPendingInfo(scenario, line));
                    }
                    else
                    {
                        _listener.ScenarioFailed(new ScenarioFailureInfo(scenario, successPart.Trim(),
                                                                         invocation.MatchedText, GetExceptionMessage(ex)));
                    }

                    return false;
                }
            }

            return true;
        }
예제 #2
0
 private void Notify(InvocationChain chain)
 {
     foreach (var invocation in chain.Invocations)
     {
         StorEvilEvents.Bus.Raise(new MatchingMemberFound {
             Member = invocation.MemberInfo
         });
     }
 }
예제 #3
0
        private IEnumerable <InvocationChain> GetChainsFromPartialMatch(PartialMatch partialMatch, string line)
        {
            var partialChain = new InvocationChain(BuildInvocation(partialMatch.MemberInfo, partialMatch));

            var matchedText   = partialChain.Invocations.Last().MatchedText;
            var remainingLine = line.Substring(matchedText.Length).Trim();

            return(TryToRecursivelyExtendPartialMatch(partialChain, remainingLine, partialMatch));
        }
예제 #4
0
        private IEnumerable <InvocationChain> TryToRecursivelyExtendPartialMatch(InvocationChain chain, string remainingLine,
                                                                                 PartialMatch partial)
        {
            if (partial.TerminatingType == null)
            {
                yield break;
            }
            var chainedMapper = _factory.GetInterpreterForType(partial.TerminatingType);

            foreach (var childChain in chainedMapper.GetChains(remainingLine))
            {
                var union = chain.Invocations.Union(childChain.Invocations);

                yield return(new InvocationChain(union.ToArray()));
            }
        }
예제 #5
0
        private bool ExecuteChain(Scenario scenario, ScenarioContext storyContext, InvocationChain chain, string line)
        {
            string successPart = "";
            _lastResult = null;
            foreach (var invocation in chain.Invocations)
            {
                try
                {
                    InvokeContextMember(storyContext, invocation);
                    successPart += invocation.MatchedText + " ";
                }
                catch (TargetInvocationException ex)
                {

                    if (ex.InnerException is ScenarioPendingException)
                    {
                        _eventBus.Raise(new LinePending { Scenario = scenario, Line = line });
                    }
                    else
                    {
                        _eventBus.Raise(new LineFailed
                        {
                            Scenario = scenario,
                            Line = line,
                            SuccessPart = successPart.Trim(),
                            FailedPart = invocation.MatchedText,
                            ExceptionInfo = GetExceptionMessage(ex)
                        });
                    }

                    return false;
                }
            }

            return true;
        }
예제 #6
0
 private void Notify(InvocationChain chain)
 {
     foreach (var invocation in chain.Invocations)
     {
         StorEvilEvents.Bus.Raise(new MatchingMemberFound {Member = invocation.MemberInfo});
     }
 }
        private static string ConvertInvocationChainToCSharpCode(InvocationChain matchingChain)
        {
            Func<string, Invocation, string> aggregator =
                (codeSoFar, invocation) => codeSoFar + BuildInvocation(invocation.MemberInfo, invocation.RawParamValues);

            return matchingChain.Invocations
                .Aggregate("", aggregator);
        }
 private IEnumerable<string> GetNamespaces(InvocationChain matchingChain)
 {
     return matchingChain.Invocations.Select(x => x.MemberInfo.DeclaringType.Namespace).Distinct();
 }
        private IEnumerable<InvocationChain> TryToRecursivelyExtendPartialMatch(InvocationChain chain, string remainingLine,
            PartialMatch partial)
        {
            if (partial.TerminatingType == null)
                yield break;
            var chainedMapper = _factory.GetInterpreterForType(partial.TerminatingType);
            foreach (var childChain in chainedMapper.GetChains(remainingLine))
            {
                var union = chain.Invocations.Union(childChain.Invocations);

                yield return new InvocationChain(union.ToArray());
            }
        }
        private IEnumerable<InvocationChain> GetChainsFromPartialMatch(PartialMatch partialMatch, string line)
        {
            var partialChain = new InvocationChain(BuildInvocation(partialMatch.MemberInfo, partialMatch));

            var matchedText = partialChain.Invocations.Last().MatchedText;
            var remainingLine = line.Substring(matchedText.Length).Trim();

            return TryToRecursivelyExtendPartialMatch(partialChain, remainingLine, partialMatch);
        }
예제 #11
0
        private int GetPosition(InvocationChain invocationChain)
        {
            var declaringType = invocationChain.Invocations.First().MemberInfo.DeclaringType;

            return(_mruTypes.IndexOf(declaringType));
        }
예제 #12
0
        private static string GetInvocationDescription(InvocationChain chain)
        {
            var members = chain.Invocations.Select(x => x.MemberInfo.DeclaringType.Name + "." + x.MemberInfo.Name);

            return(string.Join(", ", members.ToArray()));
        }
        private InvocationChain TryToRecursivelyExtendPartialMatch(InvocationChain chain, string remainingLine,
                                                                   PartialMatch partial)
        {
            var chainedMapper = _factory.GetInterpreterForType(partial.TerminatingType);
            var childChain = chainedMapper.GetChain(remainingLine);
            if (childChain == null)
                return null;

            var union = chain.Invocations.Union(childChain.Invocations);

            return new InvocationChain(union.ToArray());
        }