feat: add GatedInserter, SwappableTranscriber and LevelSource
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
import Foundation
|
||||
import Testing
|
||||
@testable import SstCore
|
||||
|
||||
struct GatedInserterTests {
|
||||
@Test func insertsWhenAllowed() async throws {
|
||||
let inner = FakeInserter()
|
||||
try await GatedInserter(inner: inner, shouldInsert: { true }).insert("hallo")
|
||||
#expect(inner.inserted == ["hallo"])
|
||||
}
|
||||
|
||||
@Test func staysSilentWhenNotAllowed() async throws {
|
||||
let inner = FakeInserter()
|
||||
try await GatedInserter(inner: inner, shouldInsert: { false }).insert("hallo")
|
||||
#expect(inner.inserted.isEmpty)
|
||||
}
|
||||
|
||||
@Test func askedAtInsertionTimeNotAtCreation() async throws {
|
||||
let inner = FakeInserter()
|
||||
var allowed = false
|
||||
let gated = GatedInserter(inner: inner, shouldInsert: { allowed })
|
||||
allowed = true
|
||||
try await gated.insert("nu wel")
|
||||
#expect(inner.inserted == ["nu wel"])
|
||||
}
|
||||
}
|
||||
|
||||
struct SwappableTranscriberTests {
|
||||
@Test func throwsWithoutATranscriber() async {
|
||||
let swappable = SwappableTranscriber()
|
||||
#expect(!swappable.hasTranscriber)
|
||||
await #expect(throws: SwappableTranscriber.SwapError.self) {
|
||||
_ = try await swappable.transcribe([0])
|
||||
}
|
||||
}
|
||||
|
||||
@Test func delegatesIncludingTheVocabulary() async throws {
|
||||
let inner = FakeVocabularyTranscriber()
|
||||
inner.result = "klaar"
|
||||
let swappable = SwappableTranscriber(inner)
|
||||
#expect(try await swappable.transcribe([0], vocabulary: ["Anthropic"]) == "klaar")
|
||||
#expect(inner.vocabularies == [["Anthropic"]])
|
||||
#expect(try await swappable.transcribe([0]) == "klaar")
|
||||
#expect(inner.vocabularies == [["Anthropic"], []])
|
||||
}
|
||||
|
||||
@Test func swapReplacesTheTranscriber() async throws {
|
||||
let first = FakeVocabularyTranscriber(), second = FakeVocabularyTranscriber()
|
||||
first.result = "een"; second.result = "twee"
|
||||
let swappable = SwappableTranscriber(first)
|
||||
#expect(try await swappable.transcribe([0]) == "een")
|
||||
swappable.swap(to: second)
|
||||
#expect(try await swappable.transcribe([0]) == "twee")
|
||||
swappable.swap(to: nil)
|
||||
#expect(!swappable.hasTranscriber)
|
||||
}
|
||||
}
|
||||
|
||||
struct LevelSourceTests {
|
||||
@Test func startsSilentAndKeepsTheLatestValue() {
|
||||
let source = LevelSource()
|
||||
#expect(source.dbfs == AudioLevel.silenceFloorDbfs)
|
||||
source.update(-23)
|
||||
source.update(-18)
|
||||
#expect(source.dbfs == -18)
|
||||
source.reset()
|
||||
#expect(source.dbfs == AudioLevel.silenceFloorDbfs)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user