From: Wincent Colaiuta <win@wincent.com>
To: git@vger.kernel.org
Cc: gitster@pobox.com, krh@redhat.com, Wincent Colaiuta <win@wincent.com>
Subject: [PATCH] Interactive editor tests for commit-msg hook
Date: Sun, 9 Dec 2007 13:52:11 +0100 [thread overview]
Message-ID: <1197204731-19553-1-git-send-email-win@wincent.com> (raw)
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 reply other threads:[~2007-12-09 12:53 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-12-09 12:52 Wincent Colaiuta [this message]
2007-12-10 3:42 ` [PATCH] Interactive editor tests for commit-msg hook Junio C Hamano
2007-12-10 7:32 ` Wincent Colaiuta
2007-12-10 7:33 ` [PATCH 7/7] " Wincent Colaiuta
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=1197204731-19553-1-git-send-email-win@wincent.com \
--to=win@wincent.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=krh@redhat.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).