clap_builder 4.6.0

A simple to use, efficient, and full-featured Command Line Argument Parser
Documentation
use crate::Arg;
use crate::Command;

#[test]
fn propagate_version() {
    let mut cmd = Command::new("test")
        .propagate_version(true)
        .version("1.1")
        .subcommand(Command::new("sub1"));
    cmd._propagate();
    assert_eq!(
        cmd.get_subcommands().next().unwrap().get_version(),
        Some("1.1")
    );
}

#[test]
fn global_setting() {
    let mut cmd = Command::new("test")
        .disable_version_flag(true)
        .subcommand(Command::new("subcmd"));
    cmd._propagate();
    assert!(
        cmd.get_subcommands()
            .find(|s| s.get_name() == "subcmd")
            .unwrap()
            .is_disable_version_flag_set()
    );
}

// This test will *fail to compile* if Command is not Send + Sync
#[test]
fn app_send_sync() {
    fn foo<T: Send + Sync>(_: T) {}
    foo(Command::new("test"));
}

#[test]
fn issue_2090() {
    let mut cmd = Command::new("cmd")
        .disable_version_flag(true)
        .subcommand(Command::new("sub"));
    cmd._build_self(false);

    assert!(
        cmd.get_subcommands()
            .next()
            .unwrap()
            .is_disable_version_flag_set()
    );
}

// This test will *fail to compile* if Arg is not Send + Sync
#[test]
fn arg_send_sync() {
    fn foo<T: Send + Sync>(_: T) {}
    foo(Arg::new("test"));
}