Merge pull request #293 from lukhnos/empty-state-regression

Fixes regression in how upper case letters are handled when input state is empty
This commit is contained in:
Lukhnos Liu 2022-02-16 13:15:46 -08:00 committed by GitHub
commit 34f29fd771
5 changed files with 54 additions and 5 deletions

View File

@ -38,6 +38,10 @@ jobs:
- name: Test NSStringUtils - name: Test NSStringUtils
run: swift test run: swift test
working-directory: Packages/NSStringUtils working-directory: Packages/NSStringUtils
- name: Clean McBopomofo for testing
run: xcodebuild -scheme McBopomofo -configuration Debug clean
- name: Test McBopomofo
run: xcodebuild -scheme McBopomofo -configuration Debug test
- name: Clean McBopomofo - name: Clean McBopomofo
run: xcodebuild -scheme McBopomofo -configuration Release clean run: xcodebuild -scheme McBopomofo -configuration Release clean
- name: Clean McBopomofoInstaller - name: Clean McBopomofoInstaller

View File

@ -38,6 +38,10 @@ jobs:
- name: Test NSStringUtils - name: Test NSStringUtils
run: swift test run: swift test
working-directory: Packages/NSStringUtils working-directory: Packages/NSStringUtils
- name: Clean McBopomofo for testing
run: xcodebuild -scheme McBopomofo -configuration Debug clean
- name: Test McBopomofo
run: xcodebuild -scheme McBopomofo -configuration Debug test
- name: Clean McBopomofo - name: Clean McBopomofo
run: xcodebuild -scheme McBopomofo -configuration Release clean run: xcodebuild -scheme McBopomofo -configuration Release clean
- name: Clean McBopomofoInstaller - name: Clean McBopomofoInstaller

View File

@ -266,17 +266,40 @@ class KeyHandlerBopomofoTests: XCTestCase {
} }
} }
func testLetter() { // Regression test for #292.
let input = KeyHandlerInput(inputText: "A", keyCode: 0, charCode: charCode("A"), flags: .shift, isVerticalMode: false) func testUppercaseLetterWhenEmpty() {
let input = KeyHandlerInput(inputText: "A", keyCode: KeyCode.enter.rawValue, charCode: charCode("A"), flags: [], isVerticalMode: false)
var state: InputState = InputState.Empty() 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 state = newState
} errorCallback: { } errorCallback: {
} }
XCTAssertTrue(state is InputState.Inputting, "\(state)") XCTAssertTrue(state is InputState.Inputting, "\(state)")
if let state = state as? InputState.Inputting { if let state = state as? InputState.Inputting {
XCTAssertEqual(state.composingBuffer, "a") XCTAssertEqual(state.composingBuffer, "a")
} }
} }

View File

@ -25,15 +25,33 @@ import XCTest
@testable import McBopomofo @testable import McBopomofo
class KeyHandlerPlainBopomofoTests: XCTestCase { class KeyHandlerPlainBopomofoTests: XCTestCase {
var savedKeyboardLayout: Int = 0
var handler = KeyHandler() var handler = KeyHandler()
override func setUpWithError() throws { override func setUpWithError() throws {
LanguageModelManager.loadDataModels() LanguageModelManager.loadDataModels()
handler = KeyHandler() handler = KeyHandler()
handler.inputMode = .plainBopomofo handler.inputMode = .plainBopomofo
savedKeyboardLayout = Preferences.keyboardLayout
// Punctuation-related tests only work when the layout is Standard.
Preferences.keyboardLayout = KeyboardLayout.standard.rawValue
} }
override func tearDownWithError() throws { override func tearDownWithError() throws {
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() { func testPunctuationTable() {

View File

@ -541,7 +541,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/McBopomofo-visualization.dot
return YES; 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); string letter = string("_letter_") + string(1, (char) charCode);
if ([self _handlePunctuation:letter state:state usingVerticalMode:input.useVerticalMode stateCallback:stateCallback errorCallback:errorCallback]) { if ([self _handlePunctuation:letter state:state usingVerticalMode:input.useVerticalMode stateCallback:stateCallback errorCallback:errorCallback]) {
return YES; return YES;