#!/bin/sh
######################################################
#
# Test many basic nmh capabilities.
#
######################################################

if test -z "${MH_OBJ_DIR}"; then
    srcdir=`dirname "$0"`/../..
    MH_OBJ_DIR=`cd "$srcdir" && pwd`; export MH_OBJ_DIR
fi

. "$MH_OBJ_DIR/test/common.sh"

setup_test

folders=$MH_TEST_DIR/Mail/.folders

expected=$MH_TEST_DIR/$$.expected
actual=$MH_TEST_DIR/$$.actual

# make second folder
cp -r $MH_TEST_DIR/Mail/inbox $MH_TEST_DIR/Mail/foo1
cp -r $MH_TEST_DIR/Mail/inbox $MH_TEST_DIR/Mail/foo2
# but only list inbox and foo2 in .folders, and sorted differently
cat > $folders <<EOF
inbox
foo2
EOF

# test with no sequence
start_test 'test with no sequence'
cat > $expected <<EOF
new: must specify sequences or set Unseen-Sequence
EOF
run_prog new > $actual 2>&1  ||  true
check $expected $actual

# test with no desired messages
start_test 'test with no desired messages'
cat > $expected <<EOF
 total      0.
EOF
run_prog new aseq > $actual 2>&1
check $expected $actual 'keep first'
run_prog new -folders $folders aseq > $actual 2>&1
check $expected $actual

# test fnext/fprev with no desired messages
start_test 'test fnext/fprev with no desired messages'
cat /dev/null > $expected
run_prog fnext aseq > $actual 2>&1
check $expected $actual 'keep first'
run_prog fprev aseq > $actual 2>&1
check $expected $actual

# add 1 desired message in each folder
echo 'aseq: 1' > $MH_TEST_DIR/Mail/inbox/.mh_sequences
echo 'aseq: 1' > $MH_TEST_DIR/Mail/foo1/.mh_sequences
echo 'aseq: 1' > $MH_TEST_DIR/Mail/foo2/.mh_sequences

# test with all folders
start_test 'test with all folders'
cat > $expected <<EOF
foo1       1.  1
foo2       1.  1
inbox      1.* 1
 total      3.
EOF
run_prog new aseq > $actual 2>&1
check $expected $actual

# test with .folders
start_test 'test with .folders'
cat > $expected <<EOF
inbox      1.* 1
foo2       1.  1
 total      2.
EOF
run_prog new -folders $folders aseq > $actual 2>&1
check $expected $actual

# add 2 desired messages to another sequence in each folder
echo 'bseq: 3-4' >> $MH_TEST_DIR/Mail/inbox/.mh_sequences
echo 'bseq: 3-4' >> $MH_TEST_DIR/Mail/foo1/.mh_sequences
echo 'bseq: 3-4' >> $MH_TEST_DIR/Mail/foo2/.mh_sequences

# test listing aseq and bseq
start_test 'test listing aseq and bseq'
cat > $expected <<EOF
foo1       3.  1 3-4
foo2       3.  1 3-4
inbox      3.* 1 3-4
 total      9.
EOF
run_prog new aseq bseq > $actual 2>&1
check $expected $actual 'keep first'

# set aseq bseq as unseen
echo 'Unseen-Sequence: aseq bseq' >> $MH
run_prog new > $actual 2>&1
check $expected $actual

# test unseen
start_test 'test unseen'
cat > $expected <<EOF

3 aseq bseq messages in foo1
   1  09/29 Test1              Testing message 1<<This is message number 1 >>
   3  09/29 Test3              Testing message 3<<This is message number 3 >>
   4  09/29 Test4              Testing message 4<<This is message number 4 >>

3 aseq bseq messages in foo2
   1  09/29 Test1              Testing message 1<<This is message number 1 >>
   3  09/29 Test3              Testing message 3<<This is message number 3 >>
   4  09/29 Test4              Testing message 4<<This is message number 4 >>

3 aseq bseq messages in inbox (*: current folder)
   1  09/29 Test1              Testing message 1<<This is message number 1 >>
   3  09/29 Test3              Testing message 3<<This is message number 3 >>
   4  09/29 Test4              Testing message 4<<This is message number 4 >>
EOF
run_prog unseen > $actual 2>&1
check $expected $actual

# test fnext with the current folder not in the list
start_test 'test fnext with the current folder not in the list'
echo 'Current-Folder: foo1' > $MH_TEST_DIR/Mail/context
echo 'inbox  1 3-4' > $expected
run_prog fnext -folders $folders > $actual 2>&1
check $expected $actual

# test fprev with the current folder not in the list
start_test 'test fprev with the current folder not in the list'
echo 'Current-Folder: foo1' > $MH_TEST_DIR/Mail/context
echo 'inbox  1 3-4' > $expected
run_prog fprev -folders $folders > $actual 2>&1
check $expected $actual

# test fnext with current folder in the middle of the list
start_test 'test fnext with current folder in the middle of the list'
echo 'Current-Folder: foo2' > $MH_TEST_DIR/Mail/context
echo 'inbox  1 3-4' > $expected
run_prog fnext > $actual 2>&1
check $expected $actual

# test fprev with current folder in the middle of the list
start_test 'test fprev with current folder in the middle of the list'
echo 'Current-Folder: foo2' > $MH_TEST_DIR/Mail/context
echo 'foo1  1 3-4' > $expected
run_prog fprev > $actual 2>&1
check $expected $actual

# test fprev with current folder at the beginning of the list
start_test 'test fprev with current folder at the beginning of the list'
echo 'Current-Folder: foo1' > $MH_TEST_DIR/Mail/context
echo 'inbox  1 3-4' > $expected
run_prog fprev > $actual 2>&1
check $expected $actual

# test fnext with current folder at the end of the list
start_test 'test fnext with current folder at the end of the list'
echo 'Current-Folder: inbox' > $MH_TEST_DIR/Mail/context
echo 'foo1  1 3-4' > $expected
run_prog fnext > $actual 2>&1
check $expected $actual

# test fnext with no current folder
start_test 'test fnext with no current folder'
rm $MH_TEST_DIR/Mail/context
echo 'foo1  1 3-4' > $expected
run_prog fnext > $actual 2>&1
check $expected $actual

# test fnext with only one folder in the list
start_test 'test fnext with only one folder in the list'
cat > $folders <<EOF
inbox
EOF
echo 'inbox  1 3-4' > $expected
run_prog fnext -folders $folders > $actual 2>&1
check $expected $actual

finish_test

exit $failed
