Supplement the existing tests for the commit-msg hook (which all use "git commit -m") with tests which use an interactive editor (no -m switch) to ensure that all code paths get tested. Signed-off-by: Wincent Colaiuta <win@xxxxxxxxxxx> --- I didn't add similar tests for the pre-commit hook because I don't think that's an interesting code path; we don't care about the commit message in that case, only whether the commit is allowed to proceed or not. t/t7504-commit-msg-hook.sh | 72 ++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 72 insertions(+), 0 deletions(-) diff --git a/t/t7504-commit-msg-hook.sh b/t/t7504-commit-msg-hook.sh index 17aad7c..e154bab 100755 --- a/t/t7504-commit-msg-hook.sh +++ b/t/t7504-commit-msg-hook.sh @@ -9,11 +9,33 @@ test_expect_success "with no hook" \ git add file && git commit -m 'first'" +# set up fake editor for interactive editing +cat > fake-editor <<'EOF' +#!/bin/sh +cp FAKE_MSG "$1" +exit 0 +EOF +chmod +x fake-editor +FAKE_EDITOR="$(pwd)/fake-editor" +export FAKE_EDITOR + +test_expect_success "with no hook (editor)" \ + "echo 'more foo' >> file && + git add file && + echo 'more foo' > FAKE_MSG && + GIT_EDITOR="$FAKE_EDITOR" git commit" + test_expect_success "--no-verify with no hook" \ "echo 'bar' > file && git add file && git commit --no-verify -m 'bar'" +test_expect_success "--no-verify with no hook (editor)" \ + "echo 'more bar' > file && + git add file && + echo 'more bar' > FAKE_MSG && + GIT_EDITOR="$FAKE_EDITOR" git commit --no-verify" + # now install hook that always succeeds HOOKDIR="$(git rev-parse --git-dir)/hooks" HOOK="$HOOKDIR/commit-msg" @@ -29,11 +51,23 @@ test_expect_success "with succeeding hook" \ git add file && git commit -m 'more'" +test_expect_success "with succeeding hook (editor)" \ + "echo 'more more' >> file && + git add file && + echo 'more more' > FAKE_MSG && + GIT_EDITOR="$FAKE_EDITOR" git commit" + test_expect_success "--no-verify with succeeding hook" \ "echo 'even more' >> file && git add file && git commit --no-verify -m 'even more'" +test_expect_success "--no-verify with succeeding hook (editor)" \ + "echo 'even more more' >> file && + git add file && + echo 'even more more' > FAKE_MSG && + GIT_EDITOR="$FAKE_EDITOR" git commit --no-verify" + # now a hook that fails cat > "$HOOK" <<EOF #!/bin/sh @@ -45,22 +79,46 @@ test_expect_failure "with failing hook" \ git add file && git commit -m 'another'" +test_expect_failure "with failing hook (editor)" \ + "echo 'more another' >> file && + git add file && + echo 'more another' > FAKE_MSG && + GIT_EDITOR="$FAKE_EDITOR" git commit" + test_expect_success "--no-verify with failing hook" \ "echo 'stuff' >> file && git add file && git commit --no-verify -m 'stuff'" +test_expect_success "--no-verify with failing hook (editor)" \ + "echo 'more stuff' >> file && + git add file && + echo 'more stuff' > FAKE_MSG && + GIT_EDITOR="$FAKE_EDITOR" git commit --no-verify" + chmod -x "$HOOK" test_expect_success "with non-executable hook" \ "echo 'content' >> file && git add file && git commit -m 'content'" +test_expect_success "with non-executable hook (editor)" \ + "echo 'content again' >> file && + git add file && + echo 'content again' > FAKE_MSG && + GIT_EDITOR="$FAKE_EDITOR" git commit -m 'content again'" + test_expect_success "--no-verify with non-executable hook" \ "echo 'more content' >> file && git add file && git commit --no-verify -m 'more content'" +test_expect_success "--no-verify with non-executable hook (editor)" \ + "echo 'even more content' >> file && + git add file && + echo 'even more content' > FAKE_MSG && + GIT_EDITOR="$FAKE_EDITOR" git commit --no-verify" + # now a hook that edits the commit message cat > "$HOOK" <<'EOF' #!/bin/sh @@ -79,10 +137,24 @@ test_expect_success "hook edits commit message" \ git commit -m 'additional' && commit_msg_is 'new message'" +test_expect_success "hook edits commit message (editor)" \ + "echo 'additional content' >> file && + git add file && + echo 'additional content' > FAKE_MSG && + GIT_EDITOR="$FAKE_EDITOR" git commit && + commit_msg_is 'new message'" + test_expect_success "hook doesn't edit commit message" \ "echo 'plus' >> file && git add file && git commit --no-verify -m 'plus' && commit_msg_is 'plus'" +test_expect_success "hook doesn't edit commit message (editor)" \ + "echo 'more plus' >> file && + git add file && + echo 'more plus' > FAKE_MSG && + GIT_EDITOR="$FAKE_EDITOR" git commit --no-verify && + commit_msg_is 'more plus'" + test_done -- 1.5.3.7.1116.gf11de - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html