Ejemplo n.º 1
0
            public void ThrowsExceptionIfAnyValidatorDoes()
            {
                var compositeValidator = new CompositeValidator();

                TestCompositeRethrowException <ArgumentNullException>(compositeValidator, validator => validator.AfterValidation(null, null, null), () => compositeValidator.AfterValidation(null, null, null));
            }
Ejemplo n.º 2
0
            public void CompositeValidatorModificationMustWaitUntilTheEnd()
            {
                var validatorMock  = new Mock <IValidator>();
                var validatorMock1 = new Mock <IValidator>();
                var validatorMock2 = new Mock <IValidator>();

                validatorMock.Setup(validator => validator.BeforeValidation(null, null, null));
                validatorMock.Setup(validator => validator.AfterValidation(null, null, null));

                validatorMock1.Setup(validator => validator.BeforeValidation(null, null, null));
                validatorMock1.Setup(validator => validator.AfterValidation(null, null, null));

                validatorMock2.Setup(validator => validator.BeforeValidation(null, null, null));
                validatorMock2.Setup(validator => validator.AfterValidation(null, null, null));

                var compositeValidator = new CompositeValidator();

                var startEvent = new AutoResetEvent(false);
                var alterEvent = new AutoResetEvent(false);
                var syncEvents = new[] { new AutoResetEvent(false), new AutoResetEvent(false) };

                // Validation loop thread
                ThreadPool.QueueUserWorkItem(
                    delegate
                {
                    startEvent.WaitOne();

                    compositeValidator.BeforeValidation(null, null, null);

                    alterEvent.Set();
                    ThreadHelper.Sleep(1000);

                    compositeValidator.AfterValidation(null, null, null);
                    syncEvents[0].Set();
                });

                // Alter validator composition thread.
                ThreadPool.QueueUserWorkItem(
                    delegate
                {
                    compositeValidator.Add(validatorMock.Object);

                    compositeValidator.Add(validatorMock1.Object);

                    startEvent.Set();
                    alterEvent.WaitOne();

                    // Try add a validator during a validation loop execution to the composition.

                    compositeValidator.Add(validatorMock2.Object);

                    syncEvents[1].Set();
                });

                syncEvents[0].WaitOne(TimeSpan.FromSeconds(10));
                syncEvents[1].WaitOne(TimeSpan.FromSeconds(10));

                validatorMock.Verify(validator => validator.BeforeValidation(null, null, null), Times.Exactly(1));
                validatorMock.Verify(validator => validator.AfterValidation(null, null, null), Times.Exactly(1));

                validatorMock1.Verify(validator => validator.BeforeValidation(null, null, null), Times.Exactly(1));
                validatorMock1.Verify(validator => validator.AfterValidation(null, null, null), Times.Exactly(1));

                validatorMock2.Verify(validator => validator.BeforeValidation(null, null, null), Times.Never());
                validatorMock2.Verify(validator => validator.AfterValidation(null, null, null), Times.Never());
            }