public void SkipIndexer() { var builder = new ValidatorBuilder <object>(); var count = 0; builder.AddEmptyConstraint(true); builder.AddKnownType <ClassWithIndexer>(); builder.AddPropertyConstraintFactory((property, _) => { Assert.Empty(property.GetIndexParameters()); count++; return(null); }); var validator = builder.Build(); var context = new TestValidationContext(); validator.Validate(new ClassWithIndexer(), context.Context); Assert.Equal(1, count); Assert.Empty(context.Errors); Assert.Empty(context.UnknownTypes); }
public void BuilderContextIsDisposed() { var builder = new ValidatorBuilder <object>(); var context = default(BuilderContext <object>); builder.AddEmptyConstraint(withType: true); builder.AddPropertyConstraintFactory((property, ctx) => { context = ctx; return(null); }); var validator = builder.Build(); Assert.NotNull(context); Assert.Throws <ObjectDisposedException>(() => context.GetOrSetState(string.Empty, key => string.Empty)); }
public void StaticProperty() { var builder = new ValidatorBuilder <object>(); var count = 0; builder.AddEmptyConstraint(true); builder.AddKnownType <StaticPropertyBoolean>(); builder.AddPropertyConstraintFactory((property, _) => { count++; Assert.NotEqual(typeof(StaticPropertyBoolean).GetProperty(nameof(StaticPropertyBoolean.Test)), property); return(null); }); var validator = builder.Build(); var context = new TestValidationContext(); validator.Validate(new StaticPropertyBoolean(), context.Context); Assert.Equal(1, count); Assert.Empty(context.Errors); Assert.Empty(context.UnknownTypes); }
/// <summary> /// Adds a constraint generator that depends on a <see cref="PropertyInfo"/>. /// </summary> /// <param name="builder">Current <see cref="ValidatorBuilder{TOptions}"/>.</param> /// <param name="factory">The factory to create a constraint given an attribute instance.</param> /// <returns>A <see cref="ConstraintBuilder{TValue}"/> instance.</returns> public static ConstraintBuilder <TState> AddConstraint <TState>(this ValidatorBuilder <TState> builder, Func <PropertyInfo, IConstraint <TState> > factory) => builder.AddPropertyConstraintFactory((property, _) => factory(property));