From 56ced2dd0f2689e871a07ee153fca179dde27b4b Mon Sep 17 00:00:00 2001 From: zonble Date: Wed, 2 Feb 2022 21:25:51 +0800 Subject: [PATCH] Adds test cases. --- McBopomofoTests/KeyHandlerBopomofoTests.swift | 72 +++++++++++++++++-- Source/KeyHandler.mm | 3 +- 2 files changed, 69 insertions(+), 6 deletions(-) diff --git a/McBopomofoTests/KeyHandlerBopomofoTests.swift b/McBopomofoTests/KeyHandlerBopomofoTests.swift index e3976834..89672300 100644 --- a/McBopomofoTests/KeyHandlerBopomofoTests.swift +++ b/McBopomofoTests/KeyHandlerBopomofoTests.swift @@ -129,7 +129,7 @@ class KeyHandlerBopomofoTests: XCTestCase { } func testIgnoreCommand() { - let input = KeyHandlerInput(inputText: "A", keyCode: 0, charCode: 0, flags: [.command], isVerticalMode: false) + let input = KeyHandlerInput(inputText: "A", keyCode: 0, charCode: 0, flags: .command, isVerticalMode: false) var state: InputState = InputState.Empty() let result = handler.handle(input: input, state: state) { newState in state = newState @@ -139,7 +139,7 @@ class KeyHandlerBopomofoTests: XCTestCase { } func testIgnoreOption() { - let input = KeyHandlerInput(inputText: "A", keyCode: 0, charCode: 0, flags: [.option], isVerticalMode: false) + let input = KeyHandlerInput(inputText: "A", keyCode: 0, charCode: 0, flags: .option, isVerticalMode: false) var state: InputState = InputState.Empty() let result = handler.handle(input: input, state: state) { newState in state = newState @@ -149,7 +149,7 @@ class KeyHandlerBopomofoTests: XCTestCase { } func testIgnoreNumericPad() { - let input = KeyHandlerInput(inputText: "A", keyCode: 0, charCode: 0, flags: [.numericPad], isVerticalMode: false) + let input = KeyHandlerInput(inputText: "A", keyCode: 0, charCode: 0, flags: .numericPad, isVerticalMode: false) var state: InputState = InputState.Empty() let result = handler.handle(input: input, state: state) { newState in state = newState @@ -159,7 +159,7 @@ class KeyHandlerBopomofoTests: XCTestCase { } func testIgnoreCapslock() { - let input = KeyHandlerInput(inputText: "A", keyCode: 0, charCode: 0, flags: [.capsLock], isVerticalMode: false) + let input = KeyHandlerInput(inputText: "A", keyCode: 0, charCode: 0, flags: .capsLock, isVerticalMode: false) var state: InputState = InputState.Empty() let result = handler.handle(input: input, state: state) { newState in state = newState @@ -168,6 +168,46 @@ class KeyHandlerBopomofoTests: XCTestCase { XCTAssertFalse(result) } + func testCapslock() { + var input = KeyHandlerInput(inputText: "b", keyCode: 0, charCode: charCode("b"), flags: [], isVerticalMode: false) + var state: InputState = InputState.Empty() + handler.handle(input: input, state: state) { newState in + state = newState + } errorCallback: { + } + + var count = 0 + + input = KeyHandlerInput(inputText: "a", keyCode: 0, charCode: charCode("a"), flags: .capsLock, isVerticalMode: false) + handler.handle(input: input, state: state) { newState in + if count == 1 { + state = newState + } + count += 1 + } errorCallback: { + } + XCTAssertTrue(state is InputState.Committing, "\(state)") + if let state = state as? InputState.Committing { + XCTAssertEqual(state.poppedText, "a") + } + } + + func testCapslockShift() { + var input = KeyHandlerInput(inputText: "b", keyCode: 0, charCode: charCode("b"), flags: [], isVerticalMode: false) + var state: InputState = InputState.Empty() + handler.handle(input: input, state: state) { newState in + state = newState + } errorCallback: { + } + + input = KeyHandlerInput(inputText: "a", keyCode: 0, charCode: charCode("a"), flags: [.capsLock, .shift], isVerticalMode: false) + handler.handle(input: input, state: state) { newState in + state = newState + } errorCallback: { + } + XCTAssertTrue(state is InputState.Empty, "\(state)") + } + func testisNumericPad() { var input = KeyHandlerInput(inputText: "b", keyCode: 0, charCode: charCode("b"), flags: [], isVerticalMode: false) var state: InputState = InputState.Empty() @@ -234,6 +274,30 @@ class KeyHandlerBopomofoTests: XCTestCase { Preferences.halfWidthPunctuationEnabled = enabled } + func testIgnorePunctuationTable() { + let enabled = Preferences.halfWidthPunctuationEnabled + Preferences.halfWidthPunctuationEnabled = false + var state: InputState = InputState.Empty() + var input = KeyHandlerInput(inputText: "1", keyCode: 0, charCode: charCode("1"), flags: .shift, isVerticalMode: false) + handler.handle(input: input, state: state) { newState in + state = newState + } errorCallback: { + } + input = KeyHandlerInput(inputText: "`", keyCode: 0, charCode: charCode("`"), flags: .shift, isVerticalMode: false) + handler.handle(input: input, state: state) { newState in + state = newState + } errorCallback: { + } + + + XCTAssertTrue(state is InputState.Inputting, "\(state)") + if let state = state as? InputState.Inputting { + XCTAssertEqual(state.composingBuffer, "ㄅ") + } + Preferences.halfWidthPunctuationEnabled = enabled + } + + func testHalfPunctuationComma() { let enabled = Preferences.halfWidthPunctuationEnabled Preferences.halfWidthPunctuationEnabled = true diff --git a/Source/KeyHandler.mm b/Source/KeyHandler.mm index 1f13187b..0025caab 100644 --- a/Source/KeyHandler.mm +++ b/Source/KeyHandler.mm @@ -371,8 +371,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/McBopomofo-visualization.dot if (!Preferences.associatedPhrasesEnabled) { InputStateEmpty *empty = [[InputStateEmpty alloc] init]; stateCallback(empty); - } - else { + } else { InputStateAssociatedPhrases *associatedPhrases = (InputStateAssociatedPhrases *)[self buildAssociatePhraseStateWithKey:text useVerticalMode:input.useVerticalMode]; if (associatedPhrases) { stateCallback(associatedPhrases);