Esempio n. 1
0
 public IArgumentSpecification Create(object argument, IParameterInfo parameterInfo, ISuppliedArgumentSpecifications suppliedArgumentSpecifications)
 {
     if (_defaultChecker.IsDefault(argument, parameterInfo.ParameterType))
     {
         if (suppliedArgumentSpecifications.IsNextFor(argument, parameterInfo.ParameterType))
         {
             var argumentSpecification = suppliedArgumentSpecifications.Dequeue();
             if (suppliedArgumentSpecifications.DequeueRemaining().Count() == 0)
             {
                 return(argumentSpecification);
             }
         }
         else if (!suppliedArgumentSpecifications.AnyFor(argument, parameterInfo.ParameterType))
         {
             if (suppliedArgumentSpecifications.DequeueRemaining().Count() == 0)
             {
                 return(_argumentEqualsSpecificationFactory.Create(argument, parameterInfo.ParameterType));
             }
         }
     }
     else
     {
         var paramterInfosFromParamsArray = _parameterInfosFromParamsArrayFactory.Create(argument, parameterInfo.ParameterType);
         var suppliedArgumentSpecificationsFromParamsArray = _suppliedArgumentSpecificationsFactory.Create(suppliedArgumentSpecifications.DequeueRemaining());
         var arrayArgumentSpecifications = _arrayArgumentSpecificationsFactory.Create(argument, paramterInfosFromParamsArray, suppliedArgumentSpecificationsFromParamsArray);
         return(_arrayContentsArgumentSpecificationFactory.Create(arrayArgumentSpecifications, parameterInfo.ParameterType));
     }
     throw new AmbiguousArgumentsException();
 }
        public IEnumerable <IArgumentSpecification> Create(IList <IArgumentSpecification> argumentSpecs, object[] arguments, IParameterInfo[] parameterInfos)
        {
            var suppliedArgumentSpecifications = _suppliedArgumentSpecificationsFactory.Create(argumentSpecs);

            return
                (new List <IArgumentSpecification>(
                     arguments.Select(
                         (argument, i) => _argumentSpecificationFactory.Create(
                             argument, parameterInfos[i], suppliedArgumentSpecifications)
                         )
                     ));
        }
Esempio n. 3
0
        public IEnumerable <IArgumentSpecification> Create(IList <IArgumentSpecification> argumentSpecs, object[] arguments, IParameterInfo[] parameterInfos)
        {
            var suppliedArgumentSpecifications = _suppliedArgumentSpecificationsFactory.Create(argumentSpecs);

            var result = arguments
                         .Select((arg, i) => _argumentSpecificationFactory.Create(arg, parameterInfos[i], suppliedArgumentSpecifications))
                         .ToArray();

            var remainingArgumentSpecifications = suppliedArgumentSpecifications.DequeueRemaining();

            if (remainingArgumentSpecifications.Any())
            {
                throw new RedundantArgumentMatcherException(remainingArgumentSpecifications, suppliedArgumentSpecifications.AllSpecifications);
            }

            return(result);
        }
Esempio n. 4
0
        public IEnumerable <IArgumentSpecification> Create(IList <IArgumentSpecification> argumentSpecs, object[] arguments, IParameterInfo[] parameterInfos, MethodInfo methodInfo, MatchArgs matchArgs)
        {
            var suppliedArgumentSpecifications = _suppliedArgumentSpecificationsFactory.Create(argumentSpecs);

            var result = new List <IArgumentSpecification>();

            for (var i = 0; i < arguments.Length; i++)
            {
                var arg       = arguments[i];
                var paramInfo = parameterInfos[i];

                try
                {
                    result.Add(_argumentSpecificationFactory.Create(arg, paramInfo, suppliedArgumentSpecifications));
                }
                catch (AmbiguousArgumentsException ex) when(ex.ContainsDefaultMessage)
                {
                    IEnumerable <IArgumentSpecification> alreadyResolvedSpecs = result;

                    if (ex.Data[AmbiguousArgumentsException.NonReportedResolvedSpecificationsKey] is IEnumerable <IArgumentSpecification> additional)
                    {
                        alreadyResolvedSpecs = alreadyResolvedSpecs.Concat(additional);
                    }

                    throw new AmbiguousArgumentsException(methodInfo, arguments, alreadyResolvedSpecs, argumentSpecs);
                }
            }

            var remainingArgumentSpecifications = suppliedArgumentSpecifications.DequeueRemaining();

            if (remainingArgumentSpecifications.Any())
            {
                throw new RedundantArgumentMatcherException(remainingArgumentSpecifications, argumentSpecs);
            }

            return(matchArgs == MatchArgs.Any
                ? ConvertToMatchAnyValue(result)
                : result);
        }