コード例 #1
0
        public void AutomaticRecusiveValidatableCollectionEnsureElements()
        {
            ValidatableMock   obj = new ValidatableMock();
            NotifierValidator val = new NotifierValidator();

            val.RegisterNotifier(obj);
            int counter = 0;

            ((INotifyCollectionChanged)val.Messages).CollectionChanged += (s, e) => counter++;
            var first        = obj.RecursiveValidatableCollection.First();
            var ignoredFirst = obj.IgnoredRecursiveValidatableCollection.First();

            obj.RecursiveValidatableCollection.Remove(first);
            obj.IgnoredRecursiveValidatableCollection.Remove(ignoredFirst);

            Assert.Equal(1, counter);
            Assert.Single(val.Messages);
            Assert.Equal(1, val.Messages.Count(r => r.Path == $"" && r.PropertyName == nameof(obj.RecursiveValidatableCollection)));

            var added        = new RecursiveValidatableMock();
            var ignoredAdded = new RecursiveValidatableMock();

            obj.RecursiveValidatableCollection.Add(added);
            obj.IgnoredRecursiveValidatableCollection.Add(ignoredAdded);

            Assert.Equal(2, counter);
            Assert.Empty(val.Messages);
            Assert.Equal(0, val.Messages.Count(r => r.Path == $"" && r.PropertyName == nameof(obj.RecursiveValidatableCollection)));
        }
コード例 #2
0
        public void ManualRecursiveValidatableCollection()
        {
            ValidatableMock          obj   = new ValidatableMock();
            RecursiveValidatableMock first = obj.RecursiveValidatableCollection.First();

            first.Id = 0;                                             // Make invalid because must be greater than 0

            obj.IgnoredName = null;                                   // Must be ignored
            obj.IgnoredRecursiveValidatable = null;                   // Must be ignored
            obj.IgnoredRecursiveValidatableCollection.First().Id = 0; // Must be ignored

            ICollection <NotifierValidatorMessage> res = NotifierValidator.Validate(obj);

            PrintValidatorResults(res);
            Assert.Single(res);
            Assert.Equal(1, res.Count(r => r.Path == $"{nameof(obj.RecursiveValidatableCollection)}[{first}]" && r.PropertyName == nameof(obj.Id)));
        }
コード例 #3
0
        public void AutomaticRecusiveValidatableCollectionNull()
        {
            ValidatableMock   obj = new ValidatableMock();
            NotifierValidator val = new NotifierValidator();

            val.RegisterNotifier(obj);
            int counter = 0;

            ((INotifyCollectionChanged)val.Messages).CollectionChanged += (s, e) => counter++;

            obj.RecursiveValidatableCollection        = null;
            obj.IgnoredRecursiveValidatableCollection = null;

            PrintValidatorResults(val.Messages);
            Assert.Equal(1, counter);
            Assert.Single(val.Messages);
            Assert.Equal(1, val.Messages.Count(r => r.Path == $"" && r.PropertyName == nameof(obj.RecursiveValidatableCollection)));

            obj.RecursiveValidatableCollection        = new ObservableCollection <RecursiveValidatableMock>();
            obj.IgnoredRecursiveValidatableCollection = new ObservableCollection <RecursiveValidatableMock>();
            PrintValidatorResults(val.Messages);
            var added        = new RecursiveValidatableMock();
            var ignoredAdded = new RecursiveValidatableMock();

            obj.RecursiveValidatableCollection.Add(added);
            obj.IgnoredRecursiveValidatableCollection.Add(ignoredAdded);

            PrintValidatorResults(val.Messages);
            Assert.Equal(2, counter);
            Assert.Empty(val.Messages);
            Assert.Equal(0, val.Messages.Count(r => r.Path == $"" && r.PropertyName == nameof(obj.RecursiveValidatableCollection)));

            added.Id        = -1;
            ignoredAdded.Id = -1;

            PrintValidatorResults(val.Messages);
            Assert.Equal(3, counter);
            Assert.Single(val.Messages);
            Assert.Equal(1, val.Messages.Count(r => r.Path == $"{nameof(obj.RecursiveValidatableCollection)}[{added}]" && r.PropertyName == nameof(obj.Id)));
        }
コード例 #4
0
        public void AutomaticRecusiveValidatableCollection()
        {
            ValidatableMock   obj = new ValidatableMock();
            NotifierValidator val = new NotifierValidator();

            val.RegisterNotifier(obj);
            int counter = 0;

            ((INotifyCollectionChanged)val.Messages).CollectionChanged += (s, e) => counter++;
            var first        = obj.RecursiveValidatableCollection.First();
            var ignoredFirst = obj.IgnoredRecursiveValidatableCollection.First();

            first.Id        = 0;      // Make invalid because must be greater than 0
            ignoredFirst.Id = 0;      // Must be ignored
            PrintValidatorResults(val.Messages);
            Assert.Equal(1, counter);
            Assert.Single(val.Messages);
            Assert.Equal(1, val.Messages.Count(r => r.Path == $"{nameof(obj.RecursiveValidatableCollection)}[{first}]" && r.PropertyName == nameof(obj.Id)));

            first.Name        = "Fuxion678901";      // Make invalid because has more than 10 character length
            ignoredFirst.Name = "Fuxion678901";      // Must be ignored
            PrintValidatorResults(val.Messages);
            Assert.Equal(2, counter);
            Assert.Equal(2, val.Messages.Count);
            Assert.Equal(1, val.Messages.Count(r => r.Path == $"{nameof(obj.RecursiveValidatableCollection)}[{first}]" && r.PropertyName == nameof(obj.Name)));

            first.Id        = 1;      // Make valid
            ignoredFirst.Id = 1;      // Must be ignored
            PrintValidatorResults(val.Messages);
            Assert.Equal(3, counter);
            Assert.Single(val.Messages);
            Assert.Equal(0, val.Messages.Count(r => r.Path == $"{nameof(obj.RecursiveValidatableCollection)}[{first}]" && r.PropertyName == nameof(obj.Id)));
            // When Id is valid again, and change to 0, the entry for name must change its Path for new first.ToString result
            Assert.Equal(1, val.Messages.Count(r => r.Path == $"{nameof(obj.RecursiveValidatableCollection)}[{first}]" && r.PropertyName == nameof(obj.Name)));

            var added = new RecursiveValidatableMock
            {
                Id   = 1,
                Name = "Valid"
            };
            var ignoredAdded = new RecursiveValidatableMock
            {
                Id   = 1,
                Name = "Valid"
            };

            obj.RecursiveValidatableCollection.Add(added);
            obj.IgnoredRecursiveValidatableCollection.Add(ignoredAdded);

            added.Id        = -1;      // Make invalid because must be greater than 0
            ignoredAdded.Id = -1;      // Must be ignored
            PrintValidatorResults(val.Messages);
            Assert.Equal(4, counter);
            Assert.Equal(2, val.Messages.Count);
            Assert.Equal(1, val.Messages.Count(r => r.Path == $"{nameof(obj.RecursiveValidatableCollection)}[{added}]" && r.PropertyName == nameof(obj.Id)));

            obj.RecursiveValidatableCollection.Remove(added);
            obj.IgnoredRecursiveValidatableCollection.Remove(ignoredAdded);
            PrintValidatorResults(val.Messages);
            Assert.Equal(0, val.Messages.Count(r => r.Path == $"{nameof(obj.RecursiveValidatableCollection)}[{added}]" && r.PropertyName == nameof(obj.Id)));

            added.Name        = "Fuxion678901";      // Make invalid because has more than 10 character length
            ignoredAdded.Name = "Fuxion678901";      // Must be ignored
            PrintValidatorResults(val.Messages);
            Assert.Equal(5, counter);
            Assert.Single(val.Messages);
            Assert.Equal(0, val.Messages.Count(r => r.Path == $"{nameof(obj.RecursiveValidatableCollection)}[{added}]" && r.PropertyName == nameof(obj.Name)));

            val.UnregisterNotifier(first);
            val.UnregisterNotifier(ignoredFirst);
            Assert.Empty(val.Messages);
        }