import Testing @testable import MetricsProvider // „Am Netz" allein beantwortet die Frage nicht, die man hat, wenn der // Ladestand stehen bleibt: lädt es gerade nicht, weil das Limit erreicht ist, // oder stimmt etwas nicht? @Suite("Ladezustand in Worten") struct ChargeActivityTests { @Test("Lädt schlägt alles andere") func chargingWins() { #expect(ChargeActivity.resolve(isCharging: true, isPluggedIn: true, charge: 0.5, limit: 85) == .charging) } @Test("Ohne Netzteil ist es Akkubetrieb") func unpluggedIsOnBattery() { #expect(ChargeActivity.resolve(isCharging: false, isPluggedIn: false, charge: 0.5, limit: 85) == .onBattery) } @Test("Am Limit steht der Grund dabei") func atLimitIsExplained() { #expect(ChargeActivity.resolve(isCharging: false, isPluggedIn: true, charge: 0.85, limit: 85) == .pausedAtLimit(85)) } @Test("Knapp unter dem Limit zählt auch") func justBelowTheLimitCounts() { // Der Ladestand pendelt um die Grenze; auf das Prozent genau zu // vergleichen hieße, den Grund die halbe Zeit zu verschweigen. #expect(ChargeActivity.resolve(isCharging: false, isPluggedIn: true, charge: 0.84, limit: 85) == .pausedAtLimit(85)) } @Test("Weit unter dem Limit ist es kein Limit-Halt") func wellBelowIsNotTheLimit() { // Dann steht das Laden aus einem anderen Grund — etwa weil macOS den // Akku schont. Einen falschen Grund zu nennen wäre schlimmer als // keinen. #expect(ChargeActivity.resolve(isCharging: false, isPluggedIn: true, charge: 0.40, limit: 85) == .pluggedNotCharging) } @Test("Ohne bekanntes Limit bleibt es beim schlichten Befund") func withoutLimitStaysPlain() { #expect(ChargeActivity.resolve(isCharging: false, isPluggedIn: true, charge: 0.99, limit: nil) == .pluggedNotCharging) } @Test("Ein Limit von hundert ist kein Limit") func hundredIsNoLimit() { #expect(ChargeActivity.resolve(isCharging: false, isPluggedIn: true, charge: 1.0, limit: 100) == .pluggedNotCharging) } }