diff --git a/McBopomofoTests/KeyHandlerBopomofoTests.swift b/McBopomofoTests/KeyHandlerBopomofoTests.swift index bb68dc9c..aedd3df8 100644 --- a/McBopomofoTests/KeyHandlerBopomofoTests.swift +++ b/McBopomofoTests/KeyHandlerBopomofoTests.swift @@ -708,6 +708,39 @@ class KeyHandlerBopomofoTests: XCTestCase { XCTAssertTrue(state is InputState.EmptyIgnoringPreviousState, "\(state)") } + func testCursorWithReading() { + var state: InputState = InputState.Empty() + let keys = Array("su3cl").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 left = KeyHandlerInput(inputText: " ", keyCode: KeyCode.left.rawValue, charCode: 0, flags: [], isVerticalMode: false) + let right = KeyHandlerInput(inputText: " ", keyCode: KeyCode.right.rawValue, charCode: 0, flags: [], isVerticalMode: false) + var leftErrorCalled = false + var rightErrorCalled = false + + handler.handle(input: left, state: state) { newState in + state = newState + } errorCallback: { + leftErrorCalled = true + } + + handler.handle(input: right, state: state) { newState in + state = newState + } errorCallback: { + rightErrorCalled = true + } + + XCTAssertTrue(leftErrorCalled) + XCTAssertTrue(rightErrorCalled) + } + func testCursor() { var state: InputState = InputState.Empty() let keys = Array("su3cl3").map { @@ -997,6 +1030,112 @@ class KeyHandlerBopomofoTests: XCTestCase { } } + func testHomeAndEndWithReading() { + var state: InputState = InputState.Empty() + let keys = Array("su3cl").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: { + } + } + XCTAssertTrue(state is InputState.Inputting, "\(state)") + if let state = state as? InputState.Inputting { + XCTAssertEqual(state.composingBuffer, "你ㄏㄠ") + XCTAssertEqual(state.cursorIndex, 3) + } + + let home = KeyHandlerInput(inputText: " ", keyCode: KeyCode.home.rawValue, charCode: 0, flags: [], isVerticalMode: false) + let end = KeyHandlerInput(inputText: " ", keyCode: KeyCode.end.rawValue, charCode: 0, flags: [], isVerticalMode: false) + var homeErrorCalled = false + var endErrorCalled = false + + handler.handle(input: home, state: state) { newState in + state = newState + } errorCallback: { + homeErrorCalled = true + } + + XCTAssertTrue(homeErrorCalled) + XCTAssertTrue(state is InputState.Inputting, "\(state)") + if let state = state as? InputState.Inputting { + XCTAssertEqual(state.composingBuffer, "你ㄏㄠ") + XCTAssertEqual(state.cursorIndex, 3) + } + + handler.handle(input: end, state: state) { newState in + state = newState + } errorCallback: { + endErrorCalled = true + } + + XCTAssertTrue(endErrorCalled) + XCTAssertTrue(state is InputState.Inputting, "\(state)") + if let state = state as? InputState.Inputting { + XCTAssertEqual(state.composingBuffer, "你ㄏㄠ") + XCTAssertEqual(state.cursorIndex, 3) + } + } + + func testMarkingLeftAtBegin() { + var state: InputState = InputState.Empty() + let keys = Array("su3cl3").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 input = KeyHandlerInput(inputText: " ", keyCode: KeyCode.left.rawValue, charCode: 0, flags: .shift, isVerticalMode: false) + var errorCalled = false + + handler.handle(input: input, state: state) { newState in + state = newState + } errorCallback: { + } + handler.handle(input: input, state: state) { newState in + state = newState + } errorCallback: { + } + handler.handle(input: input, state: state) { newState in + state = newState + } errorCallback: { + errorCalled = true + } + XCTAssertTrue(errorCalled) + } + + + func testMarkingRightAtEnd() { + var state: InputState = InputState.Empty() + let keys = Array("su3cl3").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 input = KeyHandlerInput(inputText: " ", keyCode: KeyCode.right.rawValue, charCode: 0, flags: .shift, isVerticalMode: false) + var errorCalled = false + handler.handle(input: input, state: state) { newState in + state = newState + } errorCallback: { + errorCalled = true + } + XCTAssertTrue(errorCalled) + } + func testMarkingLeft() { var state: InputState = InputState.Empty() let keys = Array("su3cl3").map { @@ -1086,6 +1225,16 @@ class KeyHandlerBopomofoTests: XCTestCase { } errorCallback: { } + let errorInput = KeyHandlerInput(inputText: " ", keyCode: KeyCode.left.rawValue, charCode: 0, flags: .shift, isVerticalMode: false) + var errorCalled = false + handler.handle(input: errorInput, state: state) { newState in + state = newState + } errorCallback: { + errorCalled = true + } + XCTAssertTrue(errorCalled) + + let input = KeyHandlerInput(inputText: " ", keyCode: KeyCode.right.rawValue, charCode: 0, flags: .shift, isVerticalMode: false) handler.handle(input: input, state: state) { newState in state = newState