public async Task AsyncValidation() { const int ParallelCount = 2; var list = new HashSet <int>(); var cts = new CancellationTokenSource(); var builder = new ValidatorBuilder <object>(); builder.AddKnownType <RecursiveClass>(); builder.AddPropertyFilter <RecursiveClass>(); builder.AddConstraint(_ => new DelegateConstraint(instanceValue => { lock (list) { if (Task.CurrentId.HasValue) { list.Add(Task.CurrentId.Value); } } return(true); })); var validator = builder.Build(); var instance = new RecursiveClass { Entry1 = new RecursiveClass { Entry1 = new RecursiveClass { }, Entry2 = new RecursiveClass { }, }, Entry2 = new RecursiveClass { Entry1 = new RecursiveClass { }, Entry2 = new RecursiveClass { }, }, }; var context = new TestValidationContext(); context.Context.MaxDegreeOfParallelism = ParallelCount; await validator.ValidateAsync(instance, context.Context).ConfigureAwait(false); Assert.Equal(ParallelCount, list.Count); }
public void DoesNotIncludeNoGetter() { var builder = new ValidatorBuilder <object>(); builder.AddKnownType <NoGetter>(); builder.AddEmptyConstraint(true); builder.AddConstraint(p => { if (p == typeof(NoGetter).GetProperty(nameof(NoGetter.Test))) { Assert.False(true, "Should not get here as there is no getter"); } return(null); }); Assert.NotNull(builder.Build()); }
public void TestStruct() { var count = 0; var builder = new ValidatorBuilder <object>(); builder.AddKnownType <CustomStruct>(); builder.AddPropertyFilter(_ => true); builder.AddConstraint(_ => new DelegateConstraint(() => { count++; return(true); })); var validator = builder.Build(); validator.Validate(default(CustomStruct), null); Assert.Equal(1, count); }
public void AbstractPropertyTest() { var count = 0; var builder = new ValidatorBuilder <object>(); builder.AddKnownType <TestWithAbstractProperty>(); builder.AddPropertyFilter <TestWithAbstractProperty>(); builder.AddConstraint(_ => new DelegateConstraint(instanceValue => { var value = Assert.IsType <string>(instanceValue); Assert.Equal(nameof(TestWithDerivedAbstractProperty), value); count++; return(true); })); var validator = builder.Build(); validator.Validate(new TestWithDerivedAbstractProperty(), null); Assert.Equal(1, count); }
public void SimpleProperty() { const string Value = "hello!"; var count = 0; var builder = new ValidatorBuilder <object>(); builder .ForType <Test1>() .AddProperty(t => t.Instance); var test = new Test1 { Instance = new Test2 { Member = Value, }, }; builder.AddConstraint(_ => new DelegateConstraint(value => { if (value is string) { Assert.Equal(Value, value); count++; } return(true); })); var validator = builder.Build(); var context = new TestValidationContext(); validator.Validate(test, context.Context); Assert.Equal(1, count); }