velody/packages/apple/VelodyPlayback/Tests/VelodyPlaybackTests/PlaybackQueueTests.swift
2026-05-28 14:05:15 +02:00

87 lines
2.9 KiB
Swift

import XCTest
@testable import VelodyPlayback
final class PlaybackQueueTests: XCTestCase {
func testQueueStartsWithoutCurrentTrackSelection() {
let queue = PlaybackQueue(trackIDs: ["a", "b", "c"])
XCTAssertEqual(queue.catalogTrackIDs, ["a", "b", "c"])
XCTAssertEqual(queue.queuedTrackIDs, ["a", "b", "c"])
XCTAssertNil(queue.currentTrackID)
XCTAssertEqual(queue.nextTrackID(), "a")
}
func testSelectingTrackAndAdvancingUsesQueueOrder() {
var queue = PlaybackQueue(trackIDs: ["a", "b", "c"])
queue.selectTrack("b")
XCTAssertEqual(queue.currentTrackID, "b")
XCTAssertEqual(queue.nextTrackID(), "c")
XCTAssertEqual(queue.previousTrackID(), "a")
XCTAssertEqual(queue.advanceToNextTrack(), "c")
XCTAssertEqual(queue.currentTrackID, "c")
}
func testShuffleCanUsePersistedQueueOrderWhileKeepingSameTrackSet() {
var queue = PlaybackQueue(trackIDs: ["a", "b", "c", "d"])
queue.selectTrack("c")
queue.setShuffleEnabled(true, queuedTrackIDs: ["c", "a", "d", "b"])
XCTAssertTrue(queue.isShuffleEnabled)
XCTAssertEqual(queue.currentTrackID, "c")
XCTAssertEqual(queue.queuedTrackIDs, ["c", "a", "d", "b"])
queue.setShuffleEnabled(false)
XCTAssertFalse(queue.isShuffleEnabled)
XCTAssertEqual(queue.queuedTrackIDs, ["a", "b", "c", "d"])
XCTAssertEqual(queue.currentTrackID, "c")
}
func testRepeatAllWrapsAroundQueueBoundaries() {
var queue = PlaybackQueue(trackIDs: ["a", "b", "c"])
queue.selectTrack("c")
queue.setRepeatMode(.all)
XCTAssertEqual(queue.nextTrackID(), "a")
XCTAssertEqual(queue.advanceToNextTrack(), "a")
XCTAssertEqual(queue.currentTrackID, "a")
XCTAssertEqual(queue.previousTrackID(), "c")
}
func testRepeatOneKeepsCurrentTrackForNextAndPrevious() {
var queue = PlaybackQueue(trackIDs: ["a", "b", "c"])
queue.selectTrack("b")
queue.setRepeatMode(.one)
XCTAssertEqual(queue.nextTrackID(), "b")
XCTAssertEqual(queue.previousTrackID(), "b")
XCTAssertEqual(queue.advanceToNextTrack(), "b")
XCTAssertEqual(queue.moveToPreviousTrack(), "b")
}
func testReplacingTrackIDsDropsRemovedTracksFromQueue() {
var queue = PlaybackQueue(
trackIDs: ["a", "b", "c"],
currentTrackID: "b",
queuedTrackIDs: ["b", "c", "a"],
isShuffleEnabled: true,
repeatMode: .all
)
queue.replaceTrackIDs(
["a", "c", "d"],
currentTrackID: queue.currentTrackID,
queuedTrackIDs: queue.queuedTrackIDs
)
XCTAssertEqual(queue.catalogTrackIDs, ["a", "c", "d"])
XCTAssertEqual(queue.queuedTrackIDs, ["c", "a", "d"])
XCTAssertNil(queue.currentTrackID)
XCTAssertEqual(queue.nextTrackID(), "c")
}
}