fix: reject out-of-range led brightness instead of silently clamping
led accepted any u16 and main.rs clamped to 0..=1000 with no feedback, inconsistent with sidetone which rejects out-of-range at parse time. Add a clap range validator (0..=1000) and drop the silent clamp, so invalid input now fails loudly. Further quality-audit follow-ups: - remove dead BragiDevice::open() (no caller; binary uses open_with_verbose) - add tests: led range validation, format_battery for all status variants, waybar "unknown" class Bump 0.1.2 -> 0.1.3.
This commit is contained in:
@@ -44,3 +44,15 @@ fn sidetone_without_value_is_read_mode() {
|
||||
let result = parse_args(&["corsairctl", "sidetone"]);
|
||||
assert!(result.is_ok());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn led_rejects_above_1000() {
|
||||
let result = parse_args(&["corsairctl", "led", "1001"]);
|
||||
assert!(result.is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn led_accepts_max() {
|
||||
let result = parse_args(&["corsairctl", "led", "1000"]);
|
||||
assert!(result.is_ok());
|
||||
}
|
||||
|
||||
@@ -16,6 +16,30 @@ fn format_battery_charging() {
|
||||
assert_eq!(result, "Battery: 50% (Charging)");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn format_battery_fully_charged() {
|
||||
let result = output::format_battery(100.0, &BatteryStatus::FullyCharged);
|
||||
assert_eq!(result, "Battery: 100% (Full)");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn format_battery_low() {
|
||||
let result = output::format_battery(10.0, &BatteryStatus::Low);
|
||||
assert_eq!(result, "Battery: 10% (Low)");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn format_battery_offline() {
|
||||
let result = output::format_battery(0.0, &BatteryStatus::Offline);
|
||||
assert_eq!(result, "Battery: 0% (Offline)");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn format_battery_unknown() {
|
||||
let result = output::format_battery(50.0, &BatteryStatus::Unknown(0x99));
|
||||
assert_eq!(result, "Battery: 50% (Unknown)");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn format_brightness_value() {
|
||||
let result = output::format_brightness(330);
|
||||
@@ -125,6 +149,13 @@ fn waybar_json_class_at_boundary_30() {
|
||||
assert_eq!(parsed["class"], "warning");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn waybar_json_class_unknown() {
|
||||
let json_str = output::format_waybar_json(50.0, &BatteryStatus::Unknown(0x99), None);
|
||||
let parsed: serde_json::Value = serde_json::from_str(&json_str).unwrap();
|
||||
assert_eq!(parsed["class"], "unknown");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn waybar_json_offline() {
|
||||
let json_str = output::format_waybar_json(0.0, &BatteryStatus::Offline, None);
|
||||
|
||||
Reference in New Issue
Block a user