git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] Interactive editor tests for commit-msg hook

From
Wincent Colaiuta <win@wincent.com>
Date
Dec 9, 2007, 12:52 UTC
Message-ID
<1197204731-19553-1-git-send-email-win@wincent.com>

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@wincent.com>
---

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
Next: Junio C Hamano
Message 1 of 4 in “Interactive editor tests for commit-msg hook”
  1. Interactive editor tests for commit-msg hookWincent Colaiuta, Dec 9, 2007
  2. Junio C HamanoDec 10, 2007
  3. Wincent ColaiutaDec 10, 2007
  4. 7/7 Interactive editor tests for commit-msg hookWincent Colaiuta, Dec 10, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.