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 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(); }
private IArgumentSpecification CreateSpecFromParamsArg(object?argument, IParameterInfo parameterInfo, ISuppliedArgumentSpecifications suppliedArgumentSpecifications) { // Next specification is for the whole params array. if (suppliedArgumentSpecifications.IsNextFor(argument, parameterInfo.ParameterType)) { return(suppliedArgumentSpecifications.Dequeue()); } // Check whether the specification ambiguity could happen. bool isAmbiguousSpecificationPresent = suppliedArgumentSpecifications.AnyFor(argument, parameterInfo.ParameterType); if (isAmbiguousSpecificationPresent) { throw new AmbiguousArgumentsException(); } // User passed "null" as the params array value. if (argument == null) { return(new ArgumentSpecification(parameterInfo.ParameterType, new EqualsArgumentMatcher(null))); } // User specified arguments using the native params syntax. var arrayArg = argument as Array; if (arrayArg == null) { throw new SubstituteInternalException($"Expected to get array argument, but got argument of '{argument.GetType().FullName}' type."); } var arrayArgumentSpecifications = UnwrapParamsArguments(arrayArg.Cast <object?>(), parameterInfo.ParameterType.GetElementType() !, suppliedArgumentSpecifications); return(new ArgumentSpecification(parameterInfo.ParameterType, new ArrayContentsArgumentMatcher(arrayArgumentSpecifications))); }
public IArgumentSpecification Create(object argument, IParameterInfo parameterInfo, ISuppliedArgumentSpecifications suppliedArgumentSpecifications) { // Next specificaion is for the whole params array. if (suppliedArgumentSpecifications.IsNextFor(argument, parameterInfo.ParameterType)) { return(suppliedArgumentSpecifications.Dequeue()); } // Check whether the specification ambiguity could happen. bool isAmbiguousSpecificationPresent = suppliedArgumentSpecifications.AnyFor(argument, parameterInfo.ParameterType); if (isAmbiguousSpecificationPresent) { throw new AmbiguousArgumentsException(suppliedArgumentSpecifications.AllSpecifications); } // User passed "null" as the params array value. if (argument == null) { return(_argumentEqualsSpecificationFactory.Create(null, parameterInfo.ParameterType)); } // User specified arguments using the native params syntax. var paramterInfosFromParamsArray = _parameterInfosFromParamsArrayFactory.Create(argument, parameterInfo.ParameterType); var arrayArgumentSpecifications = _arrayArgumentSpecificationsFactory.Create(argument, paramterInfosFromParamsArray, suppliedArgumentSpecifications); return(_arrayContentsArgumentSpecificationFactory.Create(arrayArgumentSpecifications, parameterInfo.ParameterType)); }
public IArgumentSpecification Create(object argument, IParameterInfo parameterInfo, ISuppliedArgumentSpecifications suppliedArgumentSpecifications) { if (suppliedArgumentSpecifications.IsNextFor(argument, parameterInfo.ParameterType)) { return suppliedArgumentSpecifications.Dequeue(); } if (!suppliedArgumentSpecifications.AnyFor(argument, parameterInfo.ParameterType) || parameterInfo.IsOptional || parameterInfo.IsOut) { return _argumentEqualsSpecificationFactory.Create(argument, parameterInfo.ParameterType); } throw new AmbiguousArgumentsException(); }
public IArgumentSpecification Create(object argument, IParameterInfo parameterInfo, ISuppliedArgumentSpecifications suppliedArgumentSpecifications) { if (suppliedArgumentSpecifications.IsNextFor(argument, parameterInfo.ParameterType)) { return(suppliedArgumentSpecifications.Dequeue()); } if (!suppliedArgumentSpecifications.AnyFor(argument, parameterInfo.ParameterType)) { return(_argumentEqualsSpecificationFactory.Create(argument, parameterInfo.ParameterType)); } throw new AmbiguousArgumentsException(); }
private IArgumentSpecification CreateSpecFromNonParamsArg(object?argument, IParameterInfo parameterInfo, ISuppliedArgumentSpecifications suppliedArgumentSpecifications) { if (suppliedArgumentSpecifications.IsNextFor(argument, parameterInfo.ParameterType)) { return(suppliedArgumentSpecifications.Dequeue()); } bool isAmbiguousSpecificationPresent = suppliedArgumentSpecifications.AnyFor(argument, parameterInfo.ParameterType); if (!isAmbiguousSpecificationPresent || parameterInfo.IsOptional || parameterInfo.IsOut) { return(new ArgumentSpecification(parameterInfo.ParameterType, new EqualsArgumentMatcher(argument))); } throw new AmbiguousArgumentsException(); }
public IArgumentSpecification Create(object argument, IParameterInfo parameterInfo, ISuppliedArgumentSpecifications suppliedArgumentSpecifications) { if (suppliedArgumentSpecifications.IsNextFor(argument, parameterInfo.ParameterType)) { return(suppliedArgumentSpecifications.Dequeue()); } bool isAmbiguousSpecificationPresent = suppliedArgumentSpecifications.AnyFor(argument, parameterInfo.ParameterType); if (!isAmbiguousSpecificationPresent || parameterInfo.IsOptional || parameterInfo.IsOut) { return(_argumentEqualsSpecificationFactory.Create(argument, parameterInfo.ParameterType)); } throw new AmbiguousArgumentsException(suppliedArgumentSpecifications.AllSpecifications); }