git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2] tests: add initial bash completion tests

From
SZEDER Gábor <szeder@ira.uka.de>
Date
Apr 13, 2012, 09:12 UTC
Message-ID
<20120413091236.GC2164@goldbirke>
In-Reply-To
<1334181423-4391-1-git-send-email-felipe.contreras@gmail.com>
Hi,
On Thu, Apr 12, 2012 at 12:57:03AM +0300, Felipe Contreras wrote:
Show 67 quoted lines
> Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
> ---
> 
> Since v1:
> 
>  * Check if we are running bash in posix mode
>  * Don't check for all git porcelain commands
> 
>  t/t9902-completion.sh |  115 +++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 115 insertions(+)
>  create mode 100755 t/t9902-completion.sh
> 
> diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
> new file mode 100755
> index 0000000..cbda6b5
> --- /dev/null
> +++ b/t/t9902-completion.sh
> @@ -0,0 +1,115 @@
> +#!/bin/sh
> +#
> +# Copyright (c) 2012 Felipe Contreras
> +#
> +
> +if test -n "$BASH" && test -z "$POSIXLY_CORRECT"; then
> +	# we are in full-on bash mode
> +	true
> +elif type bash >/dev/null 2>&1; then
> +	# execute in full-on bash mode
> +	unset POSIXLY_CORRECT
> +	exec bash "$0" "$@"
> +else
> +	echo '1..0 #SKIP skipping bash completion tests; bash not available'
> +	exit 0
> +fi
> +
> +test_description='test bash completion'
> +
> +. ./test-lib.sh
> +
> +complete ()
> +{
> +	# do nothing
> +	return 0
> +}
> +
> +. "$GIT_BUILD_DIR/contrib/completion/git-completion.bash"
> +
> +_get_comp_words_by_ref ()
> +{
> +	while [ $# -gt 0 ]; do
> +		case "$1" in
> +		cur)
> +			cur=${_words[_cword]}
> +			;;
> +		prev)
> +			prev=${_words[_cword-1]}
> +			;;
> +		words)
> +			words=("${_words[@]}")
> +			;;
> +		cword)
> +			cword=$_cword
> +			;;
> +		esac
> +		shift
> +	done
> +}

Git's completion script already implements this function. Why override it here?

Show 30 quoted lines
> +print_comp ()
> +{
> +	local IFS=$'\n'
> +	echo "${COMPREPLY[*]}" > out
> +}
> +
> +run_completion ()
> +{
> +	local -a COMPREPLY _words
> +	local _cword
> +	_words=( $1 )
> +	(( _cword = ${#_words[@]} - 1 ))
> +	_git && print_comp
> +}
> +
> +test_completion ()
> +{
> +	test $# -gt 1 && echo "$2" > expected
> +	run_completion "$@" &&
> +	test_cmp expected out
> +}
> +
> +test_expect_success 'basic' '
> +	run_completion "git \"\"" &&
> +	# built-in
> +	grep -q "^add \$" out &&
> +	# script
> +	grep -q "^filter-branch \$" out &&
> +	# plumbing
> +	! grep -q "^ls-files \$" out
The && is missing here at the end of the line.
> +	run_completion "git f" &&
> +	! grep -q -v "^f" out

grep is not a git command, so I'm not sure, but shouldn't these use 'test_must_fail grep' instead of '! grep'?

Anyway, thanks for pushing this forward. I have a bunch of tests for my __git_ps1() optimizations, but, being a bash function, I could never figure out how to integrate it with the test framework.

Best, Gábor

Previous: Junio C HamanoNext: SZEDER Gábor
Message 8 of 21 in “tests: add initial bash completion tests”
  1. tests: add initial bash completion testsFelipe Contreras, Apr 11, 2012
  2. Junio C HamanoApr 11, 2012
  3. Felipe ContrerasApr 12, 2012
  4. Junio C HamanoApr 12, 2012
  5. Felipe ContrerasApr 12, 2012
  6. Junio C HamanoApr 12, 2012
  7. Junio C HamanoApr 13, 2012
  8. SZEDER GáborApr 13, 2012
  9. SZEDER GáborApr 13, 2012
  10. Felipe ContrerasApr 13, 2012
  11. SZEDER GáborApr 13, 2012
  12. Felipe ContrerasApr 13, 2012
  13. Felipe ContrerasApr 13, 2012
  14. SZEDER GáborApr 13, 2012
  15. Thomas RastApr 13, 2012
  16. Junio C HamanoApr 13, 2012
  17. Felipe ContrerasApr 14, 2012
  18. SZEDER GáborApr 17, 2012
  19. Felipe ContrerasApr 17, 2012
  20. SZEDER GáborApr 17, 2012
  21. tests: add tests for the __gitcomp() completion helper functionSZEDER Gábor, Apr 17, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.