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.
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
// 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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user