public void PreviousAndNextDuringAddRemoveItems()
        {
            var manager = new PlaylistManager();
            manager.AddAndReplaceItems(threeItems);
            
            manager.CurrentItem = threeItems[0];
            manager.NextItem();

            Assert.IsTrue(manager.CanNextItem);
            AssertHelper.PropertyChangedEvent(manager, x => x.CanNextItem, () => manager.RemoveItems(new[] { threeItems[2] }));
            Assert.IsFalse(manager.CanNextItem);
            AssertHelper.PropertyChangedEvent(manager, x => x.CanNextItem, () => manager.AddItems(new[] { threeItems[2] }));
            Assert.IsTrue(manager.CanNextItem);

            manager.NextItem();
            Assert.AreEqual(threeItems[2], manager.CurrentItem);
            manager.PreviousItem();
            Assert.AreEqual(threeItems[1], manager.CurrentItem);

            Assert.IsTrue(manager.CanPreviousItem);
            AssertHelper.PropertyChangedEvent(manager, x => x.CanPreviousItem, () => manager.RemoveItems(new[] { threeItems[0] }));
            Assert.IsFalse(manager.CanPreviousItem);
        }
        public void AddRemoveAndMoveItems()
        {
            var manager = new PlaylistManager();
            Assert.AreEqual(0, manager.Items.Count);

            manager.AddItems(threeItems);
            Assert.AreEqual(3, manager.Items.Count);

            manager.RemoveItems(new[] { threeItems[2] });
            Assert.AreEqual(2, manager.Items.Count);

            manager.AddAndReplaceItems(threeItems);
            Assert.AreEqual(3, manager.Items.Count);

            manager.MoveItems(2, new[] { manager.Items[0] });
            Assert.IsTrue(manager.Items.SequenceEqual(new[] { threeItems[1], threeItems[2], threeItems[0] }));
        }