#!/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" # We don't need this function to actually join words or do anything special. # Also, it's cleaner to avoid touching bash's internal completion variables. # So let's override it with a minimal version for testing purposes. _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 } 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 } newline=$'\n' test_expect_success '__gitcomp - trailing space - options' ' sed -e "s/Z$//" >expected <<-\EOF && --reuse-message=Z --reedit-message=Z --reset-author Z EOF ( local -a COMPREPLY && cur="--re" && __gitcomp "--dry-run --reuse-message= --reedit-message= --reset-author" && IFS="$newline" && echo "${COMPREPLY[*]}" > out ) && test_cmp expected out ' test_expect_success '__gitcomp - trailing space - config keys' ' sed -e "s/Z$//" >expected <<-\EOF && branch.Z branch.autosetupmerge Z branch.autosetuprebase Z browser.Z EOF ( local -a COMPREPLY && cur="br" && __gitcomp "branch. branch.autosetupmerge branch.autosetuprebase browser." && IFS="$newline" && echo "${COMPREPLY[*]}" > out ) && test_cmp expected out ' test_expect_success '__gitcomp - option parameter' ' sed -e "s/Z$//" >expected <<-\EOF && recursive Z resolve Z EOF ( local -a COMPREPLY && cur="--strategy=re" && __gitcomp "octopus ours recursive resolve subtree " "" "re" && IFS="$newline" && echo "${COMPREPLY[*]}" > out ) && test_cmp expected out ' test_expect_success '__gitcomp - prefix' ' sed -e "s/Z$//" >expected <<-\EOF && branch.maint.merge Z branch.maint.mergeoptions Z EOF ( local -a COMPREPLY && cur="branch.me" && __gitcomp "remote merge mergeoptions rebase " "branch.maint." "me" && IFS="$newline" && echo "${COMPREPLY[*]}" > out ) && test_cmp expected out ' test_expect_success '__gitcomp - suffix' ' sed -e "s/Z$//" >expected <<-\EOF && branch.master.Z branch.maint.Z EOF ( local -a COMPREPLY && cur="branch.me" && __gitcomp "master maint next pu " "branch." "ma" "." && IFS="$newline" && echo "${COMPREPLY[*]}" > out ) && 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 && run_completion "git f" && ! grep -q -v "^f" out ' test_expect_success 'double dash "git" itself' ' sed -e "s/Z$//" >expected <<-\EOF && --paginate Z --no-pager Z --git-dir= --bare Z --version Z --exec-path Z --exec-path= --html-path Z --info-path Z --work-tree= --namespace= --no-replace-objects Z --help Z EOF test_completion "git --" ' test_expect_success 'double dash "git checkout"' ' sed -e "s/Z$//" >expected <<-\EOF && --quiet Z --ours Z --theirs Z --track Z --no-track Z --merge Z --conflict= --orphan Z --patch Z EOF test_completion "git checkout --" ' test_expect_success 'general options' ' test_completion "git --ver" "--version " && test_completion "git --hel" "--help " && sed -e "s/Z$//" >expected <<-\EOF && --exec-path Z --exec-path= EOF test_completion "git --exe" && test_completion "git --htm" "--html-path " && test_completion "git --pag" "--paginate " && test_completion "git --no-p" "--no-pager " && test_completion "git --git" "--git-dir=" && test_completion "git --wor" "--work-tree=" && test_completion "git --nam" "--namespace=" && test_completion "git --bar" "--bare " && test_completion "git --inf" "--info-path " && test_completion "git --no-r" "--no-replace-objects " ' test_expect_success 'general options plus command' ' test_completion "git --version check" "checkout " && test_completion "git --paginate check" "checkout " && test_completion "git --git-dir=foo check" "checkout " && test_completion "git --bare check" "checkout " && test_completion "git --help des" "describe " && test_completion "git --exec-path=foo check" "checkout " && test_completion "git --html-path check" "checkout " && test_completion "git --no-pager check" "checkout " && test_completion "git --work-tree=foo check" "checkout " && test_completion "git --namespace=foo check" "checkout " && test_completion "git --paginate check" "checkout " && test_completion "git --info-path check" "checkout " && test_completion "git --no-replace-objects check" "checkout " ' test_done