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)) } }