From: "Mark C. Chu-Carroll" <markchucarroll@fastmail.com>
To: git@vger.kernel.org
Cc: "Mark C. Chu-Carroll" <markchucarroll@fastmail.com>
Subject: [PATCH v5 1/3] t4001: modernize
Date: Tue, 22 Sep 2026 10:31:17 -0400 [thread overview]
Message-ID: <20260922143119.3313620-2-markchucarroll@fastmail.com> (raw)
In-Reply-To: <20260922143119.3313620-1-markchucarroll@fastmail.com>
Old tests were written in a different style than modern
ones; for better readability and test error messages,
update t4001 to the modern style.
* run everything inside of a test_expect_success block.
* write title line on the same line as test_expect_success,
end that line with a single quote that opens the body of the test,
and end the test with a single quote that closes the body.
* write expected output of a test to a file named "expect",
and actual output to a file named "actual".
* write here-docs using "<<-" syntax, so that they're indented
uniformly with the rest of the test.
* make test names more clearly reflect the functionality that
they test.
Signed-off-by: Mark C. Chu-Carroll <markchucarroll@fastmail.com>
---
t/t4001-diff-rename.sh | 91 +++++++++++++++++-----------------------
t/t4009-diff-rename-4.sh | 54 ++++++++++++------------
2 files changed, 66 insertions(+), 79 deletions(-)
diff --git a/t/t4001-diff-rename.sh b/t/t4001-diff-rename.sh
index ad474100af..158cc66cec 100755
--- a/t/t4001-diff-rename.sh
+++ b/t/t4001-diff-rename.sh
@@ -26,7 +26,7 @@ test_expect_success 'setup' '
Line 14
Line 15
EOF
- cat >expected <<-\EOF &&
+ cat >expect <<-\EOF &&
diff --git a/path0 b/path1
rename from path0
rename to path1
@@ -42,7 +42,7 @@ test_expect_success 'setup' '
Line 13
Line 14
EOF
- cat >no-rename <<-\EOF
+ cat >expect-no-rename <<-\EOF &&
diff --git a/path0 b/path0
deleted file mode 100644
index fdbec44..0000000
@@ -86,47 +86,34 @@ test_expect_success 'setup' '
+Line 14
+Line 15
EOF
+ git update-index --add path0
'
-test_expect_success \
- 'update-index --add a file.' \
- 'git update-index --add path0'
-
-test_expect_success \
- 'write that tree.' \
- 'tree=$(git write-tree) && echo $tree'
-
-sed -e 's/line/Line/' <path0 >path1
-rm -f path0
-test_expect_success \
- 'renamed and edited the file.' \
- 'git update-index --add --remove path0 path1'
-
-test_expect_success \
- 'git diff-index -p -M after rename and editing.' \
- 'git diff-index -p -M $tree >current'
-
-
-test_expect_success \
- 'validate the output.' \
- 'compare_diff_patch current expected'
+test_expect_success 'diff shows path0 renamed to path1 with edit' '
+ tree=$(git write-tree) &&
+ sed -e "s/line/Line/" <path0 >path1 &&
+ rm -f path0 &&
+ git update-index --add --remove path0 path1 &&
+ git diff-index -p -M $tree >actual &&
+ compare_diff_patch actual expect
+'
-test_expect_success 'test diff.renames=true' '
- git -c diff.renames=true diff --cached $tree >current &&
- compare_diff_patch current expected
+test_expect_success 'with diff.renames=true, patch includes rename of path0 to path1' '
+ git -c diff.renames=true diff --cached $tree >actual &&
+ compare_diff_patch actual expect
'
-test_expect_success 'test diff.renames=false' '
- git -c diff.renames=false diff --cached $tree >current &&
- compare_diff_patch current no-rename
+test_expect_success 'with diff.renames=false, patch does not include rename' '
+ git -c diff.renames=false diff --cached $tree >actual &&
+ compare_diff_patch actual expect-no-rename
'
-test_expect_success 'test diff.renames unset' '
- git diff --cached $tree >current &&
- compare_diff_patch current expected
+test_expect_success 'with no setting for diff.renames, patch includes rename' '
+ git diff --cached $tree >actual &&
+ compare_diff_patch actual expect
'
-test_expect_success 'favour same basenames over different ones' '
+test_expect_success 'diff rename favours same basenames over different ones' '
cp path1 another-path &&
git add another-path &&
git commit -m 1 &&
@@ -137,25 +124,25 @@ test_expect_success 'favour same basenames over different ones' '
test_grep "renamed: .*path1 -> subdir/path1" out
'
-test_expect_success 'test diff.renames=true for git status' '
+test_expect_success 'with diff.renames=true, git status includes rename' '
git -c diff.renames=true status >out &&
test_grep "renamed: .*path1 -> subdir/path1" out
'
-test_expect_success 'test diff.renames=false for git status' '
+test_expect_success 'with diff.renames=false, git status shows delete/add' '
git -c diff.renames=false status >out &&
test_grep ! "renamed: .*path1 -> subdir/path1" out &&
test_grep "new file: .*subdir/path1" out &&
test_grep "deleted: .*[^/]path1" out
'
-test_expect_success 'favour same basenames even with minor differences' '
+test_expect_success 'rename logic favours same basenames even with minor differences' '
git show HEAD:path1 | sed "s/15/16/" > subdir/path1 &&
git status >out &&
test_grep "renamed: .*path1 -> subdir/path1" out
'
-test_expect_success 'two files with same basename and same content' '
+test_expect_success 'rename logic favors common path segments for files with the same basename and content' '
git reset --hard &&
mkdir -p dir/A dir/B &&
cp path1 dir/A/file &&
@@ -167,7 +154,7 @@ test_expect_success 'two files with same basename and same content' '
test_grep "renamed: .*dir/A/file -> other-dir/A/file" out
'
-test_expect_success 'setup for many rename source candidates' '
+test_expect_success 'rename with many candidates' '
git reset --hard &&
for i in 0 1 2 3 4 5 6 7 8 9;
do
@@ -177,14 +164,14 @@ test_expect_success 'setup for many rename source candidates' '
done
done &&
git add "path??" &&
- test_tick &&
+ test_tick &&
git commit -m "hundred" &&
(cat path1 && echo new) >new-path &&
echo old >>path1 &&
git add new-path path1 &&
git diff -l 4 -C -C --cached --name-status >actual 2>actual.err &&
sed -e "s/^\([CM]\)[0-9]* /\1 /" actual >actual.munged &&
- cat >expect <<-EOF &&
+ cat >expect <<-\EOF &&
C path1 new-path
M path1
EOF
@@ -192,7 +179,7 @@ test_expect_success 'setup for many rename source candidates' '
test_grep warning actual.err
'
-test_expect_success 'rename pretty print with nothing in common' '
+test_expect_success 'pretty-print paths with nothing in common after rename' '
mkdir -p a/b/ &&
: >a/b/c &&
git add a/b/c &&
@@ -206,7 +193,7 @@ test_expect_success 'rename pretty print with nothing in common' '
test_grep " a/b/c => c/b/a " output
'
-test_expect_success 'rename pretty print with common prefix' '
+test_expect_success 'pretty print paths with common prefix after rename' '
mkdir -p c/d &&
git mv c/b/a c/d/e &&
git commit -m "c/b/a -> c/d/e" &&
@@ -216,7 +203,7 @@ test_expect_success 'rename pretty print with common prefix' '
test_grep " c/{b/a => d/e} " output
'
-test_expect_success 'rename pretty print with common suffix' '
+test_expect_success 'pretty prints paths with common suffix after rename' '
mkdir d &&
git mv c/d/e d/e &&
git commit -m "c/d/e -> d/e" &&
@@ -226,7 +213,7 @@ test_expect_success 'rename pretty print with common suffix' '
test_grep " {c/d => d}/e " output
'
-test_expect_success 'rename pretty print with common prefix and suffix' '
+test_expect_success 'pretty prints paths with common prefix and suffix after rename' '
mkdir d/f &&
git mv d/e d/f/e &&
git commit -m "d/e -> d/f/e" &&
@@ -236,7 +223,7 @@ test_expect_success 'rename pretty print with common prefix and suffix' '
test_grep " d/{ => f}/e " output
'
-test_expect_success 'rename pretty print common prefix and suffix overlap' '
+test_expect_success 'pretty prints paths with common prefix and suffix overlap after rename' '
mkdir d/f/f &&
git mv d/f/e d/f/f/e &&
git commit -m "d/f/e d/f/f/e" &&
@@ -261,7 +248,7 @@ test_expect_success 'diff-tree -l0 defaults to a big rename limit, not zero' '
test_grep "myotherfile.*myfile" actual
'
-test_expect_success 'basename similarity vs best similarity' '
+test_expect_success 'rename prefers basename similarity over best similarity' '
mkdir subdir &&
test_write_lines line1 line2 line3 line4 line5 \
line6 line7 line8 line9 line10 >subdir/file.txt &&
@@ -278,14 +265,14 @@ test_expect_success 'basename similarity vs best similarity' '
git diff-tree -r -M --name-status HEAD^ HEAD >actual &&
# subdir/file.txt is 88% similar to file.md, 78% similar to file.txt,
# but since same basenames are checked first...
- cat >expected <<-\EOF &&
+ cat >expect <<-\EOF &&
A file.md
R078 subdir/file.txt file.txt
EOF
- test_cmp expected actual
+ test_cmp expect actual
'
-test_expect_success 'last line matters too' '
+test_expect_success 'file similarity handles missing trailing newline' '
{
test_write_lines a 0 1 2 3 4 5 6 7 8 9 &&
printf "git ignores final up to 63 characters if not newline terminated"
@@ -303,10 +290,10 @@ test_expect_success 'last line matters too' '
git commit -a -m "rename no-final-lf -> still-absent-final-lf" &&
git diff-tree -r -M --name-status HEAD^ HEAD >actual &&
sed -e "s/^R[0-9]* /R /" actual >actual.munged &&
- cat >expected <<-\EOF &&
+ cat >expect <<-\EOF &&
R no-final-lf still-absent-final-lf
EOF
- test_cmp expected actual.munged
+ test_cmp expect actual.munged
'
test_done
diff --git a/t/t4009-diff-rename-4.sh b/t/t4009-diff-rename-4.sh
index 59e71e3acd..198de5d039 100755
--- a/t/t4009-diff-rename-4.sh
+++ b/t/t4009-diff-rename-4.sh
@@ -10,23 +10,23 @@ test_description='Same rename detection as t4003 but testing diff-raw -z.
. ./test-lib.sh
. "$TEST_DIRECTORY"/lib-diff.sh ;# test-lib chdir's into trash
-test_expect_success \
- 'prepare reference tree' \
- 'COPYING_test_data >COPYING &&
- echo frotz >rezrov &&
+test_expect_success 'prepare reference tree' '
+ COPYING_test_data >COPYING &&
+ echo frotz >rezrov &&
git update-index --add COPYING rezrov &&
orig=$(git hash-object COPYING) &&
tree=$(git write-tree) &&
- echo $tree'
+ echo $tree
+'
-test_expect_success \
- 'prepare work tree' \
- 'sed -e 's/HOWEVER/However/' <COPYING >COPYING.1 &&
- sed -e 's/GPL/G.P.L/g' <COPYING >COPYING.2 &&
+test_expect_success 'prepare work tree' '
+ sed -e "s/HOWEVER/However/" <COPYING >COPYING.1 &&
+ sed -e "s/GPL/G.P.L/g" <COPYING >COPYING.2 &&
rm -f COPYING &&
c1=$(git hash-object COPYING.1) &&
c2=$(git hash-object COPYING.2) &&
- git update-index --add --remove COPYING COPYING.?'
+ git update-index --add --remove COPYING COPYING.?
+'
# tree has COPYING and rezrov. work tree has COPYING.1 and COPYING.2,
# both are slightly edited, and unchanged rezrov. We say COPYING.1
@@ -44,16 +44,16 @@ COPYING
COPYING.2
EOF
-test_expect_success \
- 'validate output from rename/copy detection (#1)' \
- 'compare_diff_raw_z current expected'
+test_expect_success 'validate output from rename/copy detection (#1)' '
+ compare_diff_raw_z current expected
+'
################################################################
-test_expect_success \
- 'prepare work tree again' \
- 'mv COPYING.2 COPYING &&
- git update-index --add --remove COPYING COPYING.1 COPYING.2'
+test_expect_success 'prepare work tree again' '
+ mv COPYING.2 COPYING &&
+ git update-index --add --remove COPYING COPYING.1 COPYING.2
+'
# tree has COPYING and rezrov. work tree has COPYING and COPYING.1,
# both are slightly edited, and unchanged rezrov. We say COPYING.1
@@ -69,9 +69,9 @@ COPYING
COPYING.1
EOF
-test_expect_success \
- 'validate output from rename/copy detection (#2)' \
- 'compare_diff_raw_z current expected'
+test_expect_success 'validate output from rename/copy detection (#2)' '
+ compare_diff_raw_z current expected
+'
################################################################
@@ -80,10 +80,10 @@ test_expect_success \
# anything about rezrov or COPYING, since the revised again diff-raw
# nows how to say Copy.
-test_expect_success \
- 'prepare work tree once again' \
- 'COPYING_test_data >COPYING &&
- git update-index --add --remove COPYING COPYING.1'
+test_expect_success 'prepare work tree once again' '
+ COPYING_test_data >COPYING &&
+ git update-index --add --remove COPYING COPYING.1
+'
git diff-index -z -C --find-copies-harder $tree >current
cat >expected <<EOF
@@ -92,8 +92,8 @@ COPYING
COPYING.1
EOF
-test_expect_success \
- 'validate output from rename/copy detection (#3)' \
- 'compare_diff_raw_z current expected'
+test_expect_success 'validate output from rename/copy detection (#3)' '
+ compare_diff_raw_z current expected
+'
test_done
--
2.53.0
next prev parent reply other threads:[~2026-09-22 14:31 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-22 14:31 [PATCH v5 0/3] t40*: modernize Mark C. Chu-Carroll
2026-09-22 14:31 ` Mark C. Chu-Carroll [this message]
2026-09-22 19:41 ` [PATCH v5 1/3] t4001: modernize Junio C Hamano
2026-09-22 14:31 ` [PATCH v5 2/3] t4009: modernize Mark C. Chu-Carroll
2026-09-22 14:31 ` [PATCH v5 3/3] t4010: modernize Mark C. Chu-Carroll
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260922143119.3313620-2-markchucarroll@fastmail.com \
--to=markchucarroll@fastmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.