| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450 | 
							- // Licensed to the .NET Foundation under one or more agreements.
 
- // The .NET Foundation licenses this file to you under the Apache 2.0 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 Xunit;
 
- namespace ReactiveTests.Tests
 
- {
 
-     public partial class ListObservableTest : ReactiveTest
 
-     {
 
-         [Fact]
 
-         public void Ctor_ArgumentChecking()
 
-         {
 
-             ReactiveAssert.Throws<ArgumentNullException>(() => new ListObservable<int>(null));
 
-         }
 
-         [Fact]
 
-         public void Subscribe_ArgumentChecking()
 
-         {
 
-             ReactiveAssert.Throws<ArgumentNullException>(() => new ListObservable<int>(Observable.Never<int>()).Subscribe(null));
 
-         }
 
-         [Fact]
 
-         public void Value_None()
 
-         {
 
-             var o = new ListObservable<int>(Observable.Empty<int>());
 
-             ReactiveAssert.Throws<InvalidOperationException>(() => { var t = o.Value; });
 
-         }
 
-         [Fact]
 
-         public void Value_Some()
 
-         {
 
-             var o = new ListObservable<int>(Observable.Range(0, 10));
 
-             Assert.Equal(9, o.Value);
 
-         }
 
-         [Fact]
 
-         public void IndexOf_None()
 
-         {
 
-             var o = new ListObservable<int>(Observable.Empty<int>());
 
-             Assert.Equal(-1, o.IndexOf(0));
 
-         }
 
-         [Fact]
 
-         public void IndexOf_Some_NotFound()
 
-         {
 
-             var o = new ListObservable<int>(Observable.Range(0, 10));
 
-             Assert.Equal(-1, o.IndexOf(100));
 
-         }
 
-         [Fact]
 
-         public void IndexOf_Some_Found()
 
-         {
 
-             var o = new ListObservable<int>(Observable.Range(0, 10));
 
-             Assert.Equal(3, o.IndexOf(3));
 
-         }
 
-         [Fact]
 
-         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);
 
-         }
 
-         [Fact]
 
-         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);
 
-         }
 
-         [Fact]
 
-         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);
 
-         }
 
-         [Fact]
 
-         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);
 
-         }
 
-         [Fact]
 
-         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);
 
-         }
 
-         [Fact]
 
-         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);
 
-         }
 
-         [Fact]
 
-         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);
 
-         }
 
-         [Fact]
 
-         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);
 
-         }
 
-         [Fact]
 
-         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);
 
-         }
 
-         [Fact]
 
-         public void Change_Error()
 
-         {
 
-             var o = new ListObservable<int>(Observable.Range(0, 10));
 
-             ReactiveAssert.Throws<ArgumentOutOfRangeException>(() => o[100] = -1);
 
-         }
 
-         [Fact]
 
-         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);
 
-         }
 
-         [Fact]
 
-         public void Contains_None()
 
-         {
 
-             var o = new ListObservable<int>(Observable.Empty<int>());
 
-             Assert.Equal(false, o.Contains(0));
 
-         }
 
-         [Fact]
 
-         public void Contains_Some_NotFound()
 
-         {
 
-             var o = new ListObservable<int>(Observable.Range(0, 10));
 
-             Assert.Equal(false, o.Contains(100));
 
-         }
 
-         [Fact]
 
-         public void Contains_Some_Found()
 
-         {
 
-             var o = new ListObservable<int>(Observable.Range(0, 10));
 
-             Assert.Equal(true, o.Contains(3));
 
-         }
 
-         [Fact]
 
-         public void Clear()
 
-         {
 
-             var o = new ListObservable<int>(Observable.Range(0, 10));
 
-             o.Clear();
 
-             o.AssertEqual();
 
-         }
 
-         [Fact]
 
-         public void IsReadOnly()
 
-         {
 
-             var o = new ListObservable<int>(Observable.Never<int>());
 
-             Assert.Equal(false, o.IsReadOnly);
 
-         }
 
-         [Fact]
 
-         public void This_None()
 
-         {
 
-             var o = new ListObservable<int>(Observable.Empty<int>());
 
-             ReactiveAssert.Throws<ArgumentOutOfRangeException>(() => { var t = o[0]; });
 
-         }
 
-         [Fact]
 
-         public void This_Some_NotFound()
 
-         {
 
-             var o = new ListObservable<int>(Observable.Range(0, 10));
 
-             ReactiveAssert.Throws<ArgumentOutOfRangeException>(() => { var t = o[100]; });
 
-         }
 
-         [Fact]
 
-         public void This_Some_Found()
 
-         {
 
-             var o = new ListObservable<int>(Observable.Range(0, 10));
 
-             Assert.Equal(5, o[5]);
 
-         }
 
-         [Fact]
 
-         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);
 
-         }
 
-         [Fact]
 
-         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));
 
-         }
 
-         [Fact]
 
-         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);
 
-         }
 
-         [Fact]
 
-         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);
 
-         }
 
-         [Fact]
 
-         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));
 
-         }
 
-         [Fact]
 
-         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));
 
-         }
 
-         [Fact]
 
-         public void Add_Empty()
 
-         {
 
-             var o = new ListObservable<int>(Observable.Empty<int>())
 
-             {
 
-                 100
 
-             };
 
-             o.AssertEqual(100);
 
-         }
 
-         [Fact]
 
-         public void Add_Some()
 
-         {
 
-             var o = new ListObservable<int>(Observable.Return(200))
 
-             {
 
-                 100
 
-             };
 
-             o.AssertEqual(200, 100);
 
-         }
 
-         [Fact]
 
-         public void Remove_None()
 
-         {
 
-             var o = new ListObservable<int>(Observable.Empty<int>());
 
-             Assert.Equal(false, o.Remove(0));
 
-             o.AssertEqual();
 
-         }
 
-         [Fact]
 
-         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);
 
-         }
 
-         [Fact]
 
-         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);
 
-         }
 
-         [Fact]
 
-         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);
 
-         }
 
-         [Fact]
 
-         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);
 
-         }
 
-         [Fact]
 
-         public void Subscribe_Never()
 
-         {
 
-             var s = new TestScheduler();
 
-             var xs = s.CreateHotObservable<int>(
 
-             );
 
-             var results = s.Start(() => new ListObservable<int>(xs));
 
-             results.Messages.AssertEqual(
 
-             );
 
-         }
 
-         [Fact]
 
-         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(
 
-             );
 
-         }
 
-         [Fact]
 
-         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)
 
-             );
 
-         }
 
-         [Fact]
 
-         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)
 
-             );
 
-         }
 
-         [Fact]
 
-         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(
 
-             );
 
-         }
 
-         [Fact]
 
-         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(
 
-             );
 
-         }
 
-     }
 
- }
 
 
  |