Increment 5: Settings, launch-at-login & rich menu-bar HUD
- AppSettings (@MainActor, UserDefaults-persisted): refresh interval, menu-bar metric, notifications toggle, CPU/disk/low-battery alert thresholds, launch-at-login; pushes changes into live services; nonisolated clampInterval - LoginItem via SMAppService (macOS 13+), register/unregister with error catch - SystemMonitor: runtime-configurable refresh cadence (was hardcoded 3s) - SettingsView (⌘,): General (login, interval, menu-bar metric) + Alerts (notifications + thresholds) tabs - MenuBarLabel: user-selectable menu-bar metric (CPU/Memory/Health/Download) - Menu-bar dropdown: Top CPU Consumers with one-click quit - 3 new tests (55 total); smoke: runs clean, Settings… menu registered Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
27
TopManagerTests/SettingsTests.swift
Normal file
27
TopManagerTests/SettingsTests.swift
Normal file
@@ -0,0 +1,27 @@
|
||||
import XCTest
|
||||
@testable import TopManager
|
||||
|
||||
final class SettingsTests: XCTestCase {
|
||||
|
||||
func testClampIntervalBounds() {
|
||||
XCTAssertEqual(AppSettings.clampInterval(0.2), 1)
|
||||
XCTAssertEqual(AppSettings.clampInterval(100), 30)
|
||||
XCTAssertEqual(AppSettings.clampInterval(5), 5)
|
||||
XCTAssertEqual(AppSettings.clampInterval(1), 1)
|
||||
XCTAssertEqual(AppSettings.clampInterval(30), 30)
|
||||
}
|
||||
|
||||
func testMenuBarMetricRoundTrip() {
|
||||
for metric in MenuBarMetric.allCases {
|
||||
XCTAssertEqual(MenuBarMetric(rawValue: metric.rawValue), metric)
|
||||
}
|
||||
XCTAssertNil(MenuBarMetric(rawValue: "nonexistent"))
|
||||
}
|
||||
|
||||
func testMenuBarMetricCoversKeyMetrics() {
|
||||
XCTAssertTrue(MenuBarMetric.allCases.contains(.cpu))
|
||||
XCTAssertTrue(MenuBarMetric.allCases.contains(.memory))
|
||||
XCTAssertTrue(MenuBarMetric.allCases.contains(.health))
|
||||
XCTAssertTrue(MenuBarMetric.allCases.contains(.download))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user