test: add pcm streaming smoke

This commit is contained in:
Peter Steinberger
2025-12-30 12:27:06 +01:00
parent 9df22c0093
commit 66952a682d
2 changed files with 30 additions and 3 deletions

View File

@@ -89,9 +89,10 @@ public final class PCMStreamingAudioPlayer {
}
self.pendingBuffers += 1
self.player.scheduleBuffer(buffer) { [weak self] in
Task { @MainActor in
guard let self else { return }
Task.detached { [weak self] in
guard let self else { return }
await self.player.scheduleBuffer(buffer)
await MainActor.run {
self.pendingBuffers = max(0, self.pendingBuffers - 1)
if self.inputFinished && self.pendingBuffers == 0 {
self.finish(StreamingPlaybackResult(finished: true, interruptedAt: nil))

View File

@@ -0,0 +1,26 @@
import XCTest
@testable import ClawdisKit
final class PCMStreamingAudioPlayerTests: XCTestCase {
@MainActor
func testStopDuringPCMStreamReturnsInterruptedResult() async {
var continuation: AsyncThrowingStream<Data, Error>.Continuation?
let stream = AsyncThrowingStream<Data, Error> { cont in
continuation = cont
let samples = Data(repeating: 0, count: 44_100)
cont.yield(samples)
}
let task = Task { @MainActor in
await PCMStreamingAudioPlayer.shared.play(stream: stream, sampleRate: 44_100)
}
try? await Task.sleep(nanoseconds: 120_000_000)
let interruptedAt = PCMStreamingAudioPlayer.shared.stop()
continuation?.finish()
let result = await task.value
XCTAssertFalse(result.finished)
XCTAssertNotNil(interruptedAt)
}
}