Refresh puter UI, power telemetry and demand-aware monitoring
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
import XCTest
|
||||
@testable import puter
|
||||
|
||||
final class BatteryRegistryTests: XCTestCase {
|
||||
func testChargingSeparatesLoadInputAndCapability() {
|
||||
let result = BatteryRegistryReader.parse([
|
||||
"BatteryInstalled": true, "ExternalConnected": true, "IsCharging": true,
|
||||
"CurrentCapacity": 77, "Voltage": 12_500, "Amperage": 3_600,
|
||||
"PowerTelemetryData": ["SystemLoad": 15_000, "SystemPowerIn": 61_000],
|
||||
"AdapterDetails": ["Name": "140W USB-C Power Adapter", "Watts": 94,
|
||||
"AdapterVoltage": 20_000, "Current": 4_700,
|
||||
"UsbHvcMenu": [["MaxVoltage": 20_000, "MaxCurrent": 4_700]]]
|
||||
])
|
||||
XCTAssertTrue(result.isPresent)
|
||||
XCTAssertEqual(result.systemPowerWatts, 15)
|
||||
XCTAssertEqual(result.adapterInputWatts, 61)
|
||||
XCTAssertEqual(result.measuredBatteryWatts, 45)
|
||||
XCTAssertEqual(result.batteryFlowTitle, "Battery charging")
|
||||
XCTAssertEqual(result.adapter?.negotiatedWatts, 94)
|
||||
XCTAssertEqual(result.adapter?.profiles.count, 1)
|
||||
}
|
||||
|
||||
func testUnsignedNegativeCurrentAndDisconnectedStaleAdapter() {
|
||||
let result = BatteryRegistryReader.parse([
|
||||
"BatteryInstalled": true, "ExternalConnected": false, "Voltage": 12_000,
|
||||
"Amperage": NSNumber(value: UInt64(bitPattern: -2_000)),
|
||||
"PowerTelemetryData": ["SystemPowerIn": 50_000],
|
||||
"AdapterDetails": ["Watts": 94]
|
||||
])
|
||||
XCTAssertEqual(result.currentAmps, -2)
|
||||
XCTAssertEqual(result.measuredBatteryWatts, 24)
|
||||
XCTAssertEqual(result.batteryFlowTitle, "Battery discharge")
|
||||
XCTAssertNil(result.adapter)
|
||||
XCTAssertFalse(result.hasAdapterInput)
|
||||
XCTAssertEqual(result.adapterInputWatts, 0)
|
||||
}
|
||||
|
||||
func testZeroIsDifferentFromMissing() {
|
||||
let idle = BatteryRegistryReader.parse(["BatteryInstalled": true, "Voltage": 12_000, "Amperage": 0])
|
||||
XCTAssertEqual(idle.measuredBatteryWatts, 0)
|
||||
XCTAssertEqual(idle.batteryFlowTitle, "Battery idle")
|
||||
let absent = BatteryRegistryReader.parse([:])
|
||||
XCTAssertNil(absent.measuredBatteryWatts)
|
||||
XCTAssertFalse(absent.hasSystemPower)
|
||||
XCTAssertEqual(absent.powerSourceDescription, "External power")
|
||||
}
|
||||
|
||||
func testNestedCapacityOnNewerBatteryRegistry() {
|
||||
let result = BatteryRegistryReader.parse(["BatteryInstalled": true,
|
||||
"BatteryData": ["NominalChargeCapacity": 5630, "DesignCapacity": 6249, "RemainingCapacity": 4600]])
|
||||
XCTAssertEqual(result.fullChargeCapacityMAh, 5630)
|
||||
XCTAssertEqual(result.designCapacityMAh, 6249)
|
||||
XCTAssertEqual(result.currentCapacityMAh, 4600)
|
||||
XCTAssertEqual(result.healthPercent, 90.09, accuracy: 0.01)
|
||||
XCTAssertFalse(result.hasBatteryTemperature)
|
||||
}
|
||||
|
||||
func testInvalidPowerAndCurrentAreNotMeasurements() {
|
||||
let result = BatteryRegistryReader.parse([
|
||||
"BatteryInstalled": true, "Voltage": 12_000, "Amperage": 999_999,
|
||||
"PowerTelemetryData": ["SystemLoad": Double.nan, "SystemPowerIn": -10]
|
||||
])
|
||||
XCTAssertNil(result.measuredBatteryWatts)
|
||||
XCTAssertFalse(result.hasSystemPower)
|
||||
XCTAssertFalse(result.hasAdapterInput)
|
||||
}
|
||||
|
||||
func testOpenDropdownRequestsPowerButNotFullInventory() {
|
||||
let demand = SamplingDemand(active: false, section: .processes, speed: .normal,
|
||||
recording: false, alerts: false, menuBar: true, powerMenu: false,
|
||||
menuPresented: true)
|
||||
XCTAssertTrue(demand.hardware)
|
||||
XCTAssertTrue(demand.telemetry)
|
||||
XCTAssertFalse(demand.processInventory)
|
||||
XCTAssertEqual(demand.interval, .seconds(5))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user