Example #1
0
        public FailedAnalyzedAssertion AnalyzeException(FailedAssertion part)
        {
            HandledException?        handledException        = null;
            IExceptionHandlerPattern?handledExceptionPattern = null;
            var exception = part.Exception !;

            foreach (var pattern in _patterns)
            {
                if (pattern.IsMatch(exception))
                {
                    handledException = pattern.Handle(part);

                    if (handledException != null)
                    {
                        handledExceptionPattern = pattern;
                        break;
                    }
                }
            }

            FormattableString?failedAssertionMessage = handledException?.Message;

            if (handledException == null)
            {
                failedAssertionMessage = $@"Assertion threw {exception.GetType().FullName}: {exception.Message}";
            }

            return(new FailedAnalyzedAssertion(part, FriendlyMessageFormatter.GetString(failedAssertionMessage, _context.EvaluatedExpressions),
                                               handledExceptionPattern,
                                               handledException?.CauseOfException));
        }
        private FriendlyMessage?EvaluatePattern(IFriendlyMessagePattern pattern)
        {
            try
            {
                if (pattern.IsMatch(_part))
                {
                    foreach (var subPattern in pattern.SubPatterns)
                    {
                        var message = EvaluatePattern(subPattern);

                        if (message != null)
                        {
                            return(message);
                        }
                    }

                    var formattedMessage = FriendlyMessageFormatter.GetString(pattern.TryGetFriendlyMessage(_part), _context.EvaluatedExpressions);

                    return(new FriendlyMessage(formattedMessage, pattern));
                }
            }
            catch
            {
                return(null);
            }

            return(null);
        }