public void ManyOnNextsOneReset()
            {
                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.Clear();
                            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,
                                CachedEventArgs.NotifyCollectionReset
                            };
                            CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);
                            CollectionAssert.IsEmpty(view);
                        }
                    }
                }
            }
Example #2
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 void Repro1()
            {
                var source = new ObservableCollection <int> {
                    1, 2, 3
                };
                var scheduler = new TestScheduler();
                var max       = 5;

                using (var trigger = new Subject <object>())
                {
                    // ReSharper disable once AccessToModifiedClosure
                    using (var view = new FilteredView <int>(source, x => x < max, TimeSpan.FromMilliseconds(10), scheduler, leaveOpen: true, triggers: trigger))
                    {
                        using (var actual = view.SubscribeAll())
                        {
                            CollectionAssert.AreEqual(new[] { 1, 2, 3 }, view);
                            CollectionAssert.IsEmpty(actual);

                            max = 2;
                            trigger.OnNext(null);
                            scheduler.Start();

                            var expected = new List <EventArgs>
                            {
                                CachedEventArgs.CountPropertyChanged,
                                CachedEventArgs.IndexerPropertyChanged,
                                CachedEventArgs.NotifyCollectionReset,
                            };
                            CollectionAssert.AreEqual(new[] { 1 }, view);
                            CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);

                            for (var i = 0; i < 10; i++)
                            {
                                source.Add(i);
                            }

                            scheduler.Start();
                            CollectionAssert.AreEqual(new[] { 1, 0, 1 }, view);
                            expected.AddRange(new EventArgs[]
                            {
                                CachedEventArgs.CountPropertyChanged,
                                CachedEventArgs.IndexerPropertyChanged,
                                CachedEventArgs.NotifyCollectionReset,
                            });
                            CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);

                            source.Clear();
                            scheduler.Start();
                            CollectionAssert.IsEmpty(view);
                            expected.AddRange(new EventArgs[]
                            {
                                CachedEventArgs.CountPropertyChanged,
                                CachedEventArgs.IndexerPropertyChanged,
                                CachedEventArgs.NotifyCollectionReset,
                            });
                            CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);
                        }
                    }
                }
            }
Example #4
0
        public void Clear()
        {
            var source = new ObservableCollection <int> {
                1, 2, 3
            };

            using var expected = source.SubscribeAll();
            var scheduler = new TestScheduler();

            using var view   = new FilteredView <int>(source, x => true, TimeSpan.FromMilliseconds(10), scheduler, leaveOpen: true);
            using var actual = view.SubscribeAll();
            source.Clear();
            CollectionAssert.IsEmpty(actual);
            scheduler.Start();
            CollectionAssert.AreEqual(source, view);
            CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);
        }
            public void UpdatesAndNotifiesOnCollectionChanged()
            {
                var ints = new ObservableCollection <int> {
                    1, 2, 3
                };

                using (var expected = ints.SubscribeAll())
                {
                    var scheduler = new TestScheduler();
                    using (var view = new FilteredView <int>(ints, x => true, TimeSpan.FromMilliseconds(10), scheduler, leaveOpen: true))
                    {
                        using (var actual = view.SubscribeAll())
                        {
                            ints.Add(4);
                            CollectionAssert.IsEmpty(actual);
                            scheduler.Start();
                            CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);
                        }
                    }
                }
            }
Example #6
0
        public void Repro3()
        {
            var source = new ObservableCollection <int> {
                1, 2, 3
            };
            var scheduler = new TestScheduler();
            var max       = 5;

            using var trigger = new Subject <object?>();
            //// ReSharper disable once AccessToModifiedClosure
            using var view   = new FilteredView <int>(source, x => x < max, TimeSpan.Zero, scheduler, leaveOpen: true, triggers: trigger);
            using var actual = view.SubscribeAll();
            CollectionAssert.AreEqual(new[] { 1, 2, 3 }, view);
            CollectionAssert.IsEmpty(actual);

            max = 2;
            trigger.OnNext(null);
            scheduler.Start();
            var expected = new List <EventArgs>
            {
                CachedEventArgs.CountPropertyChanged,
                CachedEventArgs.IndexerPropertyChanged,
                CachedEventArgs.NotifyCollectionReset,
            };

            CollectionAssert.AreEqual(new[] { 1 }, view);
            CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);

            source.Clear();
            view.Refresh();
            scheduler.Start();
            CollectionAssert.IsEmpty(view);
            expected.AddRange(new EventArgs[]
            {
                CachedEventArgs.CountPropertyChanged,
                CachedEventArgs.IndexerPropertyChanged,
                Diff.CreateRemoveEventArgs(1, 0),
            });
            CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);
        }
Example #7
0
        public void Move()
        {
            var source = new ObservableCollection <int> {
                1, 2, 3
            };
            var scheduler = new TestScheduler();

            using var view   = new FilteredView <int>(source, x => true, TimeSpan.FromMilliseconds(10), scheduler, leaveOpen: true);
            using var actual = view.SubscribeAll();
            source.Move(0, 2);
            CollectionAssert.IsEmpty(actual);
            scheduler.Start();
            CollectionAssert.AreEqual(source, view);
            var expected = new List <EventArgs>
            {
                CachedEventArgs.CountPropertyChanged,
                CachedEventArgs.IndexerPropertyChanged,
                CachedEventArgs.NotifyCollectionReset,
            };

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