corsairctl/tests/properties_test.rs
nevaforget c5f8625345 feat: initiale Implementierung von corsairctl
Rust CLI-Tool für Corsair Bragi-Geräte (HS80 RGB Wireless, etc.).
Implementiert Protokoll-Kern, HID-Kommunikation, BragiDevice mit
RAII-Lifecycle, CLI-Subcommands (battery, sidetone, led, info, json,
udev), ALSA-Sidetone-Steuerung und Waybar-JSON-Output.

24 Unit-Tests für Packet-Bau, Response-Parsing und Property-Enums.
2026-03-27 17:34:37 +01:00

85 lines
2.9 KiB
Rust

// ABOUTME: Unit-Tests für Bragi Property-Enums und Battery-Level-Konvertierung.
// ABOUTME: Testet BatteryStatus-Konvertierung und Promille-zu-Prozent-Umrechnung.
use corsairctl::bragi::properties::{battery_promille_to_percent, BatteryStatus, Property};
#[test]
fn battery_status_from_byte_discharging() {
assert_eq!(BatteryStatus::from_byte(0x01), BatteryStatus::Discharging);
}
#[test]
fn battery_status_from_byte_charging_both_values() {
// Sowohl 0x03 als auch 0x04 bedeuten "Charging"
assert_eq!(BatteryStatus::from_byte(0x03), BatteryStatus::Charging);
assert_eq!(BatteryStatus::from_byte(0x04), BatteryStatus::Charging);
}
#[test]
fn battery_status_from_byte_all_known_values() {
assert_eq!(BatteryStatus::from_byte(0x00), BatteryStatus::Offline);
assert_eq!(BatteryStatus::from_byte(0x01), BatteryStatus::Discharging);
assert_eq!(BatteryStatus::from_byte(0x02), BatteryStatus::Low);
assert_eq!(BatteryStatus::from_byte(0x03), BatteryStatus::Charging);
assert_eq!(BatteryStatus::from_byte(0x04), BatteryStatus::Charging);
assert_eq!(BatteryStatus::from_byte(0x05), BatteryStatus::FullyCharged);
}
#[test]
fn battery_status_unknown_value() {
let status = BatteryStatus::from_byte(0xFF);
assert!(matches!(status, BatteryStatus::Unknown(0xFF)));
}
#[test]
fn battery_status_labels() {
assert_eq!(BatteryStatus::Offline.label(), "Offline");
assert_eq!(BatteryStatus::Discharging.label(), "Discharging");
assert_eq!(BatteryStatus::Low.label(), "Low");
assert_eq!(BatteryStatus::Charging.label(), "Charging");
assert_eq!(BatteryStatus::FullyCharged.label(), "Full");
assert_eq!(BatteryStatus::Unknown(0xFF).label(), "Unknown");
}
#[test]
fn battery_status_is_charging() {
assert!(BatteryStatus::Charging.is_charging());
assert!(!BatteryStatus::Discharging.is_charging());
assert!(!BatteryStatus::FullyCharged.is_charging());
assert!(!BatteryStatus::Offline.is_charging());
}
#[test]
fn battery_promille_to_percent_full() {
assert!((battery_promille_to_percent(1000) - 100.0).abs() < f32::EPSILON);
}
#[test]
fn battery_promille_to_percent_half() {
assert!((battery_promille_to_percent(500) - 50.0).abs() < f32::EPSILON);
}
#[test]
fn battery_promille_to_percent_empty() {
assert!((battery_promille_to_percent(0) - 0.0).abs() < f32::EPSILON);
}
#[test]
fn battery_promille_to_percent_fractional() {
// 735 Promille = 73.5%
assert!((battery_promille_to_percent(735) - 73.5).abs() < f32::EPSILON);
}
#[test]
fn property_ids_match_protocol() {
assert_eq!(Property::BatteryLevel.id(), 0x0F);
assert_eq!(Property::BatteryStatus.id(), 0x10);
assert_eq!(Property::Brightness.id(), 0x02);
assert_eq!(Property::Mode.id(), 0x03);
assert_eq!(Property::VendorId.id(), 0x11);
assert_eq!(Property::ProductId.id(), 0x12);
assert_eq!(Property::AppFirmware.id(), 0x13);
assert_eq!(Property::BuildFirmware.id(), 0x14);
assert_eq!(Property::Sidetone.id(), 0x09);
}