// 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.Reactive; using System.Reactive.Concurrency; using System.Reactive.Linq; using Microsoft.Reactive.Testing; using Microsoft.VisualStudio.TestTools.UnitTesting; using Assert = Xunit.Assert; namespace ReactiveTests.Tests { [TestClass] public class ToListObservableTest : ReactiveTest { [TestMethod] public void ToListObservable_ArgumentChecking() { ReactiveAssert.Throws(() => ((IObservable)null).ToListObservable()); ReactiveAssert.Throws(() => Observable.Never().ToListObservable().Subscribe(null)); } [TestMethod] public void ToListObservable_OnNext() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( OnNext(300, 1), OnNext(400, 2), OnNext(500, 3), OnNext(600, 4) ); var res = scheduler.Start(() => xs.ToListObservable() ); res.Messages.AssertEqual( ); } [TestMethod] public void ToListObservable_OnError() { var scheduler = new TestScheduler(); var ex = new InvalidOperationException(); var xs = scheduler.CreateHotObservable( OnNext(300, 1), OnNext(400, 2), OnNext(500, 3), OnError(600, ex) ); var s = default(ListObservable); var subscription = default(IDisposable); var res = scheduler.CreateObserver(); scheduler.ScheduleAbsolute(Created, () => s = xs.ToListObservable()); scheduler.ScheduleAbsolute(Subscribed, () => subscription = s.Subscribe(res)); scheduler.ScheduleAbsolute(Disposed, () => subscription.Dispose()); scheduler.Start(); ReactiveAssert.Throws(() => { var t = s.Value; }); res.Messages.AssertEqual( OnError(600, ex) ); } [TestMethod] public void ToListObservable_OnCompleted() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( OnNext(300, 1), OnNext(400, 2), OnNext(500, 3), OnCompleted(600) ); var s = default(ListObservable); var res = scheduler.Start(() => s = xs.ToListObservable() ); s.AssertEqual(1, 2, 3); res.Messages.AssertEqual( OnCompleted(600) ); Assert.Equal(3, s.Value); } [TestMethod] public void ToListObservable_Disposed() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( OnNext(300, 1), OnNext(400, 2), OnNext(500, 3), OnNext(1050, 4), OnCompleted(1100) ); var s = default(ListObservable); var res = scheduler.Start(() => s = xs.ToListObservable() ); res.Messages.AssertEqual( ); } [TestMethod] public void ToListObservable_Never() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( ); var res = scheduler.Start(() => xs.ToListObservable() ); res.Messages.AssertEqual( ); } } }