fix: Audit-Befunde in Protokoll-Parsing, Error-Handling und Eingabe-Validierung

BragiResponse-Felder korrekt zugeordnet (endpoint=raw[1], command=raw[2],
status=raw[3]) gemäß Protokoll-Doku. PropertyNotSupported durch DeviceError
ersetzt, parse_response_validated in device.rs aktiviert, flush() mit
Iterationslimit gegen Endlosschleifen, Sidetone-Range per clap validiert
statt clamp, JSON-Escaping im hidpp-battery-waybar.sh, udev auf uaccess
umgestellt. 52 Tests grün.
This commit is contained in:
2026-03-28 00:37:36 +01:00
parent 05d138e922
commit 25eacfc02d
15 changed files with 208 additions and 48 deletions
+17
View File
@@ -68,6 +68,23 @@ fn battery_promille_to_percent_fractional() {
assert!((battery_promille_to_percent(735) - 73.5).abs() < f32::EPSILON);
}
#[test]
fn battery_status_icons() {
// Jede Variante muss ein nicht-leeres Icon liefern
assert!(!BatteryStatus::Offline.icon().is_empty());
assert!(!BatteryStatus::Discharging.icon().is_empty());
assert!(!BatteryStatus::Low.icon().is_empty());
assert!(!BatteryStatus::Charging.icon().is_empty());
assert!(!BatteryStatus::FullyCharged.icon().is_empty());
assert!(!BatteryStatus::Unknown(0xFF).icon().is_empty());
// Discharging und Low teilen das gleiche Icon
assert_eq!(BatteryStatus::Discharging.icon(), BatteryStatus::Low.icon());
// Charging und FullyCharged haben unterschiedliche Icons
assert_ne!(BatteryStatus::Charging.icon(), BatteryStatus::FullyCharged.icon());
}
#[test]
fn property_ids_match_protocol() {
assert_eq!(Property::BatteryLevel.id(), 0x0F);