Fix #155: remap-aware bonsplit tooltips + browser split shortcuts (#200)

* Issue #155: remap bonsplit tooltips and add browser split shortcuts

* Fix split button mousedown feedback regression

* Match split button sizing with main
This commit is contained in:
Lawrence Chen 2026-02-20 15:17:00 -08:00 committed by GitHub
parent 573cec4a75
commit df9ba6dcd9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 219 additions and 5 deletions

View file

@ -225,6 +225,74 @@ final class ShortcutHintDebugSettingsTests: XCTestCase {
}
}
final class KeyboardShortcutSettingsTests: XCTestCase {
func testBrowserSplitShortcutDefaults() {
let keys = [
KeyboardShortcutSettings.Action.splitBrowserRight.defaultsKey,
KeyboardShortcutSettings.Action.splitBrowserDown.defaultsKey
]
let defaults = UserDefaults.standard
let previousValues = keys.map { key in (key, defaults.data(forKey: key)) }
defer {
for (key, value) in previousValues {
if let value {
defaults.set(value, forKey: key)
} else {
defaults.removeObject(forKey: key)
}
}
}
keys.forEach { defaults.removeObject(forKey: $0) }
XCTAssertEqual(KeyboardShortcutSettings.shortcut(for: .splitBrowserRight).displayString, "⌥⌘D")
XCTAssertEqual(KeyboardShortcutSettings.shortcut(for: .splitBrowserDown).displayString, "⌥⇧⌘D")
}
@MainActor
func testWorkspaceConfiguresSplitButtonTooltipsWithEffectiveShortcuts() throws {
let keys = [
KeyboardShortcutSettings.Action.newSurface.defaultsKey,
KeyboardShortcutSettings.Action.openBrowser.defaultsKey,
KeyboardShortcutSettings.Action.splitRight.defaultsKey,
KeyboardShortcutSettings.Action.splitDown.defaultsKey
]
let defaults = UserDefaults.standard
let previousValues = keys.map { key in (key, defaults.data(forKey: key)) }
defer {
for (key, value) in previousValues {
if let value {
defaults.set(value, forKey: key)
} else {
defaults.removeObject(forKey: key)
}
}
}
let customPairs: [(KeyboardShortcutSettings.Action, StoredShortcut)] = [
(.newSurface, StoredShortcut(key: "1", command: true, shift: false, option: false, control: false)),
(.openBrowser, StoredShortcut(key: "2", command: true, shift: false, option: false, control: false)),
(.splitRight, StoredShortcut(key: "3", command: true, shift: false, option: false, control: false)),
(.splitDown, StoredShortcut(key: "4", command: true, shift: false, option: false, control: false)),
]
for (action, shortcut) in customPairs {
guard let data = try? JSONEncoder().encode(shortcut) else {
XCTFail("Failed to encode shortcut for \(action.rawValue)")
return
}
defaults.set(data, forKey: action.defaultsKey)
}
let workspace = Workspace(title: "Tooltip Test")
let tooltips = workspace.bonsplitController.configuration.appearance.splitButtonTooltips
XCTAssertEqual(tooltips.newTerminal, "New Terminal (⌘1)")
XCTAssertEqual(tooltips.newBrowser, "New Browser (⌘2)")
XCTAssertEqual(tooltips.splitRight, "Split Right (⌘3)")
XCTAssertEqual(tooltips.splitDown, "Split Down (⌘4)")
}
}
final class ShortcutHintLanePlannerTests: XCTestCase {
func testAssignLanesKeepsSeparatedIntervalsOnSingleLane() {
let intervals: [ClosedRange<CGFloat>] = [0...20, 28...40, 48...64]