nm-wifi 0.3.0

A Terminal User Interface for managing Wi-Fi connections on Linux
Documentation
mod render;
mod scenarios;
mod svg;
mod writer;

pub use render::{HEIGHT, WIDTH, render_app};
pub use scenarios::{DemoScreen, build_demo_screen, demo_shot_apps};
pub use svg::buffer_to_svg;
pub use writer::{write_demo_svgs, write_demo_svgs_with_backend};

#[cfg(all(test, feature = "demo"))]
mod tests {
    use super::{buffer_to_svg, demo_shot_apps, render_app};
    use crate::network::demo_networks;

    fn buffer_text(buffer: &ratatui::buffer::Buffer) -> String {
        let mut text = String::new();
        for y in 0..buffer.area.height {
            for x in 0..buffer.area.width {
                text.push_str(buffer[(x, y)].symbol());
            }
            text.push('\n');
        }
        text
    }

    #[test]
    fn demo_shot_apps_cover_all_documented_screens() {
        let names: Vec<_> = demo_shot_apps(&demo_networks())
            .into_iter()
            .map(|(name, _)| name)
            .collect();

        assert_eq!(
            names,
            vec![
                "scanning.svg",
                "network-list.svg",
                "help.svg",
                "details.svg",
                "password.svg",
                "connecting.svg",
                "disconnecting.svg",
                "result-success.svg",
                "result-error.svg",
            ]
        );
    }

    #[test]
    fn rendered_demo_screens_export_valid_svg_shell() {
        let (_, app) = demo_shot_apps(&demo_networks())
            .into_iter()
            .find(|(name, _)| *name == "result-error.svg")
            .expect("result error screen exists");

        let buffer = render_app(&app).expect("render succeeds");
        let svg = buffer_to_svg(&buffer);
        let text = buffer_text(&buffer);

        assert!(svg.starts_with("<svg "));
        assert!(text.contains("Failed to find WiFi device in NetworkManager"));
        assert!(text.contains("CatCat"));
    }
}