test: modernize funny-names test style

This is one of the early tests, so it uses a style that by modern
standards can be hard to read.  Tweak it to:

 - clearly declare what assertion each test is designed to check

 - mark tests that create state later tests will depend on with the
   word "setup" so people writing or running tests know the others
   can be skipped or reordered safely

 - put commands that populate a file with expected output inside
   the corresponding test stanza, so it is easier to see by eye
   where each test begins and ends

 - instead of pipelines, use commands that read and write a
   temporary file, so bugs causing commands to segfault or produce
   the wrong exit status can be caught.

More cosmetic changes:

 - put the opening quote starting each test on the same line as the
   test_expect_* invocation, and indent the commands in each test
   with a single tab

 - end the test early if the underlying filesystem cannot
   accomodate the filenames we use, instead of marking all tests
   with the same TABS_IN_FILENAMES prerequisite.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Jonathan Nieder 2012-03-12 23:59:52 -05:00 committed by Junio C Hamano
parent e7a8ac3875
commit ef7db1933b
1 changed files with 168 additions and 155 deletions

View File

@ -15,191 +15,204 @@ p0='no-funny'
p1='tabs ," (dq) and spaces' p1='tabs ," (dq) and spaces'
p2='just space' p2='just space'


cat >"$p0" <<\EOF test_expect_success 'setup' '
1. A quick brown fox jumps over the lazy cat, oops dog. cat >"$p0" <<-\EOF &&
2. A quick brown fox jumps over the lazy cat, oops dog. 1. A quick brown fox jumps over the lazy cat, oops dog.
3. A quick brown fox jumps over the lazy cat, oops dog. 2. A quick brown fox jumps over the lazy cat, oops dog.
EOF 3. A quick brown fox jumps over the lazy cat, oops dog.
EOF


cat 2>/dev/null >"$p1" "$p0" { cat "$p0" >"$p1" || :; } &&
echo 'Foo Bar Baz' >"$p2" { echo "Foo Bar Baz" >"$p2" || :; } &&


if test -f "$p1" && cmp "$p0" "$p1" if test -f "$p1" && cmp "$p0" "$p1"
then
test_set_prereq TABS_IN_FILENAMES
fi
'

if ! test_have_prereq TABS_IN_FILENAMES
then then
test_set_prereq TABS_IN_FILENAMES
else
# since FAT/NTFS does not allow tabs in filenames, skip this test # since FAT/NTFS does not allow tabs in filenames, skip this test
say 'Your filesystem does not allow tabs in filenames' skip_all='Your filesystem does not allow tabs in filenames'
test_done
fi fi


test_expect_success TABS_IN_FILENAMES 'setup expect' " test_expect_success 'setup: populate index and tree' '
echo 'just space git update-index --add "$p0" "$p2" &&
no-funny' >expected t0=$(git write-tree)
" '


test_expect_success TABS_IN_FILENAMES 'git ls-files no-funny' \ test_expect_success 'ls-files prints space in filename verbatim' '
'git update-index --add "$p0" "$p2" && printf "%s\n" "just space" no-funny >expected &&
git ls-files >current && git ls-files >current &&
test_cmp expected current' test_cmp expected current

test_expect_success TABS_IN_FILENAMES 'setup expect' '
t0=`git write-tree` &&
echo "$t0" >t0 &&

cat > expected <<\EOF
just space
no-funny
"tabs\t,\" (dq) and spaces"
EOF
' '


test_expect_success TABS_IN_FILENAMES 'git ls-files with-funny' \ test_expect_success 'setup: add funny filename' '
'git update-index --add "$p1" && git update-index --add "$p1" &&
t1=$(git write-tree)
'

test_expect_success 'ls-files quotes funny filename' '
cat >expected <<-\EOF &&
just space
no-funny
"tabs\t,\" (dq) and spaces"
EOF
git ls-files >current && git ls-files >current &&
test_cmp expected current' test_cmp expected current

test_expect_success TABS_IN_FILENAMES 'setup expect' "
echo 'just space
no-funny
tabs ,\" (dq) and spaces' >expected
"

test_expect_success TABS_IN_FILENAMES 'git ls-files -z with-funny' \
'git ls-files -z | perl -pe y/\\000/\\012/ >current &&
test_cmp expected current'

test_expect_success TABS_IN_FILENAMES 'setup expect' '
t1=`git write-tree` &&
echo "$t1" >t1 &&

cat > expected <<\EOF
just space
no-funny
"tabs\t,\" (dq) and spaces"
EOF
' '


test_expect_success TABS_IN_FILENAMES 'git ls-tree with funny' \ test_expect_success 'ls-files -z does not quote funny filename' '
'git ls-tree -r $t1 | sed -e "s/^[^ ]* //" >current && cat >expected <<-\EOF &&
test_cmp expected current' just space

no-funny
test_expect_success TABS_IN_FILENAMES 'setup expect' ' tabs ," (dq) and spaces
cat > expected <<\EOF EOF
A "tabs\t,\" (dq) and spaces" git ls-files -z >ls-files.z &&
EOF perl -pe "y/\000/\012/" <ls-files.z >current &&
test_cmp expected current
' '


test_expect_success TABS_IN_FILENAMES 'git diff-index with-funny' \ test_expect_success 'ls-tree quotes funny filename' '
'git diff-index --name-status $t0 >current && cat >expected <<-\EOF &&
test_cmp expected current' just space

no-funny
test_expect_success TABS_IN_FILENAMES 'git diff-tree with-funny' \ "tabs\t,\" (dq) and spaces"
'git diff-tree --name-status $t0 $t1 >current && EOF
test_cmp expected current' git ls-tree -r $t1 >ls-tree &&

sed -e "s/^[^ ]* //" <ls-tree >current &&
test_expect_success TABS_IN_FILENAMES 'setup expect' " test_cmp expected current
echo 'A
tabs ,\" (dq) and spaces' >expected
"

test_expect_success TABS_IN_FILENAMES 'git diff-index -z with-funny' \
'git diff-index -z --name-status $t0 | perl -pe y/\\000/\\012/ >current &&
test_cmp expected current'

test_expect_success TABS_IN_FILENAMES 'git diff-tree -z with-funny' \
'git diff-tree -z --name-status $t0 $t1 | perl -pe y/\\000/\\012/ >current &&
test_cmp expected current'

test_expect_success TABS_IN_FILENAMES 'setup expect' '
cat > expected <<\EOF
CNUM no-funny "tabs\t,\" (dq) and spaces"
EOF
' '


test_expect_success TABS_IN_FILENAMES 'git diff-tree -C with-funny' \ test_expect_success 'diff-index --name-status quotes funny filename' '
'git diff-tree -C --find-copies-harder --name-status \ cat >expected <<-\EOF &&
$t0 $t1 | sed -e 's/^C[0-9]*/CNUM/' >current && A "tabs\t,\" (dq) and spaces"
test_cmp expected current' EOF

git diff-index --name-status $t0 >current &&
test_expect_success TABS_IN_FILENAMES 'setup expect' ' test_cmp expected current
cat > expected <<\EOF
RNUM no-funny "tabs\t,\" (dq) and spaces"
EOF
' '


test_expect_success TABS_IN_FILENAMES 'git diff-tree delete with-funny' \ test_expect_success 'diff-tree --name-status quotes funny filename' '
'git update-index --force-remove "$p0" && cat >expected <<-\EOF &&
git diff-index -M --name-status \ A "tabs\t,\" (dq) and spaces"
$t0 | sed -e 's/^R[0-9]*/RNUM/' >current && EOF
test_cmp expected current' git diff-tree --name-status $t0 $t1 >current &&

test_cmp expected current
test_expect_success TABS_IN_FILENAMES 'setup expect' '
cat > expected <<\EOF
diff --git a/no-funny "b/tabs\t,\" (dq) and spaces"
similarity index NUM%
rename from no-funny
rename to "tabs\t,\" (dq) and spaces"
EOF
' '


test_expect_success TABS_IN_FILENAMES 'git diff-tree delete with-funny' \ test_expect_success 'diff-index -z does not quote funny filename' '
'git diff-index -M -p $t0 | cat >expected <<-\EOF &&
sed -e "s/index [0-9]*%/index NUM%/" >current && A
test_cmp expected current' tabs ," (dq) and spaces

EOF
test_expect_success TABS_IN_FILENAMES 'setup expect' ' git diff-index -z --name-status $t0 >diff-index.z &&
chmod +x "$p1" && perl -pe "y/\000/\012/" <diff-index.z >current &&
cat > expected <<\EOF test_cmp expected current
diff --git a/no-funny "b/tabs\t,\" (dq) and spaces"
old mode 100644
new mode 100755
similarity index NUM%
rename from no-funny
rename to "tabs\t,\" (dq) and spaces"
EOF
' '


test_expect_success TABS_IN_FILENAMES 'git diff-tree delete with-funny' \ test_expect_success 'diff-tree -z does not quote funny filename' '
'git diff-index -M -p $t0 | cat >expected <<-\EOF &&
sed -e "s/index [0-9]*%/index NUM%/" >current && A
test_cmp expected current' tabs ," (dq) and spaces

EOF
test_expect_success TABS_IN_FILENAMES 'setup expect' ' git diff-tree -z --name-status $t0 $t1 >diff-tree.z &&
cat >expected <<\EOF perl -pe y/\\000/\\012/ <diff-tree.z >current &&
"tabs\t,\" (dq) and spaces" test_cmp expected current
1 file changed, 0 insertions(+), 0 deletions(-)
EOF
' '


test_expect_success TABS_IN_FILENAMES 'diffstat for rename with funny chars' \ test_expect_success 'diff-tree --find-copies-harder quotes funny filename' '
'git diff-index -M -p $t0 | cat >expected <<-\EOF &&
git apply --stat | sed -e "s/|.*//" -e "s/ *\$//" >current && CNUM no-funny "tabs\t,\" (dq) and spaces"
test_i18ncmp expected current' EOF
git diff-tree -C --find-copies-harder --name-status $t0 $t1 >out &&
sed -e "s/^C[0-9]*/CNUM/" <out >current &&
test_cmp expected current
'


test_expect_success TABS_IN_FILENAMES 'numstat for rename with funny chars' \ test_expect_success 'setup: remove unfunny index entry' '
'cat >expected <<-\EOF && git update-index --force-remove "$p0"
'

test_expect_success 'diff-tree -M quotes funny filename' '
cat >expected <<-\EOF &&
RNUM no-funny "tabs\t,\" (dq) and spaces"
EOF
git diff-index -M --name-status $t0 >out &&
sed -e "s/^R[0-9]*/RNUM/" <out >current &&
test_cmp expected current
'

test_expect_success 'diff-index -M -p quotes funny filename' '
cat >expected <<-\EOF &&
diff --git a/no-funny "b/tabs\t,\" (dq) and spaces"
similarity index NUM%
rename from no-funny
rename to "tabs\t,\" (dq) and spaces"
EOF
git diff-index -M -p $t0 >diff &&
sed -e "s/index [0-9]*%/index NUM%/" <diff >current &&
test_cmp expected current
'

test_expect_success 'setup: mode change' '
chmod +x "$p1"
'

test_expect_success 'diff-index -M -p with mode change quotes funny filename' '
cat >expected <<-\EOF &&
diff --git a/no-funny "b/tabs\t,\" (dq) and spaces"
old mode 100644
new mode 100755
similarity index NUM%
rename from no-funny
rename to "tabs\t,\" (dq) and spaces"
EOF
git diff-index -M -p $t0 >diff &&
sed -e "s/index [0-9]*%/index NUM%/" <diff >current &&
test_cmp expected current
'

test_expect_success 'diffstat for rename quotes funny filename' '
cat >expected <<-\EOF &&
"tabs\t,\" (dq) and spaces"
1 file changed, 0 insertions(+), 0 deletions(-)
EOF
git diff-index -M -p $t0 >diff &&
git apply --stat <diff >diffstat &&
sed -e "s/|.*//" -e "s/ *\$//" <diffstat >current &&
test_i18ncmp expected current
'

test_expect_success 'numstat for rename quotes funny filename' '
cat >expected <<-\EOF &&
0 0 "tabs\t,\" (dq) and spaces" 0 0 "tabs\t,\" (dq) and spaces"
EOF EOF
git diff-index -M -p $t0 >diff && git diff-index -M -p $t0 >diff &&
git apply --numstat <diff >current && git apply --numstat <diff >current &&
test_cmp expected current' test_cmp expected current

test_expect_success TABS_IN_FILENAMES 'setup expect' '
cat > expected <<\EOF
0 3 no-funny
3 0 "tabs\t,\" (dq) and spaces"
EOF
' '


test_expect_success TABS_IN_FILENAMES 'numstat without -M for funny rename' \ test_expect_success 'numstat without -M quotes funny filename' '
'git diff-index -p $t0 | cat >expected <<-\EOF &&
git apply --numstat >current && 0 3 no-funny
test_cmp expected current' 3 0 "tabs\t,\" (dq) and spaces"
EOF
git diff-index -p $t0 >diff &&
git apply --numstat <diff >current &&
test_cmp expected current
'


test_expect_success TABS_IN_FILENAMES 'numstat for non-git funny rename diff' \ test_expect_success 'numstat for non-git rename diff quotes funny filename' '
'git diff-index -p $t0 | cat >expected <<-\EOF &&
sed -ne "/^[-+@]/p" | 0 3 no-funny
git apply --numstat >current && 3 0 "tabs\t,\" (dq) and spaces"
test_cmp expected current' EOF
git diff-index -p $t0 >git-diff &&
sed -ne "/^[-+@]/p" <git-diff >diff &&
git apply --numstat <diff >current &&
test_cmp expected current
'


test_done test_done