From: "Mark C. Chu-Carroll" <markchucarroll@fastmail.com>
To: git@vger.kernel.org
Cc: "Mark C. Chu-Carroll" <markchucarroll@fastmail.com>
Subject: [PATCH v6 1/3] t4001: modernize
Date: Tue, 22 Sep 2026 16:21:50 -0400 [thread overview]
Message-ID: <20260922202152.842793-2-markchucarroll@fastmail.com> (raw)
In-Reply-To: <20260922202152.842793-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 | 89 ++++++++++++++++++------------------------
1 file changed, 38 insertions(+), 51 deletions(-)
diff --git a/t/t4001-diff-rename.sh b/t/t4001-diff-rename.sh
index ad474100af..1a2474af10 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
@@ -184,7 +171,7 @@ test_expect_success 'setup for many rename source candidates' '
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
--
2.53.0
next prev parent reply other threads:[~2026-09-22 20:21 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-22 20:21 [PATCH v6 0/3] t40*: modernize Mark C. Chu-Carroll
2026-09-22 20:21 ` Mark C. Chu-Carroll [this message]
2026-09-22 20:21 ` [PATCH v6 2/3] t4009: modernize Mark C. Chu-Carroll
2026-09-22 20:21 ` [PATCH v6 3/3] t4010: modernize Mark C. Chu-Carroll
2026-09-24 14:58 ` [PATCH v6 0/3] t40*: modernize Kaartic Sivaraam
2026-09-24 16:13 ` Junio C Hamano
2026-09-24 17:20 ` Mark C. Chu-Carroll
2026-09-25 13:40 ` Kaartic Sivaraam
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=20260922202152.842793-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.