Пример #1
0
        public void AddTriggerThenManyOnNextOneAdd()
        {
            var source = new ObservableCollection <int> {
                1, 2, 3
            };
            var scheduler = new TestScheduler();

            using var trigger = new Subject <object?>();
            using var view    = new FilteredView <int>(source, x => true, TimeSpan.FromMilliseconds(10), scheduler, leaveOpen: true, triggers: trigger);
            using var actual  = view.SubscribeAll();
            source.Add(4);
            for (var i = 0; i < 10; i++)
            {
                trigger.OnNext(null);
            }

            CollectionAssert.IsEmpty(actual);
            CollectionAssert.AreEqual(new[] { 1, 2, 3 }, view);

            scheduler.Start();

            var expected = new EventArgs[]
            {
                CachedEventArgs.CountPropertyChanged,
                CachedEventArgs.IndexerPropertyChanged,
                Diff.CreateAddEventArgs(4, 3),
            };

            CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);
            CollectionAssert.AreEqual(new[] { 1, 2, 3, 4 }, view);
        }
            public static void Add()
            {
                var source = new ObservableCollection <int> {
                    1, 2, 3
                };

                using var view = source.AsMappingView(Collections.ReadOnlyViews.MappingViewTests.Model.Create);
                CollectionAssert.AreEqual(source, view.Select(x => x.Value));

                using var actual = view.SubscribeAll();
                source.Add(4);
                var expected = new List <EventArgs>
                {
                    CachedEventArgs.CountPropertyChanged,
                    CachedEventArgs.IndexerPropertyChanged,
                    Diff.CreateAddEventArgs(view[3], 3),
                };

                CollectionAssert.AreEqual(source, view.Select(x => x.Value));
                CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);

                source.Add(5);
                expected.AddRange(
                    new EventArgs[]
                {
                    CachedEventArgs.CountPropertyChanged,
                    CachedEventArgs.IndexerPropertyChanged,
                    Diff.CreateAddEventArgs(view[4], 4),
                });

                CollectionAssert.AreEqual(source, view.Select(x => x.Value));
                CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);
            }
        public void ReplaceFilteredWithVisible()
        {
            var source = new ObservableCollection <int> {
                1
            };
            var scheduler = new TestScheduler();

            using (var view = source.AsReadOnlyFilteredView(x => x % 2 == 0, scheduler))
            {
                scheduler.Start();
                using (var changes = view.SubscribeAll())
                {
                    source[0] = 2;
                    scheduler.Start();
                    CollectionAssert.AreEqual(new[] { 2 }, view);
                    var expected = new EventArgs[]
                    {
                        CachedEventArgs.CountPropertyChanged,
                        CachedEventArgs.IndexerPropertyChanged,
                        Diff.CreateAddEventArgs(2, 0)
                    };
                    CollectionAssert.AreEqual(expected, changes, EventArgsComparer.Default);
                }
            }
        }
Пример #4
0
        public void FilterRemoveOneThenAdd()
        {
            _view.Filter = x => x < 3;
            _scheduler?.Start();
            CollectionAssert.AreEqual(new[] { 1, 2 }, _view);
            _expected.Add(Notifier.CountPropertyChangedEventArgs);
            _expected.Add(Notifier.IndexerPropertyChangedEventArgs);
            _expected.Add(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, 3, 2));

            _actual.RemoveAll(
                x =>
                x is PropertyChangedEventArgs &&
                ((PropertyChangedEventArgs)x).PropertyName == FilterChangedEventArgs.PropertyName);
            CollectionAssert.AreEqual(_expected, _actual, EventArgsComparer.Default);

            _view.Filter = x => true;
            _scheduler?.Start();
            CollectionAssert.AreEqual(new[] { 1, 2, 3 }, _view);
            _expected.Add(Notifier.CountPropertyChangedEventArgs);
            _expected.Add(Notifier.IndexerPropertyChangedEventArgs);
            _expected.Add(Diff.CreateAddEventArgs(3, 2));

            _actual.RemoveAll(
                x =>
                x is PropertyChangedEventArgs &&
                ((PropertyChangedEventArgs)x).PropertyName == FilterChangedEventArgs.PropertyName);
            CollectionAssert.AreEqual(_expected, _actual, EventArgsComparer.Default);
        }
Пример #5
0
            public static void Add()
            {
                var source = new ObservableCollection <int>();

                using var modelView        = source.AsMappingView(Collections.ReadOnlyViews.MappingViewTests.Model.Create);
                using var modelViewChanges = modelView.SubscribeAll();
                using var indexedView      = modelView.AsMappingView(
                          Collections.ReadOnlyViews.MappingViewTests.Vm.Create,
                          (x, i) => x);
                using var indexedChanges = indexedView.SubscribeAll();
                using var vmView         = modelView.AsMappingView(Collections.ReadOnlyViews.MappingViewTests.Vm.Create);
                using var vmViewChanges  = vmView.SubscribeAll();
                source.Add(1);
                var expected = new EventArgs?[]
                {
                    CachedEventArgs.CountPropertyChanged,
                    CachedEventArgs.IndexerPropertyChanged,
                    null,
                };

                expected[2] = Diff.CreateAddEventArgs(modelView[0], 0);
                CollectionAssert.AreEqual(expected, modelViewChanges, EventArgsComparer.Default);

                expected[2] = Diff.CreateAddEventArgs(vmView[0], 0);
                CollectionAssert.AreEqual(expected, vmViewChanges, EventArgsComparer.Default);

                expected[2] = Diff.CreateAddEventArgs(indexedView[0], 0);
                CollectionAssert.AreEqual(expected, indexedChanges, EventArgsComparer.Default);
            }
Пример #6
0
            public void OnNextAddsOne()
            {
                using (var subject = new Subject <IEnumerable <int> >())
                {
                    using (var view = subject.AsReadOnlyView())
                    {
                        using (var actual = view.SubscribeAll())
                        {
                            subject.OnNext(new[] { 1 });
                            CollectionAssert.AreEqual(new[] { 1 }, view);
                            var expected = new List <EventArgs>
                            {
                                CachedEventArgs.CountPropertyChanged,
                                CachedEventArgs.IndexerPropertyChanged,
                                Diff.CreateAddEventArgs(1, 0),
                                CachedEventArgs.GetOrCreatePropertyChangedEventArgs("Source"),
                            };
                            CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);

                            subject.OnNext(new[] { 1, 2 });
                            CollectionAssert.AreEqual(new[] { 1, 2 }, view);
                            expected.AddRange(
                                new EventArgs[]
                            {
                                CachedEventArgs.CountPropertyChanged,
                                CachedEventArgs.IndexerPropertyChanged,
                                Diff.CreateAddEventArgs(2, 1),
                                CachedEventArgs.GetOrCreatePropertyChangedEventArgs("Source"),
                            });
                            CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);
                        }
                    }
                }
            }
Пример #7
0
        public async Task AddFiltered()
        {
            var source = new ObservableCollection <int> {
                1, 2, 3
            };

            using (var view = source.AsFilteredView(x => x % 2 == 0))
            {
                using (var actual = view.SubscribeAll())
                {
                    view.Add(4);
                    await Application.Current.Dispatcher.SimulateYield();

                    CollectionAssert.AreEqual(new[] { 2, 4 }, view);
                    CollectionAssert.AreEqual(new[] { 1, 2, 3, 4 }, source);
                    var expected = new EventArgs[]
                    {
                        CachedEventArgs.CountPropertyChanged,
                        CachedEventArgs.IndexerPropertyChanged,
                        Diff.CreateAddEventArgs(4, 1)
                    };
                    CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);
                }
            }
        }
        public void AddVisibleWhenFilteredBuffered()
        {
            var source    = new ObservableCollection <int>();
            var scheduler = new TestScheduler();

            using (var view = source.AsReadOnlyFilteredView(x => x % 2 == 0, TimeSpan.FromMilliseconds(100), scheduler))
            {
                scheduler.Start();
                using (var actual = view.SubscribeAll())
                {
                    CollectionAssert.IsEmpty(view);
                    CollectionAssert.IsEmpty(actual);

                    source.Add(2);
                    scheduler.Start();
                    CollectionAssert.AreEqual(new[] { 2 }, view);
                    var expected = new EventArgs[]
                    {
                        CachedEventArgs.CountPropertyChanged,
                        CachedEventArgs.IndexerPropertyChanged,
                        Diff.CreateAddEventArgs(2, 0)
                    };
                    CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);
                }
            }
        }
Пример #9
0
        public void NotifiesAdd()
        {
            var ints             = new ObservableCollection <int>();
            var expected         = ints.SubscribeAll();
            var modelView        = ints.AsMappingView(x => new Model(x));
            var modelViewChanges = modelView.SubscribeAll();

            var indexedView = modelView.AsMappingView((x, i) => new Vm {
                Model = x, Index = i
            });
            var indexedChanges = indexedView.SubscribeAll();

            var vmView = modelView.AsMappingView(x => new Vm {
                Model = x
            });
            var vmViewChanges = vmView.SubscribeAll();

            ints.Add(1);

            expected[2] = Diff.CreateAddEventArgs(modelView[0], 0);
            CollectionAssert.AreEqual(expected, modelViewChanges, EventArgsComparer.Default);
            expected[2] = Diff.CreateAddEventArgs(vmView[0], 0);
            CollectionAssert.AreEqual(expected, vmViewChanges, EventArgsComparer.Default);

            expected[2] = Diff.CreateAddEventArgs(indexedView[0], 0);
            CollectionAssert.AreEqual(expected, indexedChanges, EventArgsComparer.Default);
        }
Пример #10
0
        public static void SetSourceAdd()
        {
            using var view   = new ReadOnlySerialView <int>(new[] { 1, 2, 3 });
            using var actual = view.SubscribeAll();
            var newSource1 = new[] { 1, 2, 3, 4 };

            view.SetSource(newSource1);
            CollectionAssert.AreEqual(newSource1, view);
            var expected = new List <EventArgs>
            {
                CachedEventArgs.CountPropertyChanged,
                CachedEventArgs.IndexerPropertyChanged,
                Diff.CreateAddEventArgs(4, 3),
                CachedEventArgs.GetOrCreatePropertyChangedEventArgs("Source"),
            };

            CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);

            var newSource2 = new ObservableCollection <int> {
                1, 2, 3, 4, 5
            };

            view.SetSource(newSource2);
            CollectionAssert.AreEqual(newSource2, view);
            expected.AddRange(
                new EventArgs[]
            {
                CachedEventArgs.CountPropertyChanged,
                CachedEventArgs.IndexerPropertyChanged,
                Diff.CreateAddEventArgs(5, 4),
                CachedEventArgs.GetOrCreatePropertyChangedEventArgs("Source"),
            });
            CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);
        }
Пример #11
0
        public void FilterRemoveOneThenAdd()
        {
            using (var actual = this.View.SubscribeAll())
            {
                this.View.Filter = x => x < 3;
                this.Scheduler?.Start();
                CollectionAssert.AreEqual(new[] { 1, 2 }, this.View);
                var expected = new List <EventArgs>();
                expected.Add(CachedEventArgs.CountPropertyChanged);
                expected.Add(CachedEventArgs.IndexerPropertyChanged);
                expected.Add(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, 3, 2));

                Assert.AreEqual(1, actual.Count(x => EventArgsComparer.Equals(x, FilterChangedEventArgs)));
                CollectionAssert.AreEqual(expected, actual.Where(x => !EventArgsComparer.Equals(x, FilterChangedEventArgs)), EventArgsComparer.Default);

                this.View.Filter = x => true;
                this.Scheduler?.Start();
                CollectionAssert.AreEqual(new[] { 1, 2, 3 }, this.View);
                expected.Add(CachedEventArgs.CountPropertyChanged);
                expected.Add(CachedEventArgs.IndexerPropertyChanged);
                expected.Add(Diff.CreateAddEventArgs(3, 2));
                Assert.AreEqual(2, actual.Count(x => EventArgsComparer.Equals(x, FilterChangedEventArgs)));
                CollectionAssert.AreEqual(expected, actual.Where(x => !EventArgsComparer.Equals(x, FilterChangedEventArgs)), EventArgsComparer.Default);
            }
        }
Пример #12
0
            public static void ObserveValueAsReadOnlyViewWhenArrayOfTWhenCast()
            {
                var with = new With <int[]>();

                using var view   = with.ObserveValue(x => x.Value).Select(x => (IMaybe <int[]>)x).AsReadOnlyView();
                using var actual = view.SubscribeAll();
                with.Value       = new[] { 1 };
                CollectionAssert.AreEqual(new[] { 1 }, view);
                var expected = new List <EventArgs>
                {
                    CachedEventArgs.CountPropertyChanged,
                    CachedEventArgs.IndexerPropertyChanged,
                    Diff.CreateAddEventArgs(1, 0),
                    CachedEventArgs.GetOrCreatePropertyChangedEventArgs("Source"),
                };

                CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);

                with.Value = new[] { 1, 2 };
                CollectionAssert.AreEqual(new[] { 1, 2 }, view);
                expected.AddRange(
                    new EventArgs[]
                {
                    CachedEventArgs.CountPropertyChanged,
                    CachedEventArgs.IndexerPropertyChanged,
                    Diff.CreateAddEventArgs(2, 1),
                    CachedEventArgs.GetOrCreatePropertyChangedEventArgs("Source"),
                });
                CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);
            }
Пример #13
0
 private static IReadOnlyList <EventArgs> CreateAddEventArgsCollection(object item, int index)
 {
     return(new EventArgs[]
     {
         CachedEventArgs.CountPropertyChanged,
         Diff.CreateAddEventArgs(item, index),
     });
 }
        public void Reacts()
        {
            var changes = new List <NotifyCollectionChangedEventArgs>();
            var source  = new ObservableCollection <int>();

            source.ObserveCollectionChangedSlim(false)
            .Subscribe(changes.Add);

            source.Add(1);
            CollectionAssert.AreEqual(new[] { Diff.CreateAddEventArgs(1, 0) }, changes, EventArgsComparer.Default);
        }
Пример #15
0
        public void NotifiesWithOnlyCollectionChangedSubscription()
        {
            var ints    = new ObservableCollection <int>();
            var view    = ints.AsReadOnlyFilteredView(x => true);
            var changes = new List <EventArgs>();

            view.ObserveCollectionChangedSlim(false)
            .Subscribe(x => changes.Add(x));
            ints.Add(1);
            var expected = new[] { Diff.CreateAddEventArgs(1, 0) };

            CollectionAssert.AreEqual(expected, changes, EventArgsComparer.Default);
        }
Пример #16
0
        /// <inheritdoc/>
        protected override void InsertItem(int index, T item)
        {
            var sourceIndex = index == this.Count
                ? this.Source.Count
                : this.SourceIndex(index);

            base.InsertItem(index, item);
            var change = Diff.CreateAddEventArgs(item, index);

            this.UpdatedSourceWith = change;
            this.Notify(change);
            this.Source.Insert(sourceIndex, item);
            this.UpdatedSourceWith = null;
        }
            public void Add()
            {
                var source = new ObservableCollection <int>();

                using (var view = source.AsMappingView(CreateStrictMock, WithIndex, x => x.Object.Dispose()))
                {
                    using (var actual = view.SubscribeAll())
                    {
                        source.Add(1);
                        CollectionAssert.AreEqual(source, view.Select(x => x.Object.Value));
                        CollectionAssert.AreEqual(source.Select((_, i) => i), view.Select(x => x.Object.Index));
                        var expected = new List <EventArgs>
                        {
                            CachedEventArgs.CountPropertyChanged,
                            CachedEventArgs.IndexerPropertyChanged,
                            Diff.CreateAddEventArgs(view[0], 0),
                        };
                        CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);

                        source.Add(1);
                        CollectionAssert.AreEqual(source, view.Select(x => x.Object.Value));
                        CollectionAssert.AreEqual(source.Select((_, i) => i), view.Select(x => x.Object.Index));
                        expected.AddRange(new EventArgs[]
                        {
                            CachedEventArgs.CountPropertyChanged,
                            CachedEventArgs.IndexerPropertyChanged,
                            Diff.CreateAddEventArgs(view[1], 1),
                        });
                        CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);

                        source.Add(2);
                        CollectionAssert.AreEqual(source, view.Select(x => x.Object.Value));
                        CollectionAssert.AreEqual(source.Select((_, i) => i), view.Select(x => x.Object.Index));
                        expected.AddRange(new EventArgs[]
                        {
                            CachedEventArgs.CountPropertyChanged,
                            CachedEventArgs.IndexerPropertyChanged,
                            Diff.CreateAddEventArgs(view[2], 2),
                        });
                        CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);

                        foreach (var mock in view)
                        {
                            mock.Setup(x => x.Dispose());
                        }
                    }
                }
            }
Пример #18
0
        public void ReplaceFilteredWithVisible()
        {
            var ints    = new ObservableCollection <int>(new[] { 1 });
            var view    = ints.AsReadOnlyFilteredView(x => x % 2 == 0);
            var changes = view.SubscribeAll();

            ints[0] = 2;
            CollectionAssert.AreEqual(new[] { 2 }, view);
            var expected = new EventArgs[]
            {
                Notifier.CountPropertyChangedEventArgs,
                Notifier.IndexerPropertyChangedEventArgs,
                Diff.CreateAddEventArgs(2, 0)
            };

            CollectionAssert.AreEqual(expected, changes, EventArgsComparer.Default);
        }
Пример #19
0
        public void EnqueueTrimsOverflowAndNotifies()
        {
            var queue = new ObservableFixedSizeQueue <int>(2);

            queue.Enqueue(1);
            queue.Enqueue(2);
            using var actual = queue.SubscribeAll();
            queue.Enqueue(3);
            CollectionAssert.AreEqual(new[] { 2, 3 }, queue);
            var expected = new EventArgs[]
            {
                Diff.CreateRemoveEventArgs(1, 0),
                Diff.CreateAddEventArgs(3, 1),
            };

            CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);
        }
Пример #20
0
            public static void Add()
            {
                var source = new ObservableCollection <Collections.ReadOnlyViews.MappingViewTests.Model <int> >();

                using var view   = source.AsMappingView(CreateStrictMock, x => x.Object.Dispose());
                using var actual = view.SubscribeAll();
                var model1 = Collections.ReadOnlyViews.MappingViewTests.Model.Create(1);

                source.Add(model1);
                CollectionAssert.AreEqual(source, view.Select(x => x.Object.Model));
                var expected = new List <EventArgs>
                {
                    CachedEventArgs.CountPropertyChanged,
                    CachedEventArgs.IndexerPropertyChanged,
                    Diff.CreateAddEventArgs(view[0], 0),
                };

                CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);

                source.Add(model1);
                CollectionAssert.AreEqual(source, view.Select(x => x.Object.Model));
                expected.AddRange(new EventArgs[]
                {
                    CachedEventArgs.CountPropertyChanged,
                    CachedEventArgs.IndexerPropertyChanged,
                    Diff.CreateAddEventArgs(view[1], 1),
                });
                CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);

                source.Add(Collections.ReadOnlyViews.MappingViewTests.Model.Create(2));
                CollectionAssert.AreEqual(source, view.Select(x => x.Object.Model));
                expected.AddRange(new EventArgs[]
                {
                    CachedEventArgs.CountPropertyChanged,
                    CachedEventArgs.IndexerPropertyChanged,
                    Diff.CreateAddEventArgs(view[2], 2),
                });
                CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);

                foreach (var mock in view)
                {
                    mock.Setup(x => x.Dispose());
                }
            }
Пример #21
0
        public async Task AddVisibleWhenEmpty()
        {
            var source = new ObservableCollection <int>();

            using var view   = source.AsFilteredView(x => true);
            using var actual = view.SubscribeAll();
            view.Add(1);
            await Application.Current.Dispatcher.SimulateYield();

            CollectionAssert.AreEqual(new[] { 1 }, view);
            CollectionAssert.AreEqual(new[] { 1 }, source);
            var expected = new EventArgs[]
            {
                CachedEventArgs.CountPropertyChanged,
                CachedEventArgs.IndexerPropertyChanged,
                Diff.CreateAddEventArgs(1, 0),
            };

            CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);
        }
Пример #22
0
            public void Add()
            {
                var source = new ObservableCollection <Model <int> >();

                using (var view = source.AsMappingView(Vm.Create))
                {
                    using (var actual = view.SubscribeAll())
                    {
                        var model1 = Model.Create(1);
                        source.Add(model1);
                        CollectionAssert.AreEqual(source, view.Select(x => x.Model));
                        var expected = new List <EventArgs>
                        {
                            CachedEventArgs.CountPropertyChanged,
                            CachedEventArgs.IndexerPropertyChanged,
                            Diff.CreateAddEventArgs(view[0], 0)
                        };
                        CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);

                        source.Add(model1);
                        CollectionAssert.AreEqual(source, view.Select(x => x.Model));
                        expected.AddRange(new EventArgs[]
                        {
                            CachedEventArgs.CountPropertyChanged,
                            CachedEventArgs.IndexerPropertyChanged,
                            Diff.CreateAddEventArgs(view[1], 1)
                        });
                        CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);

                        source.Add(Model.Create(2));
                        CollectionAssert.AreEqual(source, view.Select(x => x.Model));
                        expected.AddRange(new EventArgs[]
                        {
                            CachedEventArgs.CountPropertyChanged,
                            CachedEventArgs.IndexerPropertyChanged,
                            Diff.CreateAddEventArgs(view[2], 2)
                        });
                        CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);
                    }
                }
            }
Пример #23
0
        public async Task ReplaceFilteredWithVisible()
        {
            var source = new ObservableCollection <int> {
                1
            };

            using var view    = source.AsFilteredView(x => x % 2 == 0);
            using var changes = view.SubscribeAll();
            source[0]         = 2;
            await Application.Current.Dispatcher.SimulateYield();

            CollectionAssert.AreEqual(new[] { 2 }, view);
            var expected = new EventArgs[]
            {
                CachedEventArgs.CountPropertyChanged,
                CachedEventArgs.IndexerPropertyChanged,
                Diff.CreateAddEventArgs(2, 0),
            };

            CollectionAssert.AreEqual(expected, changes, EventArgsComparer.Default);
        }
Пример #24
0
        public void AddVisibleWhenFiltered()
        {
            var ints         = new ObservableCollection <int>();
            var view         = ints.AsFilteredView(x => x % 2 == 0);
            var changes      = view.SubscribeAll();
            int countChanges = 0;

            view.ObservePropertyChanged(x => x.Count, false)
            .Subscribe(_ => countChanges++);
            Assert.AreEqual(0, countChanges);

            ints.Add(2);
            CollectionAssert.AreEqual(new[] { 2 }, view);
            var expected = new EventArgs[]
            {
                Notifier.CountPropertyChangedEventArgs,
                Notifier.IndexerPropertyChangedEventArgs,
                Diff.CreateAddEventArgs(2, 0)
            };

            CollectionAssert.AreEqual(expected, changes, EventArgsComparer.Default);
            Assert.AreEqual(1, countChanges);
        }
Пример #25
0
        public static void ObservesItem()
        {
            var source = new ObservableCollection <With <int> > {
                new With <int> {
                    Value = 1
                }
            };

            using var view   = source.AsReadOnlyFilteredView(x => x.Value > 1, x => x.ObserveValue(item => item.Value).Select(_ => (object?)null));
            using var actual = view.SubscribeAll();
            CollectionAssert.IsEmpty(view);
            CollectionAssert.IsEmpty(actual);

            source[0].Value = 2;
            CollectionAssert.AreEqual(source, view);
            var expected = new List <EventArgs>
            {
                CachedEventArgs.CountPropertyChanged,
                CachedEventArgs.IndexerPropertyChanged,
                Diff.CreateAddEventArgs(source[0], 0),
            };

            CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);
        }
Пример #26
0
        public void ManyOnNextsOneAdd()
        {
            var subject = new Subject <object>();

            _view.Triggers.Add(subject);
            _ints.Add(4);
            for (int i = 0; i < 10; i++)
            {
                subject.OnNext(null);
            }

            CollectionAssert.IsEmpty(_actualChanges);
            CollectionAssert.AreEqual(new[] { 1, 2, 3 }, _view);

            _scheduler.Start();

            var expected = new EventArgs[] { Notifier.CountPropertyChangedEventArgs, Notifier.IndexerPropertyChangedEventArgs, Diff.CreateAddEventArgs(4, 3) };

            CollectionAssert.AreEqual(expected, _actualChanges, EventArgsComparer.Default);
            CollectionAssert.AreEqual(new[] { 1, 2, 3, 4 }, _view);
        }
Пример #27
0
        public static void AddManyVisibleWhenFiltered()
        {
            var source    = new ObservableCollection <int>();
            var scheduler = new TestScheduler();

            using var view = source.AsReadOnlyFilteredView(x => x % 2 == 0, scheduler);
            scheduler.Start();
            CollectionAssert.IsEmpty(view);
            using var actual = view.SubscribeAll();
            source.Add(1);
            scheduler.Start();
            CollectionAssert.IsEmpty(view);
            var expected = new List <EventArgs>();

            CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);

            source.Add(2);
            scheduler.Start();
            CollectionAssert.AreEqual(new[] { 2 }, view);
            expected.AddRange(
                new EventArgs[]
            {
                CachedEventArgs.CountPropertyChanged,
                CachedEventArgs.IndexerPropertyChanged,
                Diff.CreateAddEventArgs(2, 0),
            });
            CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);

            source.Add(3);
            scheduler.Start();
            CollectionAssert.AreEqual(new[] { 2 }, view);
            CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);

            source.Add(4);
            scheduler.Start();
            CollectionAssert.AreEqual(new[] { 2, 4 }, view);
            expected.AddRange(
                new EventArgs[]
            {
                CachedEventArgs.CountPropertyChanged,
                CachedEventArgs.IndexerPropertyChanged,
                Diff.CreateAddEventArgs(4, 1),
            });
            CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);

            source.Add(5);
            scheduler.Start();
            CollectionAssert.AreEqual(new[] { 2, 4 }, view);
            CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);

            source.Add(6);
            scheduler.Start();
            CollectionAssert.AreEqual(new[] { 2, 4, 6 }, view);
            expected.AddRange(
                new EventArgs[]
            {
                CachedEventArgs.CountPropertyChanged,
                CachedEventArgs.IndexerPropertyChanged,
                Diff.CreateAddEventArgs(6, 2),
            });
            CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);
        }