t / t9902-completion.shon commit Merge branch 'sb/send-email-reconfirm-fix' (b1379ba)
   1#!/bin/sh
   2#
   3# Copyright (c) 2012 Felipe Contreras
   4#
   5
   6test_description='test bash completion'
   7
   8. ./lib-bash.sh
   9
  10complete ()
  11{
  12        # do nothing
  13        return 0
  14}
  15
  16. "$GIT_BUILD_DIR/contrib/completion/git-completion.bash"
  17
  18# We don't need this function to actually join words or do anything special.
  19# Also, it's cleaner to avoid touching bash's internal completion variables.
  20# So let's override it with a minimal version for testing purposes.
  21_get_comp_words_by_ref ()
  22{
  23        while [ $# -gt 0 ]; do
  24                case "$1" in
  25                cur)
  26                        cur=${_words[_cword]}
  27                        ;;
  28                prev)
  29                        prev=${_words[_cword-1]}
  30                        ;;
  31                words)
  32                        words=("${_words[@]}")
  33                        ;;
  34                cword)
  35                        cword=$_cword
  36                        ;;
  37                esac
  38                shift
  39        done
  40}
  41
  42print_comp ()
  43{
  44        local IFS=$'\n'
  45        echo "${COMPREPLY[*]}" > out
  46}
  47
  48run_completion ()
  49{
  50        local -a COMPREPLY _words
  51        local _cword
  52        _words=( $1 )
  53        (( _cword = ${#_words[@]} - 1 ))
  54        __git_wrap__git_main && print_comp
  55}
  56
  57test_completion ()
  58{
  59        test $# -gt 1 && echo "$2" > expected
  60        run_completion "$@" &&
  61        test_cmp expected out
  62}
  63
  64newline=$'\n'
  65
  66test_expect_success '__gitcomp - trailing space - options' '
  67        sed -e "s/Z$//" >expected <<-\EOF &&
  68        --reuse-message=Z
  69        --reedit-message=Z
  70        --reset-author Z
  71        EOF
  72        (
  73                local -a COMPREPLY &&
  74                cur="--re" &&
  75                __gitcomp "--dry-run --reuse-message= --reedit-message=
  76                                --reset-author" &&
  77                IFS="$newline" &&
  78                echo "${COMPREPLY[*]}" > out
  79        ) &&
  80        test_cmp expected out
  81'
  82
  83test_expect_success '__gitcomp - trailing space - config keys' '
  84        sed -e "s/Z$//" >expected <<-\EOF &&
  85        branch.Z
  86        branch.autosetupmerge Z
  87        branch.autosetuprebase Z
  88        browser.Z
  89        EOF
  90        (
  91                local -a COMPREPLY &&
  92                cur="br" &&
  93                __gitcomp "branch. branch.autosetupmerge
  94                                branch.autosetuprebase browser." &&
  95                IFS="$newline" &&
  96                echo "${COMPREPLY[*]}" > out
  97        ) &&
  98        test_cmp expected out
  99'
 100
 101test_expect_success '__gitcomp - option parameter' '
 102        sed -e "s/Z$//" >expected <<-\EOF &&
 103        recursive Z
 104        resolve Z
 105        EOF
 106        (
 107                local -a COMPREPLY &&
 108                cur="--strategy=re" &&
 109                __gitcomp "octopus ours recursive resolve subtree
 110                        " "" "re" &&
 111                IFS="$newline" &&
 112                echo "${COMPREPLY[*]}" > out
 113        ) &&
 114        test_cmp expected out
 115'
 116
 117test_expect_success '__gitcomp - prefix' '
 118        sed -e "s/Z$//" >expected <<-\EOF &&
 119        branch.maint.merge Z
 120        branch.maint.mergeoptions Z
 121        EOF
 122        (
 123                local -a COMPREPLY &&
 124                cur="branch.me" &&
 125                __gitcomp "remote merge mergeoptions rebase
 126                        " "branch.maint." "me" &&
 127                IFS="$newline" &&
 128                echo "${COMPREPLY[*]}" > out
 129        ) &&
 130        test_cmp expected out
 131'
 132
 133test_expect_success '__gitcomp - suffix' '
 134        sed -e "s/Z$//" >expected <<-\EOF &&
 135        branch.master.Z
 136        branch.maint.Z
 137        EOF
 138        (
 139                local -a COMPREPLY &&
 140                cur="branch.me" &&
 141                __gitcomp "master maint next pu
 142                        " "branch." "ma" "." &&
 143                IFS="$newline" &&
 144                echo "${COMPREPLY[*]}" > out
 145        ) &&
 146        test_cmp expected out
 147'
 148
 149test_expect_success 'basic' '
 150        run_completion "git \"\"" &&
 151        # built-in
 152        grep -q "^add \$" out &&
 153        # script
 154        grep -q "^filter-branch \$" out &&
 155        # plumbing
 156        ! grep -q "^ls-files \$" out &&
 157
 158        run_completion "git f" &&
 159        ! grep -q -v "^f" out
 160'
 161
 162test_expect_success 'double dash "git" itself' '
 163        sed -e "s/Z$//" >expected <<-\EOF &&
 164        --paginate Z
 165        --no-pager Z
 166        --git-dir=
 167        --bare Z
 168        --version Z
 169        --exec-path Z
 170        --exec-path=
 171        --html-path Z
 172        --info-path Z
 173        --work-tree=
 174        --namespace=
 175        --no-replace-objects Z
 176        --help Z
 177        EOF
 178        test_completion "git --"
 179'
 180
 181test_expect_success 'double dash "git checkout"' '
 182        sed -e "s/Z$//" >expected <<-\EOF &&
 183        --quiet Z
 184        --ours Z
 185        --theirs Z
 186        --track Z
 187        --no-track Z
 188        --merge Z
 189        --conflict=
 190        --orphan Z
 191        --patch Z
 192        EOF
 193        test_completion "git checkout --"
 194'
 195
 196test_expect_success 'general options' '
 197        test_completion "git --ver" "--version " &&
 198        test_completion "git --hel" "--help " &&
 199        sed -e "s/Z$//" >expected <<-\EOF &&
 200        --exec-path Z
 201        --exec-path=
 202        EOF
 203        test_completion "git --exe" &&
 204        test_completion "git --htm" "--html-path " &&
 205        test_completion "git --pag" "--paginate " &&
 206        test_completion "git --no-p" "--no-pager " &&
 207        test_completion "git --git" "--git-dir=" &&
 208        test_completion "git --wor" "--work-tree=" &&
 209        test_completion "git --nam" "--namespace=" &&
 210        test_completion "git --bar" "--bare " &&
 211        test_completion "git --inf" "--info-path " &&
 212        test_completion "git --no-r" "--no-replace-objects "
 213'
 214
 215test_expect_success 'general options plus command' '
 216        test_completion "git --version check" "checkout " &&
 217        test_completion "git --paginate check" "checkout " &&
 218        test_completion "git --git-dir=foo check" "checkout " &&
 219        test_completion "git --bare check" "checkout " &&
 220        test_completion "git --help des" "describe " &&
 221        test_completion "git --exec-path=foo check" "checkout " &&
 222        test_completion "git --html-path check" "checkout " &&
 223        test_completion "git --no-pager check" "checkout " &&
 224        test_completion "git --work-tree=foo check" "checkout " &&
 225        test_completion "git --namespace=foo check" "checkout " &&
 226        test_completion "git --paginate check" "checkout " &&
 227        test_completion "git --info-path check" "checkout " &&
 228        test_completion "git --no-replace-objects check" "checkout "
 229'
 230
 231test_done