Files
ggbond268--mactools/Tests/App/MenuBarPanelPresenterTests.swift
wehub-resource-sync 1d1286fadb
Build / Build and test (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:18:38 +08:00

96 lines
3.0 KiB
Swift

import AppKit
import SwiftUI
import XCTest
@testable import MacTools
@MainActor
final class MenuBarPanelPresenterTests: XCTestCase {
private let suiteName = "MenuBarPanelPresenterTests"
override func tearDown() {
UserDefaults(suiteName: suiteName)?.removePersistentDomain(forName: suiteName)
super.tearDown()
}
func testPopoverBehaviorLetsStatusControllerOwnDismissal() {
XCTAssertEqual(MenuBarPanelPresenter.popoverBehavior, .applicationDefined)
}
func testUnifiedPanelUsesComponentGridWidth() {
XCTAssertEqual(MenuBarPanelLayout.baseWidth, ComponentPanelLayout.panelWidth)
}
func testPopoverSizingIsLayoutDriven() throws {
if #available(macOS 14.0, *) {
let presenter = makePresenter()
let popover = presenter.debugPopoverForTests
let controller = try XCTUnwrap(
popover.contentViewController as? NSHostingController<MenuBarUnifiedPanelContent>
)
XCTAssertTrue(controller.sizingOptions.isEmpty)
}
}
func testUnifiedPanelModelForwardsSelectionWithoutReplacingRoot() {
let model = MenuBarUnifiedPanelModel(
selectedTab: .components,
contentHeight: 100,
maximumFeatureListHeight: 300,
isPanelVisible: true
)
var selectedTab: MenuBarPanelTab?
model.onTabSelection = { selectedTab = $0 }
model.selectTab(.features)
XCTAssertEqual(selectedTab, .features)
XCTAssertEqual(model.selectedTab, .components)
XCTAssertEqual(model.contentHeight, 100)
}
func testContainsPresentedWindowIncludesMarkedSecondaryPanelWindow() {
let presenter = makePresenter()
let window = makeWindow()
MenuBarPanelWindowRegistry.markSecondaryPanel(window)
XCTAssertTrue(presenter.containsPresentedWindow(window))
}
func testContainsPresentedWindowRejectsUnmarkedWindow() {
let presenter = makePresenter()
let window = makeWindow()
XCTAssertFalse(presenter.containsPresentedWindow(window))
}
private func makePresenter() -> MenuBarPanelPresenter {
let defaults = UserDefaults(suiteName: suiteName)!
defaults.removePersistentDomain(forName: suiteName)
let host = PluginHost(
plugins: [],
shortcutStore: ShortcutStore(userDefaults: defaults),
pluginDisplayPreferencesStore: PluginDisplayPreferencesStore(userDefaults: defaults),
globalShortcutManager: GlobalShortcutManager()
)
return MenuBarPanelPresenter(
pluginHost: host,
onDismiss: {},
onOpenSettings: {},
onPresentDiskCleanConfiguration: {},
onPresentLaunchControlConfiguration: {},
onAllPanelsClosed: {}
)
}
private func makeWindow() -> NSWindow {
NSWindow(
contentRect: .zero,
styleMask: .borderless,
backing: .buffered,
defer: false
)
}
}