| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436 | // 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));            o[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));            o[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));            o[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>());            o.Add(100);            o.AssertEqual(100);        }        [Fact]        public void Add_Some()        {            var o = new ListObservable<int>(Observable.Return(200));            o.Add(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<int>(                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<int>(                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<int>(                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<int>(                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<int>(                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(            );        }    }}
 |