44 lines
1.9 KiB
Swift
44 lines
1.9 KiB
Swift
// SPDX-FileCopyrightText: 2026 Kaede Akino
|
|
// SPDX-License-Identifier: GPL-3.0-only
|
|
|
|
import AppKit
|
|
import SwiftUI
|
|
import Testing
|
|
|
|
@testable import Termind
|
|
|
|
@Suite(.requiresVisibleWindow, .serialized)
|
|
@MainActor
|
|
struct WorkspaceNumberShortcutTests {
|
|
@Test func hiddenButtonsHandleEveryDigitInTheirWindow() async throws {
|
|
let model = WindowModel(workspaces: (0..<10).map { _ in Workspace(pane: Pane(.empty)) })
|
|
let native = NSWindow(
|
|
contentRect: NSRect(x: 0, y: 0, width: 300, height: 200),
|
|
styleMask: [.titled, .closable], backing: .buffered, defer: false)
|
|
native.isReleasedWhenClosed = false
|
|
native.contentView = NSHostingView(
|
|
rootView: Color.clear.background { WorkspaceNumberShortcuts(window: model) })
|
|
native.makeKeyAndOrderFront(nil)
|
|
NSApp.activate(ignoringOtherApps: true)
|
|
defer { native.close() }
|
|
for _ in 0..<100 where !native.isKeyWindow { try await Task.sleep(for: .milliseconds(10)) }
|
|
native.contentView?.layoutSubtreeIfNeeded()
|
|
|
|
let keyCodes: [UInt16] = [18, 19, 20, 21, 23, 22, 26, 28, 25]
|
|
for (offset, code) in keyCodes.enumerated() {
|
|
model.selectVault()
|
|
let digit = String(offset + 1)
|
|
let event = try #require(
|
|
NSEvent.keyEvent(
|
|
with: .keyDown, location: .zero, modifierFlags: .command,
|
|
timestamp: ProcessInfo.processInfo.systemUptime, windowNumber: native.windowNumber,
|
|
context: nil, characters: digit, charactersIgnoringModifiers: digit,
|
|
isARepeat: false, keyCode: code))
|
|
|
|
#expect(AppShortcutRegistry.shared.routesToApplication(event))
|
|
#expect(native.performKeyEquivalent(with: event))
|
|
#expect(model.selectedWorkspaceID == model.workspaces[offset == 8 ? 9 : offset].id)
|
|
}
|
|
}
|
|
}
|