Пример #1
0
        public void ListBehaviorSubject_Subscribe_reflects_changes()
        {
            var lbs = new ListBehaviorSubject <int>();

            lbs.OnAdd(1);
            lbs.OnAdd(2);
            lbs.OnAdd(3);

            var list = new List <int>();
            var sub  = lbs.Subscribe(Observer.Create <ListChange <int> >(change => change.Apply(list)));

            CollectionAssert.AreEqual(new[] { 1, 2, 3 }, list);

            lbs.OnAdd(4);

            CollectionAssert.AreEqual(new[] { 1, 2, 3, 4 }, list);

            lbs.OnInsert(0, 0);

            CollectionAssert.AreEqual(new[] { 0, 1, 2, 3, 4 }, list);

            lbs.OnRemove(1);

            CollectionAssert.AreEqual(new[] { 0, 2, 3, 4 }, list);

            lbs.OnClear();

            CollectionAssert.AreEqual(new int[] {}, list);

            sub.Dispose();

            lbs.OnAdd(41);

            CollectionAssert.AreEqual(new int[] { }, list);
        }
Пример #2
0
        public void Count_reflects_changes()
        {
            var lbs = new ListBehaviorSubject <int>();

            lbs.OnAdd(1);
            lbs.OnAdd(2);
            lbs.OnAdd(3);

            var count = 0;

            var sub = lbs.Count().Subscribe(Observer.Create <int>(newCount => count = newCount));

            Assert.AreEqual(3, count);

            lbs.OnRemove(0);

            Assert.AreEqual(2, count);

            lbs[0] = 5;

            Assert.AreEqual(2, count);

            lbs.OnClear();

            Assert.AreEqual(0, count);

            sub.Dispose();

            lbs.OnAdd(41);

            Assert.AreEqual(0, count);
        }
Пример #3
0
        public void Basics()
        {
            var src = new ListBehaviorSubject <int>();

            var list = new List <int>();

            var sub = src.Where(i => i % 2 == 0).Subscribe(change => change.Apply(list));

            CollectionAssert.IsEmpty(list);

            for (var i = 0; i < 6; ++i)
            {
                src.OnAdd(i);
            }

            CollectionAssert.AreEqual(new[] { 0, 2, 4 }, list);

            src.OnRemove(1);

            CollectionAssert.AreEqual(new[] { 0, 2, 4 }, list);

            src.OnReplace(1, 4);

            CollectionAssert.AreEqual(new[] { 0, 4, 4 }, list);

            src.OnInsert(0, -2);

            CollectionAssert.AreEqual(new[] { -2, 0, 4, 4 }, list);

            src.OnClear();

            CollectionAssert.IsEmpty(list);

            sub.Dispose();
        }
Пример #4
0
        public void Clear()
        {
            var left  = new ListBehaviorSubject <int>();
            var right = new ListBehaviorSubject <int>();

            left.OnAdd(1);
            left.OnAdd(2);
            left.OnAdd(3);

            right.OnAdd(4);
            right.OnAdd(5);
            right.OnAdd(6);

            var list = new List <int>();

            var sub = left.Concat(right).Subscribe(Observer.Create <ListChange <int> >(change => change.Apply(list)));

            CollectionAssert.AreEqual(new[] { 1, 2, 3, 4, 5, 6 }, list);

            left.OnClear();

            CollectionAssert.AreEqual(new[] { 4, 5, 6 }, list);

            right.OnClear();

            CollectionAssert.AreEqual(new int[] { }, list);

            left.OnAdd(1);
            left.OnAdd(2);
            left.OnAdd(3);

            right.OnAdd(4);
            right.OnAdd(5);
            right.OnAdd(6);

            CollectionAssert.AreEqual(new[] { 1, 2, 3, 4, 5, 6 }, list);

            right.OnClear();

            CollectionAssert.AreEqual(new[] { 1, 2, 3 }, list);

            left.OnClear();

            CollectionAssert.AreEqual(new int[] { }, list);

            sub.Dispose();
        }
Пример #5
0
        public void Basics()
        {
            var src1 = new Subject <int>();
            var src2 = new Subject <int>();
            var src3 = new Subject <int>();

            var src = new ListBehaviorSubject <IObservable <int> >();

            var list = new List <int>();

            var sub = src.Switch().Subscribe(change => change.Apply(list));

            CollectionAssert.IsEmpty(list);

            src.OnAdd(src1);
            src.OnAdd(src2);
            src.OnAdd(src3);

            CollectionAssert.IsEmpty(list);

            src1.OnNext(1);

            CollectionAssert.AreEqual(new[] { 1 }, list);

            src3.OnNext(3);

            CollectionAssert.AreEqual(new[] { 1, 3 }, list);

            src2.OnNext(2);

            CollectionAssert.AreEqual(new[] { 1, 2, 3 }, list);

            src1.OnNext(11);
            src2.OnNext(22);
            src3.OnNext(33);

            CollectionAssert.AreEqual(new[] { 11, 22, 33 }, list);

            src.OnRemove(1);

            CollectionAssert.AreEqual(new[] { 11, 33 }, list);

            src.OnReplace(1, src2);

            CollectionAssert.AreEqual(new[] { 11 }, list);

            src2.OnNext(22);

            CollectionAssert.AreEqual(new[] { 11, 22 }, list);

            src.OnClear();

            CollectionAssert.IsEmpty(list);

            sub.Dispose();
        }
Пример #6
0
        public void Basics()
        {
            var lbs1 = new ListBehaviorSubject <int>();
            var lbs2 = new ListBehaviorSubject <int>();

            lbs1.OnAdd(1);
            lbs1.OnAdd(2);

            lbs2.OnAdd(4);
            lbs2.OnAdd(5);

            var source = new BehaviorSubject <IObservableList <int> >(lbs1);

            var list = new List <int>();

            var sub = source.Switch().Subscribe(Observer.Create <ListChange <int> >(change => change.Apply(list)));

            CollectionAssert.AreEqual(new[] { 1, 2 }, list);

            lbs1.OnAdd(3);
            lbs1.OnAdd(6);

            CollectionAssert.AreEqual(new[] { 1, 2, 3, 6 }, list);

            source.OnNext(lbs2);

            CollectionAssert.AreEqual(new[] { 4, 5 }, list);

            source.OnNext(lbs2);

            CollectionAssert.AreEqual(new[] { 4, 5 }, list);

            lbs2.OnRemove(0);

            CollectionAssert.AreEqual(new[] { 5 }, list);

            lbs2.OnReplace(0, 41);

            CollectionAssert.AreEqual(new[] { 41 }, list);

            lbs2.OnClear();

            CollectionAssert.IsEmpty(list);

            lbs2.OnAdd(4);
            lbs2.OnAdd(5);

            sub.Dispose();

            lbs1.OnAdd(100);
            lbs2.OnAdd(200);

            CollectionAssert.AreEqual(new[] { 4, 5 }, list);
        }
Пример #7
0
        public void DisposeElements_disposes_elements()
        {
            var lbs = new ListBehaviorSubject <MyDisposable>();

            var d1 = new MyDisposable();
            var d2 = new MyDisposable();
            var d3 = new MyDisposable();
            var d4 = new MyDisposable();

            lbs.OnAdd(d1);
            lbs.OnAdd(d2);
            lbs.OnAdd(d3);

            var list = new List <MyDisposable>();

            var sub = lbs.DisposeElements().Subscribe(change => change.Apply(list));

            CollectionAssert.AreEqual(new[] { d1, d2, d3 }, list);

            Assert.AreEqual(0, d1.DisposeCount);
            Assert.AreEqual(0, d2.DisposeCount);
            Assert.AreEqual(0, d3.DisposeCount);
            Assert.AreEqual(0, d4.DisposeCount);

            lbs.OnRemove(1);

            CollectionAssert.AreEqual(new [] { d1, d3 }, list);

            Assert.AreEqual(0, d1.DisposeCount);
            Assert.AreEqual(1, d2.DisposeCount);
            Assert.AreEqual(0, d3.DisposeCount);
            Assert.AreEqual(0, d4.DisposeCount);

            lbs.OnReplace(1, d4);

            CollectionAssert.AreEqual(new [] { d1, d4 }, list);

            Assert.AreEqual(0, d1.DisposeCount);
            Assert.AreEqual(1, d2.DisposeCount);
            Assert.AreEqual(1, d3.DisposeCount);
            Assert.AreEqual(0, d4.DisposeCount);

            lbs.OnClear();

            CollectionAssert.AreEqual(new MyDisposable[] { }, list);

            Assert.AreEqual(1, d1.DisposeCount);
            Assert.AreEqual(1, d2.DisposeCount);
            Assert.AreEqual(1, d3.DisposeCount);
            Assert.AreEqual(1, d4.DisposeCount);

            sub.Dispose();
        }
Пример #8
0
            public static IDisposable ListenForBuildErrors(IObservable <Started> buildStarted, IObservable <BuildIssueDetected> issuesDetected, out IObservableList <BuildIssueDetected> issues)
            {
                var errors = new ListBehaviorSubject <BuildIssueDetected>();

                issues = errors;

                return(Disposable.Combine(
                           buildStarted.Select(b => BinaryMessage.TryParse(b.Command, BuildProject.MessageType, BuildProject.ReadDataFrom))
                           .NotNone()
                           .Subscribe(_ => errors.OnClear()),

                           buildStarted.Select(b => BinaryMessage.TryParse(b.Command, GenerateBytecode.MessageType, GenerateBytecode.ReadDataFrom))
                           .NotNone()
                           .Subscribe(_ => errors.OnClear()),

                           issuesDetected.Subscribe(
                               issue =>
                {
                    errors.OnAdd(issue);
                })));
            }
Пример #9
0
        public void Basics()
        {
            var src = new ListBehaviorSubject <int>();

            var list = new List <int>();

            var sub = src.SeparateBy(() => - 1).Subscribe(change => change.Apply(list));

            CollectionAssert.IsEmpty(list);

            for (var i = 0; i < 3; ++i)
            {
                src.OnAdd(i);
            }

            CollectionAssert.AreEqual(new[] { 0, -1, 1, -1, 2 }, list);

            src.OnRemove(0);

            CollectionAssert.AreEqual(new[] { 1, -1, 2 }, list);

            src.OnRemove(1);

            CollectionAssert.AreEqual(new[] { 1 }, list);

            src.OnInsert(0, 4);

            CollectionAssert.AreEqual(new[] { 4, -1, 1 }, list);

            src.OnAdd(5);

            CollectionAssert.AreEqual(new[] { 4, -1, 1, -1, 5 }, list);

            src.OnReplace(1, 11);

            CollectionAssert.AreEqual(new[] { 4, -1, 11, -1, 5 }, list);

            src.OnClear();

            CollectionAssert.IsEmpty(list);

            sub.Dispose();
        }