public void RemoveAt_EventsRaisedWithCorrectArgumentsAndItemRemoved()
        {
            int index = 0, item = 3;

            var subject = new NotifyingList <int> {
                3
            };

            subject.Removing += (sender, e) =>
            {
                Assert.That(e.Index, Is.EqualTo(index));
                Assert.That(e.Value, Is.EqualTo(item));
                Assert.That(e.IsCancelled, Is.False);
            };

            subject.Removed += (sender, e) =>
            {
                Assert.That(e.Index, Is.EqualTo(index));
                Assert.That(e.Value, Is.EqualTo(item));
            };

            subject.RemoveAt(0);

            Assert.That(subject.Count, Is.EqualTo(0));
        }
        public void RemoveAt_OutOfBounds_Exception()
        {
            var subject = new NotifyingList <int> {
                3
            };

            Assert.That(() => subject.RemoveAt(2), Throws.InstanceOf <ArgumentOutOfRangeException>());
        }
        public void RemoveAt_EventsRaised()
        {
            bool removingRaised = false, removedRaised = false;

            var subject = new NotifyingList <int> {
                3
            };

            subject.Removing += (sender, args) => removingRaised = true;
            subject.Removed  += (sender, args) => removedRaised = true;

            subject.RemoveAt(0);

            Assert.That(removingRaised, Is.True);
            Assert.That(removedRaised, Is.True);
        }
        public void RemoveAt_CanCancelDeletion()
        {
            bool removedRaised = false;

            var subject = new NotifyingList <int> {
                3
            };

            subject.Removing += ((sender, e) => e.Cancel());

            subject.Removed += delegate
            {
                removedRaised = true;
            };

            subject.RemoveAt(0);
            Assert.That(removedRaised, Is.False);
            Assert.That(subject[0], Is.EqualTo(3));
        }