123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454 |
- // 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;
- 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 partial class ListObservableTest : ReactiveTest
- {
- [TestMethod]
- public void Ctor_ArgumentChecking()
- {
- #pragma warning disable CA1806 // (Unused new instance.) We expect the constructor to throw.
- ReactiveAssert.Throws<ArgumentNullException>(() => new ListObservable<int>(null));
- #pragma warning restore CA1806
- }
- [TestMethod]
- public void Subscribe_ArgumentChecking()
- {
- ReactiveAssert.Throws<ArgumentNullException>(() => new ListObservable<int>(Observable.Never<int>()).Subscribe(null));
- }
- [TestMethod]
- public void Value_None()
- {
- var o = new ListObservable<int>(Observable.Empty<int>());
- ReactiveAssert.Throws<InvalidOperationException>(() => { var t = o.Value; });
- }
- [TestMethod]
- public void Value_Some()
- {
- var o = new ListObservable<int>(Observable.Range(0, 10));
- Assert.Equal(9, o.Value);
- }
- [TestMethod]
- public void IndexOf_None()
- {
- var o = new ListObservable<int>(Observable.Empty<int>());
- Assert.Equal(-1, o.IndexOf(0));
- }
- [TestMethod]
- public void IndexOf_Some_NotFound()
- {
- var o = new ListObservable<int>(Observable.Range(0, 10));
- Assert.Equal(-1, o.IndexOf(100));
- }
- [TestMethod]
- public void IndexOf_Some_Found()
- {
- var o = new ListObservable<int>(Observable.Range(0, 10));
- Assert.Equal(3, o.IndexOf(3));
- }
- [TestMethod]
- public void RemoveAt_Some_NotFound()
- {
- var o = new ListObservable<int>(Observable.Range(0, 10));
- ReactiveAssert.Throws<ArgumentOutOfRangeException>(() => o.RemoveAt(100));
- o.AssertEqual(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
- }
- [TestMethod]
- public void RemoveAt_Some_Found()
- {
- var o = new ListObservable<int>(Observable.Range(0, 10));
- o.RemoveAt(3);
- o.AssertEqual(0, 1, 2, 4, 5, 6, 7, 8, 9);
- }
- [TestMethod]
- public void Insert_Invalid()
- {
- var o = new ListObservable<int>(Observable.Range(0, 10));
- ReactiveAssert.Throws<ArgumentOutOfRangeException>(() => o.Insert(100, 100));
- o.AssertEqual(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
- }
- [TestMethod]
- public void Insert_Invalid_2()
- {
- var o = new ListObservable<int>(Observable.Range(0, 10));
- ReactiveAssert.Throws<ArgumentOutOfRangeException>(() => o.Insert(-1, 100));
- o.AssertEqual(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
- }
- [TestMethod]
- public void Insert_Beginning()
- {
- var o = new ListObservable<int>(Observable.Range(0, 10));
- o.Insert(0, -1);
- o.AssertEqual(-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
- }
- [TestMethod]
- public void Insert_Middle()
- {
- var o = new ListObservable<int>(Observable.Range(0, 10));
- o.Insert(3, -1);
- o.AssertEqual(0, 1, 2, -1, 3, 4, 5, 6, 7, 8, 9);
- }
- [TestMethod]
- public void Change_Beginning()
- {
- var o = new ListObservable<int>(Observable.Range(0, 10))
- {
- [0] = -1
- };
- o.AssertEqual(-1, 1, 2, 3, 4, 5, 6, 7, 8, 9);
- }
- [TestMethod]
- public void Change_Middle()
- {
- var o = new ListObservable<int>(Observable.Range(0, 10))
- {
- [5] = -1
- };
- o.AssertEqual(0, 1, 2, 3, 4, -1, 6, 7, 8, 9);
- }
- [TestMethod]
- public void Change_End()
- {
- var o = new ListObservable<int>(Observable.Range(0, 10))
- {
- [9] = -1
- };
- o.AssertEqual(0, 1, 2, 3, 4, 5, 6, 7, 8, -1);
- }
- [TestMethod]
- public void Change_Error()
- {
- var o = new ListObservable<int>(Observable.Range(0, 10));
- ReactiveAssert.Throws<ArgumentOutOfRangeException>(() => o[100] = -1);
- }
- [TestMethod]
- public void Insert_End()
- {
- var o = new ListObservable<int>(Observable.Range(0, 10));
- o.Insert(10, -1);
- o.AssertEqual(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1);
- }
- [TestMethod]
- public void Contains_None()
- {
- var o = new ListObservable<int>(Observable.Empty<int>());
- Assert.Equal(false, o.Contains(0));
- }
- [TestMethod]
- public void Contains_Some_NotFound()
- {
- var o = new ListObservable<int>(Observable.Range(0, 10));
- Assert.Equal(false, o.Contains(100));
- }
- [TestMethod]
- public void Contains_Some_Found()
- {
- var o = new ListObservable<int>(Observable.Range(0, 10));
- Assert.Equal(true, o.Contains(3));
- }
- [TestMethod]
- public void Clear()
- {
- var o = new ListObservable<int>(Observable.Range(0, 10));
- o.Clear();
- o.AssertEqual();
- }
- [TestMethod]
- public void IsReadOnly()
- {
- var o = new ListObservable<int>(Observable.Never<int>());
- Assert.Equal(false, o.IsReadOnly);
- }
- [TestMethod]
- public void This_None()
- {
- var o = new ListObservable<int>(Observable.Empty<int>());
- ReactiveAssert.Throws<ArgumentOutOfRangeException>(() => { var t = o[0]; });
- }
- [TestMethod]
- public void This_Some_NotFound()
- {
- var o = new ListObservable<int>(Observable.Range(0, 10));
- ReactiveAssert.Throws<ArgumentOutOfRangeException>(() => { var t = o[100]; });
- }
- [TestMethod]
- public void This_Some_Found()
- {
- var o = new ListObservable<int>(Observable.Range(0, 10));
- Assert.Equal(5, o[5]);
- }
- [TestMethod]
- public void CopyTo_RightSize()
- {
- var o = new ListObservable<int>(Observable.Range(0, 10));
- var array = new int[10];
- o.CopyTo(array, 0);
- array.AssertEqual(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
- }
- [TestMethod]
- public void CopyTo_RightSize_Offset()
- {
- var o = new ListObservable<int>(Observable.Range(0, 10));
- var array = new int[10];
- ReactiveAssert.Throws<ArgumentException>(() => o.CopyTo(array, 3));
- }
- [TestMethod]
- public void CopyTo_Bigger()
- {
- var o = new ListObservable<int>(Observable.Range(0, 10));
- var array = new int[15];
- o.CopyTo(array, 0);
- array.AssertEqual(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0);
- }
- [TestMethod]
- public void CopyTo_Bigger_Offset()
- {
- var o = new ListObservable<int>(Observable.Range(0, 10));
- var array = new int[15];
- o.CopyTo(array, 3);
- array.AssertEqual(0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0);
- }
- [TestMethod]
- public void CopyTo_Smaller()
- {
- var o = new ListObservable<int>(Observable.Range(0, 10));
- var array = new int[5];
- ReactiveAssert.Throws<ArgumentException>(() => o.CopyTo(array, 0));
- }
- [TestMethod]
- public void CopyTo_Smaller_Offset()
- {
- var o = new ListObservable<int>(Observable.Range(0, 10));
- var array = new int[5];
- ReactiveAssert.Throws<ArgumentException>(() => o.CopyTo(array, 3));
- }
- [TestMethod]
- public void Add_Empty()
- {
- var o = new ListObservable<int>(Observable.Empty<int>())
- {
- 100
- };
- o.AssertEqual(100);
- }
- [TestMethod]
- public void Add_Some()
- {
- var o = new ListObservable<int>(Observable.Return(200))
- {
- 100
- };
- o.AssertEqual(200, 100);
- }
- [TestMethod]
- public void Remove_None()
- {
- var o = new ListObservable<int>(Observable.Empty<int>());
- Assert.Equal(false, o.Remove(0));
- o.AssertEqual();
- }
- [TestMethod]
- public void Remove_Some_NotFound()
- {
- var o = new ListObservable<int>(Observable.Range(0, 10));
- Assert.Equal(false, o.Remove(100));
- o.AssertEqual(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
- }
- [TestMethod]
- public void Remove_Some_Found()
- {
- var o = new ListObservable<int>(Observable.Range(0, 10));
- Assert.Equal(true, o.Remove(3));
- o.AssertEqual(0, 1, 2, 4, 5, 6, 7, 8, 9);
- }
- [TestMethod]
- public void ForEach()
- {
- var o = new ListObservable<int>(Observable.Range(0, 10));
- var l = new List<int>();
- foreach (var x in o)
- {
- l.Add(x);
- }
- l.AssertEqual(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
- }
- [TestMethod]
- public void ForEach_Old()
- {
- var o = new ListObservable<int>(Observable.Range(0, 10));
- var l = new List<int>();
- foreach (int x in (IEnumerable)o)
- {
- l.Add(x);
- }
- l.AssertEqual(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
- }
- [TestMethod]
- public void Subscribe_Never()
- {
- var s = new TestScheduler();
- var xs = s.CreateHotObservable<int>(
- );
- var results = s.Start(() => new ListObservable<int>(xs));
- results.Messages.AssertEqual(
- );
- }
- [TestMethod]
- public void Subscribe_Infinite()
- {
- var s = new TestScheduler();
- var xs = s.CreateHotObservable(
- OnNext(300, 1)
- );
- var results = s.Start(() => new ListObservable<int>(xs));
- results.Messages.AssertEqual(
- );
- }
- [TestMethod]
- public void Subscribe_Error()
- {
- var s = new TestScheduler();
- var ex = new Exception();
- var xs = s.CreateHotObservable(
- OnNext(300, 1),
- OnError<int>(400, ex)
- );
- var results = s.Start(() => new ListObservable<int>(xs));
- results.Messages.AssertEqual(
- OnError<object>(400, ex)
- );
- }
- [TestMethod]
- public void Subscribe_Completed()
- {
- var s = new TestScheduler();
- var xs = s.CreateHotObservable(
- OnNext(300, 1),
- OnCompleted<int>(400)
- );
- var results = s.Start(() => new ListObservable<int>(xs));
- results.Messages.AssertEqual(
- OnCompleted<object>(400)
- );
- }
- [TestMethod]
- public void Subscribe_Disposed()
- {
- var s = new TestScheduler();
- var xs = s.CreateHotObservable(
- OnNext(300, 1),
- OnCompleted<int>(1100)
- );
- var results = s.Start(() => new ListObservable<int>(xs));
- results.Messages.AssertEqual(
- );
- }
- [TestMethod]
- public void Subscribe_Disposed_Multi()
- {
- var s = new TestScheduler();
- var xs = s.CreateHotObservable(
- OnNext(300, 1),
- OnCompleted<int>(400)
- );
- var o = new ListObservable<int>(xs);
- var results1 = s.CreateObserver<object>();
- var results2 = s.CreateObserver<object>();
- var d1 = o.Subscribe(results1);
- var d2 = o.Subscribe(results2);
- s.ScheduleAbsolute(350, () => d1.Dispose());
- s.ScheduleAbsolute(500, () => d2.Dispose());
- s.Start();
- results1.Messages.AssertEqual(
- );
- results2.Messages.AssertEqual(
- );
- }
- }
- }
|