Add macOS local playback engine

This commit is contained in:
diyaa
2026-05-28 14:05:15 +02:00
parent 183d5db4a9
commit 799c07b068
14 changed files with 1427 additions and 29 deletions
@@ -0,0 +1,86 @@
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")
}
}