121 lines
2.4 KiB
Go
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())
|
|
}
|
|
}
|