Example #1
0
        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));
        }
Example #3
0
        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));