Files
wehub-resource-sync ead81af521
Deploy to GitHub Pages / deploy (push) Failing after 0s
CI / go (push) Has been cancelled
CI / build (darwin, macos-14) (push) Has been cancelled
CI / build (windows, windows-2025) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:31:13 +08:00

121 lines
2.4 KiB
Go

package playlist
import "testing"
func TestQueueAndDequeue(t *testing.T) {
p := makePlaylist(5, false)
p.Queue(2)
p.Queue(4)
if p.QueueLen() != 2 {
t.Fatalf("QueueLen() = %d, want 2", p.QueueLen())
}
// Dequeue first item
if !p.Dequeue(2) {
t.Fatal("Dequeue(2) = false, want true")
}
if p.QueueLen() != 1 {
t.Fatalf("QueueLen() after dequeue = %d, want 1", p.QueueLen())
}
// Dequeue non-existent
if p.Dequeue(2) {
t.Fatal("Dequeue(2) again = true, want false")
}
}
func TestQueuePosition(t *testing.T) {
p := makePlaylist(5, false)
p.Queue(1)
p.Queue(3)
p.Queue(4)
if pos := p.QueuePosition(1); pos != 1 {
t.Errorf("QueuePosition(1) = %d, want 1", pos)
}
if pos := p.QueuePosition(3); pos != 2 {
t.Errorf("QueuePosition(3) = %d, want 2", pos)
}
if pos := p.QueuePosition(4); pos != 3 {
t.Errorf("QueuePosition(4) = %d, want 3", pos)
}
if pos := p.QueuePosition(0); pos != 0 {
t.Errorf("QueuePosition(0) = %d, want 0 (not queued)", pos)
}
}
func TestQueueTracks(t *testing.T) {
p := makePlaylist(5, false)
p.Queue(0) // A
p.Queue(2) // C
p.Queue(4) // E
qt := p.QueueTracks()
if len(qt) != 3 {
t.Fatalf("QueueTracks len = %d, want 3", len(qt))
}
if qt[0].Title != "A" || qt[1].Title != "C" || qt[2].Title != "E" {
t.Errorf("QueueTracks = [%s, %s, %s], want [A, C, E]",
qt[0].Title, qt[1].Title, qt[2].Title)
}
}
func TestClearQueue(t *testing.T) {
p := makePlaylist(3, false)
p.Queue(0)
p.Queue(1)
p.ClearQueue()
if p.QueueLen() != 0 {
t.Fatalf("QueueLen() after clear = %d, want 0", p.QueueLen())
}
}
func TestRemoveQueueAt(t *testing.T) {
p := makePlaylist(5, false)
p.Queue(0) // A
p.Queue(2) // C
p.Queue(4) // E
// Remove middle entry (C)
p.RemoveQueueAt(1)
qt := p.QueueTracks()
if len(qt) != 2 {
t.Fatalf("QueueTracks after remove = %d, want 2", len(qt))
}
if qt[0].Title != "A" || qt[1].Title != "E" {
t.Errorf("QueueTracks = [%s, %s], want [A, E]", qt[0].Title, qt[1].Title)
}
}
func TestRemoveQueueAtBounds(t *testing.T) {
p := makePlaylist(3, false)
p.Queue(0)
// Out of bounds should be no-op
p.RemoveQueueAt(-1)
p.RemoveQueueAt(5)
if p.QueueLen() != 1 {
t.Fatalf("QueueLen() = %d, want 1", p.QueueLen())
}
}
func TestQueueBoundsCheck(t *testing.T) {
p := makePlaylist(3, false)
// Queue out-of-bounds track indices
p.Queue(-1)
p.Queue(5)
if p.QueueLen() != 0 {
t.Fatalf("QueueLen() = %d, want 0 (invalid indices ignored)", p.QueueLen())
}
}