chore(typing): snapshot local pinyin WIP before syncing cloud branch
Preserve the in-progress local typing/pinyin implementation so feat/pinyin can safely reset to origin/feat/pinyin (cloud English + Chinese typing).
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
// RimeSchemaGeneratorTests.swift
|
||||
// OSGKeyboard · Ext unit tests
|
||||
|
||||
import XCTest
|
||||
@testable import OSGKeyboardShared
|
||||
|
||||
final class RimeSchemaGeneratorTests: XCTestCase {
|
||||
func testFuzzyRulesDefaultToOff() {
|
||||
XCTAssertTrue(RimeSchemaGenerator.fuzzyRules([]).isEmpty)
|
||||
}
|
||||
|
||||
func testFuzzyRulesAreOptInAndSymmetric() {
|
||||
let rules = RimeSchemaGenerator.fuzzyRules([.nL, .anAng])
|
||||
XCTAssertTrue(rules.contains("derive/^n/l/"))
|
||||
XCTAssertTrue(rules.contains("derive/^l/n/"))
|
||||
XCTAssertTrue(rules.contains("derive/ang$/an/"))
|
||||
XCTAssertTrue(rules.contains("derive/an$/ang/"))
|
||||
XCTAssertFalse(rules.contains { $0.contains("eng") })
|
||||
}
|
||||
|
||||
func testMicrosoftAndSogouExposeIngSemicolonMapping() {
|
||||
for schema in [
|
||||
TypingInputSchema.microsoftDoublePinyin,
|
||||
TypingInputSchema.sogouDoublePinyin
|
||||
] {
|
||||
let yaml = RimeSchemaGenerator.schema(for: schema, fuzzyPairs: [])
|
||||
XCTAssertTrue(yaml.contains("xform/ing$/;/"))
|
||||
XCTAssertTrue(yaml.contains("xform/^sh/U/"))
|
||||
XCTAssertTrue(yaml.contains("xform/^ch/I/"))
|
||||
XCTAssertTrue(yaml.contains("xform/^zh/V/"))
|
||||
}
|
||||
}
|
||||
|
||||
func testFuzzyRulesPrecedeDoublePinyinTransforms() throws {
|
||||
let yaml = RimeSchemaGenerator.schema(
|
||||
for: .microsoftDoublePinyin,
|
||||
fuzzyPairs: [.nL]
|
||||
)
|
||||
let fuzzy = try XCTUnwrap(yaml.range(of: "derive/^n/l/"))
|
||||
let transform = try XCTUnwrap(yaml.range(of: "xform/iu$/Q/"))
|
||||
XCTAssertLessThan(fuzzy.lowerBound, transform.lowerBound)
|
||||
}
|
||||
|
||||
@MainActor
|
||||
func testTypingConfigurationDefaultsToFullPinyinWithoutFuzzyPairs() {
|
||||
let suiteName = "TypingInputConfigurationTests.\(UUID().uuidString)"
|
||||
let defaults = UserDefaults(suiteName: suiteName)!
|
||||
defer { defaults.removePersistentDomain(forName: suiteName) }
|
||||
|
||||
let configuration = TypingInputConfiguration(defaults: defaults)
|
||||
XCTAssertEqual(configuration.schema, .fullPinyin)
|
||||
XCTAssertTrue(configuration.fuzzyPairs.isEmpty)
|
||||
XCTAssertFalse(configuration.defaultToTyping)
|
||||
}
|
||||
|
||||
@MainActor
|
||||
func testDefaultTypingPreferencePersistsAndDefaultsToOff() {
|
||||
let suiteName = "TypingInputConfigurationTests.\(UUID().uuidString)"
|
||||
let defaults = UserDefaults(suiteName: suiteName)!
|
||||
defer { defaults.removePersistentDomain(forName: suiteName) }
|
||||
|
||||
XCTAssertFalse(TypingInputConfiguration.prefersTypingOnOpen(defaults: defaults))
|
||||
|
||||
let configuration = TypingInputConfiguration(defaults: defaults)
|
||||
configuration.defaultToTyping = true
|
||||
|
||||
XCTAssertTrue(TypingInputConfiguration.prefersTypingOnOpen(defaults: defaults))
|
||||
XCTAssertTrue(TypingInputConfiguration(defaults: defaults).defaultToTyping)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user