96 lines
3.0 KiB
Swift
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
|
|
)
|
|
}
|
|
}
|