// 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; using System.Reactive.Linq; using System.Reactive.Subjects; using Microsoft.Reactive.Testing; using Microsoft.VisualStudio.TestTools.UnitTesting; using Assert = Xunit.Assert; namespace ReactiveTests.Tests { [TestClass] public class ToEventTest : ReactiveTest { [TestMethod] public void ToEvent_ArgumentChecks() { ReactiveAssert.Throws(() => Observable.ToEvent(default)); ReactiveAssert.Throws(() => Observable.ToEvent(default(IObservable))); ReactiveAssert.Throws(() => Observable.ToEvent(default(IObservable>))); } [TestMethod] public void ToEvent_Unit() { var src = new Subject(); var evt = src.ToEvent(); var num = 0; var hnd = new Action(_ => { num++; }); evt.OnNext += hnd; Assert.Equal(0, num); src.OnNext(new Unit()); Assert.Equal(1, num); src.OnNext(new Unit()); Assert.Equal(2, num); evt.OnNext -= hnd; src.OnNext(new Unit()); Assert.Equal(2, num); } [TestMethod] public void ToEvent_NonUnit() { var src = new Subject(); var evt = src.ToEvent(); var lst = new List(); var hnd = new Action(e => { lst.Add(e); }); evt.OnNext += hnd; src.OnNext(1); src.OnNext(2); evt.OnNext -= hnd; src.OnNext(3); Assert.True(lst.SequenceEqual([1, 2])); } [TestMethod] public void ToEvent_FromEvent() { var src = new Subject(); var evt = src.ToEvent(); var res = Observable.FromEvent(h => evt.OnNext += h, h => evt.OnNext -= h); var lst = new List(); using (res.Subscribe(e => lst.Add(e), () => Assert.True(false))) { src.OnNext(1); src.OnNext(2); } src.OnNext(3); Assert.True(lst.SequenceEqual([1, 2])); } } }