Example #1
0
        public void ClearErrorsShouldRedirectCallToValidators()
        {
            ValidatableViewModel viewModel = GetValidatableViewModel();
            var validator1 = viewModel.AddValidator <SpyValidator>(new object());
            var validator2 = viewModel.AddValidator <SpyValidator>(new object());

            viewModel.ClearErrors();
            validator1.ClearAllErrorsCount.ShouldEqual(1);
            validator2.ClearAllErrorsCount.ShouldEqual(1);
        }
Example #2
0
        public void ValidateInstanceShouldValidateOnlyInstance()
        {
            ValidatableViewModel viewModel = GetValidatableViewModel();

            ValidatorProvider.Register <SpyValidator>();
            var instance  = new object();
            var instance2 = new object();

            viewModel.AddInstance(instance);
            viewModel.AddInstance(instance2);
            viewModel.AddValidator <SpyValidator>(instance);
            viewModel.GetValidators().Count.ShouldEqual(4);
            viewModel.GetValidators().OfType <SpyValidator>().ForEach(validator => validator.ValidateAllCount = 0);
            viewModel.ValidateInstanceAsync(instance);

            foreach (SpyValidator result in viewModel.GetValidators().OfType <SpyValidator>())
            {
                if (result.Context.Instance == instance)
                {
                    result.ValidateAllCount.ShouldEqual(1);
                }
                else
                {
                    result.ValidateAllCount.ShouldEqual(0);
                }
            }
        }
        public void ValidateMethodShouldCallNotifyEvent()
        {
            ThreadManager.ImmediateInvokeAsync           = true;
            ThreadManager.ImmediateInvokeOnUiThreadAsync = true;
            ThreadManager.ImmediateInvokeOnUiThread      = true;

            int countInvoke = 0;
            ValidatableViewModel viewModel       = GetValidatableViewModel();
            INotifyDataErrorInfo notifyDataError = viewModel;

            notifyDataError.ErrorsChanged += (sender, args) =>
            {
                args.PropertyName.ShouldEqual(PropToValidate1);
                countInvoke++;
            };
            var validator = viewModel.AddValidator <SpyValidator>(new object());

            notifyDataError.HasErrors.ShouldBeFalse();
            validator.SetErrors(PropToValidate1, PropToValidate1);
            countInvoke.ShouldEqual(1);
            validator.SetErrors(PropToValidate1, PropToValidate2);
            countInvoke.ShouldEqual(2);
            notifyDataError.HasErrors.ShouldBeTrue();

            //NOTE: Event is not invoked, if errors is not changed.

            /*viewModel.ValidateAsync(PropToValidate1);
             * countInvoke.ShouldEqual(2);*/
        }
Example #4
0
        public void IsValidShouldRedirectCallToValidators()
        {
            ValidatableViewModel viewModel = GetValidatableViewModel();
            var validator1 = viewModel.AddValidator <SpyValidator>(new object());
            var validator2 = viewModel.AddValidator <SpyValidator>(new object());

            viewModel.IsValid.ShouldBeTrue();
            validator1.SetErrors(PropToValidate1, PropToValidate1);
            validator2.SetErrors(PropToValidate2, PropToValidate2);
            viewModel.IsValid.ShouldBeFalse();

            validator1.SetErrors(PropToValidate1);
            viewModel.IsValid.ShouldBeFalse();

            validator2.SetErrors(PropToValidate2);
            viewModel.IsValid.ShouldBeTrue();
        }
Example #5
0
        public void GetAllErrorsShouldRedirectCallToValidators()
        {
            ValidatableViewModel viewModel = GetValidatableViewModel();
            var validator1 = viewModel.AddValidator <SpyValidator>(new object());
            var validator2 = viewModel.AddValidator <SpyValidator>(new object());

            viewModel.GetErrors().ShouldBeEmpty();
            viewModel.GetErrors().ShouldBeEmpty();

            validator1.SetErrors(PropToValidate1, PropToValidate1);
            validator1.SetErrors(PropToValidate2, PropToValidate2);
            validator2.SetErrors(PropToValidate1, PropToValidate2);
            validator2.SetErrors(PropToValidate2, PropToValidate1);

            IDictionary <string, IList <object> > errors = viewModel.GetErrors();

            errors.Count.ShouldEqual(2);

            errors[PropToValidate1].Count.ShouldEqual(2);
            errors[PropToValidate1].Contains(PropToValidate1).ShouldBeTrue();
            errors[PropToValidate1].Contains(PropToValidate2).ShouldBeTrue();

            errors[PropToValidate2].Count.ShouldEqual(2);
            errors[PropToValidate2].Contains(PropToValidate1).ShouldBeTrue();
            errors[PropToValidate2].Contains(PropToValidate2).ShouldBeTrue();

            validator1.SetErrors(PropToValidate1);
            validator1.SetErrors(PropToValidate2);

            errors = viewModel.GetErrors();
            errors.Count.ShouldEqual(2);

            errors[PropToValidate1].Count.ShouldEqual(1);
            errors[PropToValidate1].Contains(PropToValidate2).ShouldBeTrue();

            errors[PropToValidate2].Count.ShouldEqual(1);
            errors[PropToValidate2].Contains(PropToValidate1).ShouldBeTrue();

            validator2.SetErrors(PropToValidate1);
            validator2.SetErrors(PropToValidate2);

            viewModel.GetErrors().ShouldBeEmpty();
            viewModel.GetErrors().ShouldBeEmpty();
        }
Example #6
0
        public void AddedValidatorGenericShouldBeInValidators()
        {
            var o = new object();
            ValidatableViewModel viewModel = GetValidatableViewModel();
            var validator = viewModel.AddValidator <SpyValidator>(o);

            validator.Context.ShouldNotBeNull();
            validator.Context.Instance.ShouldEqual(o);
            viewModel.GetValidators().Single(validator1 => validator1 != viewModel.Validator).ShouldEqual(validator);
        }
Example #7
0
        public void RemoveValidatorGenericShouldBeRemoveFromValidators()
        {
            var o = new object();
            ValidatableViewModel viewModel = GetValidatableViewModel();
            var validator = viewModel.AddValidator <SpyValidator>(o);

            viewModel.GetValidators().Single(validator1 => validator1 != viewModel.Validator).ShouldEqual(validator);
            viewModel.RemoveValidator(validator).ShouldBeTrue();
            viewModel.GetValidators().Where(validator1 => validator1 != viewModel.Validator).ShouldBeEmpty();
        }
Example #8
0
        public void GetErrorsShouldRedirectCallToValidators()
        {
            ValidatableViewModel viewModel = GetValidatableViewModel();
            var validator1 = viewModel.AddValidator <SpyValidator>(new object());
            var validator2 = viewModel.AddValidator <SpyValidator>(new object());

            viewModel.GetErrors(PropToValidate1).ShouldBeEmpty();
            viewModel.GetErrors(PropToValidate2).ShouldBeEmpty();

            validator1.SetErrors(PropToValidate1, PropToValidate1);
            validator1.SetErrors(PropToValidate2, PropToValidate2);
            validator2.SetErrors(PropToValidate1, PropToValidate2);
            validator2.SetErrors(PropToValidate2, PropToValidate1);

            object[] errors = viewModel.GetErrors(PropToValidate1).OfType <object>().ToArray();
            errors.Length.ShouldEqual(2);
            errors.Contains(PropToValidate1).ShouldBeTrue();
            errors.Contains(PropToValidate2).ShouldBeTrue();

            errors = viewModel.GetErrors(PropToValidate2).OfType <object>().ToArray();
            errors.Length.ShouldEqual(2);
            errors.Contains(PropToValidate1).ShouldBeTrue();
            errors.Contains(PropToValidate2).ShouldBeTrue();

            validator1.SetErrors(PropToValidate1);
            validator1.SetErrors(PropToValidate2);

            errors = viewModel.GetErrors(PropToValidate1).OfType <object>().ToArray();
            errors.Length.ShouldEqual(1);
            errors.Contains(PropToValidate2).ShouldBeTrue();

            errors = viewModel.GetErrors(PropToValidate2).OfType <object>().ToArray();
            errors.Length.ShouldEqual(1);
            errors.Contains(PropToValidate1).ShouldBeTrue();

            validator2.SetErrors(PropToValidate1);
            validator2.SetErrors(PropToValidate2);

            viewModel.GetErrors(PropToValidate1).ShouldBeEmpty();
            viewModel.GetErrors(PropToValidate2).ShouldBeEmpty();
        }
Example #9
0
        public void AddedValidatorShouldBeInValidators()
        {
            var o = new object();
            ValidatableViewModel viewModel = GetValidatableViewModel();
            var validator = new SpyValidator();

            validator.Initialize(viewModel.CreateContext(o));
            viewModel.AddValidator(validator);
            validator.Context.ShouldNotBeNull();
            validator.Context.Instance.ShouldEqual(o);
            viewModel.GetValidators().Single(validator1 => validator1 != viewModel.Validator).ShouldEqual(validator);
        }
Example #10
0
        public void RemoveInstanceShouldRemoveAllValidatorsAssociatedWithInstance()
        {
            ValidatableViewModel viewModel = GetValidatableViewModel();

            ValidatorProvider.Register <SpyValidator>();
            var instance  = new object();
            var instance2 = new object();

            viewModel.AddInstance(instance);
            viewModel.AddInstance(instance2);
            viewModel.AddValidator <ManualValidator>(instance);
            viewModel.GetValidators().Count.ShouldEqual(4);

            viewModel.RemoveInstance(instance);
            viewModel.GetValidators().Single(validator => validator != viewModel.Validator).Context.Instance.ShouldEqual(instance2);
        }
Example #11
0
        public void NotifyDataErrorInfoShouldGetErrorsFromValidators()
        {
            ValidatableViewModel viewModel       = GetValidatableViewModel();
            INotifyDataErrorInfo notifyDataError = viewModel;

            var validator = viewModel.AddValidator <SpyValidator>(new object());

            notifyDataError.HasErrors.ShouldBeFalse();
            validator.SetErrors(PropToValidate1, PropToValidate1, PropToValidate2);
            notifyDataError.HasErrors.ShouldBeTrue();

            string[] errors = notifyDataError.GetErrors(PropToValidate1).OfType <string>().ToArray();
            errors.Length.ShouldEqual(2);
            errors.Contains(PropToValidate1).ShouldBeTrue();
            errors.Contains(PropToValidate2).ShouldBeTrue();

            validator.SetErrors(PropToValidate1);
            notifyDataError.GetErrors(PropToValidate1).ShouldBeEmpty();
            notifyDataError.HasErrors.ShouldBeFalse();
        }
Example #12
0
        public void DataErrorInfoShouldGetErrorsFromValidators()
        {
            ValidatableViewModel viewModel     = GetValidatableViewModel();
            IDataErrorInfo       dataErrorInfo = viewModel;

            var            validator          = viewModel.AddValidator <SpyValidator>(viewModel);
            IDataErrorInfo validatorErrorInfo = validator;

            validator.SetErrors(PropToValidate1, PropToValidate1);
            viewModel.OnPropertyChanged(PropToValidate1, ExecutionType.None);
            string error = dataErrorInfo[PropToValidate1];

            validator.ValidateCount.ShouldEqual(1);
            validator.ValidateProperties.Contains(PropToValidate1).ShouldBeTrue();
            error.ShouldEqual(PropToValidate1);

            validator.SetErrors(PropToValidate1);
            viewModel.OnPropertyChanged(PropToValidate1, ExecutionType.None);
            error = validatorErrorInfo[PropToValidate1];
            validator.ValidateCount.ShouldEqual(2);
            error.ShouldBeNull();
        }
Example #13
0
        public void AddNotInitializedValidatorShouldThrowException()
        {
            ValidatableViewModel viewModel = GetValidatableViewModel();

            ShouldThrow <InvalidOperationException>(() => viewModel.AddValidator(new SpyValidator()));
        }