vChewing-macOS/Packages/vChewing_MainAssembly/Tests/MainAssemblyTests/MainAssemblyTests_Test1.swift

155 lines
6.8 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// (c) 2021 and onwards The vChewing Project (MIT-NTL License).
// ====================
// This code is released under the MIT license (SPDX-License-Identifier: MIT)
// ... with NTL restriction stating that:
// No trademark license is granted to use the trade names, trademarks, service
// marks, or product names of Contributor, except as required to fulfill notice
// requirements defined in MIT License.
import CocoaExtension
import InputMethodKit
import LangModelAssembly
@testable import MainAssembly
import Shared
import XCTest
extension MainAssemblyTests {
func test001_ClientTest_BundleIdentifier() throws {
guard let identifier = testSession.client()?.bundleIdentifier() else {
fatalError("致命錯誤:客體唯一標幟碼無效。")
}
vCTestLog("測試客體唯一標幟碼:\(identifier)")
}
func test002_ClientTest_TextInsertion() throws {
testClient.clear()
let testString = UUID().uuidString
testSession.client().insertText(testString, replacementRange: .notFound)
XCTAssertEqual(testClient.attributedString.string, testString)
testClient.clear()
}
// MARK: - Input Handler Tests.
///
func test101_InputHandler_BasicSentenceComposition() throws {
PrefMgr.shared.useSCPCTypingMode = false
clearTestUOM()
vCTestLog("測試組句:高科技公司的年中獎金")
testSession.resetInputHandler(forceComposerCleanup: true)
typeSentenceOrCandidates("el dk ru4ej/ n 2k7su065j/ ru;3rup ")
let resultText1 = testSession.state.displayedText
vCTestLog("- // 組字結果:\(resultText1)")
XCTAssertEqual(resultText1, "高科技公司的年中獎金")
}
///
func test102_InputHandler_BasicSCPCTyping() throws {
PrefMgr.shared.useSCPCTypingMode = true
clearTestUOM()
vCTestLog("測試逐字選字:高科技公司的年中獎金")
testSession.resetInputHandler(forceComposerCleanup: true)
typeSentenceOrCandidates("el dk ru44ej/ 2n ")
dataArrowDown.asPairedEvents.forEach { theEvent in
let dismissed = !testSession.handle(theEvent, client: testClient)
if theEvent.type == .keyDown { XCTAssertFalse(dismissed) }
}
typeSentenceOrCandidates("12k7su065j/ ru;3rup ")
XCTAssert(testSession.candidateUI?.visible ?? false)
dataEnterReturn.asPairedEvents.forEach { theEvent in
let dismissed = !testSession.handle(theEvent, client: testClient)
if theEvent.type == .keyDown { XCTAssertFalse(dismissed) }
}
let resultText1 = testClient.toString()
vCTestLog("- // 組字結果:\(resultText1)")
XCTAssertEqual(resultText1, "高科技公司的年中獎金")
testClient.clear()
}
///
func test103_InputHandler_RevolvingCandidates() throws {
PrefMgr.shared.useSCPCTypingMode = false
PrefMgr.shared.useRearCursorMode = false
clearTestUOM()
testSession.resetInputHandler(forceComposerCleanup: true)
typeSentenceOrCandidates("el dk ru4ej/ n 2k7su065j/ ru;3rup ")
// Testing Inline Candidate Revolver.
vCTestLog("測試就地輪替候選字:高科技公司的年中獎金 -> 高科技公司的年終獎金")
[dataArrowLeft, dataArrowLeft].map(\.asPairedEvents).flatMap { $0 }.forEach { theEvent in
let dismissed = !testSession.handle(theEvent, client: testClient)
if theEvent.type == .keyDown { XCTAssertFalse(dismissed) }
}
dataTab.asPairedEvents.forEach { theEvent in
let dismissed = !testSession.handle(theEvent, client: testClient)
if theEvent.type == .keyDown { XCTAssertFalse(dismissed) }
}
let resultText2 = testSession.state.displayedText
vCTestLog("- // 組字結果:\(resultText2)")
XCTAssertEqual(resultText2, "高科技公司的年終獎金")
}
///
/// - Remark: 便
func test104_InputHandler_ManualCandidateSelectionAndUOM() throws {
PrefMgr.shared.useSCPCTypingMode = false
PrefMgr.shared.useRearCursorMode = false
PrefMgr.shared.moveCursorAfterSelectingCandidate = true
clearTestUOM()
var sequenceChars = "el dk ru4ej/ n 2k7su065j/ ru;3rup "
testSession.resetInputHandler(forceComposerCleanup: true)
typeSentenceOrCandidates(sequenceChars)
// Testing Manual Candidate Selection, UOM Observation, and Post-Candidate-Selection Cursor Jumping.
vCTestLog("測試選字窗選字:高科技公司的年終獎金 -> 高科技公司的年中獎金")
let keyOne = NSEvent.KeyEventData(chars: "1")
[dataArrowDown, keyOne].map(\.asPairedEvents).flatMap { $0 }.forEach { theEvent in
let dismissed = !testSession.handle(theEvent, client: testClient)
if theEvent.type == .keyDown { XCTAssertFalse(dismissed) }
}
let resultText3 = testSession.state.displayedText
vCTestLog("- // 組字結果:\(resultText3)")
XCTAssertEqual(resultText3, "高科技公司的年中獎金")
XCTAssertEqual(testHandler.compositor.cursor, 10)
// Continuing UOM Tests (in the Current Context).
vCTestLog("測試半衰記憶的適用範圍:「年終」的記憶應僅對下述給定上下文情形生效。")
vCTestLog("- 該給定上下文情形為「((ㄍㄨㄥ-ㄙ,公司),(ㄉㄜ˙,的),ㄋㄧㄢˊ-ㄓㄨㄥ)」。")
clearTestUOM()
let keyTwo = NSEvent.KeyEventData(chars: "2")
[dataArrowLeft, dataArrowLeft, dataArrowDown, keyTwo].map(\.asPairedEvents).flatMap { $0 }.forEach { theEvent in
let dismissed = !testSession.handle(theEvent, client: testClient)
if theEvent.type == .keyDown { XCTAssertFalse(dismissed) }
}
let resultText4 = testSession.state.displayedText
vCTestLog("- // 組字結果:\(resultText4)")
XCTAssertEqual(resultText4, "高科技公司的年終獎金")
vCTestLog("- 清空組字區,重新打剛才那句話來測試。")
testSession.switchState(IMEState.ofAbortion())
typeSentenceOrCandidates(sequenceChars)
let resultText5 = testSession.state.displayedText
vCTestLog("- // 組字結果:\(resultText5)")
XCTAssertEqual(resultText5, "高科技公司的年終獎金")
vCTestLog("- 已成功證實「年終」的記憶對該給定上下文情形生效。")
vCTestLog("- 清空組字區,重新打另一句話來測試。")
testSession.switchState(IMEState.ofAbortion())
sequenceChars = "ru4ej/ 2k7su065j/ ru;3rup "
typeSentenceOrCandidates(sequenceChars)
let resultText6 = testSession.state.displayedText
vCTestLog("- // 組字結果:\(resultText6)")
XCTAssertEqual(resultText6, "濟公的年中獎金")
vCTestLog("- 已成功證實「年終」的記憶不會對除了給定上下文以外的情形生效。")
}
}