Increase test coverage and improve completion commenting

This commit is contained in:
ridiculousfish 2016-12-09 12:14:14 -08:00
parent a8a10d634b
commit 05a640b027
3 changed files with 20 additions and 0 deletions

View File

@ -920,6 +920,8 @@ bool completer_t::complete_param(const wcstring &scmd_orig, const wcstring &spop
} }
} else if (popt[0] == L'-') { } else if (popt[0] == L'-') {
// Set to true if we found a matching old-style switch. // Set to true if we found a matching old-style switch.
// Here we are testing the previous argument,
// to see how we should complete the current argument
bool old_style_match = false; bool old_style_match = false;
// If we are using old style long options, check for them first. // If we are using old style long options, check for them first.
@ -943,6 +945,8 @@ bool completer_t::complete_param(const wcstring &scmd_orig, const wcstring &spop
const complete_entry_opt_t *o = &*oiter; const complete_entry_opt_t *o = &*oiter;
// Gnu-style options with _optional_ arguments must be specified as a single // Gnu-style options with _optional_ arguments must be specified as a single
// token, so that it can be differed from a regular argument. // token, so that it can be differed from a regular argument.
// Here we are testing the previous argument for a GNU-style match,
// to see how we should complete the current argument
if (o->type == option_type_double_long && !(o->result_mode & NO_COMMON)) if (o->type == option_type_double_long && !(o->result_mode & NO_COMMON))
continue; continue;
@ -960,6 +964,7 @@ bool completer_t::complete_param(const wcstring &scmd_orig, const wcstring &spop
continue; continue;
} }
// Now we try to complete an option itself
for (option_list_t::const_iterator oiter = options.begin(); oiter != options.end(); for (option_list_t::const_iterator oiter = options.begin(); oiter != options.end();
++oiter) { ++oiter) {
const complete_entry_opt_t *o = &*oiter; const complete_entry_opt_t *o = &*oiter;

View File

@ -56,6 +56,16 @@ complete -c TestDoubleDash -l TestDoubleDashOption
complete -C'TestDoubleDash -' | sort complete -C'TestDoubleDash -' | sort
echo "Expect no output:" (complete -C'TestDoubleDash -- -' | sort) echo "Expect no output:" (complete -C'TestDoubleDash -- -' | sort)
# fish seems to have always handled "exclusive" options strangely
# It seems to treat them the same as "old-style" (single-dash) long options
echo "Testing exclusive options"
complete -c TestExclusive -x -s Q
complete -c TestExclusive -x -s W
complete -c TestExclusive -s A
echo "Expect -A -Q -W:" (complete -C'TestExclusive -' | sort | string join ' ')
echo "Expect -AQ -AW:" (complete -C'TestExclusive -A' | sort | string join ' ')
echo "Expect no output 1:" (complete -C'TestExclusive -Q')
echo "Expect no output 2:" (complete -C'TestExclusive -W')
# Test that directory completions work correctly # Test that directory completions work correctly
if begin; rm -rf test6.tmp.dir; and mkdir test6.tmp.dir; end if begin; rm -rf test6.tmp.dir; and mkdir test6.tmp.dir; end

View File

@ -33,6 +33,11 @@ CCCC:
Test that -- suppresses option completions Test that -- suppresses option completions
--TestDoubleDashOption --TestDoubleDashOption
Expect no output: Expect no output:
Testing exclusive options
Expect -A -Q -W: -A -Q -W
Expect -AQ -AW: -AQ -AW
Expect no output 1:
Expect no output 2:
implicit cd complete works implicit cd complete works
no implicit cd complete after 'command' no implicit cd complete after 'command'
PATH does not cause incorrect implicit cd PATH does not cause incorrect implicit cd