Fix up some of the pick tests:
[mmh] / test / pick / test-pick
1 #!/bin/sh
2 ######################################################
3 #
4 # Test pick
5 #
6 ######################################################
7
8 set -e
9
10 if test -z "${MH_OBJ_DIR}"; then
11     srcdir=`dirname $0`/../..
12     MH_OBJ_DIR=`cd $srcdir && pwd`; export MH_OBJ_DIR
13 fi
14
15 . "$MH_OBJ_DIR/test/common.sh"
16
17 setup_test
18
19 expected=$MH_TEST_DIR/$$.expected
20 actual=$MH_TEST_DIR/$$.actual
21
22 # Add an 11th message.
23 sed \
24   -e 's/10/11/g' \
25   -e 's/^To:\(.*\)/To:\1\
26 Cc: <another@example.com>/' \
27   -e 's/^\(Date:.*\)2006\( 00:00:\)00/\12008\200\
28 Delivery-Date: \12009\241/' \
29   $MH_TEST_DIR/Mail/inbox/10 >$MH_TEST_DIR/Mail/inbox/11
30
31 # Test message specification.
32 run_test 'pick first last' '1
33 11'
34
35 # Test -and.
36 run_test 'pick -subject message.3 -and -from Test3' '3'
37 run_test 'pick -subject message.3 -and -from Test4' \
38          'pick: no messages match specification
39 0'
40
41 # Test -or.
42 run_test 'pick -subject message.3 -or -from Test3' '3'
43 run_test 'pick -subject message.3 -or -from Test4' '3
44 4'
45
46 # Test -not.
47 run_test 'pick -not -subject message.8 last:5' '7
48 9
49 10
50 11'
51
52 # Test -lbrace, -rbrace.
53 run_test 'pick -subject message.12 -and -subject message.3 -or -from Test4' '4'
54 run_test 'pick -subject message.12 -and -lbrace -subject message.3 -rbrace' \
55          'pick: no messages match specification
56 0'
57
58 # -and takes precedence over -or.
59 run_test 'pick -subject message.12 -or -subject message.3 -and -from Test3' '3'
60 run_test 'pick -subject message.12 -or -subject message.3 -and -from Test4' \
61          'pick: no messages match specification
62 0'
63
64 # -not takes precedence over -and.
65 run_test 'pick -not -subject message.12 -and -subject message.3' '3'
66 run_test 'pick -not -lbrace -subject NoMatch -and -subject message.3 -rbrace' \
67          '1
68 2
69 3
70 4
71 5
72 6
73 7
74 8
75 9
76 10
77 11'
78
79 # Test MHPDEBUG.
80 MHPDEBUG=1 pick -not -lbrace -subject NoMatch -and -subject message.3 -rbrace \
81  >/dev/null 2>$actual
82 cat >$expected <<EOF
83 NOT
84 | AND
85 | | PATTERN(header) ^subject[   ]*:.*NoMatch
86 | | PATTERN(header) ^subject[   ]*:.*message.3
87 EOF
88 check $expected $actual
89
90
91 # Produce 0 if no messages match and standard output is not a tty.
92 # Note that there is an error message on stderr, but it's redirected
93 # to /dev/null here.
94 echo `pick -subject message.3 -and -from Test4 >$actual 2>/dev/null` >/dev/null
95 cat >$expected <<EOF
96 0
97 EOF
98 check $expected $actual
99
100 # Produce no standard output if no messages match and standard output
101 # is a tty.  To test that, move stderr to stdout.
102 echo `pick -subject message.3 -and -from Test4 >&2-` >$actual
103 cat >$expected <<EOF
104
105 EOF
106 check $expected $actual
107
108 # Also, check that the exit status is 1.
109 set +e
110 pick -subject message.3 -and -from Test4 2>/dev/null
111 run_test "echo $?" '1'
112 set -e
113
114 # Test -cc.
115 run_test 'pick -cc another' '11'
116
117 # Test -date.
118 run_test 'pick -date 29.Sep.2008' '11'
119
120 # Test -from.
121 run_test 'pick -from test7' '7'
122
123 # Test -search.
124 run_test 'pick -search This.is.message.number.[456]' '4
125 5
126 6'
127
128 # Test -subject.
129 run_test 'pick -subject message.2' '2'
130
131 # Test -to.
132 run_test 'pick -to some -nolist' '11 hits'
133 run_test 'pick -to user@example.com -nolist' '11 hits'
134
135 # Test -after.
136 pick -after '28 Sep 2008 00:00:00' >$actual 2>&1
137 cat >$expected <<EOF
138 11
139 EOF
140
141 check $expected $actual
142 # Invert exit status so execution doesn't terminate due to -e.
143 ! pick -after '29 Sep 2008 00:00:00' >$actual 2>/dev/null
144 cat >$expected <<EOF
145 0
146 EOF
147 check $expected $actual
148
149 # Test -before.  While -after doesn't include the specified date, -before does.
150 pick -before '29 Sep 2008 00:00:01' last:3 >$actual 2>&1
151 cat >$expected <<EOF
152 9
153 10
154 11
155 EOF
156 check $expected $actual
157 pick -before '28 Sep 2008 00:00:00:' last:3 >$actual 2>&1
158 cat >$expected <<EOF
159 9
160 10
161 EOF
162 check $expected $actual
163 # Invert exit status so execution doesn't terminate due to -e.
164 ! pick -before '28 Sep 2006 00:00:00' last:3 >$actual 2>/dev/null
165 cat >$expected <<EOF
166 0
167 EOF
168 check $expected $actual
169
170 # Test -datefield.
171 # Invert exit status so execution doesn't terminate due to -e.
172 ! pick -datefield date -after '29 Sep 2008 00:00:00' >$actual 2>/dev/null
173 cat >$expected <<EOF
174 0
175 EOF
176 check $expected $actual
177 pick -datefield delivery-date -after '29 Sep 2008 00:00:00' >$actual 2>&1
178 cat >$expected <<EOF
179 11
180 EOF
181 check $expected $actual
182
183 # Test sequence creation.
184 run_test 'pick 2 4 6 8 10 -sequence even' '5 hits'
185 run_test 'mark -s even -list' 'even: 2 4 6 8 10'
186
187 # Test private sequence creation.
188 # Set current message for following tests.
189 folder +inbox 1 > /dev/null
190 run_test 'pick -date 29.Sep.2008 -sequence privateseq -nopublic' '1 hit'
191 run_test 'mark -list' 'cur: 1
192 even: 2 4 6 8 10
193 privateseq (private): 11'
194
195 # Test add to private sequence.
196 run_test 'pick first -sequence privateseq -nozero -nopublic' '1 hit'
197 run_test 'mark -list' 'cur: 1
198 even: 2 4 6 8 10
199 privateseq (private): 1 11'
200
201 # Test sequence creation, with -list.
202 run_test 'pick 5 7 -sequence odd -list' '5
203 7'
204 run_test 'mark -s odd -list' 'odd: 5 7'
205
206 # Test sequence creation, with default of -zero.
207 run_test 'pick 1 3 -sequence odd' '2 hits'
208 run_test 'mark -s odd -list' 'odd: 1 3'
209
210 # Test sequence creation, with -nozero.
211 run_test 'pick  5 7 9 -sequence odd -nozero' '3 hits'
212 run_test 'mark -s odd -list' 'odd: 1 3 5 7 9'
213
214 # Test sequence creation, with explicit folder, -public, and -zero.
215 run_test 'pick +inbox 5 7 9 11 -public -sequence odd' '4 hits'
216 run_test 'mark -s odd -list' 'odd: 5 7 9 11'
217
218 # Test -nolist.
219 run_test 'pick all -nolist' '11 hits'
220
221
222 exit $failed