]> diplodocus.org Git - nmh/blobdiff - test/pick/test-pick
fmt_compile.c: Alter FINDCOMP(): the caller must supply the semicolon.
[nmh] / test / pick / test-pick
index 6ee4449462aefcc31dbe28e305758086bdeee249..6ec67d922cfddcb0bdec3c9d2e9a709ea8aede8a 100755 (executable)
@@ -22,8 +22,10 @@ actual=$MH_TEST_DIR/$$.actual
 # Add an 11th message.
 sed \
   -e 's/10/11/g' \
 # Add an 11th message.
 sed \
   -e 's/10/11/g' \
-  -e 's/^To:\(.*\)/To:\1\nCc: <another@example.com>/' \
-  -e 's/^\(Date:.*\)2006\( 00:00:\)00/\12008\200\nDelivery-Date: \12009\241/' \
+  -e 's/^To:\(.*\)/To:\1\
+Cc: <another@example.com>/' \
+  -e 's/^\(Date:.*\)2006\( 00:00:\)00/\12008\200\
+Delivery-Date: \12009\241/' \
   $MH_TEST_DIR/Mail/inbox/10 >$MH_TEST_DIR/Mail/inbox/11
 
 # Test message specification.
   $MH_TEST_DIR/Mail/inbox/10 >$MH_TEST_DIR/Mail/inbox/11
 
 # Test message specification.
@@ -47,6 +49,12 @@ run_test 'pick -not -subject message.8 last:5' '7
 10
 11'
 
 10
 11'
 
+# Test -reverse.
+run_test 'pick -reverse -not -subject message.8 last:5' '11
+10
+9
+7'
+
 # Test -lbrace, -rbrace.
 run_test 'pick -subject message.12 -and -subject message.3 -or -from Test4' '4'
 run_test 'pick -subject message.12 -and -lbrace -subject message.3 -rbrace' \
 # Test -lbrace, -rbrace.
 run_test 'pick -subject message.12 -and -subject message.3 -or -from Test4' '4'
 run_test 'pick -subject message.12 -and -lbrace -subject message.3 -rbrace' \
@@ -74,39 +82,42 @@ run_test 'pick -not -lbrace -subject NoMatch -and -subject message.3 -rbrace' \
 10
 11'
 
 10
 11'
 
-# Test MHPDEBUG.
-MHPDEBUG=1 pick -not -lbrace -subject NoMatch -and -subject message.3 -rbrace \
- >/dev/null 2>$actual
-cat >$expected <<EOF
+# Test -debug.
+run_prog pick -debug -not -lbrace -subject NoMatch -and -subject message.3 \
+  -rbrace >/dev/null 2>"$actual"
+cat >"$expected" <<EOF
 NOT
 | AND
 | | PATTERN(header) ^subject[  ]*:.*NoMatch
 | | PATTERN(header) ^subject[  ]*:.*message.3
 EOF
 NOT
 | AND
 | | PATTERN(header) ^subject[  ]*:.*NoMatch
 | | PATTERN(header) ^subject[  ]*:.*message.3
 EOF
-check $expected $actual
+check "$expected" "$actual"
 
 
+set +e
 
 # Produce 0 if no messages match and standard output is not a tty.
 # Note that there is an error message on stderr, but it's redirected
 # to /dev/null here.
 
 # Produce 0 if no messages match and standard output is not a tty.
 # Note that there is an error message on stderr, but it's redirected
 # to /dev/null here.
-echo `pick -subject message.3 -and -from Test4 >$actual 2>/dev/null` >/dev/null
-cat >$expected <<EOF
+echo \
+  `run_prog pick -subject message.3 -and -from Test4 >"$actual" 2>/dev/null` \
+  >/dev/null
+cat >"$expected" <<EOF
 0
 EOF
 0
 EOF
-check $expected $actual
-
-# Produce no standard output if no messages match and standard output
-# is a tty.  To test that, move stderr to stdout.
-echo `pick -subject message.3 -and -from Test4 >&2-` >$actual
-cat >$expected <<EOF
-
-EOF
-check $expected $actual
+check "$expected" "$actual"
+
+if test -t 1  &&  (printf '' >/dev/tty) 2>/dev/null; then
+  # Produce no standard output if no messages match and standard
+  # output is a tty.  To test that even when run with stdout
+  # detached, write directly to /dev/tty.  Can't capture the
+  # output so hopefully the user will notice it.
+  run_prog pick -subject message.3 -and -from Test4 >/dev/tty 2>/dev/null
+fi
 
 # Also, check that the exit status is 1.
 
 # Also, check that the exit status is 1.
-set +e
-pick -subject message.3 -and -from Test4 2>/dev/null
+run_prog pick -subject message.3 -and -from Test4 >/dev/null 2>&1
 run_test "echo $?" '1'
 run_test "echo $?" '1'
+
 set -e
 
 # Test -cc.
 set -e
 
 # Test -cc.
@@ -131,51 +142,58 @@ run_test 'pick -to some -nolist' '11 hits'
 run_test 'pick -to user@example.com -nolist' '11 hits'
 
 # Test -after.
 run_test 'pick -to user@example.com -nolist' '11 hits'
 
 # Test -after.
-pick -after '28 Sep 2008' >$actual 2>&1
-cat >$expected <<EOF
+run_prog pick -after '28 Sep 2008 00:00:00' >"$actual" 2>&1
+cat >"$expected" <<EOF
 11
 EOF
 11
 EOF
-check $expected $actual
+check "$expected" "$actual"
+
 # Invert exit status so execution doesn't terminate due to -e.
 # Invert exit status so execution doesn't terminate due to -e.
-! pick -after '29 Sep 2008' >$actual 2>/dev/null
-cat >$expected <<EOF
+set +e
+run_prog pick -after '29 Sep 2008 00:00:00' >"$actual" 2>/dev/null
+set -e
+cat >"$expected" <<EOF
 0
 EOF
 0
 EOF
-check $expected $actual
+check "$expected" "$actual"
 
 # Test -before.  While -after doesn't include the specified date, -before does.
 
 # Test -before.  While -after doesn't include the specified date, -before does.
-pick -before '29 Sep 2008' last:3 >$actual 2>&1
-cat >$expected <<EOF
+run_prog pick -before '29 Sep 2008 00:00:01' last:3 >"$actual" 2>&1
+cat >"$expected" <<EOF
 9
 10
 11
 EOF
 9
 10
 11
 EOF
-check $expected $actual
-pick -before '28 Sep 2008' last:3 >$actual 2>&1
-cat >$expected <<EOF
+check "$expected" "$actual"
+run_prog pick -before '28 Sep 2008 00:00:00:' last:3 >"$actual" 2>&1
+cat >"$expected" <<EOF
 9
 10
 EOF
 9
 10
 EOF
-check $expected $actual
-# Invert exit status so execution doesn't terminate due to -e.
-! pick -before '28 Sep 2006' last:3 >$actual 2>/dev/null
-cat >$expected <<EOF
+check "$expected" "$actual"
+set +e
+run_prog pick -before '28 Sep 2006 00:00:00' last:3 >"$actual" 2>/dev/null
+set -e
+cat >"$expected" <<EOF
 0
 EOF
 0
 EOF
-check $expected $actual
+check "$expected" "$actual"
 
 # Test -datefield.
 
 # Test -datefield.
-# Invert exit status so execution doesn't terminate due to -e.
-! pick -datefield date -after '29 Sep 2008 00:00:00' >$actual 2>/dev/null
-cat >$expected <<EOF
+set +e
+run_prog pick -datefield date -after '29 Sep 2008 00:00:00' \
+  >"$actual" 2>/dev/null
+set -e
+cat >"$expected" <<EOF
 0
 EOF
 0
 EOF
-check $expected $actual
-pick -datefield delivery-date -after '29 Sep 2008 00:00:00' >$actual 2>&1
-cat >$expected <<EOF
+check "$expected" "$actual"
+run_prog pick -datefield delivery-date -after '29 Sep 2008 00:00:00' \
+  >"$actual" 2>&1
+cat >"$expected" <<EOF
 11
 EOF
 11
 EOF
-check $expected $actual
+check "$expected" "$actual"
 
 # Test sequence creation.
 run_test 'pick 2 4 6 8 10 -sequence even' '5 hits'
 
 # Test sequence creation.
 run_test 'pick 2 4 6 8 10 -sequence even' '5 hits'
@@ -215,5 +233,52 @@ run_test 'mark -s odd -list' 'odd: 5 7 9 11'
 # Test -nolist.
 run_test 'pick all -nolist' '11 hits'
 
 # Test -nolist.
 run_test 'pick all -nolist' '11 hits'
 
+# Test unfolding of multi-line header fields: it should only
+# remove embedded newlines.
+cat >"$MH_TEST_DIR/Mail/inbox/12" <<EOF
+From: Test12 <test12@example.com>
+To: Some User <user@example.com>
+Date: Fri, 29 Sep 2006 00:00:00
+Message-Id: 12@test.nmh
+Subject: multi-line
+ header field
+
+This is message number 12
+EOF
+
+echo 12 >"$expected"
+
+run_prog pick -subject 'multi-line header field' 12 >"$actual" 2>&1
+check "$expected" "$actual"
+
+# Test MIME-encoded header.
+cat >"$MH_TEST_DIR/Mail/inbox/13" <<EOF
+From: Test13 <test13@example.com>
+To: Some User <user@example.com>
+Date: Fri, 29 Sep 2006 00:00:00
+Message-Id: 13@test.nmh
+Subject: =?us-ascii?q?=66=6f=6f?=
+ =?utf-8?q?=62=61=72?=
+
+This is message number 13, with MIME-encoded Subject "foobar".
+EOF
+
+echo 13 >"$expected"
+
+set +e
+
+require_locale en_US.UTF-8 en_US.UTF8 en_US.utf-8 en_US.utf8
+# Don't use run_prog here because it loses the environment setting.
+pick -subject foobar 13 >"$actual" 2>&1
+set -e
+check "$expected" "$actual"
+
+# Test -nosequence.
+run_test 'pick +inbox 5 7 9 11 -sequence test -nosequence' '5
+7
+9
+11'
+run_test 'mark -list -sequence test' 'test: '
+
 
 exit $failed
 
 exit $failed