1use crate::Arg;
2use crate::Command;
3
4#[test]
5fn propagate_version() {
6    let mut cmd = Command::new("test")
7        .propagate_version(true)
8        .version("1.1")
9        .subcommand(Command::new("sub1"));
10    cmd._propagate();
11    assert_eq!(
12        cmd.get_subcommands().next().unwrap().get_version(),
13        Some("1.1")
14    );
15}
16
17#[test]
18fn global_setting() {
19    let mut cmd = Command::new("test")
20        .disable_version_flag(true)
21        .subcommand(Command::new("subcmd"));
22    cmd._propagate();
23    assert!(cmd
24        .get_subcommands()
25        .find(|s| s.get_name() == "subcmd")
26        .unwrap()
27        .is_disable_version_flag_set());
28}
29
30// This test will *fail to compile* if Command is not Send + Sync
31#[test]
32fn app_send_sync() {
33    fn foo<T: Send + Sync>(_: T) {}
34    foo(Command::new("test"))
35}
36
37#[test]
38fn issue_2090() {
39    let mut cmd = Command::new("cmd")
40        .disable_version_flag(true)
41        .subcommand(Command::new("sub"));
42    cmd._build_self(false);
43
44    assert!(cmd
45        .get_subcommands()
46        .next()
47        .unwrap()
48        .is_disable_version_flag_set());
49}
50
51// This test will *fail to compile* if Arg is not Send + Sync
52#[test]
53fn arg_send_sync() {
54    fn foo<T: Send + Sync>(_: T) {}
55    foo(Arg::new("test"))
56}
57