public void Test_ConcurrentObservableCollection_Reset() { var initial = Enumerable.Range(0, 100).ToList(); var toAdd = Enumerable.Range(100, 100).ToList(); var collection = new ConcurrentObservableCollection <int>(); collection.AddRange(initial); Assert.AreEqual(100, collection.Count); // Record all the collection changed events List <(object, NotifyCollectionChangedEventArgs)> returnedList = new List <(object, NotifyCollectionChangedEventArgs)>(); collection.CollectionChanged += (s, e) => returnedList.Add((s, e)); collection.Reset(toAdd); // Check two collection changed events were fired Assert.AreEqual(2, returnedList.Count); (var returnedObject0, var returnedArgs0) = returnedList[0]; (var returnedObject1, var returnedArgs1) = returnedList[1]; Assert.IsNotNull(returnedObject0); Assert.IsNotNull(returnedArgs0); Assert.IsNotNull(returnedObject1); Assert.IsNotNull(returnedArgs1); Assert.AreEqual(returnedObject0, collection); Assert.AreEqual(returnedObject1, collection); Assert.AreEqual(NotifyCollectionChangedAction.Remove, returnedArgs0.Action); Assert.AreEqual(NotifyCollectionChangedAction.Add, returnedArgs1.Action); Assert.IsNull(returnedArgs0.NewItems); Assert.IsNotNull(returnedArgs0.OldItems); Assert.AreEqual(initial.Count(), returnedArgs0.OldItems.Count); Assert.IsTrue(CollectionsAreEqual(initial, returnedArgs0.OldItems)); Assert.IsNull(returnedArgs1.OldItems); Assert.IsNotNull(returnedArgs1.NewItems); Assert.AreEqual(toAdd.Count(), returnedArgs1.NewItems.Count); Assert.IsTrue(CollectionsAreEqual(toAdd, returnedArgs1.NewItems)); }