Re: [PATCH 1/2] t750*: make tests for commit messages more pedantic
From: Eric Sunshine <hidden>
Date: 2016-06-15 23:05:02
On Tue, May 26, 2015 at 2:15 AM, Patryk Obara [off-list ref] wrote:
Currently messages are compared with --pretty=format:%s%b which does not retain raw format of commit message. In result it's not clear what part of expected commit msg is subject and what part is body. Also, it's impossible to test if messages with multiple lines are handled correctly, which may be significant when using nondefault --cleanup.
Makes sense.
Change "commit_msg_is" function to use raw message format in log and interpret escaped sequences in expected message. This way it's possible to test exactly what commit message text was saved.
These changes would be less daunting to review if split into multiple patches; one per logical change. So, for instance, patch 1 would make this change and adjust tests accordingly.
Add test to verify, that no additional content is appended to template message, which uncovers tiny "bug" in --status handling - new line is always appended before status message. If template file ended with newline (which is default for many popular text editors, e.g. vim) then blank line appears before status (which is very annoying when template ends with line starting with '#'). On the other hand, this newline needs to be appended if template file didn't end with newline (which is default for e.g. emacs) - otherwise first line of status message may be not cleaned up.
This could be patch 2.
Add explicit test to verify if \n is kept unexpanded in commit message - this used to be part of unrelated template test.
And patch 3, and so on...
Modify add-content-and-comment fake editor to include both comments and whitespace, so --cleanup=whitespace is now actually tested. Modify expected value of test "cleanup commit messages" (t7502), which shouldn't be passing, because template and logfiles are unnecessarily stripped before placing them into editor.
Your cover letter correctly states that with this patch is applied, a number of tests fail. Tests which are expected to fail should be declared test_expect_failure rather than test_expect_success. The patch which fixes the failures should flip them to test_expect_success.
Signed-off-by: Patryk Obara <redacted>
More below...
quoted hunk ↗ jump to hunk
---diff --git a/t/t7500-commit.sh b/t/t7500-commit.sh index 116885a..fd1bf71 100755 --- a/t/t7500-commit.sh +++ b/t/t7500-commit.sh@@ -13,8 +13,8 @@ commit_msg_is () { expect=commit_msg_is.expect actual=commit_msg_is.actual - printf "%s" "$(git log --pretty=format:%s%b -1)" >"$actual" && - printf "%s" "$1" >"$expect" && + git log --pretty=format:%B -1 >"$actual" && + printf "%b" "$1" >"$expect" && test_i18ncmp "$expect" "$actual" }@@ -329,4 +329,47 @@ test_expect_success 'invalid message options when using --fixup' ' test_must_fail git commit --fixup HEAD~1 -F log ' +test_expect_success 'no blank lines appended after template with --status' ' + echo "template line" > "$TEMPLATE" &&
Style: Modern code omits the space after the redirection operator (>"$TEMPLATE"), however, it's also important to match existing style. Unfortunately, this file has an equal mixture of both '>blap' and '> blap', so it's difficult to know which style to match. As this is new code, it'd probably be best to omit the space.
+ echo changes >>foo && + git add foo && + test_set_editor "$TEST_DIRECTORY"/t7500/add-content && + git commit -e -t "$TEMPLATE" --status && + commit_msg_is "template line\ncommit message\n" +' + +test_expect_success 'template without newline before eof should work with --status' '
It's not clear what "should work" means. I suppose you mean that the end result should have exactly one newline after the template. Perhaps the test title could indicate the intent more clearly.
+ printf "%s" "template line" > "$TEMPLATE" && + echo changes >>foo && + git add foo && + test_set_editor "$TEST_DIRECTORY"/t7500/add-content && + git commit -e -t "$TEMPLATE" --status && + commit_msg_is "template line\ncommit message\n" +' + +test_expect_success 'logfile without newline before eof should work with --status' '
Ditto: Unclear "should work"
quoted hunk ↗ jump to hunk
+ printf "%s" "log line" >log-file && + echo changes >>foo && + git add foo && + test_set_editor "$TEST_DIRECTORY"/t7500/add-content && + git commit -e -F log-file --status && + commit_msg_is "log line\ncommit message\n" +' test_donediff --git a/t/t7502-commit.sh b/t/t7502-commit.sh index 051489e..d2203ed 100755 --- a/t/t7502-commit.sh +++ b/t/t7502-commit.sh@@ -8,11 +8,12 @@ commit_msg_is () { expect=commit_msg_is.expect actual=commit_msg_is.actual - printf "%s" "$(git log --pretty=format:%s%b -1)" >$actual && - printf "%s" "$1" >$expect && - test_i18ncmp $expect $actual + git log --pretty=format:%B -1 >"$actual" && + printf "%b" "$1" >"$expect" && + test_i18ncmp "$expect" "$actual" } +
Sneaking in unnecessary whitespace change.
# Arguments: [<prefix] [<commit message>] [<commit options>]
check_summary_oneline() {
test_tick &&