public void Generate_LongRunning_Throw() { var start = default(ManualResetEvent); var end = default(ManualResetEvent); var s = new TestLongRunningScheduler(x => start = x, x => end = x); var ex = new Exception(); var xs = Observable.Generate(0, x => { if (x < 100) { return(true); } throw ex; }, x => x + 1, x => x, s); var lst = new List <int>(); var e = default(Exception); var done = false; xs.Subscribe(x => { lst.Add(x); }, e_ => e = e_, () => done = true); end.WaitOne(); Assert.True(lst.SequenceEqual(Enumerable.Range(0, 100))); Assert.AreSame(ex, e); Assert.False(done); }
public void ObserveOn_LongRunning_Cancel() { var started = default(ManualResetEvent); var stopped = default(ManualResetEvent); var scheduler = new TestLongRunningScheduler(e => started = e, e => stopped = e); var s = new Subject <int>(); var lst = new List <int>(); var end = new ManualResetEvent(false); var running = new ManualResetEvent(false); var d = s.ObserveOn(scheduler).Subscribe(x => { lst.Add(x); running.Set(); }); s.OnNext(0); started.WaitOne(); s.OnNext(1); s.OnNext(2); s.OnNext(3); running.WaitOne(); d.Dispose(); stopped.WaitOne(); s.OnNext(4); Assert.True(lst.Count > 0 && !lst.Contains(4)); }
public void ObserveOn_LongRunning_OnNextThrows() { var started = default(ManualResetEvent); var stopped = default(ManualResetEvent); var exception = default(Exception); var scheduler = new TestLongRunningScheduler(e => started = e, e => stopped = e, ex => exception = ex); var s = new Subject <int>(); var lst = new List <int>(); var end = new ManualResetEvent(false); var running = new ManualResetEvent(false); var d = s.ObserveOn(scheduler).Subscribe(x => { lst.Add(x); running.Set(); if (x == 3) { throw new Exception(); } }); s.OnNext(0); started.WaitOne(); s.OnNext(1); s.OnNext(2); s.OnNext(3); running.WaitOne(); s.OnNext(4); stopped.WaitOne(); Assert.NotNull(exception); }
public void ObserveOn_LongRunning_HoldUpDuringDispatchAndFail() { var started = default(ManualResetEvent); var stopped = default(ManualResetEvent); var scheduler = new TestLongRunningScheduler(e => started = e, e => stopped = e); var s = new Subject <int>(); var onNext = new ManualResetEvent(false); var resume = new ManualResetEvent(false); var lst = new List <int>(); var err = default(Exception); var end = new ManualResetEvent(false); s.ObserveOn(scheduler).Subscribe(x => { lst.Add(x); onNext.Set(); resume.WaitOne(); }, ex_ => { err = ex_; end.Set(); }); s.OnNext(1); onNext.WaitOne(); s.OnNext(2); s.OnNext(3); var ex = new Exception(); s.OnError(ex); resume.Set(); end.WaitOne(); Assert.True(lst.SequenceEqual(new[] { 1, 2, 3 })); Assert.Same(ex, err); }
public void ObserveOn_LongRunning_TimeVariance() { var started = default(ManualResetEvent); var stopped = default(ManualResetEvent); var scheduler = new TestLongRunningScheduler(e => started = e, e => stopped = e); var s = new Subject <int>(); var end = new ManualResetEvent(false); s.ObserveOn(scheduler).Subscribe(_ => { }, () => end.Set()); s.OnNext(1); // Ensure active started.WaitOne(); Thread.Sleep(100); // Try to enter the dispatcher event wait state for (int i = 0; i < 1000; i++) { if (i % 100 == 0) { Thread.Sleep(10); } s.OnNext(i); } s.OnCompleted(); end.WaitOne(); }
public void ObserveOn_LongRunning_Error() { var started = default(ManualResetEvent); var stopped = default(ManualResetEvent); var scheduler = new TestLongRunningScheduler(e => started = e, e => stopped = e); var s = new Subject <int>(); var end = new ManualResetEvent(false); var err = default(Exception); s.ObserveOn(scheduler).Subscribe(_ => { }, ex => { err = ex; end.Set(); }); s.OnNext(1); s.OnNext(2); s.OnNext(3); var ex_ = new Exception(); s.OnError(ex_); end.WaitOne(); Assert.Same(ex_, err); }
public void EnumerableToObservable_LongRunning_Dispose() { var start = default(ManualResetEvent); var end = default(ManualResetEvent); var scheduler = new TestLongRunningScheduler(x => start = x, x => end = x); var e = Enumerable.Range(0, int.MaxValue); var results = e.ToObservable(scheduler); var lst = new List <int>(); var d = results.Subscribe(lst.Add); start.WaitOne(); while (lst.Count < 100) { ; } d.Dispose(); end.WaitOne(); Assert.True(e.Take(100).SequenceEqual(lst.Take(100))); }
public void Range_LongRunning_Boundaries() { var start = default(ManualResetEvent); var end = default(ManualResetEvent); var scheduler = new TestLongRunningScheduler(x => start = x, x => end = x); var xs = Observable.Range(int.MaxValue, 1, scheduler); var lst = new List <int>(); xs.ForEach(lst.Add); Assert.True(lst.SequenceEqual(Enumerable.Range(int.MaxValue, 1))); }
public void Range_LongRunning1() { var start = default(ManualResetEvent); var end = default(ManualResetEvent); var s = new TestLongRunningScheduler(x => start = x, x => end = x); var xs = Observable.Range(0, 100, s); var lst = new List <int>(); var done = false; xs.Subscribe(x => { lst.Add(x); }, () => done = true); end.WaitOne(); Assert.True(lst.SequenceEqual(Enumerable.Range(0, 100))); Assert.True(done); }
public void EnumerableToObservable_LongRunning_Complete() { var start = default(ManualResetEvent); var end = default(ManualResetEvent); var scheduler = new TestLongRunningScheduler(x => start = x, x => end = x); var e = new[] { 3, 1, 2, 4 }; var results = e.ToObservable(scheduler); var lst = new List <int>(); results.Subscribe(lst.Add); start.WaitOne(); end.WaitOne(); Assert.True(e.SequenceEqual(lst)); }
public void EnumerableToObservable_LongRunning_Error() { var start = default(ManualResetEvent); var end = default(ManualResetEvent); var scheduler = new TestLongRunningScheduler(x => start = x, x => end = x); var ex = new Exception(); var e = EnumerableToObservable_Error_Core(ex); var results = e.ToObservable(scheduler); var lst = new List <int>(); var err = default(Exception); results.Subscribe(lst.Add, ex_ => err = ex_); start.WaitOne(); end.WaitOne(); Assert.True(new[] { 1, 2 }.SequenceEqual(lst)); Assert.Same(ex, err); }
public void ObserveOn_LongRunning_Simple() { var started = default(ManualResetEvent); var stopped = default(ManualResetEvent); var scheduler = new TestLongRunningScheduler(e => started = e, e => stopped = e); var s = new Subject <int>(); var end = new ManualResetEvent(false); var lst = new List <int>(); s.ObserveOn(scheduler).Subscribe(lst.Add, () => end.Set()); s.OnNext(1); s.OnNext(2); s.OnNext(3); s.OnCompleted(); end.WaitOne(); Assert.True(lst.SequenceEqual(new[] { 1, 2, 3 })); }
public void Generate_LongRunning2() { var start = default(ManualResetEvent); var end = default(ManualResetEvent); var s = new TestLongRunningScheduler(x => start = x, x => end = x); var xs = Observable.Generate(0, _ => true, x => x + 1, x => x, s); var lst = new List <int>(); var d = xs.Subscribe(x => { lst.Add(x); }); start.WaitOne(); while (lst.Count < 100) { ; } d.Dispose(); end.WaitOne(); Assert.True(lst.Take(100).SequenceEqual(Enumerable.Range(0, 100))); }
public void Range_LongRunning2() { var start = default(ManualResetEvent); var end = default(ManualResetEvent); var s = new TestLongRunningScheduler(x => start = x, x => end = x); var xs = Observable.Range(0, int.MaxValue, s); var lst = new List <int>(); var d = xs.Subscribe(x => { lst.Add(x); }); start.WaitOne(); while (lst.Count < 100) { ; } d.Dispose(); end.WaitOne(); Assert.True(true); }
public void Repeat_Inf_LongRunning() { var start = default(ManualResetEvent); var end = default(ManualResetEvent); var s = new TestLongRunningScheduler(x => start = x, x => end = x); var xs = Observable.Repeat(42, s); var lst = new List<int>(); var d = xs.Subscribe(x => { lst.Add(x); }); start.WaitOne(); while (lst.Count < 100) ; d.Dispose(); end.WaitOne(); Assert.IsTrue(true); }
public void Repeat_Count_LongRunning1() { var start = default(ManualResetEvent); var end = default(ManualResetEvent); var s = new TestLongRunningScheduler(x => start = x, x => end = x); var xs = Observable.Repeat(42, 100, s); var lst = new List<int>(); var done = false; xs.Subscribe(x => { lst.Add(x); }, () => done = true); end.WaitOne(); Assert.IsTrue(lst.SequenceEqual(Enumerable.Repeat(42, 100))); Assert.IsTrue(done); }
public void Range_LongRunning_Boundaries() { var start = default(ManualResetEvent); var end = default(ManualResetEvent); var scheduler = new TestLongRunningScheduler(x => start = x, x => end = x); var xs = Observable.Range(int.MaxValue, 1, scheduler); var lst = new List<int>(); xs.ForEach(lst.Add); Assert.IsTrue(lst.SequenceEqual(Enumerable.Range(int.MaxValue, 1))); }
public void Generate_LongRunning_Throw() { var start = default(ManualResetEvent); var end = default(ManualResetEvent); var s = new TestLongRunningScheduler(x => start = x, x => end = x); var ex = new Exception(); var xs = Observable.Generate(0, x => { if (x < 100) return true; throw ex; }, x => x + 1, x => x, s); var lst = new List<int>(); var e = default(Exception); var done = false; xs.Subscribe(x => { lst.Add(x); }, e_ => e = e_, () => done = true); end.WaitOne(); Assert.IsTrue(lst.SequenceEqual(Enumerable.Range(0, 100))); Assert.AreSame(ex, e); Assert.IsFalse(done); }
public void Generate_LongRunning2() { var start = default(ManualResetEvent); var end = default(ManualResetEvent); var s = new TestLongRunningScheduler(x => start = x, x => end = x); var xs = Observable.Generate(0, _ => true, x => x + 1, x => x, s); var lst = new List<int>(); var d = xs.Subscribe(x => { lst.Add(x); }); start.WaitOne(); while (lst.Count < 100) ; d.Dispose(); end.WaitOne(); Assert.IsTrue(lst.Take(100).SequenceEqual(Enumerable.Range(0, 100))); }
public void Range_LongRunning_Regular() { var start = default(ManualResetEvent); var end = default(ManualResetEvent); var scheduler = new TestLongRunningScheduler(x => start = x, x => end = x); var xs = Observable.Range(5, 17, scheduler); var lst = new List<int>(); xs.ForEach(lst.Add); Assert.True(lst.SequenceEqual(Enumerable.Range(5, 17))); }