Skip to content

Commit 2ae7552

Browse files
committed
Add ICU transform tests for input handling and candidate generation
1 parent 249c870 commit 2ae7552

1 file changed

Lines changed: 88 additions & 0 deletions

File tree

McBopomofoTests/KeyHandlerBopomofoTests.swift

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,94 @@ class KeyHandlerBopomofoTests: XCTestCase {
240240
XCTAssertFalse(result)
241241
}
242242

243+
func testIcuTransformAppendsPrintableInputAndBuildsCandidates() {
244+
let input = KeyHandlerInput(
245+
inputText: "a", keyCode: 0, charCode: charCode("a"), flags: [], isVerticalMode: false)
246+
var state: InputState = InputState.IcuTransform(string: "", candidates: [])
247+
let result = handler.handle(input: input, state: state) { newState in
248+
state = newState
249+
} errorCallback: {
250+
XCTFail("ICU transform input should not fail")
251+
}
252+
253+
XCTAssertTrue(result)
254+
XCTAssertTrue(state is InputState.IcuTransform, "\(state)")
255+
guard let state = state as? InputState.IcuTransform else {
256+
return
257+
}
258+
XCTAssertEqual(state.string, "a")
259+
XCTAssertTrue(state.candidates.contains(""))
260+
XCTAssertTrue(state.candidates.contains(""))
261+
XCTAssertFalse(state.candidates.contains("a"))
262+
}
263+
264+
func testIcuTransformDeletesLastCharacterAndRefreshesCandidates() {
265+
let input = KeyHandlerInput(
266+
inputText: "", keyCode: 0, charCode: 8, flags: [], isVerticalMode: false)
267+
var state: InputState = InputState.IcuTransform(string: "ka", candidates: [])
268+
let result = handler.handle(input: input, state: state) { newState in
269+
state = newState
270+
} errorCallback: {
271+
XCTFail("ICU transform delete should not fail")
272+
}
273+
274+
XCTAssertTrue(result)
275+
XCTAssertTrue(state is InputState.IcuTransform, "\(state)")
276+
guard let state = state as? InputState.IcuTransform else {
277+
return
278+
}
279+
XCTAssertEqual(state.string, "k")
280+
XCTAssertTrue(state.candidates.contains("κ"))
281+
XCTAssertFalse(state.candidates.contains(""))
282+
}
283+
284+
func testIcuTransformDeleteEmptyStringReportsError() {
285+
let input = KeyHandlerInput(
286+
inputText: "", keyCode: 0, charCode: 8, flags: [], isVerticalMode: false)
287+
var state: InputState = InputState.IcuTransform(string: "", candidates: [])
288+
var didReportError = false
289+
let result = handler.handle(input: input, state: state) { newState in
290+
state = newState
291+
} errorCallback: {
292+
didReportError = true
293+
}
294+
295+
XCTAssertTrue(result)
296+
XCTAssertTrue(didReportError)
297+
XCTAssertEqual((state as? InputState.IcuTransform)?.string, "")
298+
}
299+
300+
func testIcuTransformEscapeCancelsInput() {
301+
let input = KeyHandlerInput(
302+
inputText: "", keyCode: 0, charCode: 27, flags: [], isVerticalMode: false)
303+
var state: InputState = InputState.IcuTransform(string: "ka", candidates: [])
304+
let result = handler.handle(input: input, state: state) { newState in
305+
state = newState
306+
} errorCallback: {
307+
XCTFail("ICU transform escape should not fail")
308+
}
309+
310+
XCTAssertTrue(result)
311+
XCTAssertTrue(state is InputState.Empty, "\(state)")
312+
}
313+
314+
func testIcuTransformIgnoresNonPrintableInput() {
315+
let input = KeyHandlerInput(
316+
inputText: "", keyCode: 0, charCode: 0, flags: [], isVerticalMode: false)
317+
var state: InputState = InputState.IcuTransform(string: "ka", candidates: [])
318+
var didChangeState = false
319+
let result = handler.handle(input: input, state: state) { newState in
320+
state = newState
321+
didChangeState = true
322+
} errorCallback: {
323+
XCTFail("ICU transform non-printable input should not fail")
324+
}
325+
326+
XCTAssertTrue(result)
327+
XCTAssertFalse(didChangeState)
328+
XCTAssertEqual((state as? InputState.IcuTransform)?.string, "ka")
329+
}
330+
243331
func testIgnoreCapslock() {
244332
let input = KeyHandlerInput(
245333
inputText: "A", keyCode: 0, charCode: 0, flags: .capsLock, isVerticalMode: false)

0 commit comments

Comments
 (0)