| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 | 
							- // Licensed to the .NET Foundation under one or more agreements.
 
- // The .NET Foundation licenses this file to you under the MIT License.
 
- // See the LICENSE file in the project root for more information. 
 
- using System;
 
- using System.Collections;
 
- using System.Collections.Generic;
 
- using System.Reactive.Concurrency;
 
- using System.Reactive.Linq;
 
- using System.Threading;
 
- using System.Threading.Tasks;
 
- using Microsoft.Reactive.Testing;
 
- using Microsoft.VisualStudio.TestTools.UnitTesting;
 
- using Assert = Xunit.Assert;
 
- namespace ReactiveTests.Tests
 
- {
 
-     [TestClass]
 
-     public class LatestTest : ReactiveTest
 
-     {
 
-         [TestMethod]
 
-         public void Latest_ArgumentChecking()
 
-         {
 
-             ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Latest(default(IObservable<int>)));
 
-         }
 
-         [TestMethod]
 
-         public void Latest1()
 
-         {
 
-             var disposed = false;
 
-             var evt = new AutoResetEvent(false);
 
-             var src = Observable.Create<int>(obs =>
 
-             {
 
-                 Task.Run(() =>
 
-                 {
 
-                     evt.WaitOne();
 
-                     obs.OnNext(1);
 
-                     evt.WaitOne();
 
-                     obs.OnNext(2);
 
-                     evt.WaitOne();
 
-                     obs.OnCompleted();
 
-                 });
 
-                 return () => { disposed = true; };
 
-             });
 
-             var res = src.Latest().GetEnumerator();
 
-             Task.Run(async () =>
 
-             {
 
-                 await Task.Delay(250);
 
-                 evt.Set();
 
-             });
 
-             Assert.True(res.MoveNext());
 
-             Assert.Equal(1, res.Current);
 
-             evt.Set();
 
-             Assert.True(res.MoveNext());
 
-             Assert.Equal(2, ((IEnumerator)res).Current);
 
-             evt.Set();
 
-             Assert.False(res.MoveNext());
 
-             ReactiveAssert.Throws<NotSupportedException>(() => res.Reset());
 
-             res.Dispose();
 
-             //ReactiveAssert.Throws<ObjectDisposedException>(() => res.MoveNext());
 
-             Assert.True(disposed);
 
-         }
 
-         [TestMethod]
 
-         public void Latest2()
 
-         {
 
-             var scheduler = new TestScheduler();
 
-             var xs = scheduler.CreateHotObservable(
 
-                 OnNext(210, 1),
 
-                 OnNext(220, 2),
 
-                 OnNext(230, 3),
 
-                 OnNext(240, 4),
 
-                 OnNext(250, 5),
 
-                 OnNext(260, 6),
 
-                 OnNext(270, 7),
 
-                 OnNext(280, 8),
 
-                 OnNext(290, 9),
 
-                 OnCompleted<int>(300)
 
-             );
 
-             var res = xs.Latest();
 
-             var e1 = default(IEnumerator<int>);
 
-             scheduler.ScheduleAbsolute(205, () =>
 
-             {
 
-                 e1 = res.GetEnumerator();
 
-             });
 
-             var o1 = new List<int>();
 
-             scheduler.ScheduleAbsolute(235, () =>
 
-             {
 
-                 Assert.True(e1.MoveNext());
 
-                 o1.Add(e1.Current);
 
-             });
 
-             scheduler.ScheduleAbsolute(265, () =>
 
-             {
 
-                 Assert.True(e1.MoveNext());
 
-                 o1.Add(e1.Current);
 
-             });
 
-             scheduler.ScheduleAbsolute(285, () => e1.Dispose());
 
-             var e2 = default(IEnumerator);
 
-             scheduler.ScheduleAbsolute(255, () =>
 
-             {
 
-                 e2 = ((IEnumerable)res).GetEnumerator();
 
-             });
 
-             var o2 = new List<int>();
 
-             scheduler.ScheduleAbsolute(265, () =>
 
-             {
 
-                 Assert.True(e2.MoveNext());
 
-                 o2.Add((int)e2.Current);
 
-             });
 
-             scheduler.ScheduleAbsolute(275, () =>
 
-             {
 
-                 Assert.True(e2.MoveNext());
 
-                 o2.Add((int)e2.Current);
 
-             });
 
-             scheduler.Start();
 
-             xs.Subscriptions.AssertEqual(
 
-                 Subscribe(205, 285),
 
-                 Subscribe(255, 300)
 
-             );
 
-             o1.AssertEqual(3, 6);
 
-             o2.AssertEqual(6, 7);
 
-         }
 
-         [TestMethod]
 
-         public void Latest_Error()
 
-         {
 
-             SynchronizationContext.SetSynchronizationContext(null);
 
-             var ex = new Exception();
 
-             var evt = new AutoResetEvent(false);
 
-             var src = Observable.Create<int>(obs =>
 
-             {
 
-                 Task.Run(() =>
 
-                 {
 
-                     evt.WaitOne();
 
-                     obs.OnNext(1);
 
-                     evt.WaitOne();
 
-                     obs.OnError(ex);
 
-                 });
 
-                 return () => { };
 
-             });
 
-             var res = src.Latest().GetEnumerator();
 
-             Task.Run(async () =>
 
-             {
 
-                 await Task.Delay(250);
 
-                 evt.Set();
 
-             });
 
-             Assert.True(res.MoveNext());
 
-             Assert.Equal(1, res.Current);
 
-             evt.Set();
 
-             ReactiveAssert.Throws(ex, () => res.MoveNext());
 
-         }
 
-     }
 
- }
 
 
  |