Browse Source

Some tests for IProgress<T> support.

Bart De Smet 10 years ago
parent
commit
6f994f9545
1 changed files with 86 additions and 0 deletions
  1. 86 0
      Rx.NET/Source/Tests.System.Reactive/Tests/ObserverTest.cs

+ 86 - 0
Rx.NET/Source/Tests.System.Reactive/Tests/ObserverTest.cs

@@ -814,5 +814,91 @@ namespace ReactiveTests.Tests
                 ThreadPool.QueueUserWorkItem(_ => d(state), state);
             }
         }
+
+#if HAS_PROGRESS
+
+        [TestMethod]
+        public void Observer_ToProgress_ArgumentChecking()
+        {
+            var s = Scheduler.Immediate;
+            var o = Observer.Create<int>(_ => { });
+
+            ReactiveAssert.Throws<ArgumentNullException>(() => Observer.ToProgress<int>(default(IObserver<int>)));
+
+            ReactiveAssert.Throws<ArgumentNullException>(() => Observer.ToProgress<int>(default(IObserver<int>), s));
+            ReactiveAssert.Throws<ArgumentNullException>(() => Observer.ToProgress<int>(o, default(IScheduler)));
+        }
+
+        [TestMethod]
+        public void Observer_ToProgress()
+        {
+            var xs = new List<int>();
+
+            var p = Observer.Create<int>(xs.Add).ToProgress();
+
+            p.Report(42);
+            p.Report(43);
+
+            Assert.IsTrue(xs.SequenceEqual(new[] { 42, 43 }));
+        }
+
+        [TestMethod]
+        public void Observer_ToProgress_Scheduler()
+        {
+            var s = new TestScheduler();
+
+            var o = s.CreateObserver<int>();
+            var p = o.ToProgress(s);
+
+            s.ScheduleAbsolute(200, () =>
+            {
+                p.Report(42);
+                p.Report(43);
+            });
+
+            s.Start();
+
+            o.Messages.AssertEqual(
+                OnNext(201, 42),
+                OnNext(202, 43)
+            );
+        }
+
+        [TestMethod]
+        public void Progress_ToObserver_ArgumentChecking()
+        {
+            ReactiveAssert.Throws<ArgumentNullException>(() => Observer.ToObserver(default(IProgress<int>)));
+        }
+
+        [TestMethod]
+        public void Progress_ToObserver()
+        {
+            var xs = new List<int>();
+
+            var p = new MyProgress<int>(xs.Add);
+
+            var o = p.ToObserver();
+
+            o.OnNext(42);
+            o.OnNext(43);
+
+            Assert.IsTrue(xs.SequenceEqual(new[] { 42, 43 }));
+        }
+
+        class MyProgress<T> : IProgress<T>
+        {
+            private readonly Action<T> _report;
+
+            public MyProgress(Action<T> report)
+            {
+                _report = report;
+            }
+
+            public void Report(T value)
+            {
+                _report(value);
+            }
+        }
+#endif
     }
 }