public void ObservableCanExecuteShouldShowUpInCommand() { var input = new[] {true, false, false, true, false, true}; var result = (new TestScheduler()).With(sched => { var can_execute = new Subject<bool>(); var fixture = createCommand(can_execute, sched); var changes_as_observable = fixture.CanExecuteObservable.CreateCollection(); int change_event_count = 0; fixture.CanExecuteChanged += (o, e) => { change_event_count++; }; input.Run(x => { can_execute.OnNext(x); sched.Start(); Assert.Equal(x, fixture.CanExecute(null)); }); // N.B. We check against '5' instead of 6 because we're supposed to // suppress changes that aren't actually changes i.e. false => false sched.AdvanceToMs(10*1000); return changes_as_observable; }); // NB: Skip(1) is because CanExecuteObservable should have // BehaviorSubject Nature(tm) input.DistinctUntilChanged().AssertAreEqual(result.Skip(1).ToList()); }
public void ObservableCanExecuteShouldShowUpInCommand() { var input = new[] {true, false, false, true, false, true}; var result = (new TestScheduler()).With(sched => { var can_execute = new Subject<bool>(); var fixture = createCommand(can_execute, sched); var changes_as_observable = fixture.CanExecuteObservable.CreateCollection(); int change_event_count = 0; fixture.CanExecuteChanged += (o, e) => { change_event_count++; }; input.Run(x => { this.Log().InfoFormat("input = {0}", x); can_execute.OnNext(x); sched.Run(); Assert.Equal(x, fixture.CanExecute(null)); }); // N.B. We check against '5' instead of 6 because we're supposed to // suppress changes that aren't actually changes i.e. false => false sched.RunToMilliseconds(10 * 1000); return changes_as_observable; }); input.DistinctUntilChanged().AssertAreEqual(result.ToList()); }