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