use crate::common; use snapbox::assert_data_eq; #[cfg(unix)] const CMD: &str = "elvish"; #[cfg(unix)] type RuntimeBuilder = completest_pty::ElvishRuntimeBuilder; #[test] fn basic() { let name = "my-app"; let cmd = common::basic_command(name); common::assert_matches( snapbox::file!["../snapshots/basic.elvish"], clap_complete::shells::Elvish, cmd, name, ); } #[test] fn feature_sample() { let name = "my-app"; let cmd = common::feature_sample_command(name); common::assert_matches( snapbox::file!["../snapshots/feature_sample.elvish"], clap_complete::shells::Elvish, cmd, name, ); } #[test] fn special_commands() { let name = "my-app"; let cmd = common::special_commands_command(name); common::assert_matches( snapbox::file!["../snapshots/special_commands.elvish"], clap_complete::shells::Elvish, cmd, name, ); } #[test] fn quoting() { let name = "my-app"; let cmd = common::quoting_command(name); common::assert_matches( snapbox::file!["../snapshots/quoting.elvish"], clap_complete::shells::Elvish, cmd, name, ); } #[test] fn aliases() { let name = "my-app"; let cmd = common::aliases_command(name); common::assert_matches( snapbox::file!["../snapshots/aliases.elvish"], clap_complete::shells::Elvish, cmd, name, ); } #[test] fn sub_subcommands() { let name = "my-app"; let cmd = common::sub_subcommands_command(name); common::assert_matches( snapbox::file!["../snapshots/sub_subcommands.elvish"], clap_complete::shells::Elvish, cmd, name, ); } #[test] fn custom_bin_name() { let name = "my-app"; let bin_name = "bin-name"; let cmd = common::basic_command(name); common::assert_matches( snapbox::file!["../snapshots/custom_bin_name.elvish"], clap_complete::shells::Elvish, cmd, bin_name, ); } #[test] fn value_hint() { let name = "my-app"; let cmd = common::value_hint_command(name); common::assert_matches( snapbox::file!["../snapshots/value_hint.elvish"], clap_complete::shells::Elvish, cmd, name, ); } #[test] fn value_terminator() { let name = "my-app"; let cmd = common::value_terminator_command(name); common::assert_matches( snapbox::file!["../snapshots/value_terminator.elvish"], clap_complete::shells::Elvish, cmd, name, ); } #[test] fn two_multi_valued_arguments() { let name = "my-app"; let cmd = common::two_multi_valued_arguments_command(name); common::assert_matches( snapbox::file!["../snapshots/two_multi_valued_arguments.elvish"], clap_complete::shells::Elvish, cmd, name, ); } #[test] fn subcommand_last() { let name = "my-app"; let cmd = common::subcommand_last(name); common::assert_matches( snapbox::file!["../snapshots/subcommand_last.elvish"], clap_complete::shells::Elvish, cmd, name, ); } #[test] #[cfg(unix)] fn register_completion() { common::register_example::("static", "exhaustive"); } #[test] #[cfg(unix)] fn complete_static_toplevel() { if !common::has_command(CMD) { return; } let term = completest::Term::new(); let mut runtime = common::load_runtime::("static", "exhaustive"); let input = "exhaustive \t"; let expected = snapbox::str![[r#" % exhaustive --generate COMPLETING argument --generate generate --global everywhere --help Print help --version Print version -V Print version -h Print help action action alias alias help Print this message or the help of the given subcommand(s) hint hint last last pacman pacman quote quote value value "#]]; let actual = runtime.complete(input, &term).unwrap(); assert_data_eq!(actual, expected); } #[test] #[cfg(all(unix, feature = "unstable-dynamic"))] fn register_dynamic_env() { common::register_example::("dynamic-env", "exhaustive"); } #[test] #[cfg(all(unix, feature = "unstable-dynamic"))] fn complete_dynamic_env_toplevel() { if !common::has_command(CMD) { return; } let term = completest::Term::new(); let mut runtime = common::load_runtime::("dynamic-env", "exhaustive"); let input = "exhaustive \t"; let expected = snapbox::str![[r#" % exhaustive --generate COMPLETING argument --generate --help action help last quote --global --version alias hint pacman value "#]]; let actual = runtime.complete(input, &term).unwrap(); assert_data_eq!(actual, expected); } #[test] #[cfg(all(unix, feature = "unstable-dynamic"))] fn complete_dynamic_env_quoted_help() { if !common::has_command(CMD) { return; } let term = completest::Term::new(); let mut runtime = common::load_runtime::("dynamic-env", "exhaustive"); let input = "exhaustive quote \t"; let expected = snapbox::str![[r#" % exhaustive quote --backslash COMPLETING argument --backslash --choice --global --version cmd-brackets cmd-single-quotes --backticks --double-quotes --help cmd-backslash cmd-double-quotes escape-help --brackets --expansions --single-quotes cmd-backticks cmd-expansions help "#]]; let actual = runtime.complete(input, &term).unwrap(); assert_data_eq!(actual, expected); } #[test] #[cfg(all(unix, feature = "unstable-dynamic"))] fn complete_dynamic_env_option_value() { if !common::has_command(CMD) { return; } let term = completest::Term::new(); let mut runtime = common::load_runtime::("dynamic-env", "exhaustive"); let input = "exhaustive action --choice=\t"; let expected = snapbox::str![[r#" % exhaustive action '--choice=first' COMPLETING argument --choice=first --choice=second "#]]; let actual = runtime.complete(input, &term).unwrap(); assert_data_eq!(actual, expected); let input = "exhaustive action --choice=f\t"; let expected = snapbox::str![[r#" % exhaustive action '--choice=first' COMPLETING argument --choice=first "#]]; let actual = runtime.complete(input, &term).unwrap(); assert_data_eq!(actual, expected); } #[test] #[cfg(all(unix, feature = "unstable-dynamic"))] fn complete_dynamic_env_quoted_value() { if !common::has_command(CMD) { return; } let term = completest::Term::new(); let mut runtime = common::load_runtime::("dynamic-env", "exhaustive"); let input = "exhaustive quote --choice \t"; let expected = snapbox::str![[r#" % exhaustive quote --choice 'another shell' COMPLETING argument another shell bash fish zsh "#]]; let actual = runtime.complete(input, &term).unwrap(); assert_data_eq!(actual, expected); let input = "exhaustive quote --choice an\t"; let expected = snapbox::str![[r#" % exhaustive quote --choice 'another shell' COMPLETING argument another shell "#]]; let actual = runtime.complete(input, &term).unwrap(); assert_data_eq!(actual, expected); }