| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 | // 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.Generic;using System.Linq;using System.Reactive.Concurrency;using System.Reactive.Linq;using Microsoft.Reactive.Testing;using ReactiveTests.Dummies;using Microsoft.VisualStudio.TestTools.UnitTesting;using Assert = Xunit.Assert;namespace ReactiveTests.Tests{    [TestClass]    public class DelaySubscriptionTest : ReactiveTest    {        [TestMethod]        public void DelaySubscription_ArgumentChecking()        {            ReactiveAssert.Throws<ArgumentNullException>(() => Observable.DelaySubscription(default(IObservable<int>), DateTimeOffset.Now));            ReactiveAssert.Throws<ArgumentNullException>(() => Observable.DelaySubscription(default(IObservable<int>), DateTimeOffset.Now, Scheduler.Immediate));            ReactiveAssert.Throws<ArgumentNullException>(() => Observable.DelaySubscription(DummyObservable<int>.Instance, DateTimeOffset.Now, default));            ReactiveAssert.Throws<ArgumentNullException>(() => Observable.DelaySubscription(default(IObservable<int>), TimeSpan.Zero));            ReactiveAssert.Throws<ArgumentNullException>(() => Observable.DelaySubscription(default(IObservable<int>), TimeSpan.Zero, Scheduler.Immediate));            ReactiveAssert.Throws<ArgumentNullException>(() => Observable.DelaySubscription(DummyObservable<int>.Instance, TimeSpan.Zero, default));            ReactiveAssert.Throws<ArgumentOutOfRangeException>(() => Observable.DelaySubscription(DummyObservable<int>.Instance, TimeSpan.FromSeconds(-1)));            ReactiveAssert.Throws<ArgumentOutOfRangeException>(() => Observable.DelaySubscription(DummyObservable<int>.Instance, TimeSpan.FromSeconds(-1), Scheduler.Immediate));        }        [TestMethod]        public void DelaySubscription_TimeSpan_Default()        {            var lst = new List<int>();            Observable.Range(0, 10).DelaySubscription(TimeSpan.FromMilliseconds(1)).ForEach(lst.Add);            Assert.True(Enumerable.Range(0, 10).SequenceEqual(lst));        }        [TestMethod]        public void DelaySubscription_TimeSpan_Simple()        {            var scheduler = new TestScheduler();            var xs = scheduler.CreateColdObservable(                OnNext(50, 42),                OnNext(60, 43),                OnCompleted<int>(70)            );            var res = scheduler.Start(() =>                xs.DelaySubscription(TimeSpan.FromTicks(30), scheduler)            );            res.Messages.AssertEqual(                OnNext(280, 42),                OnNext(290, 43),                OnCompleted<int>(300)            );            xs.Subscriptions.AssertEqual(                Subscribe(230, 300)            );        }        [TestMethod]        public void DelaySubscription_TimeSpan_Error()        {            var ex = new Exception();            var scheduler = new TestScheduler();            var xs = scheduler.CreateColdObservable(                OnNext(50, 42),                OnNext(60, 43),                OnError<int>(70, ex)            );            var res = scheduler.Start(() =>                xs.DelaySubscription(TimeSpan.FromTicks(30), scheduler)            );            res.Messages.AssertEqual(                OnNext(280, 42),                OnNext(290, 43),                OnError<int>(300, ex)            );            xs.Subscriptions.AssertEqual(                Subscribe(230, 300)            );        }        [TestMethod]        public void DelaySubscription_DateTimeOffset_Default()        {            var lst = new List<int>();            Observable.Range(0, 10).DelaySubscription(DateTimeOffset.UtcNow.AddMilliseconds(1)).ForEach(lst.Add);            Assert.True(Enumerable.Range(0, 10).SequenceEqual(lst));        }        [TestMethod]        public void DelaySubscription_DateTimeOffset_Simple()        {            var scheduler = new TestScheduler();            var xs = scheduler.CreateColdObservable(                OnNext(50, 42),                OnNext(60, 43),                OnCompleted<int>(70)            );            var res = scheduler.Start(() =>                xs.DelaySubscription(new DateTimeOffset(230, TimeSpan.Zero), scheduler)            );            res.Messages.AssertEqual(                OnNext(280, 42),                OnNext(290, 43),                OnCompleted<int>(300)            );            xs.Subscriptions.AssertEqual(                Subscribe(230, 300)            );        }        [TestMethod]        public void DelaySubscription_DateTimeOffset_Error()        {            var ex = new Exception();            var scheduler = new TestScheduler();            var xs = scheduler.CreateColdObservable(                OnNext(50, 42),                OnNext(60, 43),                OnError<int>(70, ex)            );            var res = scheduler.Start(() =>                xs.DelaySubscription(new DateTimeOffset(230, TimeSpan.Zero), scheduler)            );            res.Messages.AssertEqual(                OnNext(280, 42),                OnNext(290, 43),                OnError<int>(300, ex)            );            xs.Subscriptions.AssertEqual(                Subscribe(230, 300)            );        }    }}
 |