public void TestShuffle()
        {
            var queue = new LavalinkQueue();

            Assert.Empty(queue);

            queue.Shuffle();

            for (var i = 0; i < 10; i++)
            {
                queue.Add(DummyTrack);
                queue.Add(DummyTrack2);
            }

            Assert.Equal(20, queue.Count);
            Assert.Equal(DummyTrack, queue[0]);
            Assert.Equal(DummyTrack2, queue[1]);
            Assert.Equal(DummyTrack, queue[2]);
            Assert.Equal(DummyTrack2, queue[3]);

            queue.Shuffle();

            Assert.True(queue[0] != DummyTrack ||
                        queue[1] != DummyTrack2 ||
                        queue[2] != DummyTrack ||
                        queue[3] != DummyTrack2);
        }
 /// <summary>
 ///     Initializes a new instance of the <see cref="QueuedLavalinkPlayerV2"/> class.
 /// </summary>
 public QueuedLavalinkPlayerV2()
 {
     Queue            = new LavalinkQueue();
     DisconnectOnStop = false;
     // use own disconnect on stop logic
     _disconnectOnStop = DisconnectOnStop;
 }
        public void TestQueueEmpty()
        {
            var queue = new LavalinkQueue();

            Assert.Empty(queue);
            Assert.True(queue.IsEmpty);
        }
        public void TestNullContains()
        {
            var queue = new LavalinkQueue();

            Assert.Empty(queue);
            Assert.Throws <ArgumentNullException>(() => queue.Contains(null));
        }
        public void TestTryDequeue()
        {
            var queue = new LavalinkQueue();

            Assert.Empty(queue);
            Assert.False(queue.TryDequeue(out var track));
            Assert.Equal(default, track);
        public void TestInsert()
        {
            var queue = new LavalinkQueue();

            Assert.Empty(queue);

            queue.Insert(0, DummyTrack);
            Assert.Equal(0, queue.IndexOf(DummyTrack));
        }
        public void TestContains()
        {
            var queue = new LavalinkQueue();

            Assert.Empty(queue);
            Assert.DoesNotContain(DummyTrack, queue);

            queue.Add(DummyTrack);

            Assert.Contains(DummyTrack, queue);
        }
        public void TestIndexOf()
        {
            var queue = new LavalinkQueue();

            Assert.Empty(queue);
            Assert.Throws <ArgumentNullException>(() => queue.IndexOf(null));
            Assert.Equal(-1, queue.IndexOf(DummyTrack));

            queue.Add(DummyTrack);

            Assert.Equal(0, queue.IndexOf(DummyTrack));
        }
        public void TestRemove()
        {
            var queue = new LavalinkQueue();

            Assert.Empty(queue);

            queue.Add(DummyTrack);

            Assert.Single(queue);
            Assert.True(queue.Remove(DummyTrack));
            Assert.Empty(queue);
        }
        public void TestDequeue()
        {
            var queue = new LavalinkQueue();

            Assert.Empty(queue);
            Assert.Throws <InvalidOperationException>(() => queue.Dequeue());

            queue.Add(DummyTrack);

            Assert.Equal(DummyTrack, queue.Dequeue());
            Assert.Empty(queue);
        }
        public void TestQueueIndexGetSet()
        {
            var queue = new LavalinkQueue();

            Assert.Empty(queue);
            Assert.Throws <ArgumentOutOfRangeException>(() => queue[0]);
            Assert.Throws <ArgumentOutOfRangeException>(() => queue[0] = DummyTrack);

            queue.Add(DummyTrack);

            Assert.Same(DummyTrack, queue[0]);
            Assert.Throws <ArgumentNullException>(() => queue[0] = null);
        }
        public void TestQueueTracksSet()
        {
            var queue = new LavalinkQueue();

            Assert.Empty(queue);

            queue.Tracks = new[] { DummyTrack };

            Assert.NotEmpty(queue);

            queue.Tracks = new LavalinkTrack[0];

            Assert.Empty(queue);
        }
        public void TestAddRange()
        {
            var queue = new LavalinkQueue();

            Assert.Empty(queue);

            queue.AddRange(new List <LavalinkTrack> {
                DummyTrack, DummyTrack2
            });

            Assert.NotEmpty(queue);
            Assert.Same(DummyTrack, queue[0]);
            Assert.Same(DummyTrack2, queue[1]);
        }
        public void TestRemoveAll()
        {
            var queue = new LavalinkQueue();

            Assert.Empty(queue);

            queue.Add(DummyTrack);
            queue.Add(DummyTrack2);

            Assert.Equal(2, queue.Count);
            Assert.Equal(1, queue.RemoveAll(track => track == DummyTrack2));
            Assert.Equal(1, queue.RemoveAll(trakc => true));
            Assert.Empty(queue);
        }
        public void TestRemoveAt()
        {
            var queue = new LavalinkQueue();

            Assert.Empty(queue);

            queue.Add(DummyTrack);
            queue.Add(DummyTrack);

            Assert.Equal(2, queue.Count);

            queue.RemoveAt(0);

            Assert.Single(queue);
        }
        public void TestQueueTracksGet()
        {
            var queue  = new LavalinkQueue();
            var tracks = new[] { DummyTrack };

            Assert.Empty(queue);

            queue.Tracks = tracks;

            Assert.NotEmpty(queue);

            Assert.Equal(queue.Tracks, tracks);

            // should be a copy of the tracks
            Assert.NotSame(queue.Tracks, tracks);
        }
        public void TestQueueAdd()
        {
            var queue = new LavalinkQueue();

            Assert.Empty(queue);

            queue.Add(DummyTrack);

            Assert.NotEmpty(queue);
            Assert.Single(queue);

            queue.Add(DummyTrack);

            Assert.Equal(2, queue.Count);

            queue.Clear();

            Assert.Empty(queue);
        }
        public void TestRemoveRange()
        {
            var queue = new LavalinkQueue();

            Assert.Empty(queue);

            queue.Add(DummyTrack);
            queue.Add(DummyTrack);
            queue.Add(DummyTrack2);
            queue.Add(DummyTrack2);

            Assert.NotEmpty(queue);

            queue.RemoveRange(1, 2);

            Assert.NotEmpty(queue);
            Assert.Same(DummyTrack, queue[0]);
            Assert.Same(DummyTrack2, queue[1]);
        }
        public void TestQueueClear()
        {
            var queue = new LavalinkQueue();

            Assert.Empty(queue);

            queue.Add(DummyTrack);

            Assert.NotEmpty(queue);
            Assert.Equal(1, queue.Clear());
            Assert.Empty(queue);

            queue.Add(DummyTrack);

            Assert.NotEmpty(queue);

            ((ICollection <LavalinkTrack>)queue).Clear();

            Assert.Empty(queue);
        }
        public void TestDistinct()
        {
            var queue = new LavalinkQueue();

            Assert.Empty(queue);

            queue.Distinct();

            Assert.Empty(queue);

            queue.Add(DummyTrack);
            queue.Add(DummyTrack);
            queue.Add(DummyTrack);
            queue.Add(DummyTrack);

            Assert.Equal(4, queue.Count);

            queue.Distinct();

            Assert.Single(queue);
        }
        public void TestReadableEmpty()
        {
            var queue = new LavalinkQueue();

            Assert.False(queue.IsReadOnly);
        }