// 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.Linq; using System.Reactive; using System.Reactive.Linq; using Microsoft.Reactive.Testing; using Microsoft.VisualStudio.TestTools.UnitTesting; using Assert = Xunit.Assert; namespace ReactiveTests.Tests { [TestClass] public class TimestampTest : ReactiveTest { [TestMethod] public void Timestamp_ArgumentChecking() { var scheduler = new TestScheduler(); var someObservable = Observable.Empty(); ReactiveAssert.Throws(() => Observable.Timestamp(default(IObservable))); ReactiveAssert.Throws(() => Observable.Timestamp(default(IObservable), scheduler)); ReactiveAssert.Throws(() => Observable.Timestamp(someObservable, null)); } [TestMethod] public void Timestamp_Regular() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( OnNext(150, 1), OnNext(210, 2), OnNext(230, 3), OnNext(260, 4), OnNext(300, 5), OnNext(350, 6), OnCompleted(400) ); var res = scheduler.Start(() => xs.Timestamp(scheduler) ); res.Messages.AssertEqual( OnNext(210, new Timestamped(2, new DateTimeOffset(210, TimeSpan.Zero))), OnNext(230, new Timestamped(3, new DateTimeOffset(230, TimeSpan.Zero))), OnNext(260, new Timestamped(4, new DateTimeOffset(260, TimeSpan.Zero))), OnNext(300, new Timestamped(5, new DateTimeOffset(300, TimeSpan.Zero))), OnNext(350, new Timestamped(6, new DateTimeOffset(350, TimeSpan.Zero))), OnCompleted>(400) ); xs.Subscriptions.AssertEqual( Subscribe(200, 400) ); } [TestMethod] public void Timestamp_Empty() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( OnNext(150, 1), OnCompleted(400) ); var res = scheduler.Start(() => xs.Timestamp(scheduler) ); res.Messages.AssertEqual( OnCompleted>(400) ); xs.Subscriptions.AssertEqual( Subscribe(200, 400) ); } [TestMethod] public void Timestamp_Error() { var scheduler = new TestScheduler(); var ex = new Exception(); var xs = scheduler.CreateHotObservable( OnNext(150, 1), OnError(400, ex) ); var res = scheduler.Start(() => xs.Timestamp(scheduler) ); res.Messages.AssertEqual( OnError>(400, ex) ); xs.Subscriptions.AssertEqual( Subscribe(200, 400) ); } [TestMethod] public void Timestamp_Never() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( OnNext(150, 1) ); var res = scheduler.Start(() => xs.Timestamp(scheduler) ); res.Messages.AssertEqual( ); xs.Subscriptions.AssertEqual( Subscribe(200, 1000) ); } [TestMethod] public void Timestamp_DefaultScheduler() { Assert.True(Observable.Return(1).Timestamp().Count().First() == 1); } } }