Expand onboarding and adaptive keyboard intelligence

Add resilient usage analytics, OOBE gateway flows, clipboard semantic ranking, purchase recovery, style learning, and managed current-information search.
This commit is contained in:
Rocky
2026-08-22 16:33:18 +08:00
parent ac374631ae
commit e5a83843db
162 changed files with 23574 additions and 1013 deletions
@@ -0,0 +1,87 @@
// RimeFrequentTermStoreTests.swift
// OSGKeyboardTests
@testable import OSGKeyboardShared
import XCTest
final class RimeFrequentTermStoreTests: XCTestCase {
private var defaults: UserDefaults!
private var suiteName: String!
override func setUpWithError() throws {
suiteName = "RimeFrequentTermStoreTests.\(UUID().uuidString)"
defaults = try XCTUnwrap(UserDefaults(suiteName: suiteName))
}
override func tearDownWithError() throws {
defaults.removePersistentDomain(forName: suiteName)
defaults = nil
suiteName = nil
}
func testRepeatedRimeCommitBecomesSuggestion() {
let store = RimeFrequentTermStore(defaults: defaults)
store.recordCommittedText("少数派")
XCTAssertTrue(store.suggestions(excludingPersonalTerms: []).isEmpty)
store.recordCommittedText("少数派")
let suggestion = store.suggestions(excludingPersonalTerms: []).first
XCTAssertEqual(suggestion?.term, "少数派")
XCTAssertEqual(suggestion?.commitCount, 2)
}
func testSuggestionsExcludeExistingDictionaryTermsAndCommonWords() {
let store = RimeFrequentTermStore(defaults: defaults)
for _ in 0..<4 {
store.recordCommittedText("我们")
store.recordCommittedText("飞书文档")
store.recordCommittedText("微信读书")
}
let suggestions = store.suggestions(
excludingPersonalTerms: ["飞书文档"]
)
XCTAssertEqual(suggestions.map(\.term), ["微信读书"])
}
func testSuggestionsRankFrequencyBeforeRecency() {
let store = RimeFrequentTermStore(defaults: defaults)
let earlier = Date(timeIntervalSince1970: 100)
let later = Date(timeIntervalSince1970: 200)
for _ in 0..<3 {
store.recordCommittedText("光锥之内", at: earlier)
}
for _ in 0..<2 {
store.recordCommittedText("即刻笔记", at: later)
}
XCTAssertEqual(
store.suggestions(excludingPersonalTerms: []).map(\.term),
["光锥之内", "即刻笔记"]
)
}
func testPunctuationAndSingleCharactersAreIgnored() {
let store = RimeFrequentTermStore(defaults: defaults)
for _ in 0..<3 {
store.recordCommittedText("")
store.recordCommittedText("你好!")
store.recordCommittedText("\n")
}
XCTAssertTrue(store.suggestions(excludingPersonalTerms: []).isEmpty)
}
func testClearRemovesLearnedSuggestions() {
let store = RimeFrequentTermStore(defaults: defaults)
store.recordCommittedText("少数派")
store.recordCommittedText("少数派")
XCTAssertFalse(store.suggestions(excludingPersonalTerms: []).isEmpty)
store.clear()
XCTAssertTrue(store.suggestions(excludingPersonalTerms: []).isEmpty)
}
}