ggbond268--mactools
72 行
2.1 KiB
Swift
72 行
2.1 KiB
Swift
import XCTest
|
|
@testable import AutoHideDockPlugin
|
|
|
|
@MainActor
|
|
final class AutoHideDockPluginTests: XCTestCase {
|
|
func testMetadataIdentifiesAutoHideDockPlugin() {
|
|
let plugin = AutoHideDockPlugin(
|
|
commandRunner: MockDockCommandRunner(),
|
|
stateReader: { false }
|
|
)
|
|
|
|
XCTAssertEqual(plugin.metadata.id, "auto-hide-dock")
|
|
XCTAssertEqual(plugin.metadata.title, "自动隐藏程序坞")
|
|
XCTAssertEqual(plugin.primaryPanelDescriptor.controlStyle, .switch)
|
|
}
|
|
|
|
func testInitialStateReflectsStateReader() {
|
|
let plugin = AutoHideDockPlugin(
|
|
commandRunner: MockDockCommandRunner(),
|
|
stateReader: { true }
|
|
)
|
|
|
|
XCTAssertTrue(plugin.primaryPanelState.isOn)
|
|
XCTAssertEqual(plugin.primaryPanelState.subtitle, "已开启")
|
|
}
|
|
|
|
func testSwitchOnUpdatesDockState() {
|
|
let runner = MockDockCommandRunner()
|
|
let plugin = AutoHideDockPlugin(
|
|
commandRunner: runner,
|
|
stateReader: { false }
|
|
)
|
|
|
|
plugin.handleAction(.setSwitch(true))
|
|
|
|
XCTAssertEqual(runner.setDockAutohideCalls, [true])
|
|
XCTAssertTrue(plugin.primaryPanelState.isOn)
|
|
XCTAssertNil(plugin.primaryPanelState.errorMessage)
|
|
}
|
|
|
|
func testSwitchFailureKeepsPreviousStateAndSetsError() {
|
|
let runner = MockDockCommandRunner()
|
|
runner.shouldFailSet = true
|
|
let plugin = AutoHideDockPlugin(
|
|
commandRunner: runner,
|
|
stateReader: { false }
|
|
)
|
|
|
|
plugin.handleAction(.setSwitch(true))
|
|
|
|
XCTAssertFalse(plugin.primaryPanelState.isOn)
|
|
XCTAssertNotNil(plugin.primaryPanelState.errorMessage)
|
|
}
|
|
}
|
|
|
|
private final class MockDockCommandRunner: DockCommandRunning {
|
|
var shouldFailSet = false
|
|
var setDockAutohideCalls: [Bool] = []
|
|
|
|
func setDockAutohide(_ isEnabled: Bool) throws {
|
|
if shouldFailSet {
|
|
throw NSError(
|
|
domain: "AutoHideDockPluginTests",
|
|
code: 1,
|
|
userInfo: [NSLocalizedDescriptionKey: "set failed"]
|
|
)
|
|
}
|
|
|
|
setDockAutohideCalls.append(isEnabled)
|
|
}
|
|
}
|