clap/clap_complete/tests/testsuite/fish.rs

290 lines
8.5 KiB
Rust
Raw Normal View History

use crate::common;
2024-05-24 15:13:50 +00:00
use snapbox::assert_data_eq;
#[cfg(unix)]
const CMD: &str = "fish";
#[cfg(unix)]
type RuntimeBuilder = completest_pty::FishRuntimeBuilder;
#[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"],
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"],
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"],
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"],
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"],
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"],
clap_complete::shells::Fish,
cmd,
name,
);
}
#[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"],
clap_complete::shells::Fish,
cmd,
bin_name,
);
}
#[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"],
clap_complete::shells::Fish,
cmd,
name,
);
}
#[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"],
clap_complete::shells::Fish,
cmd,
name,
);
}
#[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"],
clap_complete::shells::Fish,
cmd,
name,
);
}
#[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"],
clap_complete::shells::Fish,
cmd,
name,
);
}
#[test]
#[cfg(unix)]
fn register_completion() {
common::register_example::<RuntimeBuilder>("static", "exhaustive");
}
#[test]
#[cfg(unix)]
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";
2024-08-29 02:29:05 +00:00
let expected = snapbox::str![[r#"
% exhaustive
action help (Print this message or the help of the given subcommand(s)) last quote
alias hint pacman value
2024-08-29 02:29:05 +00:00
"#]];
let actual = runtime.complete(input, &term).unwrap();
2024-05-24 15:13:50 +00:00
assert_data_eq!(actual, expected);
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
another shell (something with a space) bash (bash (shell)) fish (fish shell) zsh (zsh shell)
2024-08-29 02:29:05 +00:00
"#]];
2024-05-24 15:13:50 +00:00
assert_data_eq!(actual, expected);
}
#[test]
#[cfg(all(unix, feature = "unstable-dynamic"))]
fn register_dynamic_env() {
common::register_example::<RuntimeBuilder>("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::<RuntimeBuilder>("dynamic-env", "exhaustive");
let input = "exhaustive \t\t";
let expected = snapbox::str![[r#"
% exhaustive --global
--global (everywhere) -V (Print version) last
--generate (generate) action pacman
--help (Print help) alias quote
--version (Print version) help (Print this message or the help of the given subcommand(s)) value
-h (Print help) hint
2024-07-05 20:02:08 +00:00
"#]];
let actual = runtime.complete(input, &term).unwrap();
2024-05-24 15:13:50 +00:00
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::<RuntimeBuilder>("dynamic-env", "exhaustive");
2023-08-03 09:41:05 +00:00
let input = "exhaustive quote \t\t";
2024-07-05 20:02:08 +00:00
let expected = snapbox::str![[r#"
% exhaustive quote
--single-quotes (Can be 'always', 'auto', or 'never')
--double-quotes (Can be "always", "auto", or "never")
--backticks (For more information see `echo test`)
--backslash (Avoid '/n')
--brackets (List packages [filter])
--expansions (Execute the shell command with $SHELL)
--choice
--global (everywhere)
--help (Print help (see more with '--help'))
--version (Print version)
-h (Print help (see more with '--help'))
-V (Print version)
2024-07-05 20:02:08 +00:00
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")
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))
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);
}
#[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::<RuntimeBuilder>("dynamic-env", "exhaustive");
let input = "exhaustive action --choice=\t\t";
let expected = snapbox::str![[r#"
% exhaustive action --choice=first
--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!["% exhaustive action --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::<RuntimeBuilder>("dynamic-env", "exhaustive");
let input = "exhaustive quote --choice \t\t";
let expected = snapbox::str![[r#"
% exhaustive quote --choice another/ shell
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";
let expected = snapbox::str!["% exhaustive quote --choice another/ shell "];
let actual = runtime.complete(input, &term).unwrap();
assert_data_eq!(actual, expected);
}