public void Constructor_does_not_raise_an_exception()
        {
            // Act
            var sut = new EventRaisingCollection <Person> (_source);

            // Assert
            Assert.NotNull(sut);
        }
        public void Remove_triggers_CollectionChanged()
        {
            var sut = new EventRaisingCollection <Person> (_source);
            NotifyCollectionChangedEventArgs capturedArgs = default;

            void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs args) => capturedArgs = args;

            sut.CollectionChanged += OnCollectionChanged;

            sut.Remove(SourceCollection.First());

            sut.CollectionChanged -= OnCollectionChanged;

            Assert.That(capturedArgs, Is.Not.Null);
        }
        public void Remove_triggers_both_remove_events()
        {
            // Arrange
            var sut = new EventRaisingCollection <Person> (_source);

            sut.BeforeRemove += RecordingCallbackOne;
            sut.AfterRemove  += RecordingCallbackTwo;

            // Act
            sut.Remove(SourceCollection.First());

            sut.BeforeRemove -= RecordingCallbackOne;
            sut.AfterRemove  -= RecordingCallbackTwo;

            // Assert
            Assert.IsTrue(CallbackOneCalled, "Callback one");
            Assert.IsTrue(CallbackTwoCalled, "Callback two");
        }
        public void Add_triggers_both_add_events()
        {
            // Arrange
            var sut = new EventRaisingCollection <Person> (_source);

            sut.BeforeAdd += RecordingCallbackOne;
            sut.AfterAdd  += RecordingCallbackTwo;

            // Act
            sut.Add(new Person());

            sut.BeforeRemove -= RecordingCallbackOne;
            sut.AfterRemove  -= RecordingCallbackTwo;

            // Assert
            Assert.IsTrue(CallbackOneCalled, "Callback one");
            Assert.IsTrue(CallbackTwoCalled, "Callback two");
        }
        public void Clear_triggers_both_remove_events_for_every_item()
        {
            // Arrange
            int beforeRemoveCalls = 0, afterRemoveCalls = 0;
            var sut = new EventRaisingCollection <Person> (_source);

            EventHandler <BeforeModifyEventArgs <Person> > incrementBefore = (sender, e) => beforeRemoveCalls++;
            EventHandler <AfterModifyEventArgs <Person> >  incrementAfter = (sender, e) => afterRemoveCalls++;

            sut.BeforeRemove += incrementBefore;
            sut.AfterRemove  += incrementAfter;

            // Act
            sut.Clear();

            sut.BeforeRemove -= incrementBefore;
            sut.AfterRemove  -= incrementAfter;

            // Assert
            Assert.AreEqual(SourceCollection.Count, beforeRemoveCalls, "Before remove");
            Assert.AreEqual(SourceCollection.Count, afterRemoveCalls, "After remove");
        }