Exemple #1
0
        public static MatcherInfo FromMatcherAndParamInfo(object matcherObject, ParameterInfo paramInfo, out MatcherInfo[] paramsMatchers)
        {
            var kind             = MatcherKind.Unknown;
            var argType          = typeof(void);
            var expressionString = "n/a";

            paramsMatchers = null;

            ITypedMatcher typedMatcher;

            if (MockingUtil.TryGetAs(matcherObject, out typedMatcher))
            {
                if (matcherObject.GetType() == typeof(ValueMatcher))
                {
                    kind = MatcherKind.Value;
                }
                else if (matcherObject.GetType() == typeof(TypeMatcher))
                {
                    kind = MatcherKind.Type;
                }
                else if (matcherObject.GetType() == typeof(StringNullOrEmptyMatcher))
                {
                    kind = MatcherKind.NullOrEmpty;
                }
                else if (matcherObject.GetType() == typeof(RangeMatcher <>).MakeGenericType(typedMatcher.Type))
                {
                    kind = MatcherKind.Range;
                }
                else if (matcherObject.GetType() == typeof(PredicateMatcher <>).MakeGenericType(typedMatcher.Type))
                {
                    kind = MatcherKind.Predicate;
                }

                if (kind != MatcherKind.Unknown)
                {
                    IMatcher matcher;
                    if (MockingUtil.TryGetAs(matcherObject, out matcher))
                    {
                        argType =
                            typedMatcher.Type != null
                                ?
                            typedMatcher.Type
                                :
                            paramInfo.ParameterType.IsArray
                                    ?
                            paramInfo.ParameterType.GetElementType()
                                        :
                            paramInfo.ParameterType;
                        expressionString = matcher.DebugView;
                    }
                }
            }
            else if (matcherObject.GetType() == typeof(ParamsMatcher))
            {
                IContainerMatcher containerMatcher;
                if (MockingUtil.TryGetAs <IContainerMatcher>(matcherObject, out containerMatcher))
                {
                    kind           = MatcherKind.Params;
                    paramsMatchers = containerMatcher.Matchers.Select(
                        contained =>
                    {
                        MatcherInfo[] dummy;
                        var result         = FromMatcherAndParamInfo(contained, paramInfo, out dummy);
                        result.IsParamsArg = true;
                        return(result);
                    })
                                     .ToArray();
                }
            }
            else if (matcherObject.GetType() == typeof(AnyMatcher))
            {
                kind = MatcherKind.Any;
            }

            return(new MatcherInfo(kind, argType, paramInfo.Position, paramInfo.Name, expressionString));
        }