94 lines
2.5 KiB
Swift
94 lines
2.5 KiB
Swift
import XCTest
|
|
@testable import MacTools
|
|
@testable import FixDamagedAppPlugin
|
|
|
|
@MainActor
|
|
final class FixDamagedAppPluginTests: XCTestCase {
|
|
|
|
// MARK: - Metadata
|
|
|
|
func testMetadataID() {
|
|
let plugin = FixDamagedAppPlugin()
|
|
|
|
XCTAssertEqual(plugin.metadata.id, "fix-damaged-app")
|
|
}
|
|
|
|
func testMetadataTitle() {
|
|
let plugin = FixDamagedAppPlugin()
|
|
|
|
XCTAssertEqual(plugin.metadata.title, "修复损坏应用")
|
|
}
|
|
|
|
func testMetadataDefaultDescription() {
|
|
let plugin = FixDamagedAppPlugin()
|
|
|
|
XCTAssertEqual(plugin.metadata.defaultDescription, "移除隔离属性,解决「已损坏」或「不受信任」提示")
|
|
}
|
|
|
|
// MARK: - Primary Panel Descriptor
|
|
|
|
func testControlStyleIsButton() {
|
|
let plugin = FixDamagedAppPlugin()
|
|
|
|
XCTAssertEqual(plugin.primaryPanelDescriptor.controlStyle, .button)
|
|
XCTAssertEqual(plugin.primaryPanelDescriptor.buttonTitle, "选择")
|
|
}
|
|
|
|
func testMenuActionBehaviorIsDismissBeforeHandling() {
|
|
let plugin = FixDamagedAppPlugin()
|
|
|
|
XCTAssertEqual(plugin.primaryPanelDescriptor.menuActionBehavior, .dismissBeforeHandling)
|
|
}
|
|
|
|
// MARK: - Initial Primary Panel State
|
|
|
|
func testInitialPrimaryStateIsEnabledAndNotOn() {
|
|
let plugin = FixDamagedAppPlugin()
|
|
|
|
let state = plugin.primaryPanelState
|
|
XCTAssertTrue(state.isEnabled)
|
|
XCTAssertFalse(state.isOn)
|
|
}
|
|
|
|
func testInitialPrimarySubtitlePromptsSelection() {
|
|
let plugin = FixDamagedAppPlugin()
|
|
|
|
XCTAssertEqual(plugin.primaryPanelState.subtitle, "选择 .app 文件以修复")
|
|
}
|
|
|
|
func testInitialPrimaryStateHasNoError() {
|
|
let plugin = FixDamagedAppPlugin()
|
|
|
|
XCTAssertNil(plugin.primaryPanelState.errorMessage)
|
|
}
|
|
|
|
// MARK: - Permission & Settings
|
|
|
|
func testPermissionRequirementsIsEmpty() {
|
|
let plugin = FixDamagedAppPlugin()
|
|
|
|
XCTAssertTrue(plugin.permissionRequirements.isEmpty)
|
|
}
|
|
|
|
func testSettingsSectionsIsEmpty() {
|
|
let plugin = FixDamagedAppPlugin()
|
|
|
|
XCTAssertTrue(plugin.settingsSections.isEmpty)
|
|
}
|
|
|
|
func testPermissionStateAlwaysGranted() {
|
|
let plugin = FixDamagedAppPlugin()
|
|
|
|
let state = plugin.permissionState(for: "any-permission-id")
|
|
XCTAssertTrue(state.isGranted)
|
|
}
|
|
|
|
// MARK: - Plugin Host Integration
|
|
|
|
func testPluginHostIncludesFixDamagedApp() {
|
|
let host = makePluginHostForTests(plugins: [FixDamagedAppPlugin()])
|
|
|
|
XCTAssertTrue(host.featureManagementItems.contains { $0.id == "fix-damaged-app" })
|
|
}
|
|
}
|