public void time_offset_excludes_values_of_exact_offset() { var stats = new StatsObserver<IList<int>>(); var valueScheduler = new ManualScheduler(); var bufferScheduler = new ManualScheduler(); DateTimeOffset startTime = DateTimeOffset.UtcNow; Observable.Range(0, 5, valueScheduler) .BufferWithTime(TimeSpan.FromMilliseconds(30), TimeSpan.FromMilliseconds(20), bufferScheduler) .Subscribe(stats); Assert.IsFalse(stats.NextCalled); bufferScheduler.Now = startTime.AddMilliseconds(10); valueScheduler.RunNext(); bufferScheduler.Now = startTime.AddMilliseconds(20); // exact offset value valueScheduler.RunNext(); bufferScheduler.Now = startTime.AddMilliseconds(30); valueScheduler.RunNext(); bufferScheduler.RunNext(); bufferScheduler.RunNext(); Assert.AreEqual(2, stats.NextCount); Assert.AreEqual(1, stats.NextValues[1].Count); }
public void scheduler_is_used_for_subsequent_subscriptions() { var sourceA = Observable.Empty<int>(); var sourceB = new StatsSubject<int>(); var scheduler = new ManualScheduler(); var stats = new StatsObserver<int>(); sourceA.Concat(sourceB, scheduler).Subscribe(stats); scheduler.RunNext(); Assert.AreEqual(0, sourceB.SubscriptionCount); Assert.AreEqual(1, scheduler.QueueSize); scheduler.RunNext(); Assert.AreEqual(1, sourceB.SubscriptionCount); Assert.AreEqual(0, scheduler.QueueSize); }
public void scheduler_is_used_for_completion_when_take_is_zero() { var scheduler = new ManualScheduler(); var stats = new StatsObserver<int>(); new Subject<int>().Take(0, scheduler).Subscribe(stats); Assert.IsFalse(stats.CompletedCalled); scheduler.RunNext(); Assert.IsTrue(stats.CompletedCalled); }
public void errors_are_sent_through_scheduler() { ManualScheduler scheduler = new ManualScheduler(); ReplaySubject<int> subject = new ReplaySubject<int>(scheduler); StatsObserver<int> stats = new StatsObserver<int>(); subject.OnError(new Exception()); subject.Subscribe(stats); Assert.IsFalse(stats.ErrorCalled); scheduler.RunNext(); Assert.IsTrue(stats.ErrorCalled); }
public void values_cannot_be_replayed_out_of_order() { ManualScheduler scheduler = new ManualScheduler(); ReplaySubject<int> subject = new ReplaySubject<int>(scheduler); StatsObserver<int> stats = new StatsObserver<int>(); subject.OnNext(1); subject.OnNext(2); subject.Subscribe(stats); Assert.IsFalse(stats.NextCalled); scheduler.RunNext(); Assert.IsTrue(stats.NextValues.SequenceEqual(new int[] { 1 })); subject.OnNext(3); scheduler.RunNext(); Assert.IsTrue(stats.NextValues.SequenceEqual(new int[] { 1, 2 })); scheduler.RunNext(); Assert.IsTrue(stats.NextValues.SequenceEqual(new int[] { 1, 2, 3 })); subject.OnCompleted(); scheduler.RunNext(); Assert.IsTrue(stats.CompletedCalled); }
public void replayed_values_are_sent_through_scheduler() { ManualScheduler scheduler = new ManualScheduler(); ReplaySubject<int> subject = new ReplaySubject<int>(scheduler); StatsObserver<int> stats = new StatsObserver<int>(); subject.OnNext(1); subject.OnNext(2); subject.OnCompleted(); subject.Subscribe(stats); Assert.IsFalse(stats.NextCalled); scheduler.RunNext(); Assert.AreEqual(1, stats.NextCount); Assert.IsTrue(stats.NextValues.SequenceEqual(new int[] { 1 })); Assert.IsFalse(stats.CompletedCalled); scheduler.RunNext(); Assert.AreEqual(2, stats.NextCount); Assert.IsTrue(stats.NextValues.SequenceEqual(new int[] { 1, 2 })); Assert.IsFalse(stats.CompletedCalled); scheduler.RunNext(); Assert.IsTrue(stats.CompletedCalled); }
public void zero_length_list_is_emitted_when_no_values_are_available() { var stats = new StatsObserver<IList<int>>(); var scheduler = new ManualScheduler(); var manObs = Observable.Never<int>() .BufferWithTime(TimeSpan.FromMilliseconds(1), scheduler) .Take(1) .Subscribe(stats); scheduler.RunNext(); Assert.AreEqual(1, stats.NextCount); Assert.AreEqual(0, stats.NextValues[0].Count); }
public void catch_with_observer_subscribes_to_next_through_scheduler() { ManualScheduler scheduler = new ManualScheduler(); StatsObserver<IEvent<EventArgs>> observer = new StatsObserver<IEvent<EventArgs>>(); EventOwner owner = new EventOwner(); var eventObs = Observable.FromEvent<EventArgs>(x => owner.Event += x, x => owner.Event -= x); Observable.Throw<IEvent<EventArgs>>(new ApplicationException()) .Catch(eventObs, scheduler) .Subscribe(observer); scheduler.RunNext(); Assert.IsFalse(owner.HasSubscriptions); scheduler.RunNext(); Assert.IsTrue(owner.HasSubscriptions); }