@@ -37,17 +37,18 @@ final class KeyboardLayoutTests: XCTestCase {
3737 private let QWERTYVKeyCode = 9
3838 private let DvorakVKeyCode = 47 // swiftlint:disable:this identifier_name
3939
40- private var selectedInputSource : InputSource ?
40+ private static var selectedInputSource : InputSource ?
4141
42- override func setUp( ) {
42+ override static func setUp( ) {
4343 super. setUp ( )
4444 selectedInputSource = InputSource ( source: TISCopyCurrentKeyboardLayoutInputSource ( ) . takeUnretainedValue ( ) )
4545 }
4646
47- override func tearDown( ) {
47+ override static func tearDown( ) {
4848 super. tearDown ( )
4949 guard let selectedInputSource else { return }
50- selectInputSource ( id: selectedInputSource. id)
50+ TISEnableInputSource ( selectedInputSource. source)
51+ TISSelectInputSource ( selectedInputSource. source)
5152 }
5253
5354 // MARK: - Tests
@@ -73,6 +74,28 @@ final class KeyboardLayoutTests: XCTestCase {
7374 uninstallInputSource ( id: ABCKeyboardID)
7475 }
7576
77+ func testKeyCodesForABCKeyboardWithCommandModifier( ) {
78+ let isInstalledABCKeyboard = isInstalledInputSource ( id: ABCKeyboardID)
79+ XCTAssertTrue ( installInputSource ( id: ABCKeyboardID) )
80+ XCTAssertTrue ( selectInputSource ( id: ABCKeyboardID) )
81+ let notificationCenter = NotificationCenter ( )
82+ let keyboardLayout = KeyboardLayout ( notificationCenter: notificationCenter)
83+ let vKeyCode = keyboardLayout. currentKeyCode ( for: . v, carbonModifiers: cmdKey)
84+ XCTAssertEqual ( vKeyCode, CGKeyCode ( QWERTYVKeyCode) )
85+ let vKey = keyboardLayout. currentKey ( for: QWERTYVKeyCode, carbonModifiers: cmdKey)
86+ XCTAssertEqual ( vKey, . v)
87+ let vCharacter = keyboardLayout. currentCharacter ( for: QWERTYVKeyCode, carbonModifiers: cmdKey)
88+ XCTAssertEqual ( vCharacter, " v " )
89+ let vShiftCharacter = keyboardLayout. currentCharacter ( for: QWERTYVKeyCode, carbonModifiers: modifierTransformer. carbonFlags ( from: [ . shift, . command] ) )
90+ XCTAssertEqual ( vShiftCharacter, " V " )
91+ let vOptionCharacter = keyboardLayout. currentCharacter ( for: QWERTYVKeyCode, carbonModifiers: modifierTransformer. carbonFlags ( from: [ . option, . command] ) )
92+ XCTAssertEqual ( vOptionCharacter, " √ " )
93+ let vShiftOptionCharacter = keyboardLayout. currentCharacter ( for: QWERTYVKeyCode, carbonModifiers: modifierTransformer. carbonFlags ( from: [ . shift, . option, . command] ) )
94+ XCTAssertEqual ( vShiftOptionCharacter, " ◊ " )
95+ guard !isInstalledABCKeyboard else { return }
96+ uninstallInputSource ( id: ABCKeyboardID)
97+ }
98+
7699 func testKeyCodesForDvorakKeyboard( ) {
77100 let isInstalledDvorakKeyboard = isInstalledInputSource ( id: dvorakKeyboardID)
78101 XCTAssertTrue ( installInputSource ( id: dvorakKeyboardID) )
@@ -85,11 +108,11 @@ final class KeyboardLayoutTests: XCTestCase {
85108 XCTAssertEqual ( vKey, . v)
86109 let vCharacter = keyboardLayout. currentCharacter ( for: DvorakVKeyCode, carbonModifiers: 0 )
87110 XCTAssertEqual ( vCharacter, " v " )
88- let vShiftCharacter = keyboardLayout. currentCharacter ( for: DvorakVKeyCode, carbonModifiers: modifierTransformer. carbonFlags ( from: [ . shift, . command ] ) )
111+ let vShiftCharacter = keyboardLayout. currentCharacter ( for: DvorakVKeyCode, carbonModifiers: modifierTransformer. carbonFlags ( from: . shift) )
89112 XCTAssertEqual ( vShiftCharacter, " V " )
90- let vOptionCharacter = keyboardLayout. currentCharacter ( for: DvorakVKeyCode, carbonModifiers: modifierTransformer. carbonFlags ( from: [ . option, . command ] ) )
113+ let vOptionCharacter = keyboardLayout. currentCharacter ( for: DvorakVKeyCode, carbonModifiers: modifierTransformer. carbonFlags ( from: [ . option] ) )
91114 XCTAssertEqual ( vOptionCharacter, " √ " )
92- let vShiftOptionCharacter = keyboardLayout. currentCharacter ( for: DvorakVKeyCode, carbonModifiers: modifierTransformer. carbonFlags ( from: [ . shift, . option, . command ] ) )
115+ let vShiftOptionCharacter = keyboardLayout. currentCharacter ( for: DvorakVKeyCode, carbonModifiers: modifierTransformer. carbonFlags ( from: [ . shift, . option] ) )
93116 XCTAssertEqual ( vShiftOptionCharacter, " ◊ " )
94117 guard !isInstalledDvorakKeyboard else { return }
95118 uninstallInputSource ( id: dvorakKeyboardID)
0 commit comments