Exemplo n.º 1
0
        public void Execute_WithObservableYielding3Values_ShouldReturnCorrectResult(
            object value1,
            object value2,
            object value3,
            TestSchedulers schedulers,
            ThrowingTestScheduler scheduler)
        {
            //arrange

            var observable = scheduler.CreateColdObservable(OnNext(10, value1),
                                                            OnNext(20, value2),
                                                            OnNext(30, value3),
                                                            OnCompleted(40, new object()));
            var observer = scheduler.CreateObserver <object>();
            var sut      = new ObservableMvvmCommand <object, object>(o => observable, schedulers, schedulers, "name", new AlwaysTrueCanExecuteStrategy <object>(), doObserver: () => observer, doScheduler: ImmediateScheduler.Instance);

            //act
            sut.Execute(null);
            //allow any work scheduled with the schedulers to advance
            schedulers.AdvanceBy(200);
            //allow notifications to advance
            scheduler.AdvanceBy(200);

            //assert
            observer.Messages.AssertEqual(OnNext(10, value1),
                                          OnNext(20, value2),
                                          OnNext(30, value3),
                                          OnCompleted(40, new object()));
        }
Exemplo n.º 2
0
        public void Accept_ShouldCallVisit(
            ObservableMvvmCommand <object, object> sut,
            Mock <IMvvmCommandVisitor> visitor)
        {
            //arrange

            //act
            sut.Accept(visitor.Object);

            //assert
            visitor.Verify(v => v.Visit((IAsyncMvvmCommand)sut));
        }
Exemplo n.º 3
0
		public void Sut_TestDefaultValues(
			ObservableMvvmCommand<object, object> sut,
			ISchedulers schedulers)
		{
			//arrange
			//act

			//assert
			sut.DoScheduler.Should().NotBeNull();
			sut.DoScheduler.Should().NotBeNull();
			sut.CanExecuteStrategy.Should().NotBeNull();
		}
Exemplo n.º 4
0
        public void Sut_TestDefaultValues(
            ObservableMvvmCommand <object, object> sut,
            ISchedulers schedulers)
        {
            //arrange
            //act

            //assert
            sut.DoScheduler.Should().NotBeNull();
            sut.DoScheduler.Should().NotBeNull();
            sut.CanExecuteStrategy.Should().NotBeNull();
        }
Exemplo n.º 5
0
        public void SetDefaultError_ShouldReturnTrue(
            Func <CancellationToken, Exception, Task> error,
            Func <object, IObservable <object> > observable,
            TestSchedulers schedulers)
        {
            //arrange
            var sut = new ObservableMvvmCommand <object, object>(observable, schedulers, schedulers, "name", new AlwaysTrueCanExecuteStrategy <object>());

            //act
            var actual = sut.SetDefaultError(error);

            //assert
            actual.Should().BeTrue();
        }
Exemplo n.º 6
0
        public void Execute_ShouldCallNotifyExecuting(
            [Frozen] Mock <ICanExecuteStrategy <object> > canExecute,
            ObservableMvvmCommand <object, object> sut,
            [Frozen] object obj,
            TestSchedulers schedulers)
        {
            //arrange

            //act
            sut.Execute(obj);
            schedulers.AdvanceBy(200);

            //assert
            canExecute.Verify(c => c.NotifyExecuting(obj), Times.Once());
        }
Exemplo n.º 7
0
        public void SetDefaultError_ErrorAlreadySetFromConstructor_ShouldReturnFalse(
            Func <CancellationToken, Exception, Task> errorTask,
            Func <CancellationToken, Exception, Task> expectedErrorTask,
            Func <object, IObservable <object> > observable,
            TestSchedulers schedulers)
        {
            //arrange
            var sut = new ObservableMvvmCommand <object, object>(observable, schedulers, schedulers, "name", new AlwaysTrueCanExecuteStrategy <object>(), errorTask: expectedErrorTask);

            //act
            var actual = sut.SetDefaultError(errorTask);

            //assert
            actual.Should().BeFalse();
        }
Exemplo n.º 8
0
        public void DecorateDoFactory_ShouldDecorateDo(
            Func <object, IObservable <object> > observable,
            IObserver <object> expected,
            TestSchedulers schedulers)
        {
            //arrange
            var sut = new ObservableMvvmCommand <object, object>(observable, schedulers, schedulers, "name", new AlwaysTrueCanExecuteStrategy <object>());

            //act
            sut.DecorateDo(observer => expected);
            var actual = sut.DoObserver();

            //assert
            actual.Should().Be(expected);
        }
Exemplo n.º 9
0
        public void CanExecute_ShouldReturnCorrectValue(
            bool canExecute,
            [Frozen] Mock <ICanExecuteStrategy <object> > canExecuteStrategy,
            ObservableMvvmCommand <object, object> sut,
            object arg)
        {
            //arrange
            canExecuteStrategy.Setup(c => c.CanExecute(arg)).Returns(canExecute);

            //act
            var actual = sut.CanExecute(arg);

            //assert
            actual.Should().Be(canExecute);
        }
Exemplo n.º 10
0
		public void CanExecute_ShouldReturnCorrectValue(
			bool canExecute,
			[Frozen]Mock<ICanExecuteStrategy<object>> canExecuteStrategy,
			ObservableMvvmCommand<object, object> sut,
			object arg)
		{
			//arrange
			canExecuteStrategy.Setup(c => c.CanExecute(arg)).Returns(canExecute);

			//act
			var actual = sut.CanExecute(arg);

			//assert
			actual.Should().Be(canExecute);
		}
Exemplo n.º 11
0
        public void CanExecuteChanged_WhenCanExecuteStrategyObservableYieldValue_ShouldBeRaiseCanExecute(
            [Frozen] Subject <Unit> canExecuteChanged,
            [Frozen] TestSchedulers schedulers,
            ObservableMvvmCommand <object, object> sut
            )
        {
            //arrange
            sut.MonitorEvents();

            //act
            canExecuteChanged.OnNext(Unit.Default);
            schedulers.AdvanceBy(200);

            //assert
            sut.ShouldRaise("CanExecuteChanged");
        }
Exemplo n.º 12
0
        public void Execute_ShouldExecuteObservable(
            TestSchedulers schedulers)
        {
            //arrange
            bool observableCalled = false;
            var  value            = Observable.Return(Unit.Default, ImmediateScheduler.Instance)
                                    .Do(unit => observableCalled = true);
            var sut = new ObservableMvvmCommand <object, System.Reactive.Unit>(o => value, schedulers, schedulers, "name", new AlwaysTrueCanExecuteStrategy <object>());

            //act
            sut.Execute(null);
            schedulers.AdvanceBy(200);

            //assert
            observableCalled.Should().BeTrue();
        }
Exemplo n.º 13
0
        public void Execute_WhenComplete_ShouldCallNotifyNotExecuting(
            Mock <ICanExecuteStrategy <object> > canExecute,
            object obj,
            TestSchedulers schedulers)
        {
            //arrange
            var value = Observable.Return(obj, ImmediateScheduler.Instance);
            var sut   = new ObservableMvvmCommand <object, object>(_ => value, schedulers, schedulers, "name", canExecute.Object);

            //act
            sut.Execute(obj);
            schedulers.AdvanceBy(200);

            //assert
            canExecute.Verify(c => c.NotifyNotExecuting(obj), Times.Once());
        }
Exemplo n.º 14
0
        public void Execute_WithError_ShouldExecuteErrorTask(
            object obj,
            Exception expected,
            TestSchedulers schedulers)
        {
            //arrange
            Exception actual = null;
            var       value  = Observable.Throw <object>(expected, ImmediateScheduler.Instance);
            Func <CancellationToken, Exception, Task> errorTask = async(ct, ex) => actual = ex;
            var sut = new ObservableMvvmCommand <object, object>(_ => value, schedulers, schedulers, "name", new AlwaysTrueCanExecuteStrategy <object>(), errorTask: errorTask);

            //act
            sut.Execute(obj);
            schedulers.AdvanceBy(200);

            //assert
            actual.Should().Be(expected);
        }
Exemplo n.º 15
0
        public void Execute_WhenExuctingWhileOtherExecutionIsOccuring_ShouldCancelPreviousExecution(
            [Frozen] TestSchedulers schedulers)
        {
            //arrange
            var firstObservable  = schedulers.CreateColdObservable(OnNext(200, new object()), OnNext(300, new object()));
            var secondObservable = schedulers.CreateColdObservable(OnNext(400, new object()), OnNext(500, new object()));
            var i = 0;
            Func <object, IObservable <object> > observableFactory = _ => ++ i == 1 ? firstObservable : secondObservable;
            var sut = new ObservableMvvmCommand <object, object>(observableFactory, schedulers, schedulers, "name", new AlwaysTrueCanExecuteStrategy <object>());

            //act
            sut.Execute(null);
            schedulers.AdvanceBy(250);
            sut.Execute(null);
            schedulers.AdvanceBy(350);

            //assert
            firstObservable.Subscriptions.Single().Unsubscribe.Should().Be(250);
        }
Exemplo n.º 16
0
        public void Execute_WhenErrorInErrorAction_ShouldCallNotifyNotExecuting(
            Mock <ICanExecuteStrategy <object> > canExecute,
            Exception error,
            object obj,
            TestSchedulers schedulers)
        {
            //arrange
            var value = Observable.Throw <object>(error, ImmediateScheduler.Instance);
            Func <CancellationToken, Exception, Task> errorTask = async(ct, ex) =>
            {
                throw new Exception();
            };
            var sut = new ObservableMvvmCommand <object, object>(_ => value, schedulers, schedulers, "name", canExecute.Object, errorTask: errorTask);

            //act
            sut.Execute(obj);
            schedulers.AdvanceBy(200);

            //assert
            canExecute.Verify(c => c.NotifyNotExecuting(obj), Times.Once());
        }
Exemplo n.º 17
0
        public void Execute_ShouldCallOnError(
            Exception expected,
            TestSchedulers schedulers)
        {
            //arrange
            Exception actual = null;
            var       value  = Observable.Throw <object>(expected, ImmediateScheduler.Instance);
            var       sut    = new ObservableMvvmCommand <object, object>(
                o => value,
                schedulers,
                schedulers,
                "name",
                new AlwaysTrueCanExecuteStrategy <object>(),
                doObserver: () => Observer.Create <object>(_ => { }, e => actual = e),
                doScheduler: ImmediateScheduler.Instance);

            //act
            sut.Execute(null);
            schedulers.AdvanceBy(200);

            //assert
            actual.Should().Be(expected);
        }
Exemplo n.º 18
0
        public void Execute_ShouldCallCallback(
            object expected,
            TestSchedulers schedulers)
        {
            //arrange
            object actual = null;
            var    value  = Observable.Return(expected, ImmediateScheduler.Instance);
            var    sut    = new ObservableMvvmCommand <object, object>(
                o => value,
                schedulers,
                schedulers,
                "name",
                new AlwaysTrueCanExecuteStrategy <object>(),
                doObserver: () => Observer.Create <object>(o => actual = o),
                doScheduler: ImmediateScheduler.Instance);

            //act
            sut.Execute(null);
            schedulers.AdvanceBy(200);

            //assert
            actual.Should().Be(expected);
        }
Exemplo n.º 19
0
        public void Execute_ShouldBeCalledWithArg(
            IObservable <object> value,
            object arg,
            TestSchedulers schedulers)
        {
            //arrange
            object actual = null;
            var    sut    = new ObservableMvvmCommand <object, object>(o =>
            {
                actual = o;
                return(value);
            },
                                                                       schedulers,
                                                                       schedulers,
                                                                       "name",
                                                                       new AlwaysTrueCanExecuteStrategy <object>());

            //act
            sut.Execute(arg);
            schedulers.AdvanceBy(200);

            //assert
            actual.Should().Be(arg);
        }
Exemplo n.º 20
0
		public void Execute_WhenErrorInErrorAction_ShouldCallNotifyNotExecuting(
			Mock<ICanExecuteStrategy<object>> canExecute,
			Exception error,
			object obj,
			TestSchedulers schedulers)
		{
			//arrange
			var value = Observable.Throw<object>(error, ImmediateScheduler.Instance);
			Func<CancellationToken, Exception, Task> errorTask = async (ct, ex) =>
			{
				throw new Exception();
			};
			var sut = new ObservableMvvmCommand<object, object>(_ => value, schedulers, schedulers, "name", canExecute.Object, errorTask: errorTask);

			//act
			sut.Execute(obj);
			schedulers.AdvanceBy(200);

			//assert
			canExecute.Verify(c => c.NotifyNotExecuting(obj), Times.Once());
		}
Exemplo n.º 21
0
 public void DecorateDoFactory_VerifyGuardClause(
     ObservableMvvmCommand <object, object> sut,
     GuardClauseAssertion assertion)
 {
     assertion.Verify(() => sut.DecorateValueFactory(null));
 }
Exemplo n.º 22
0
 public void SetDefaultError_WithNull_VerifyGuardClause(
     ObservableMvvmCommand <object, object> sut,
     GuardClauseAssertion assertion)
 {
     assertion.Verify(() => sut.SetDefaultError(null));
 }
Exemplo n.º 23
0
		public void Execute_WithObservableYielding3Values_ShouldReturnCorrectResult(
			object value1,
			object value2,
			object value3,
			TestSchedulers schedulers,
			ThrowingTestScheduler scheduler)
		{
			//arrange

			var observable = scheduler.CreateColdObservable(OnNext(10, value1),
				OnNext(20, value2),
				OnNext(30, value3),
				OnCompleted(40, new object()));
			var observer = scheduler.CreateObserver<object>();
			var sut = new ObservableMvvmCommand<object, object>(o => observable, schedulers, schedulers, "name", new AlwaysTrueCanExecuteStrategy<object>(), doObserver: () => observer, doScheduler: ImmediateScheduler.Instance);

			//act
			sut.Execute(null);
			//allow any work scheduled with the schedulers to advance
			schedulers.AdvanceBy(200);
			//allow notifications to advance
			scheduler.AdvanceBy(200);

			//assert
			observer.Messages.AssertEqual(OnNext(10, value1),
				OnNext(20, value2),
				OnNext(30, value3),
				OnCompleted(40, new object()));
		}
Exemplo n.º 24
0
		public void Execute_ShouldBeCalledWithArg(
			IObservable<object> value,
			object arg,
			TestSchedulers schedulers)
		{
			//arrange
			object actual = null;
			var sut = new ObservableMvvmCommand<object, object>(o =>
			{
				actual = o;
				return value;
			},
			schedulers,
			schedulers,
			"name",
			new AlwaysTrueCanExecuteStrategy<object>());

			//act
			sut.Execute(arg);
			schedulers.AdvanceBy(200);

			//assert
			actual.Should().Be(arg);
		}
Exemplo n.º 25
0
		public void CanExecuteChanged_WhenCanExecuteStrategyObservableYieldValue_ShouldBeRaiseCanExecute(
			[Frozen]Subject<Unit> canExecuteChanged,
			[Frozen]TestSchedulers schedulers,
			ObservableMvvmCommand<object, object> sut
			)
		{
			//arrange
			sut.MonitorEvents();
            
			//act
			canExecuteChanged.OnNext(Unit.Default);
			schedulers.AdvanceBy(200);

			//assert
			sut.ShouldRaise("CanExecuteChanged");
		}
Exemplo n.º 26
0
		public void SetDefaultError_ShouldReturnTrue(
		  Func<CancellationToken, Exception, Task> error,
			Func<object, IObservable<object>> observable,
			TestSchedulers schedulers)
		{
			//arrange
			var sut = new ObservableMvvmCommand<object, object>(observable, schedulers, schedulers, "name", new AlwaysTrueCanExecuteStrategy<object>());

			//act
			var actual = sut.SetDefaultError(error);

			//assert
			actual.Should().BeTrue();
		}
Exemplo n.º 27
0
		public void Execute_ShouldCallOnError(
			Exception expected,
			TestSchedulers schedulers)
		{
			//arrange
			Exception actual = null;
			var value = Observable.Throw<object>(expected, ImmediateScheduler.Instance);
			var sut = new ObservableMvvmCommand<object, object>(
				o => value,
				schedulers,
				schedulers,
				"name",
				new AlwaysTrueCanExecuteStrategy<object>(),
				doObserver: () => Observer.Create<object>(_ => { }, e => actual = e),
				doScheduler: ImmediateScheduler.Instance);

			//act
			sut.Execute(null);
			schedulers.AdvanceBy(200);

			//assert
			actual.Should().Be(expected);
		}
Exemplo n.º 28
0
		public void SetDefaultError_ErrorAlreadySetFromConstructor_ShouldReturnFalse(
			Func<CancellationToken, Exception, Task> errorTask,
			Func<CancellationToken, Exception, Task> expectedErrorTask,
			Func<object, IObservable<object>> observable,
			TestSchedulers schedulers)
		{
			//arrange
			var sut = new ObservableMvvmCommand<object, object>(observable, schedulers, schedulers, "name", new AlwaysTrueCanExecuteStrategy<object>(), errorTask: expectedErrorTask);

			//act
			var actual = sut.SetDefaultError(errorTask);

			//assert
			actual.Should().BeFalse();
		}
Exemplo n.º 29
0
		public void SetDefaultError_WithNull_VerifyGuardClause(
			ObservableMvvmCommand<object, object> sut,
			GuardClauseAssertion assertion)
		{
			assertion.Verify(() => sut.SetDefaultError(null));
		}
Exemplo n.º 30
0
		public void DecorateDoFactory_ShouldDecorateDo(
			Func<object, IObservable<object>> observable,
			IObserver<object> expected,
			TestSchedulers schedulers)
		{
			//arrange
			var sut = new ObservableMvvmCommand<object, object>(observable, schedulers, schedulers, "name", new AlwaysTrueCanExecuteStrategy<object>());

			//act
			sut.DecorateDo(observer => expected);
			var actual = sut.DoObserver();

			//assert
			actual.Should().Be(expected);
		}
Exemplo n.º 31
0
		public void DecorateDoFactory_VerifyGuardClause(
			ObservableMvvmCommand<object, object> sut,
			GuardClauseAssertion assertion)
		{
			assertion.Verify(() => sut.DecorateValueFactory(null));
		}
Exemplo n.º 32
0
		public void Execute_WhenExuctingWhileOtherExecutionIsOccuring_ShouldCancelPreviousExecution(
		  [Frozen]TestSchedulers schedulers)
		{
			//arrange
			var firstObservable = schedulers.CreateColdObservable(OnNext(200, new object()), OnNext(300, new object()));
			var secondObservable = schedulers.CreateColdObservable(OnNext(400, new object()), OnNext(500, new object()));
			var i = 0;
			Func<object, IObservable<object>> observableFactory = _ => ++i == 1 ? firstObservable : secondObservable;
			var sut = new ObservableMvvmCommand<object, object>(observableFactory, schedulers, schedulers, "name", new AlwaysTrueCanExecuteStrategy<object>());

			//act
			sut.Execute(null);
			schedulers.AdvanceBy(250);
			sut.Execute(null);
			schedulers.AdvanceBy(350);

			//assert
			firstObservable.Subscriptions.Single().Unsubscribe.Should().Be(250);
		}
Exemplo n.º 33
0
		public void Execute_WhenError_ShouldCallNotifyNotExecuting(
			Mock<ICanExecuteStrategy<object>> canExecute,
			Exception error,
			object obj,
			TestSchedulers schedulers)
		{
			//arrange
			var value = Observable.Throw<object>(error, ImmediateScheduler.Instance);
			var sut = new ObservableMvvmCommand<object, object>(_ => value, schedulers, schedulers, "name", canExecute.Object);

			//act
			sut.Execute(obj);
			schedulers.AdvanceBy(200);

			//assert
			canExecute.Verify(c => c.NotifyNotExecuting(obj), Times.Once());
		}
Exemplo n.º 34
0
		public void Accept_ShouldCallVisit(
		  ObservableMvvmCommand<object, object> sut,
			Mock<IMvvmCommandVisitor> visitor)
		{
			//arrange

			//act
			sut.Accept(visitor.Object);

			//assert
			visitor.Verify(v => v.Visit((IAsyncMvvmCommand)sut));
		}
Exemplo n.º 35
0
		public void Execute_ShouldCallNotifyExecuting(
			[Frozen]Mock<ICanExecuteStrategy<object>> canExecute,
			ObservableMvvmCommand<object, object> sut,
			[Frozen]object obj,
			TestSchedulers schedulers)
		{
			//arrange

			//act
			sut.Execute(obj);
			schedulers.AdvanceBy(200);

			//assert
			canExecute.Verify(c => c.NotifyExecuting(obj), Times.Once());
		}
Exemplo n.º 36
0
		public void Execute_WithError_ShouldExecuteErrorTask(
		  object obj,
			Exception expected,
			TestSchedulers schedulers)
		{
			//arrange
			Exception actual = null;
			var value = Observable.Throw<object>(expected, ImmediateScheduler.Instance);
			Func<CancellationToken, Exception, Task> errorTask = async (ct, ex) => actual = ex;
			var sut = new ObservableMvvmCommand<object, object>(_ => value, schedulers, schedulers, "name", new AlwaysTrueCanExecuteStrategy<object>(), errorTask: errorTask);

			//act
			sut.Execute(obj);
			schedulers.AdvanceBy(200);

			//assert
			actual.Should().Be(expected);
		}
Exemplo n.º 37
0
		public void Execute_ShouldExecuteObservable(
			TestSchedulers schedulers)
		{
			//arrange
			bool observableCalled = false;
			var value = Observable.Return(Unit.Default, ImmediateScheduler.Instance)
				.Do(unit => observableCalled = true);
			var sut = new ObservableMvvmCommand<object, System.Reactive.Unit>(o => value, schedulers, schedulers, "name", new AlwaysTrueCanExecuteStrategy<object>());

			//act
			sut.Execute(null);
			schedulers.AdvanceBy(200);

			//assert
			observableCalled.Should().BeTrue();
		}
Exemplo n.º 38
0
		public void Execute_ShouldCallCallback(
			object expected,
			TestSchedulers schedulers)
		{
			//arrange
			object actual = null;
			var value = Observable.Return(expected, ImmediateScheduler.Instance);
			var sut = new ObservableMvvmCommand<object, object>(
				o => value,
				schedulers,
				schedulers,
				"name",
				new AlwaysTrueCanExecuteStrategy<object>(),
				doObserver: () => Observer.Create<object>(o => actual = o),
				doScheduler: ImmediateScheduler.Instance);

			//act
			sut.Execute(null);
			schedulers.AdvanceBy(200);

			//assert
			actual.Should().Be(expected);
		}