mirror of
https://github.com/clap-rs/clap
synced 2025-01-25 02:45:00 +00:00
288 lines
8.4 KiB
Rust
288 lines
8.4 KiB
Rust
#[allow(unused_imports)]
|
|
use snapbox::assert_data_eq;
|
|
|
|
use crate::common;
|
|
|
|
#[cfg(unix)]
|
|
#[cfg(feature = "unstable-shell-tests")]
|
|
const CMD: &str = "zsh";
|
|
#[cfg(unix)]
|
|
#[cfg(feature = "unstable-shell-tests")]
|
|
type RuntimeBuilder = completest_pty::ZshRuntimeBuilder;
|
|
|
|
#[test]
|
|
fn basic() {
|
|
let name = "my-app";
|
|
let cmd = common::basic_command(name);
|
|
common::assert_matches(
|
|
snapbox::file!["../snapshots/basic.zsh"],
|
|
clap_complete::shells::Zsh,
|
|
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.zsh"],
|
|
clap_complete::shells::Zsh,
|
|
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.zsh"],
|
|
clap_complete::shells::Zsh,
|
|
cmd,
|
|
name,
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn quoting() {
|
|
let name = "my-app";
|
|
let cmd = common::quoting_command(name);
|
|
common::assert_matches(
|
|
snapbox::file!["../snapshots/quoting.zsh"],
|
|
clap_complete::shells::Zsh,
|
|
cmd,
|
|
name,
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn aliases() {
|
|
let name = "my-app";
|
|
let cmd = common::aliases_command(name);
|
|
common::assert_matches(
|
|
snapbox::file!["../snapshots/aliases.zsh"],
|
|
clap_complete::shells::Zsh,
|
|
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.zsh"],
|
|
clap_complete::shells::Zsh,
|
|
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.zsh"],
|
|
clap_complete::shells::Zsh,
|
|
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.zsh"],
|
|
clap_complete::shells::Zsh,
|
|
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.zsh"],
|
|
clap_complete::shells::Zsh,
|
|
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.zsh"],
|
|
clap_complete::shells::Zsh,
|
|
cmd,
|
|
name,
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn subcommand_last() {
|
|
let name = "my-app";
|
|
let cmd = common::subcommand_last(name);
|
|
common::assert_matches(
|
|
snapbox::file!["../snapshots/subcommand_last.zsh"],
|
|
clap_complete::shells::Zsh,
|
|
cmd,
|
|
name,
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
#[cfg(unix)]
|
|
#[cfg(feature = "unstable-shell-tests")]
|
|
fn register_completion() {
|
|
common::register_example::<RuntimeBuilder>("static", "exhaustive");
|
|
}
|
|
|
|
#[test]
|
|
#[cfg(unix)]
|
|
#[cfg(feature = "unstable-shell-tests")]
|
|
fn complete() {
|
|
if !common::has_command(CMD) {
|
|
return;
|
|
}
|
|
|
|
let term = completest::Term::new();
|
|
let mut runtime = common::load_runtime::<RuntimeBuilder>("static", "exhaustive");
|
|
|
|
let input = "exhaustive \t";
|
|
let expected = snapbox::str![[r#"
|
|
% exhaustive
|
|
help -- Print this message or the help of the given subcommand(s)
|
|
pacman action alias value quote hint last --
|
|
"#]];
|
|
let actual = runtime.complete(input, &term).unwrap();
|
|
assert_data_eq!(actual, expected);
|
|
}
|
|
|
|
#[test]
|
|
#[cfg(all(unix, feature = "unstable-dynamic"))]
|
|
#[cfg(feature = "unstable-shell-tests")]
|
|
fn register_dynamic_env() {
|
|
common::register_example::<RuntimeBuilder>("dynamic-env", "exhaustive");
|
|
}
|
|
|
|
#[test]
|
|
#[cfg(all(unix, feature = "unstable-dynamic"))]
|
|
#[cfg(feature = "unstable-shell-tests")]
|
|
fn complete_dynamic_env_toplevel() {
|
|
if !common::has_command(CMD) {
|
|
return;
|
|
}
|
|
|
|
let term = completest::Term::new();
|
|
let mut runtime = common::load_runtime::<RuntimeBuilder>("dynamic-env", "exhaustive");
|
|
|
|
let input = "exhaustive \t\t";
|
|
let expected = snapbox::str![[r#"
|
|
% exhaustive
|
|
--generate -- generate
|
|
--global -- everywhere
|
|
--help -- Print help
|
|
--version -- Print version
|
|
help -- Print this message or the help of the given subcommand(s)
|
|
action alias hint last pacman quote value
|
|
"#]];
|
|
let actual = runtime.complete(input, &term).unwrap();
|
|
assert_data_eq!(actual, expected);
|
|
}
|
|
|
|
#[test]
|
|
#[cfg(all(unix, feature = "unstable-dynamic"))]
|
|
#[cfg(feature = "unstable-shell-tests")]
|
|
fn complete_dynamic_env_quoted_help() {
|
|
if !common::has_command(CMD) {
|
|
return;
|
|
}
|
|
|
|
let term = completest::Term::new();
|
|
let mut runtime = common::load_runtime::<RuntimeBuilder>("dynamic-env", "exhaustive");
|
|
|
|
let input = "exhaustive quote \t\t";
|
|
let expected = snapbox::str![[r#"
|
|
% exhaustive quote
|
|
--global -- everywhere
|
|
--help -- Print help (see more with '--help')
|
|
--version -- Print version
|
|
cmd-backslash --backslash -- Avoid '/n'
|
|
cmd-backticks --backticks -- For more information see `echo test`
|
|
cmd-brackets --brackets -- List packages [filter]
|
|
cmd-double-quotes --double-quotes -- Can be "always", "auto", or "never"
|
|
cmd-expansions --expansions -- Execute the shell command with $SHELL
|
|
cmd-single-quotes --single-quotes -- Can be 'always', 'auto', or 'never'
|
|
escape-help -- /tab/t"'
|
|
help -- Print this message or the help of the given subcommand(s)
|
|
--choice
|
|
"#]];
|
|
let actual = runtime.complete(input, &term).unwrap();
|
|
assert_data_eq!(actual, expected);
|
|
}
|
|
|
|
#[test]
|
|
#[cfg(all(unix, feature = "unstable-dynamic"))]
|
|
#[cfg(feature = "unstable-shell-tests")]
|
|
fn complete_dynamic_env_option_value() {
|
|
if !common::has_command(CMD) {
|
|
return;
|
|
}
|
|
|
|
let term = completest::Term::new();
|
|
let mut runtime = common::load_runtime::<RuntimeBuilder>("dynamic-env", "exhaustive");
|
|
|
|
let input = "exhaustive action --choice=\t\t";
|
|
let expected = snapbox::str![[r#"
|
|
% exhaustive action --choice=
|
|
--choice=first --choice=second
|
|
"#]];
|
|
let actual = runtime.complete(input, &term).unwrap();
|
|
assert_data_eq!(actual, expected);
|
|
|
|
let input = "exhaustive action --choice=f\t\t";
|
|
let expected = snapbox::str!["% exhaustive action --choice=first "];
|
|
let actual = runtime.complete(input, &term).unwrap();
|
|
assert_data_eq!(actual, expected);
|
|
}
|
|
|
|
#[test]
|
|
#[cfg(all(unix, feature = "unstable-dynamic"))]
|
|
#[cfg(feature = "unstable-shell-tests")]
|
|
fn complete_dynamic_env_quoted_value() {
|
|
if !common::has_command(CMD) {
|
|
return;
|
|
}
|
|
|
|
let term = completest::Term::new();
|
|
let mut runtime = common::load_runtime::<RuntimeBuilder>("dynamic-env", "exhaustive");
|
|
|
|
let input = "exhaustive quote --choice \t\t";
|
|
let expected = snapbox::str![[r#"
|
|
% exhaustive quote --choice
|
|
another shell -- something with a space
|
|
bash -- bash (shell)
|
|
fish -- fish shell
|
|
zsh -- zsh shell
|
|
"#]];
|
|
let actual = runtime.complete(input, &term).unwrap();
|
|
assert_data_eq!(actual, expected);
|
|
|
|
let input = "exhaustive quote --choice an\t\t";
|
|
let expected = snapbox::str!["% exhaustive quote --choice another/ shell "];
|
|
let actual = runtime.complete(input, &term).unwrap();
|
|
assert_data_eq!(actual, expected);
|
|
}
|