2023-07-20 18:34:09 +00:00
|
|
|
use crate::common;
|
2024-05-24 15:13:50 +00:00
|
|
|
use snapbox::assert_data_eq;
|
2022-03-07 20:03:46 +00:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn basic() {
|
|
|
|
let name = "my-app";
|
|
|
|
let cmd = common::basic_command(name);
|
2024-02-14 22:44:57 +00:00
|
|
|
common::assert_matches(
|
|
|
|
snapbox::file!["../snapshots/basic.fish"],
|
2022-03-07 20:03:46 +00:00
|
|
|
clap_complete::shells::Fish,
|
|
|
|
cmd,
|
|
|
|
name,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn feature_sample() {
|
|
|
|
let name = "my-app";
|
|
|
|
let cmd = common::feature_sample_command(name);
|
2024-02-14 22:44:57 +00:00
|
|
|
common::assert_matches(
|
|
|
|
snapbox::file!["../snapshots/feature_sample.fish"],
|
2022-03-07 20:03:46 +00:00
|
|
|
clap_complete::shells::Fish,
|
|
|
|
cmd,
|
|
|
|
name,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn special_commands() {
|
|
|
|
let name = "my-app";
|
|
|
|
let cmd = common::special_commands_command(name);
|
2024-02-14 22:44:57 +00:00
|
|
|
common::assert_matches(
|
|
|
|
snapbox::file!["../snapshots/special_commands.fish"],
|
2022-03-07 20:03:46 +00:00
|
|
|
clap_complete::shells::Fish,
|
|
|
|
cmd,
|
|
|
|
name,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn quoting() {
|
|
|
|
let name = "my-app";
|
|
|
|
let cmd = common::quoting_command(name);
|
2024-02-14 22:44:57 +00:00
|
|
|
common::assert_matches(
|
|
|
|
snapbox::file!["../snapshots/quoting.fish"],
|
2022-03-07 20:03:46 +00:00
|
|
|
clap_complete::shells::Fish,
|
|
|
|
cmd,
|
|
|
|
name,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn aliases() {
|
|
|
|
let name = "my-app";
|
|
|
|
let cmd = common::aliases_command(name);
|
2024-02-14 22:44:57 +00:00
|
|
|
common::assert_matches(
|
|
|
|
snapbox::file!["../snapshots/aliases.fish"],
|
2022-03-07 20:03:46 +00:00
|
|
|
clap_complete::shells::Fish,
|
|
|
|
cmd,
|
|
|
|
name,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn sub_subcommands() {
|
|
|
|
let name = "my-app";
|
|
|
|
let cmd = common::sub_subcommands_command(name);
|
2024-02-14 22:44:57 +00:00
|
|
|
common::assert_matches(
|
|
|
|
snapbox::file!["../snapshots/sub_subcommands.fish"],
|
2022-03-07 20:03:46 +00:00
|
|
|
clap_complete::shells::Fish,
|
|
|
|
cmd,
|
|
|
|
name,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2024-01-19 09:25:30 +00:00
|
|
|
#[test]
|
|
|
|
fn custom_bin_name() {
|
|
|
|
let name = "my-app";
|
|
|
|
let bin_name = "bin-name";
|
|
|
|
let cmd = common::basic_command(name);
|
2024-02-14 22:44:57 +00:00
|
|
|
common::assert_matches(
|
|
|
|
snapbox::file!["../snapshots/custom_bin_name.fish"],
|
2024-01-19 09:25:30 +00:00
|
|
|
clap_complete::shells::Fish,
|
|
|
|
cmd,
|
|
|
|
bin_name,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2022-03-07 20:03:46 +00:00
|
|
|
#[test]
|
|
|
|
fn value_hint() {
|
|
|
|
let name = "my-app";
|
|
|
|
let cmd = common::value_hint_command(name);
|
2024-02-14 22:44:57 +00:00
|
|
|
common::assert_matches(
|
|
|
|
snapbox::file!["../snapshots/value_hint.fish"],
|
2022-03-07 20:03:46 +00:00
|
|
|
clap_complete::shells::Fish,
|
|
|
|
cmd,
|
|
|
|
name,
|
|
|
|
);
|
|
|
|
}
|
2023-01-09 10:50:58 +00:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn value_terminator() {
|
|
|
|
let name = "my-app";
|
|
|
|
let cmd = common::value_terminator_command(name);
|
2024-02-14 22:44:57 +00:00
|
|
|
common::assert_matches(
|
|
|
|
snapbox::file!["../snapshots/value_terminator.fish"],
|
2023-01-09 10:50:58 +00:00
|
|
|
clap_complete::shells::Fish,
|
|
|
|
cmd,
|
|
|
|
name,
|
|
|
|
);
|
|
|
|
}
|
2023-01-10 08:14:52 +00:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn two_multi_valued_arguments() {
|
|
|
|
let name = "my-app";
|
|
|
|
let cmd = common::two_multi_valued_arguments_command(name);
|
2024-02-14 22:44:57 +00:00
|
|
|
common::assert_matches(
|
|
|
|
snapbox::file!["../snapshots/two_multi_valued_arguments.fish"],
|
2023-01-10 08:14:52 +00:00
|
|
|
clap_complete::shells::Fish,
|
|
|
|
cmd,
|
|
|
|
name,
|
|
|
|
);
|
|
|
|
}
|
2023-05-10 18:21:01 +00:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn subcommand_last() {
|
|
|
|
let name = "my-app";
|
|
|
|
let cmd = common::subcommand_last(name);
|
2024-02-14 22:44:57 +00:00
|
|
|
common::assert_matches(
|
|
|
|
snapbox::file!["../snapshots/subcommand_last.fish"],
|
2023-05-10 18:21:01 +00:00
|
|
|
clap_complete::shells::Fish,
|
|
|
|
cmd,
|
|
|
|
name,
|
|
|
|
);
|
|
|
|
}
|
2023-07-20 19:44:54 +00:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
#[cfg(unix)]
|
|
|
|
fn register_completion() {
|
2024-01-15 18:20:57 +00:00
|
|
|
common::register_example::<completest_pty::FishRuntimeBuilder>("static", "exhaustive");
|
2023-07-20 19:44:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
#[cfg(unix)]
|
|
|
|
fn complete() {
|
|
|
|
if !common::has_command("fish") {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
let term = completest::Term::new();
|
2024-01-15 18:20:57 +00:00
|
|
|
let mut runtime =
|
|
|
|
common::load_runtime::<completest_pty::FishRuntimeBuilder>("static", "exhaustive");
|
2023-07-20 19:44:54 +00:00
|
|
|
|
2023-07-28 18:54:02 +00:00
|
|
|
let input = "exhaustive \t";
|
2024-08-29 02:29:05 +00:00
|
|
|
let expected = snapbox::str![[r#"
|
|
|
|
% exhaustive
|
2023-07-28 11:10:04 +00:00
|
|
|
action complete (Register shell completions for this program) hint pacman value
|
2024-08-29 02:29:05 +00:00
|
|
|
alias help (Print this message or the help of the given subcommand(s)) last quote
|
|
|
|
"#]];
|
2023-07-20 19:44:54 +00:00
|
|
|
let actual = runtime.complete(input, &term).unwrap();
|
2024-05-24 15:13:50 +00:00
|
|
|
assert_data_eq!(actual, expected);
|
2023-09-07 11:49:43 +00:00
|
|
|
|
|
|
|
let input = "exhaustive quote --choice \t";
|
|
|
|
let actual = runtime.complete(input, &term).unwrap();
|
2024-08-29 02:29:05 +00:00
|
|
|
let expected = snapbox::str![[r#"
|
|
|
|
% exhaustive quote --choice
|
|
|
|
bash (bash (shell)) fish (fish shell) zsh (zsh shell)
|
|
|
|
"#]];
|
2024-05-24 15:13:50 +00:00
|
|
|
assert_data_eq!(actual, expected);
|
2023-07-20 19:44:54 +00:00
|
|
|
}
|
2023-07-28 10:14:38 +00:00
|
|
|
|
2024-08-12 15:53:24 +00:00
|
|
|
#[test]
|
|
|
|
#[cfg(all(unix, feature = "unstable-dynamic"))]
|
|
|
|
fn register_dynamic_env() {
|
|
|
|
common::register_example::<completest_pty::FishRuntimeBuilder>("dynamic-env", "exhaustive");
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
#[cfg(all(unix, feature = "unstable-dynamic"))]
|
|
|
|
fn complete_dynamic_env() {
|
|
|
|
if !common::has_command("fish") {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
let term = completest::Term::new();
|
|
|
|
let mut runtime =
|
|
|
|
common::load_runtime::<completest_pty::FishRuntimeBuilder>("dynamic-env", "exhaustive");
|
|
|
|
|
|
|
|
let input = "exhaustive \t\t";
|
|
|
|
let expected = snapbox::str![[r#"
|
|
|
|
% exhaustive action
|
|
|
|
action pacman --generate (generate)
|
|
|
|
alias quote --global (everywhere)
|
|
|
|
help (Print this message or the help of the given subcommand(s)) value --help (Print help)
|
|
|
|
hint -h (Print help) --version (Print version)
|
|
|
|
last -V (Print version)
|
|
|
|
"#]];
|
|
|
|
let actual = runtime.complete(input, &term).unwrap();
|
|
|
|
assert_data_eq!(actual, expected);
|
|
|
|
|
|
|
|
let input = "exhaustive quote \t\t";
|
|
|
|
let expected = snapbox::str![[r#"
|
|
|
|
% exhaustive quote
|
|
|
|
cmd-backslash (Avoid '/n')
|
|
|
|
cmd-backticks (For more information see `echo test`)
|
|
|
|
cmd-brackets (List packages [filter])
|
|
|
|
cmd-double-quotes (Can be "always", "auto", or "never")
|
|
|
|
cmd-expansions (Execute the shell command with $SHELL)
|
|
|
|
cmd-single-quotes (Can be 'always', 'auto', or 'never')
|
|
|
|
escape-help (/tab "')
|
|
|
|
help (Print this message or the help of the given subcommand(s))
|
|
|
|
-h (Print help (see more with '--help'))
|
|
|
|
-V (Print version)
|
|
|
|
--backslash (Avoid '/n')
|
|
|
|
--backticks (For more information see `echo test`)
|
|
|
|
--brackets (List packages [filter])
|
|
|
|
--choice
|
|
|
|
--double-quotes (Can be "always", "auto", or "never")
|
|
|
|
--expansions (Execute the shell command with $SHELL)
|
|
|
|
--global (everywhere)
|
|
|
|
--help (Print help (see more with '--help'))
|
|
|
|
--single-quotes (Can be 'always', 'auto', or 'never')
|
|
|
|
--version (Print version)
|
|
|
|
"#]];
|
|
|
|
let actual = runtime.complete(input, &term).unwrap();
|
|
|
|
assert_data_eq!(actual, expected);
|
|
|
|
}
|
|
|
|
|
2023-07-28 10:14:38 +00:00
|
|
|
#[test]
|
2024-08-12 13:26:42 +00:00
|
|
|
#[cfg(all(unix, feature = "unstable-command"))]
|
2024-08-12 15:40:41 +00:00
|
|
|
fn register_dynamic_command() {
|
|
|
|
common::register_example::<completest_pty::FishRuntimeBuilder>("dynamic-command", "exhaustive");
|
2023-07-28 10:14:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
2024-08-11 01:41:01 +00:00
|
|
|
#[cfg(all(unix, feature = "unstable-command"))]
|
2024-08-12 15:40:41 +00:00
|
|
|
fn complete_dynamic_command() {
|
2023-07-28 10:14:38 +00:00
|
|
|
if !common::has_command("fish") {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
let term = completest::Term::new();
|
2024-01-15 18:20:57 +00:00
|
|
|
let mut runtime =
|
2024-08-12 15:40:41 +00:00
|
|
|
common::load_runtime::<completest_pty::FishRuntimeBuilder>("dynamic-command", "exhaustive");
|
2023-07-28 10:14:38 +00:00
|
|
|
|
2024-06-27 15:36:32 +00:00
|
|
|
let input = "exhaustive \t\t";
|
2024-07-05 20:02:08 +00:00
|
|
|
let expected = snapbox::str![[r#"
|
2024-06-27 15:36:32 +00:00
|
|
|
% exhaustive action
|
2024-07-10 14:50:21 +00:00
|
|
|
action pacman --generate (generate)
|
|
|
|
alias quote --global (everywhere)
|
|
|
|
help (Print this message or the help of the given subcommand(s)) value --help (Print help)
|
|
|
|
hint -h (Print help) --version (Print version)
|
|
|
|
last -V (Print version)
|
2024-07-05 20:02:08 +00:00
|
|
|
"#]];
|
2023-07-28 10:14:38 +00:00
|
|
|
let actual = runtime.complete(input, &term).unwrap();
|
2024-05-24 15:13:50 +00:00
|
|
|
assert_data_eq!(actual, expected);
|
2023-08-03 09:41:05 +00:00
|
|
|
|
2024-06-27 15:36:32 +00:00
|
|
|
let input = "exhaustive quote \t\t";
|
2024-07-05 20:02:08 +00:00
|
|
|
let expected = snapbox::str![[r#"
|
|
|
|
% exhaustive quote
|
|
|
|
cmd-backslash (Avoid '/n')
|
2023-08-03 09:41:05 +00:00
|
|
|
cmd-backticks (For more information see `echo test`)
|
|
|
|
cmd-brackets (List packages [filter])
|
|
|
|
cmd-double-quotes (Can be "always", "auto", or "never")
|
2024-06-27 15:36:32 +00:00
|
|
|
cmd-expansions (Execute the shell command with $SHELL)
|
|
|
|
cmd-single-quotes (Can be 'always', 'auto', or 'never')
|
|
|
|
escape-help (/tab "')
|
|
|
|
help (Print this message or the help of the given subcommand(s))
|
|
|
|
-h (Print help (see more with '--help'))
|
|
|
|
-V (Print version)
|
|
|
|
--backslash (Avoid '/n')
|
|
|
|
--backticks (For more information see `echo test`)
|
|
|
|
--brackets (List packages [filter])
|
|
|
|
--choice
|
|
|
|
--double-quotes (Can be "always", "auto", or "never")
|
|
|
|
--expansions (Execute the shell command with $SHELL)
|
|
|
|
--global (everywhere)
|
|
|
|
--help (Print help (see more with '--help'))
|
|
|
|
--single-quotes (Can be 'always', 'auto', or 'never')
|
|
|
|
--version (Print version)
|
2024-07-05 20:02:08 +00:00
|
|
|
"#]];
|
2023-08-03 09:41:05 +00:00
|
|
|
let actual = runtime.complete(input, &term).unwrap();
|
2024-05-24 15:13:50 +00:00
|
|
|
assert_data_eq!(actual, expected);
|
2023-07-28 10:14:38 +00:00
|
|
|
}
|