Files
OSGKeyboard/OSGKeyboardTests/DictationBridgeTests.swift
T
Rocky 7f059dbd45 feat: TypeWhisper Flow sessions, Phase 4 UX, and GitHub Pages privacy site
Migrate keyboard dictation to continuous Flow sessions with auto-start,
tap-to-toggle recording, 60s countdown, five-step onboarding, and App Group
IPC. Add docs/ GitHub Pages site with en/zh privacy policy for App Store compliance.
2026-06-19 18:05:50 +08:00

60 lines
2.2 KiB
Swift

// DictationBridgeTests.swift
// OSGKeyboardTests
import XCTest
@testable import OSGKeyboardShared
final class DictationBridgeTests: XCTestCase {
private func makeDefaults() -> UserDefaults {
let suite = "group.com.osgkeyboard.shared.tests.dictation.\(UUID().uuidString)"
let defaults = UserDefaults(suiteName: suite)!
defaults.removePersistentDomain(forName: suite)
return defaults
}
func testStoreAndConsumeTranscript() {
let defaults = makeDefaults()
DictationBridge.storePendingTranscript(" hello ", defaults: defaults)
let consumed = DictationBridge.consumePendingTranscript(defaults: defaults)
XCTAssertEqual(consumed, "hello")
XCTAssertNil(DictationBridge.consumePendingTranscript(defaults: defaults))
}
func testConsumeIgnoresExpiredTranscript() {
let defaults = makeDefaults()
DictationBridge.storePendingTranscript("stale", defaults: defaults)
// maxAge = 1ms, then delay to force expiry
usleep(2_000)
let consumed = DictationBridge.consumePendingTranscript(maxAge: 0.001, defaults: defaults)
XCTAssertNil(consumed)
}
func testStatusLifecycle() {
let defaults = makeDefaults()
DictationBridge.markRequested(defaults: defaults)
XCTAssertEqual(DictationBridge.currentStatus(defaults: defaults).status, .requested)
DictationBridge.setStatus(.recording, defaults: defaults)
XCTAssertEqual(DictationBridge.currentStatus(defaults: defaults).status, .recording)
DictationBridge.storePendingTranscript("ok", defaults: defaults)
XCTAssertEqual(DictationBridge.currentStatus(defaults: defaults).status, .done)
_ = DictationBridge.consumePendingTranscript(defaults: defaults)
XCTAssertEqual(DictationBridge.currentStatus(defaults: defaults).status, .idle)
}
func testStatusMessageAndTimestamp() {
let defaults = makeDefaults()
DictationBridge.setStatus(.error, message: "fail", defaults: defaults)
let snapshot = DictationBridge.currentStatus(defaults: defaults)
XCTAssertEqual(snapshot.status, .error)
XCTAssertEqual(snapshot.message, "fail")
XCTAssertGreaterThan(snapshot.updatedAt, 0)
}
}