119 lines
2.8 KiB
Go
119 lines
2.8 KiB
Go
package music
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/disgoorg/disgolink/v4/lavalink"
|
|
)
|
|
|
|
func TestQueuePushPop(t *testing.T) {
|
|
q := NewQueue()
|
|
|
|
if _, ok := q.Pop(); ok {
|
|
t.Fatal("expected empty queue to return ok=false")
|
|
}
|
|
|
|
first := lavalink.Track{Info: lavalink.TrackInfo{Title: "first"}}
|
|
second := lavalink.Track{Info: lavalink.TrackInfo{Title: "second"}}
|
|
|
|
q.Push(first)
|
|
q.Push(second)
|
|
|
|
if got := q.Len(); got != 2 {
|
|
t.Fatalf("expected length 2, got %d", got)
|
|
}
|
|
|
|
track, ok := q.Pop()
|
|
if !ok || track.Info.Title != "first" {
|
|
t.Fatalf("expected first track, got %+v ok=%v", track, ok)
|
|
}
|
|
|
|
track, ok = q.Pop()
|
|
if !ok || track.Info.Title != "second" {
|
|
t.Fatalf("expected second track, got %+v ok=%v", track, ok)
|
|
}
|
|
|
|
if _, ok := q.Pop(); ok {
|
|
t.Fatal("expected queue to be empty after popping all tracks")
|
|
}
|
|
}
|
|
|
|
func TestQueueClear(t *testing.T) {
|
|
q := NewQueue()
|
|
q.Push(lavalink.Track{})
|
|
q.Push(lavalink.Track{})
|
|
|
|
q.Clear()
|
|
|
|
if got := q.Len(); got != 0 {
|
|
t.Fatalf("expected length 0 after clear, got %d", got)
|
|
}
|
|
}
|
|
|
|
func TestQueueRemoveAt(t *testing.T) {
|
|
q := NewQueue()
|
|
q.Push(lavalink.Track{Info: lavalink.TrackInfo{Title: "first"}})
|
|
q.Push(lavalink.Track{Info: lavalink.TrackInfo{Title: "second"}})
|
|
q.Push(lavalink.Track{Info: lavalink.TrackInfo{Title: "third"}})
|
|
|
|
track, ok := q.RemoveAt(1)
|
|
if !ok || track.Info.Title != "second" {
|
|
t.Fatalf("expected to remove second track, got %+v ok=%v", track, ok)
|
|
}
|
|
|
|
if got := q.Len(); got != 2 {
|
|
t.Fatalf("expected length 2 after removal, got %d", got)
|
|
}
|
|
|
|
list := q.List()
|
|
if list[0].Info.Title != "first" || list[1].Info.Title != "third" {
|
|
t.Fatalf("unexpected queue order after removal: %+v", list)
|
|
}
|
|
|
|
if _, ok := q.RemoveAt(5); ok {
|
|
t.Fatal("expected out-of-range removal to return ok=false")
|
|
}
|
|
if _, ok := q.RemoveAt(-1); ok {
|
|
t.Fatal("expected negative index removal to return ok=false")
|
|
}
|
|
}
|
|
|
|
func TestQueueShuffle(t *testing.T) {
|
|
q := NewQueue()
|
|
for i := 0; i < 5; i++ {
|
|
q.Push(lavalink.Track{Info: lavalink.TrackInfo{Title: string(rune('a' + i))}})
|
|
}
|
|
|
|
if count := q.Shuffle(); count != 5 {
|
|
t.Fatalf("expected shuffle to report 5 tracks, got %d", count)
|
|
}
|
|
|
|
if got := q.Len(); got != 5 {
|
|
t.Fatalf("expected length to stay 5 after shuffle, got %d", got)
|
|
}
|
|
|
|
seen := make(map[string]bool)
|
|
for _, track := range q.List() {
|
|
seen[track.Info.Title] = true
|
|
}
|
|
for i := 0; i < 5; i++ {
|
|
title := string(rune('a' + i))
|
|
if !seen[title] {
|
|
t.Fatalf("expected shuffled queue to still contain %q", title)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestQueueListReturnsCopy(t *testing.T) {
|
|
q := NewQueue()
|
|
q.Push(lavalink.Track{Info: lavalink.TrackInfo{Title: "only"}})
|
|
|
|
list := q.List()
|
|
list[0].Info.Title = "mutated"
|
|
|
|
track, _ := q.Pop()
|
|
if track.Info.Title != "only" {
|
|
t.Fatalf("expected internal queue to be unaffected by mutation of returned list, got %q", track.Info.Title)
|
|
}
|
|
}
|