feat: show sidetone level in Waybar tooltip
Tooltip now shows "HS80: 42% — Discharging | Sidetone: 10/23" when the ALSA sidetone control is available. Falls back gracefully to battery-only tooltip when sidetone cannot be read. Bump version to 0.1.1.
This commit is contained in:
+28
-12
@@ -45,14 +45,14 @@ fn format_info_values() {
|
||||
|
||||
#[test]
|
||||
fn waybar_json_is_valid_json() {
|
||||
let json_str = output::format_waybar_json(50.0, &BatteryStatus::Discharging);
|
||||
let json_str = output::format_waybar_json(50.0, &BatteryStatus::Discharging, None);
|
||||
let parsed: serde_json::Value = serde_json::from_str(&json_str).expect("muss valides JSON sein");
|
||||
assert!(parsed.is_object());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn waybar_json_has_required_fields() {
|
||||
let json_str = output::format_waybar_json(50.0, &BatteryStatus::Discharging);
|
||||
let json_str = output::format_waybar_json(50.0, &BatteryStatus::Discharging, None);
|
||||
let parsed: serde_json::Value = serde_json::from_str(&json_str).unwrap();
|
||||
assert!(parsed["text"].is_string(), "text fehlt");
|
||||
assert!(parsed["tooltip"].is_string(), "tooltip fehlt");
|
||||
@@ -62,56 +62,56 @@ fn waybar_json_has_required_fields() {
|
||||
|
||||
#[test]
|
||||
fn waybar_json_percentage_matches_level() {
|
||||
let json_str = output::format_waybar_json(73.5, &BatteryStatus::Discharging);
|
||||
let json_str = output::format_waybar_json(73.5, &BatteryStatus::Discharging, None);
|
||||
let parsed: serde_json::Value = serde_json::from_str(&json_str).unwrap();
|
||||
assert_eq!(parsed["percentage"], 74); // 73.5 rounded
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn waybar_json_class_charging() {
|
||||
let json_str = output::format_waybar_json(50.0, &BatteryStatus::Charging);
|
||||
let json_str = output::format_waybar_json(50.0, &BatteryStatus::Charging, None);
|
||||
let parsed: serde_json::Value = serde_json::from_str(&json_str).unwrap();
|
||||
assert_eq!(parsed["class"], "charging");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn waybar_json_class_fully_charged() {
|
||||
let json_str = output::format_waybar_json(100.0, &BatteryStatus::FullyCharged);
|
||||
let json_str = output::format_waybar_json(100.0, &BatteryStatus::FullyCharged, None);
|
||||
let parsed: serde_json::Value = serde_json::from_str(&json_str).unwrap();
|
||||
assert_eq!(parsed["class"], "charging");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn waybar_json_class_low() {
|
||||
let json_str = output::format_waybar_json(20.0, &BatteryStatus::Low);
|
||||
let json_str = output::format_waybar_json(20.0, &BatteryStatus::Low, None);
|
||||
let parsed: serde_json::Value = serde_json::from_str(&json_str).unwrap();
|
||||
assert_eq!(parsed["class"], "low");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn waybar_json_class_critical_when_discharging_below_15() {
|
||||
let json_str = output::format_waybar_json(10.0, &BatteryStatus::Discharging);
|
||||
let json_str = output::format_waybar_json(10.0, &BatteryStatus::Discharging, None);
|
||||
let parsed: serde_json::Value = serde_json::from_str(&json_str).unwrap();
|
||||
assert_eq!(parsed["class"], "critical");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn waybar_json_class_warning_when_discharging_below_30() {
|
||||
let json_str = output::format_waybar_json(25.0, &BatteryStatus::Discharging);
|
||||
let json_str = output::format_waybar_json(25.0, &BatteryStatus::Discharging, None);
|
||||
let parsed: serde_json::Value = serde_json::from_str(&json_str).unwrap();
|
||||
assert_eq!(parsed["class"], "warning");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn waybar_json_class_normal_when_discharging_above_30() {
|
||||
let json_str = output::format_waybar_json(50.0, &BatteryStatus::Discharging);
|
||||
let json_str = output::format_waybar_json(50.0, &BatteryStatus::Discharging, None);
|
||||
let parsed: serde_json::Value = serde_json::from_str(&json_str).unwrap();
|
||||
assert_eq!(parsed["class"], "normal");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn waybar_json_class_at_boundary_15() {
|
||||
let json_str = output::format_waybar_json(15.0, &BatteryStatus::Discharging);
|
||||
let json_str = output::format_waybar_json(15.0, &BatteryStatus::Discharging, None);
|
||||
let parsed: serde_json::Value = serde_json::from_str(&json_str).unwrap();
|
||||
// 15.0 ist <= 15.0 → critical
|
||||
assert_eq!(parsed["class"], "critical");
|
||||
@@ -119,7 +119,7 @@ fn waybar_json_class_at_boundary_15() {
|
||||
|
||||
#[test]
|
||||
fn waybar_json_class_at_boundary_30() {
|
||||
let json_str = output::format_waybar_json(30.0, &BatteryStatus::Discharging);
|
||||
let json_str = output::format_waybar_json(30.0, &BatteryStatus::Discharging, None);
|
||||
let parsed: serde_json::Value = serde_json::from_str(&json_str).unwrap();
|
||||
// 30.0 ist <= 30.0 → warning
|
||||
assert_eq!(parsed["class"], "warning");
|
||||
@@ -127,7 +127,23 @@ fn waybar_json_class_at_boundary_30() {
|
||||
|
||||
#[test]
|
||||
fn waybar_json_offline() {
|
||||
let json_str = output::format_waybar_json(0.0, &BatteryStatus::Offline);
|
||||
let json_str = output::format_waybar_json(0.0, &BatteryStatus::Offline, None);
|
||||
let parsed: serde_json::Value = serde_json::from_str(&json_str).unwrap();
|
||||
assert_eq!(parsed["class"], "offline");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn waybar_json_tooltip_without_sidetone() {
|
||||
let json_str = output::format_waybar_json(50.0, &BatteryStatus::Discharging, None);
|
||||
let parsed: serde_json::Value = serde_json::from_str(&json_str).unwrap();
|
||||
let tooltip = parsed["tooltip"].as_str().unwrap();
|
||||
assert!(!tooltip.contains("Sidetone"), "tooltip should not contain sidetone when None");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn waybar_json_tooltip_with_sidetone() {
|
||||
let json_str = output::format_waybar_json(50.0, &BatteryStatus::Discharging, Some(10));
|
||||
let parsed: serde_json::Value = serde_json::from_str(&json_str).unwrap();
|
||||
let tooltip = parsed["tooltip"].as_str().unwrap();
|
||||
assert!(tooltip.contains("Sidetone: 10/23"), "tooltip should contain sidetone value");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user