notmuch/test/t0001-new.sh
Michal Sojka 5398e6966a Convert the actual tests to the new framework
The changes are:
- The notmuch-test was split into several files (t000?-*.sh).
- Removed helper functions which were moved to test-lib.sh
- Replaced every printf with test_expect_success.
- Test commands chained with && (test-lib.sh doesn't use "set -e" in
  order to complete the test suite even if something fails)
- Many variables such as ${MAIL_DIR} were properly quoted as they
  contain spaces.
- Changed quoting patterns in add_message and generate_message (single
  quotes are already used by the test framework).
- ${TEST_DIR} replaced by ${PWD}

QUICK HOWTO:

To run the whole test suite
    make

To run only a single test
   ./t0001-new.sh

To stop on the first error
   ./t0001-new.sh -i
then mail store and database can be inspected in
"trash directory.t0001-new"

To see the output of tests
   ./t0001-new.sh -v

To not remove trash directory at the end:
   ./t0001-new.sh -d

To run all tests verbosely:
   make GIT_TEST_OPTS="-v"

Signed-off-by: Michal Sojka <sojkam1@fel.cvut.cz>
2010-09-16 15:56:44 -07:00

164 lines
4.2 KiB
Bash
Executable file

#!/bin/bash
test_description="\"notmuch new\" in several variations"
. ./test-lib.sh
test_expect_success "No new messages" '
output=$(NOTMUCH_NEW) &&
pass_if_equal "$output" "No new mail."
'
test_expect_success "Single new message" '
generate_message &&
output=$(NOTMUCH_NEW) &&
pass_if_equal "$output" "Added 1 new message to the database."
'
test_expect_success "Multiple new messages" '
generate_message &&
generate_message &&
output=$(NOTMUCH_NEW) &&
pass_if_equal "$output" "Added 2 new messages to the database."
'
test_expect_success "No new messages (non-empty DB)" '
output=$(NOTMUCH_NEW) &&
pass_if_equal "$output" "No new mail."
'
test_expect_success "New directories" '
rm -rf "${MAIL_DIR}"/* "${MAIL_DIR}"/.notmuch &&
mkdir "${MAIL_DIR}"/def &&
mkdir "${MAIL_DIR}"/ghi &&
generate_message [dir]=def &&
output=$(NOTMUCH_NEW) &&
pass_if_equal "$output" "Added 1 new message to the database."
'
test_expect_success "Alternate inode order" '
rm -rf "${MAIL_DIR}"/.notmuch &&
mv "${MAIL_DIR}"/ghi "${MAIL_DIR}"/abc &&
rm "${MAIL_DIR}"/def/* &&
generate_message [dir]=abc &&
output=$(NOTMUCH_NEW) &&
pass_if_equal "$output" "Added 1 new message to the database."
'
test_expect_success "Message moved in" '
rm -rf "${MAIL_DIR}"/* "${MAIL_DIR}"/.notmuch &&
generate_message &&
tmp_msg_filename=tmp/"$gen_msg_filename" &&
mkdir -p "$(dirname "$tmp_msg_filename")" &&
mv "$gen_msg_filename" "$tmp_msg_filename" &&
increment_mtime "${MAIL_DIR}" &&
$NOTMUCH new > /dev/null &&
mv "$tmp_msg_filename" "$gen_msg_filename" &&
increment_mtime "${MAIL_DIR}" &&
output=$(NOTMUCH_NEW) &&
pass_if_equal "$output" "Added 1 new message to the database."
'
test_expect_success "Renamed message" '
generate_message &&
$NOTMUCH new > /dev/null &&
mv "$gen_msg_filename" "${gen_msg_filename}"-renamed &&
increment_mtime "${MAIL_DIR}" &&
output=$(NOTMUCH_NEW) &&
pass_if_equal "$output" "No new mail. Detected 1 file rename."
'
test_expect_success "Deleted message" '
rm "${gen_msg_filename}"-renamed &&
increment_mtime "${MAIL_DIR}" &&
output=$(NOTMUCH_NEW) &&
pass_if_equal "$output" "No new mail. Removed 1 message."
'
test_expect_success "Renamed directory" '
generate_message [dir]=dir &&
generate_message [dir]=dir &&
generate_message [dir]=dir &&
$NOTMUCH new > /dev/null &&
mv "${MAIL_DIR}"/dir "${MAIL_DIR}"/dir-renamed &&
increment_mtime "${MAIL_DIR}" &&
output=$(NOTMUCH_NEW) &&
pass_if_equal "$output" "No new mail. Detected 3 file renames."
'
test_expect_success "Deleted directory" '
rm -rf "${MAIL_DIR}"/dir-renamed &&
increment_mtime "${MAIL_DIR}" &&
output=$(NOTMUCH_NEW) &&
pass_if_equal "$output" "No new mail. Removed 3 messages."
'
test_expect_success "New directory (at end of list)" '
generate_message [dir]=zzz &&
generate_message [dir]=zzz &&
generate_message [dir]=zzz &&
output=$(NOTMUCH_NEW) &&
pass_if_equal "$output" "Added 3 new messages to the database."
'
test_expect_success "Deleted directory (end of list)" '
rm -rf "${MAIL_DIR}"/zzz &&
increment_mtime "${MAIL_DIR}" &&
output=$(NOTMUCH_NEW) &&
pass_if_equal "$output" "No new mail. Removed 3 messages."
'
test_expect_success "New symlink to directory" '
rm -rf "${MAIL_DIR}"/.notmuch &&
mv "${MAIL_DIR}" "$PWD"/actual_maildir &&
mkdir "${MAIL_DIR}" &&
ln -s "$PWD"/actual_maildir "${MAIL_DIR}"/symlink &&
output=$(NOTMUCH_NEW) &&
pass_if_equal "$output" "Added 1 new message to the database."
'
test_expect_success "New symlink to a file" '
generate_message &&
external_msg_filename="$PWD"/external/"$(basename "$gen_msg_filename")" &&
mkdir -p "$(dirname "$external_msg_filename")" &&
mv "$gen_msg_filename" "$external_msg_filename" &&
ln -s "$external_msg_filename" "$gen_msg_filename" &&
increment_mtime "${MAIL_DIR}" &&
output=$(NOTMUCH_NEW) &&
pass_if_equal "$output" "Added 1 new message to the database."
'
test_expect_success "New two-level directory" '
generate_message [dir]=two/levels &&
generate_message [dir]=two/levels &&
generate_message [dir]=two/levels &&
output=$(NOTMUCH_NEW) &&
pass_if_equal "$output" "Added 3 new messages to the database."
'
test_expect_success "Deleted two-level directory" '
rm -rf "${MAIL_DIR}"/two &&
increment_mtime "${MAIL_DIR}" &&
output=$(NOTMUCH_NEW) &&
pass_if_equal "$output" "No new mail. Removed 3 messages."
'
test_done