Skip to content

Commit

Permalink
Merge branch 'fc/completion-test-simplification'
Browse files Browse the repository at this point in the history
Clean up completion tests.  Use of conslidated helper may make
instrumenting one particular test during debugging of the test
itself, but I think that issue should be addressed in some other
way (e.g. making sure individual tests in 9902 can be skipped).

* fc/completion-test-simplification:
  completion: simplify __gitcomp() test helper
  completion: refactor __gitcomp related tests
  completion: consolidate test_completion*() tests
  completion: simplify tests using test_completion_long()
  completion: standardize final space marker in tests
  completion: add comment for test_completion()
  • Loading branch information
Junio C Hamano committed Nov 29, 2012
2 parents 8a6a6f4 + 1739303 commit 1cab289
Showing 1 changed file with 52 additions and 82 deletions.
134 changes: 52 additions & 82 deletions t/t9902-completion.sh
Original file line number Diff line number Diff line change
Expand Up @@ -54,105 +54,78 @@ run_completion ()
__git_wrap__git_main && print_comp
}

# Test high-level completion
# Arguments are:
# 1: typed text so far (cur)
# 2: expected completion
test_completion ()
{
test $# -gt 1 && echo "$2" > expected
run_completion "$@" &&
if test $# -gt 1
then
printf '%s\n' "$2" >expected
else
sed -e 's/Z$//' >expected
fi &&
run_completion "$1" &&
test_cmp expected out
}

# Like test_completion, but reads expectation from stdin,
# which is convenient when it is multiline. We also process "_" into
# spaces to make test vectors more readable.
test_completion_long ()
# Test __gitcomp.
# The first argument is the typed text so far (cur); the rest are
# passed to __gitcomp. Expected output comes is read from the
# standard input, like test_completion().
test_gitcomp ()
{
tr _ " " >expected &&
test_completion "$1"
local -a COMPREPLY &&
sed -e 's/Z$//' >expected &&
cur="$1" &&
shift &&
__gitcomp "$@" &&
print_comp &&
test_cmp expected out
}

newline=$'\n'

test_expect_success '__gitcomp - trailing space - options' '
sed -e "s/Z$//" >expected <<-\EOF &&
test_gitcomp "--re" "--dry-run --reuse-message= --reedit-message=
--reset-author" <<-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 &&
test_gitcomp "br" "branch. branch.autosetupmerge
branch.autosetuprebase browser." <<-\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 &&
test_gitcomp "--strategy=re" "octopus ours recursive resolve subtree" \
"" "re" <<-\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 &&
test_gitcomp "branch.me" "remote merge mergeoptions rebase" \
"branch.maint." "me" <<-\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 &&
test_gitcomp "branch.me" "master maint next pu" "branch." \
"ma" "." <<-\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' '
Expand All @@ -169,7 +142,7 @@ test_expect_success 'basic' '
'

test_expect_success 'double dash "git" itself' '
sed -e "s/Z$//" >expected <<-\EOF &&
test_completion "git --" <<-\EOF
--paginate Z
--no-pager Z
--git-dir=
Expand All @@ -184,11 +157,10 @@ test_expect_success 'double dash "git" itself' '
--no-replace-objects Z
--help Z
EOF
test_completion "git --"
'

test_expect_success 'double dash "git checkout"' '
sed -e "s/Z$//" >expected <<-\EOF &&
test_completion "git checkout --" <<-\EOF
--quiet Z
--ours Z
--theirs Z
Expand All @@ -199,17 +171,15 @@ test_expect_success 'double dash "git checkout"' '
--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 &&
test_completion "git --exe" <<-\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 " &&
Expand Down Expand Up @@ -247,44 +217,44 @@ test_expect_success 'setup for ref completion' '
'

test_expect_success 'checkout completes ref names' '
test_completion_long "git checkout m" <<-\EOF
master_
mybranch_
mytag_
test_completion "git checkout m" <<-\EOF
master Z
mybranch Z
mytag Z
EOF
'

test_expect_success 'show completes all refs' '
test_completion_long "git show m" <<-\EOF
master_
mybranch_
mytag_
test_completion "git show m" <<-\EOF
master Z
mybranch Z
mytag Z
EOF
'

test_expect_success '<ref>: completes paths' '
test_completion_long "git show mytag:f" <<-\EOF
file1_
file2_
test_completion "git show mytag:f" <<-\EOF
file1 Z
file2 Z
EOF
'

test_expect_success 'complete tree filename with spaces' '
echo content >"name with spaces" &&
git add . &&
git commit -m spaces &&
test_completion_long "git show HEAD:nam" <<-\EOF
name with spaces_
test_completion "git show HEAD:nam" <<-\EOF
name with spaces Z
EOF
'

test_expect_failure 'complete tree filename with metacharacters' '
echo content >"name with \${meta}" &&
git add . &&
git commit -m meta &&
test_completion_long "git show HEAD:nam" <<-\EOF
name with ${meta}_
name with spaces_
test_completion "git show HEAD:nam" <<-\EOF
name with ${meta} Z
name with spaces Z
EOF
'

Expand Down

0 comments on commit 1cab289

Please sign in to comment.