7f059dbd45
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.
60 lines
2.2 KiB
Swift
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)
|
|
}
|
|
}
|