tuika 0.11.1

The application framework for Rust terminal UIs — flexbox layout, overlays, focus, keymap, components, and safe ratatui interoperability.
Documentation
#[path = "../examples/support/mod.rs"]
mod support;

use support::{Cli, Output};

#[test]
fn theme_is_removed_from_example_specific_arguments() {
    let _environment_entry_point: fn() -> std::io::Result<Cli> = Cli::parse;
    let cli = Cli::parse_from([
        "out.svg".to_owned(),
        "--theme".to_owned(),
        "gruvbox-dark".to_owned(),
        "--dump".to_owned(),
    ])
    .unwrap();

    assert_eq!(cli.theme, tuika::themes::GRUVBOX_DARK);
    assert_eq!(cli.theme_name.as_deref(), Some("gruvbox-dark"));
    assert_eq!(cli.args, ["out.svg", "--dump"]);
}

#[test]
fn equals_syntax_selects_a_theme() {
    let cli = Cli::parse_from(["--theme=light".to_owned()]).unwrap();

    assert_eq!(cli.theme, tuika::themes::LIGHT);
    assert!(cli.args.is_empty());
}

#[test]
fn unknown_and_repeated_themes_are_rejected() {
    assert!(Cli::parse_from(["--theme=nope".to_owned()]).is_err());
    assert!(Cli::parse_from(["--theme=light".to_owned(), "--theme=dracula".to_owned(),]).is_err());
}

#[test]
fn no_output_path_selects_the_terminal_and_a_path_selects_svg() {
    assert_eq!(Output::parse(&[]).unwrap(), Output::Terminal);
    assert_eq!(
        Output::parse(&["docs/hero.svg".to_owned()]).unwrap(),
        Output::Svg("docs/hero.svg".into())
    );
    assert!(Output::parse(&["--dump".to_owned()]).is_err());
    assert!(Output::parse(&["one.svg".to_owned(), "two.svg".to_owned()]).is_err());
}