public async Task Refresh_SourceIsEmpty_ShouldReturnCorrectValue( [Frozen] ThrowingTestScheduler scheduler, [Frozen] IViewModel parent, ObservableViewModel <object> sut) { //arrange var observer = scheduler.CreateObserver <ObservableViewModelNotification>(); sut.Subscribe(observer); //act await sut.RefreshAsync(); //assert var actual = observer.Values().ToArray(); var expected = new[] { new ObservableViewModelNotification() { Status = ObservableViewModelStatus.Initialized, Value = null }, new ObservableViewModelNotification() { Status = ObservableViewModelStatus.Updating, Value = null }, new ObservableViewModelNotification() { Status = ObservableViewModelStatus.Empty, Value = null } }; actual.ShouldAllBeEquivalentTo(expected); }
public void RefreshOn_WithOverlappingRefresh_ShouldCancelPreviousTask( [Frozen] TestSchedulers scheduler, [Frozen] Subject <Unit> refreshOn) { //arrange CancellationToken ct = CancellationToken.None; var i = 0; var sut = new ObservableViewModel <object>(c => { if (++i == 1) { ct = c; refreshOn.OnNext(Unit.Default); } return(Task.FromResult(new object())); }, _ => false, refreshOn, TimeSpan.Zero, new CompositeDisposable(), scheduler); //act refreshOn.OnNext(Unit.Default); scheduler.Start(); //assert ct.IsCancellationRequested.Should().BeTrue(); }
public void RefreshAsync_WithTimeout_ShouldThrow( [Frozen] ThrowingTestScheduler scheduler, ObservableViewModel <object> sut) { //arrange var observer = scheduler.CreateObserver <ObservableViewModelNotification>(); sut.Subscribe(observer); scheduler.Schedule(TimeSpan.FromTicks(201), () => sut.Refresh()); //act scheduler.Start(); //await sut.RefreshAsync(); //assert var actual = observer.Values().ToArray(); var expected = new[] { new ObservableViewModelNotification() { Status = ObservableViewModelStatus.Initialized, Value = null }, new ObservableViewModelNotification() { Status = ObservableViewModelStatus.Updating, Value = null }, new ObservableViewModelNotification() { Status = ObservableViewModelStatus.Timeout, Value = null } }; actual.ShouldAllBeEquivalentTo(expected); }
public void CurrentValue_WhenInitialized_ShouldBeDefault( [Frozen] ThrowingTestScheduler scheduler, ObservableViewModel <object> sut) { //assert sut.CurrentValue.Should().BeNull(); }
public void RefreshOn_WithOverlappingRefresh_ShouldReturnCorrectValue( [Frozen] TestSchedulers scheduler, [Frozen] Subject <Unit> refreshOn, object value) { //arrange var observer = scheduler.CreateObserver <ObservableViewModelNotification>(); var i = 0; var sut = new ObservableViewModel <object>(c => { if (++i == 1) { refreshOn.OnNext(Unit.Default); } return(Task.FromResult(value)); }, _ => false, refreshOn, TimeSpan.Zero, new CompositeDisposable(), scheduler); sut.Subscribe(observer); //act refreshOn.OnNext(Unit.Default); scheduler.Start(); //assert var expected = new ObservableViewModelNotification() { Status = ObservableViewModelStatus.Value, Value = value }; observer.Values().Last().ShouldBeEquivalentTo(expected); }
public void Accept_ShouldCallVisitor( ObservableViewModel <object> sut, Mock <IObservableViewModelVisitor> visitor) { //act sut.Accept(visitor.Object); //assert visitor.Verify(v => v.Visit(sut)); }
public void Visit_WithNotReferencenullableTypeValue_ShouldReturnTrue( NullReferenceEmptyPredicateVisitor sut, ObservableViewModel <int?> ovm) { //arrange //act sut.Visit(ovm); var actual = ovm.EmptyPredicate(null); //assert actual.Should().BeTrue(); }
public void Visit_WithNotNullValue_ShouldReturnFalse( NullReferenceEmptyPredicateVisitor sut, ObservableViewModel <object> ovm) { //arrange //act sut.Visit(ovm); var actual = ovm.EmptyPredicate(new object()); //assert actual.Should().BeFalse(); }
public void Visit_WhenValueIsNotEnumerable_OvmPredicateShouldReturnFalse( EnumerableEmptyPredicateVisitor sut, ObservableViewModel <object> ovm) { //arrange //act sut.Visit(ovm); var actual = ovm.EmptyPredicate(new object()); //assert actual.Should().BeFalse(); }
public void Visit_OvmPredicateShouldReturnTrue( EnumerableEmptyPredicateVisitor sut, ObservableViewModel <string[]> ovm) { //arrange //act sut.Visit(ovm); var actual = ovm.EmptyPredicate(new string[0]); //assert actual.Should().BeTrue(); }
public void Visit_WhenValueIsNotEnumerable_OvmPredicateShouldReturnFalse( EnumerableEmptyPredicateVisitor sut, ObservableViewModel<object> ovm) { //arrange //act sut.Visit(ovm); var actual = ovm.EmptyPredicate(new object()); //assert actual.Should().BeFalse(); }
public void Visit_OvmPredicateShouldReturnTrue( EnumerableEmptyPredicateVisitor sut, ObservableViewModel<string[]> ovm) { //arrange //act sut.Visit(ovm); var actual = ovm.EmptyPredicate(new string[0]); //assert actual.Should().BeTrue(); }
public void Visit_WithNotNullValue_ShouldReturnFalse( NullReferenceEmptyPredicateVisitor sut, ObservableViewModel<object> ovm) { //arrange //act sut.Visit(ovm); var actual = ovm.EmptyPredicate(new object()); //assert actual.Should().BeFalse(); }
public void Visit_WithNotReferencenullableTypeValue_ShouldReturnTrue( NullReferenceEmptyPredicateVisitor sut, ObservableViewModel<int?> ovm) { //arrange //act sut.Visit(ovm); var actual = ovm.EmptyPredicate(null); //assert actual.Should().BeTrue(); }
public void Visit_WithNotReferenceTypeValue_ShouldReturnFalse( NullReferenceEmptyPredicateVisitor sut, ObservableViewModel <int> ovm, int value) { //arrange //act sut.Visit(ovm); var actual = ovm.EmptyPredicate(value); //assert actual.Should().BeFalse(); }
public void Visit_WhenValueIsNotEmpty_OvmPredicateShouldReturnFalse( EnumerableEmptyPredicateVisitor sut, ObservableViewModel<string[]> ovm, string[] value) { //arrange //act sut.Visit(ovm); var actual = ovm.EmptyPredicate(value); //assert actual.Should().BeFalse(); }
public void Visit_WhenValueIsNotEmpty_OvmPredicateShouldReturnFalse( EnumerableEmptyPredicateVisitor sut, ObservableViewModel <string[]> ovm, string[] value) { //arrange //act sut.Visit(ovm); var actual = ovm.EmptyPredicate(value); //assert actual.Should().BeFalse(); }
public void Visit_WithNotReferenceTypeValue_ShouldReturnFalse( NullReferenceEmptyPredicateVisitor sut, ObservableViewModel<int> ovm, int value) { //arrange //act sut.Visit(ovm); var actual = ovm.EmptyPredicate(value); //assert actual.Should().BeFalse(); }
public void Dispose_ShouldYieldCompleted( [Frozen] ThrowingTestScheduler scheduler, ObservableViewModel <object> sut) { //arrange var observer = scheduler.CreateObserver <ObservableViewModelNotification>(); sut.Subscribe(observer); //act sut.Dispose(); //assert observer.Completed().Should().HaveCount(1); }
public async Task ChainEmptyPredicate_WhenPredicateReturnsFalse_OvmStateShouldBeValue( [Frozen] TestSchedulers schedulers, ObservableViewModel <object> sut) { //arrange Func <object, bool> predicate = o => false; var observer = schedulers.CreateObserver <ObservableViewModelNotification>(); sut.ChainEmptyPredicate(predicate); sut.Subscribe(observer); //act await sut.RefreshAsync(); //assert observer.Values().Last().Should().Match <ObservableViewModelNotification>(n => n.Status == ObservableViewModelStatus.Value); }
public async Task CurrentValue_SourceYieldError_ShouldReturnCorrectValue( [Frozen] ThrowingTestScheduler scheduler, [Frozen] Exception error, [Frozen] IViewModel parent, ObservableViewModel <object> sut) { //arrange var observer = scheduler.CreateObserver <ObservableViewModelNotification>(); sut.Subscribe(observer); //act await sut.RefreshAsync(); //assert var actual = sut.CurrentValue; actual.Should().BeNull(); }
public void RefreshOn_ShouldRefresh( [Frozen] ThrowingTestScheduler scheduler, [Frozen] Subject <Unit> refreshOn, [Frozen] object value, ObservableViewModel <object> sut) { //arrange var observer = scheduler.CreateObserver <ObservableViewModelNotification>(); sut.Subscribe(observer); //act scheduler.Schedule(TimeSpan.FromTicks(201), () => refreshOn.OnNext(Unit.Default)); scheduler.Start(); //assert var expected = new ObservableViewModelNotification() { Status = ObservableViewModelStatus.Value, Value = value }; observer.Values().Last().ShouldBeEquivalentTo(expected); }
protected abstract string GetDependencyPath(ObservableViewModel viewModel);
public ObservableViewModel CreateViewModel() { return(ObservableViewModel.Create(context.ServiceProvider, PropertiesProvider)); }
protected override string GetDependencyPath(ObservableViewModel viewModel) { return(viewModel.RootNode.GetChild(Instance).Path); }