diff --git a/McBopomofoTests/KeyHandlerBopomofoTests.swift b/McBopomofoTests/KeyHandlerBopomofoTests.swift index 07cfcfba..9667a4fc 100644 --- a/McBopomofoTests/KeyHandlerBopomofoTests.swift +++ b/McBopomofoTests/KeyHandlerBopomofoTests.swift @@ -266,17 +266,40 @@ class KeyHandlerBopomofoTests: XCTestCase { } } - func testLetter() { - let input = KeyHandlerInput(inputText: "A", keyCode: 0, charCode: charCode("A"), flags: .shift, isVerticalMode: false) + // Regression test for #292. + func testUppercaseLetterWhenEmpty() { + let input = KeyHandlerInput(inputText: "A", keyCode: KeyCode.enter.rawValue, charCode: charCode("A"), flags: [], isVerticalMode: false) var state: InputState = InputState.Empty() - handler.handle(input: input, state: state) { newState in + let result = handler.handle(input: input, state: state) { newState in + state = newState + } errorCallback: { + } + XCTAssertFalse(result) + } + + // Regression test for #292. + func testUppercaseLetterWhenNotEmpty() { + var state: InputState = InputState.Empty() + let keys = Array("u6").map { + String($0) + } + for key in keys { + let input = KeyHandlerInput(inputText: key, keyCode: 0, charCode: charCode(key), flags: [], isVerticalMode: false) + handler.handle(input: input, state: state) { newState in + state = newState + } errorCallback: { + } + } + + let letterInput = KeyHandlerInput(inputText: "A", keyCode: 0, charCode: charCode("A"), flags: .shift, isVerticalMode: false) + handler.handle(input: letterInput, state: state) { newState in state = newState } errorCallback: { } XCTAssertTrue(state is InputState.Inputting, "\(state)") if let state = state as? InputState.Inputting { - XCTAssertEqual(state.composingBuffer, "a") + XCTAssertEqual(state.composingBuffer, "一a") } } diff --git a/McBopomofoTests/KeyHandlerPlainBopomofoTests.swift b/McBopomofoTests/KeyHandlerPlainBopomofoTests.swift index feeb0e0c..a713a179 100644 --- a/McBopomofoTests/KeyHandlerPlainBopomofoTests.swift +++ b/McBopomofoTests/KeyHandlerPlainBopomofoTests.swift @@ -43,6 +43,17 @@ class KeyHandlerPlainBopomofoTests: XCTestCase { Preferences.keyboardLayout = savedKeyboardLayout } + // Regression test for #292. + func testUppercaseLetterWhenEmpty() { + let input = KeyHandlerInput(inputText: "A", keyCode: KeyCode.enter.rawValue, charCode: charCode("A"), flags: [], isVerticalMode: false) + var state: InputState = InputState.Empty() + let result = handler.handle(input: input, state: state) { newState in + state = newState + } errorCallback: { + } + XCTAssertFalse(result) + } + func testPunctuationTable() { let input = KeyHandlerInput(inputText: "`", keyCode: 0, charCode: charCode("`"), flags: .shift, isVerticalMode: false) var state: InputState = InputState.Empty() diff --git a/Source/KeyHandler.mm b/Source/KeyHandler.mm index 8209ebc5..d08bebb1 100644 --- a/Source/KeyHandler.mm +++ b/Source/KeyHandler.mm @@ -541,7 +541,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/McBopomofo-visualization.dot return YES; } - if ((char) charCode >= 'A' && (char) charCode <= 'Z') { + if ([state isKindOfClass:[InputStateNotEmpty class]] && (char) charCode >= 'A' && (char) charCode <= 'Z') { string letter = string("_letter_") + string(1, (char) charCode); if ([self _handlePunctuation:letter state:state usingVerticalMode:input.useVerticalMode stateCallback:stateCallback errorCallback:errorCallback]) { return YES;