test(complete): Register bash dynamic completions

This commit is contained in:
Ed Page 2023-07-28 13:28:30 -05:00
parent 9a6208c795
commit dc953e95d0
3 changed files with 39 additions and 4 deletions

View file

@ -0,0 +1,22 @@
PS1='% '
. /etc/bash_completion
_clap_complete_test() {
export _CLAP_COMPLETE_INDEX=${COMP_CWORD}
export _CLAP_COMPLETE_COMP_TYPE=${COMP_TYPE}
if compopt +o nospace 2> /dev/null; then
export _CLAP_COMPLETE_SPACE=false
else
export _CLAP_COMPLETE_SPACE=true
fi
export _CLAP_COMPLETE_IFS=$'\013'
COMPREPLY=( $("test" complete --shell bash -- "${COMP_WORDS[@]}") )
if [[ $? != 0 ]]; then
unset COMPREPLY
elif [[ $SUPPRESS_SPACE == 1 ]] && [[ "${COMPREPLY-}" =~ [=/:]$ ]]; then
compopt -o nospace
fi
}
complete -o nospace -o bashdefault -F _clap_complete_test test

View file

@ -161,3 +161,9 @@ fn complete() {
let actual = runtime.complete(input, &term).unwrap();
snapbox::assert_eq(expected, actual);
}
#[test]
#[cfg(unix)]
fn register_dynamic_completion() {
common::register_example("dynamic", "test", completest::Shell::Bash);
}

View file

@ -322,10 +322,17 @@ pub fn register_example(context: &str, name: &str, shell: completest::Shell) {
println!("Compiled");
let bin_root = bin_path.parent().unwrap().to_owned();
let registration = std::process::Command::new(&bin_path)
.arg(format!("--generate={shell_name}"))
.output()
.unwrap();
let mut registration = std::process::Command::new(&bin_path);
match context {
"static" => registration.args([format!("--generate={shell_name}")]),
"dynamic" => registration.args([
"complete".to_owned(),
"--register=-".to_owned(),
format!("--shell={shell_name}"),
]),
_ => unreachable!("unsupported context {}", context),
};
let registration = registration.output().unwrap();
assert!(
registration.status.success(),
"{}",