Skip to content

Commit 446d7b1

Browse files
committed
Merge branch 'master' into prefs
2 parents 7032678 + d5e06b9 commit 446d7b1

18 files changed

Lines changed: 2269 additions & 415 deletions

McBopomofoTests/KeyHandlerBopomofoTests.swift

Lines changed: 88 additions & 90 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)
@@ -2857,96 +2945,6 @@ extension KeyHandlerBopomofoTests {
28572945

28582946
extension KeyHandlerBopomofoTests {
28592947

2860-
func testIrohaKanaInput() {
2861-
var state: InputState = InputState.IrohaKana(code: "")
2862-
2863-
let inputA = KeyHandlerInput(
2864-
inputText: "a", keyCode: 0, charCode: charCode("a"), flags: [],
2865-
isVerticalMode: false)
2866-
2867-
handler.handle(input: inputA, state: state) { newState in
2868-
state = newState
2869-
} errorCallback: {
2870-
}
2871-
2872-
XCTAssertTrue(state is InputState.IrohaKana)
2873-
if let s = state as? InputState.IrohaKana {
2874-
XCTAssertEqual(s.code, "a")
2875-
}
2876-
2877-
let inputEnter = KeyHandlerInput(
2878-
inputText: "\r", keyCode: KeyCode.enter.rawValue, charCode: 13, flags: [],
2879-
isVerticalMode: false)
2880-
var irohaCandidate: InputState.IrohaKanaCandidates?
2881-
handler.handle(input: inputEnter, state: state) { newState in
2882-
if let s = newState as? InputState.IrohaKanaCandidates {
2883-
irohaCandidate = s
2884-
}
2885-
state = newState
2886-
} errorCallback: {
2887-
}
2888-
2889-
XCTAssertNotNil(irohaCandidate)
2890-
XCTAssertEqual(irohaCandidate?.candidate(at: 0), "")
2891-
}
2892-
2893-
func testIrohaKanaBackspace() {
2894-
var state: InputState = InputState.IrohaKana(code: "a")
2895-
let inputDelete = KeyHandlerInput(
2896-
inputText: "", keyCode: KeyCode.delete.rawValue, charCode: 8, flags: [],
2897-
isVerticalMode: false)
2898-
handler.handle(input: inputDelete, state: state) { newState in
2899-
state = newState
2900-
} errorCallback: {
2901-
}
2902-
XCTAssertTrue(state is InputState.IrohaKana)
2903-
if let s = state as? InputState.IrohaKana {
2904-
XCTAssertEqual(s.code, "")
2905-
}
2906-
}
2907-
2908-
func testIrohaKanaCancel() {
2909-
var state: InputState = InputState.IrohaKana(code: "a")
2910-
let inputEsc = KeyHandlerInput(
2911-
inputText: "", keyCode: 27, charCode: 27, flags: [],
2912-
isVerticalMode: false)
2913-
handler.handle(input: inputEsc, state: state) { newState in
2914-
state = newState
2915-
} errorCallback: {
2916-
}
2917-
XCTAssertTrue(state is InputState.Empty)
2918-
}
2919-
2920-
func testIrohaKanaCandidateGeneration() {
2921-
var state: InputState = InputState.IrohaKana(code: "kyou")
2922-
let inputEnter = KeyHandlerInput(
2923-
inputText: "\r", keyCode: KeyCode.enter.rawValue, charCode: 13, flags: [],
2924-
isVerticalMode: false)
2925-
handler.handle(input: inputEnter, state: state) { newState in
2926-
state = newState
2927-
} errorCallback: {
2928-
}
2929-
XCTAssertTrue(state is InputState.IrohaKanaCandidates)
2930-
if let s = state as? InputState.IrohaKanaCandidates {
2931-
XCTAssertEqual(s.code, "kyou")
2932-
XCTAssertTrue(s.candidates.contains("今日"))
2933-
XCTAssertTrue(s.candidates.contains("きょう"))
2934-
}
2935-
}
2936-
2937-
func testIrohaKanaCandidateCancel() {
2938-
var state: InputState = InputState.IrohaKanaCandidates(
2939-
code: "kyou", candidates: ["きょう", "今日"])
2940-
let inputEsc = KeyHandlerInput(
2941-
inputText: "", keyCode: 27, charCode: 27, flags: [],
2942-
isVerticalMode: false)
2943-
handler.handle(input: inputEsc, state: state) { newState in
2944-
state = newState
2945-
} errorCallback: {
2946-
}
2947-
XCTAssertTrue(state is InputState.EmptyIgnoringPreviousState)
2948-
}
2949-
29502948
func testInputBufferThenBacktickThenEsc() {
29512949
// Type something in the buffer, then press ` to enter choosing punctuation list, then ESC to return to inputting state
29522950
var state: InputState = InputState.Empty()

Source/Base.lproj/Localizable.strings

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,6 @@
133133

134134
"Roman Numbers (Full-Width Lower Case)" = "Roman Numbers (Full-Width Lower Case)";
135135

136-
"Iroha Kana Input" = "Iroha Kana Input";
137-
138136
"Show Issues in User Files ⚠️" = "Show Issues in User Files ⚠️";
139137

140138
"Issues were found in the following user phrase files:" = "Issues were found in the following user phrase files:";
@@ -258,5 +256,5 @@
258256
"Run a shell script" = "Run a shell script";
259257
"Path:" = "Path:";
260258
"You can run a script to use git to backup your phrases. The script will run in the folder of your user phrases folder." = "You can run a script to use git to backup your phrases. The script will run in the folder of your user phrases folder.";
261-
"U.S." = "U.S.";
262-
"ABC" = "ABC";
259+
260+
"Quick Text Transform" = "Quick Text Transform";

0 commit comments

Comments
 (0)