diff --git a/Packages/NSStringUtils/Tests/NSStringUtilsTests/NSStringUtilsTests.swift b/Packages/NSStringUtils/Tests/NSStringUtilsTests/NSStringUtilsTests.swift index 1e9594a4..b62dcfbf 100644 --- a/Packages/NSStringUtils/Tests/NSStringUtilsTests/NSStringUtilsTests.swift +++ b/Packages/NSStringUtils/Tests/NSStringUtilsTests/NSStringUtilsTests.swift @@ -2,6 +2,17 @@ import XCTest @testable import NSStringUtils final class NSStringUtilsTests: XCTestCase { + + func testNextNormal_0() { + let s = NSString("中文") + XCTAssertEqual(s.nextUtf16Position(for: 0), 1) + } + + func testNextNormal_1() { + let s = NSString("中文") + XCTAssertEqual(s.nextUtf16Position(for: 1), 2) + } + func testNextWith🌳_0() { let s = NSString("🌳🌳") XCTAssertEqual(s.nextUtf16Position(for: 0), 2) @@ -32,6 +43,16 @@ final class NSStringUtilsTests: XCTestCase { XCTAssertEqual(s.nextUtf16Position(for: 4), 6) } + func testPrevNormal_0() { + let s = NSString("中文") + XCTAssertEqual(s.previousUtf16Position(for: 1), 0) + } + + func testPrevNormal_1() { + let s = NSString("中文") + XCTAssertEqual(s.previousUtf16Position(for: 2), 1) + } + func testPrevWith🌳_0() { let s = NSString("🌳🌳") XCTAssertEqual(s.previousUtf16Position(for: 0), 0) @@ -42,17 +63,17 @@ final class NSStringUtilsTests: XCTestCase { XCTAssertEqual(s.previousUtf16Position(for: 1), 0) } - func testINextWith🌳_2() { + func testPrevWith🌳_2() { let s = NSString("🌳🌳") XCTAssertEqual(s.previousUtf16Position(for: 2), 0) } - func testINextWith🌳_3() { + func testPrevWith🌳_3() { let s = NSString("🌳🌳") XCTAssertEqual(s.previousUtf16Position(for: 3), 0) } - func testINextWith🌳_4() { + func testPrevWith🌳_4() { let s = NSString("🌳🌳") XCTAssertEqual(s.previousUtf16Position(for: 4), 2) } diff --git a/Source/KeyHandler.mm b/Source/KeyHandler.mm index 769d7cd7..b0f49e97 100644 --- a/Source/KeyHandler.mm +++ b/Source/KeyHandler.mm @@ -577,7 +577,7 @@ static NSString *const kGraphVizOutputfile = @"/tmp/McBopomofo-visualization.dot if ([input isShiftHold]) { // Shift + left if (currentState.cursorIndex > 0) { - NSInteger previousPosition = [currentState.composingBuffer nextUtf16PositionFor:currentState.cursorIndex]; + NSInteger previousPosition = [currentState.composingBuffer previousUtf16PositionFor:currentState.cursorIndex]; InputStateMarking *marking = [[InputStateMarking alloc] initWithComposingBuffer:currentState.composingBuffer cursorIndex:currentState.cursorIndex markerIndex:previousPosition readings:[self _currentReadings]]; marking.tooltipForInputting = currentState.tooltip; stateCallback(marking);