/// <summary> /// Runs the call handler. This does validation on the parameters, and if validation /// passes it calls the handler. It throws <see cref="ArgumentValidationException"/> /// if validation fails. /// </summary> /// <param name="input">The <see cref="IMethodInvocation"/> that contains the details of the current call.</param> /// <param name="getNext">The delegate to call to get the next handler in the pipeline.</param> /// <returns>The eturn value from the target.</returns> public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext) { if (input == null) { throw new ArgumentNullException("input"); } if (getNext == null) { throw new ArgumentNullException("getNext"); } for (int index = 0; index < input.Inputs.Count; ++index) { ParameterInfo inputParameter = input.Inputs.GetParameterInfo(index); Validator validator = CreateValidator(inputParameter); object parameterValue = input.Inputs[index]; ValidationResults results = validator.Validate(parameterValue); if (!results.IsValid) { ArgumentValidationException exception = new ArgumentValidationException(results, inputParameter.Name); return(input.CreateExceptionMethodReturn(exception)); } } return(getNext().Invoke(input, getNext)); }
public void CanGetTextualRepresentationForExceptionWithEmptyValidationResults() { var exception = new ArgumentValidationException(new ValidationResults(), "param"); var toString = exception.ToString(); Assert.IsNotNull(toString); }
public void CanGetTextualRepresentationForExceptionWithKeylessValidationResults() { var results = new ValidationResults(); results.AddResult(new ValidationResult("message1", null, null, null, null)); var exception = new ArgumentValidationException(results, "param"); var toString = exception.ToString(); Assert.IsNotNull(toString); Assert.IsTrue(toString.Contains("message1")); }
public void CanDeserializeSerializedException() { var results = new ValidationResults(); results.AddResult(new ValidationResult("message1", null, null, null, null)); results.AddResult(new ValidationResult("message2", null, "the key", null, null)); results.AddResult(new ValidationResult("message3", null, null, null, null)); var exception = new ArgumentValidationException(results, "param"); var formatter = new BinaryFormatter(); ArgumentValidationException deserializedException; using (var stream = new MemoryStream()) { formatter.Serialize(stream, exception); stream.Seek(0L, SeekOrigin.Begin); deserializedException = (ArgumentValidationException)formatter.Deserialize(stream); } var toString = deserializedException.ToString(); Assert.IsNotNull(toString); Assert.IsTrue(toString.Contains("message1")); Assert.IsTrue(toString.Contains("message2")); Assert.IsTrue(toString.Contains("message3")); }
/// <summary> /// Runs the call handler. This does validation on the parameters, and if validation /// passes it calls the handler. It throws <see cref="ArgumentValidationException"/> /// if validation fails. /// </summary> /// <param name="input"><see cref="IMethodInvocation"/> containing details of the current call.</param> /// <param name="getNext">delegate to call to get the next handler in the pipeline.</param> /// <returns>Return value from the target.</returns> public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext) { if (input == null) throw new ArgumentNullException("input"); if (getNext == null) throw new ArgumentNullException("getNext"); for (int index = 0; index < input.Inputs.Count; ++index) { ParameterInfo inputParameter = input.Inputs.GetParameterInfo(index); Validator validator = CreateValidator(inputParameter); object parameterValue = input.Inputs[index]; ValidationResults results = validator.Validate(parameterValue); if (!results.IsValid) { ArgumentValidationException exception = new ArgumentValidationException(results, inputParameter.Name); return input.CreateExceptionMethodReturn(exception); } } return getNext().Invoke(input, getNext); }