]> diplodocus.org Git - nmh/blob - test/folder/test-sortm
Don't `else' after return. Simplify control flow.
[nmh] / test / folder / test-sortm
1 #!/bin/sh
2 ######################################################
3 #
4 # Test sortm
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 cd $MH_TEST_DIR
23
24 # check -help
25 cat >"$expected" <<EOF
26 Usage: sortm [+folder] [msgs] [switches]
27 switches are:
28 -datefield field
29 -textfield field
30 -notextfield
31 -limit days
32 -nolimit
33 -[no]verbose
34 -[no]all
35 -[no]check
36 -version
37 -help
38 EOF
39
40 #### Skip nmh intro text.
41 run_prog sortm -help | sed '/^$/,$d' >"$actual" 2>&1
42 check "$expected" "$actual"
43
44 # check -version
45 case `sortm -version` in
46 sortm\ --*) ;;
47 * ) echo "$0: sortm -v generated unexpected output" 1>&2
48 failed=`expr ${failed:-0} + 1`;;
49 esac
50
51 cat >$MH_TEST_DIR/Mail/inbox/11 <<EOF || exit 1
52 From: Test11 <test11@example.com>
53 To: Some User <user@example.com>
54 Date: Fri, 29 Sep 2006 00:00:01
55 Alt-Date: Thu, 1 Sep 2005 00:00:00
56 Subject: Re: common subject
57
58 This is message number 11
59 EOF
60
61 cat >$MH_TEST_DIR/Mail/inbox/12 <<EOF || exit 1
62 From: Test12 <test12@example.com>
63 To: Some User <user@example.com>
64 Date: Thu, 28 Sep 2006 23:59:59
65 Alt-Date: Sat, 30 Sep 2006 00:00:00
66 Subject: common subject
67
68 This is message number 12
69 EOF
70
71 # check with no options
72 cat >"$expected" <<EOF
73 1 09/28 Test12 common subject<<This is message number 12 >>
74 2 09/29 Test1 Testing message 1<<This is message number 1 >>
75 3 09/29 Test2 Testing message 2<<This is message number 2 >>
76 4 09/29 Test3 Testing message 3<<This is message number 3 >>
77 5 09/29 Test4 Testing message 4<<This is message number 4 >>
78 6 09/29 Test5 Testing message 5<<This is message number 5 >>
79 7 09/29 Test6 Testing message 6<<This is message number 6 >>
80 8 09/29 Test7 Testing message 7<<This is message number 7 >>
81 9 09/29 Test8 Testing message 8<<This is message number 8 >>
82 10 09/29 Test9 Testing message 9<<This is message number 9 >>
83 11 09/29 Test10 Testing message 10<<This is message number 10 >>
84 12 09/29 Test11 Re: common subject<<This is message number 11 >>
85 EOF
86
87 run_prog sortm
88 scan -width 80 >"$actual"
89 check "$expected" "$actual"
90
91 # check +folder
92 cat >"$expected" <<EOF
93 1 09/28 Test12 common subject<<This is message number 12 >>
94 2+ 09/29 Test1 Testing message 1<<This is message number 1 >>
95 3 09/29 Test2 Testing message 2<<This is message number 2 >>
96 4 09/29 Test3 Testing message 3<<This is message number 3 >>
97 5 09/29 Test4 Testing message 4<<This is message number 4 >>
98 6 09/29 Test5 Testing message 5<<This is message number 5 >>
99 7 09/29 Test6 Testing message 6<<This is message number 6 >>
100 8 09/29 Test7 Testing message 7<<This is message number 7 >>
101 9 09/29 Test8 Testing message 8<<This is message number 8 >>
102 10 09/29 Test9 Testing message 9<<This is message number 9 >>
103 11 09/29 Test10 Testing message 10<<This is message number 10 >>
104 12 09/29 Test11 Re: common subject<<This is message number 11 >>
105 EOF
106
107 refile first +inbox; folder -pack >/dev/null
108 run_prog sortm +inbox
109 scan -width 80 >"$actual"
110 check "$expected" "$actual"
111
112 # check -verbose
113 cat >"$expected" <<EOF
114 sorting by datefield date
115 renaming message chain from 12 to 1
116 message 11 becomes message 12
117 message 10 becomes message 11
118 message 9 becomes message 10
119 message 8 becomes message 9
120 message 7 becomes message 8
121 message 6 becomes message 7
122 message 5 becomes message 6
123 message 4 becomes message 5
124 message 3 becomes message 4
125 message 2 becomes message 3
126 message 1 becomes message 2
127 1 09/28 Test12 common subject<<This is message number 12 >>
128 2+ 09/29 Test1 Testing message 1<<This is message number 1 >>
129 3 09/29 Test2 Testing message 2<<This is message number 2 >>
130 4 09/29 Test3 Testing message 3<<This is message number 3 >>
131 5 09/29 Test4 Testing message 4<<This is message number 4 >>
132 6 09/29 Test5 Testing message 5<<This is message number 5 >>
133 7 09/29 Test6 Testing message 6<<This is message number 6 >>
134 8 09/29 Test7 Testing message 7<<This is message number 7 >>
135 9 09/29 Test8 Testing message 8<<This is message number 8 >>
136 10 09/29 Test9 Testing message 9<<This is message number 9 >>
137 11 09/29 Test10 Testing message 10<<This is message number 10 >>
138 12 09/29 Test11 Re: common subject<<This is message number 11 >>
139 EOF
140
141 refile first +inbox; folder -pack >/dev/null
142 run_prog sortm -verbose >"$actual"
143 scan -width 80 >>"$actual"
144 check "$expected" "$actual"
145
146 # check -noverbose
147 cat >"$expected" <<EOF
148 1 09/28 Test12 common subject<<This is message number 12 >>
149 2+ 09/29 Test1 Testing message 1<<This is message number 1 >>
150 3 09/29 Test2 Testing message 2<<This is message number 2 >>
151 4 09/29 Test3 Testing message 3<<This is message number 3 >>
152 5 09/29 Test4 Testing message 4<<This is message number 4 >>
153 6 09/29 Test5 Testing message 5<<This is message number 5 >>
154 7 09/29 Test6 Testing message 6<<This is message number 6 >>
155 8 09/29 Test7 Testing message 7<<This is message number 7 >>
156 9 09/29 Test8 Testing message 8<<This is message number 8 >>
157 10 09/29 Test9 Testing message 9<<This is message number 9 >>
158 11 09/29 Test10 Testing message 10<<This is message number 10 >>
159 12 09/29 Test11 Re: common subject<<This is message number 11 >>
160 EOF
161
162 refile first +inbox; folder -pack >/dev/null
163 run_prog sortm -verbose -noverbose >"$actual"
164 scan -width 80 >>"$actual"
165 check "$expected" "$actual"
166
167 # check msgs
168 cat >"$expected" <<EOF
169 1 09/28 Test12 common subject<<This is message number 12 >>
170 2 09/29 Test2 Testing message 2<<This is message number 2 >>
171 3 09/29 Test3 Testing message 3<<This is message number 3 >>
172 4 09/29 Test4 Testing message 4<<This is message number 4 >>
173 5 09/29 Test5 Testing message 5<<This is message number 5 >>
174 6 09/29 Test6 Testing message 6<<This is message number 6 >>
175 7 09/29 Test7 Testing message 7<<This is message number 7 >>
176 8 09/29 Test8 Testing message 8<<This is message number 8 >>
177 9 09/29 Test9 Testing message 9<<This is message number 9 >>
178 10 09/29 Test10 Testing message 10<<This is message number 10 >>
179 11 09/29 Test11 Re: common subject<<This is message number 11 >>
180 12+ 09/29 Test1 Testing message 1<<This is message number 1 >>
181 EOF
182
183 refile first +inbox; folder -pack >/dev/null
184 run_prog sortm first last
185 scan -width 80 >"$actual"
186 check "$expected" "$actual"
187
188 # check -datefield
189 cat >"$expected" <<EOF
190 1 09/29 Test11 Re: common subject<<This is message number 11 >>
191 2 09/29 Test2 Testing message 2<<This is message number 2 >>
192 3 09/29 Test3 Testing message 3<<This is message number 3 >>
193 4 09/29 Test4 Testing message 4<<This is message number 4 >>
194 5 09/29 Test5 Testing message 5<<This is message number 5 >>
195 6 09/29 Test6 Testing message 6<<This is message number 6 >>
196 7 09/29 Test7 Testing message 7<<This is message number 7 >>
197 8 09/29 Test8 Testing message 8<<This is message number 8 >>
198 9 09/29 Test9 Testing message 9<<This is message number 9 >>
199 10 09/29 Test10 Testing message 10<<This is message number 10 >>
200 11 09/28 Test12 common subject<<This is message number 12 >>
201 12+ 09/29 Test1 Testing message 1<<This is message number 1 >>
202 EOF
203
204 run_prog sortm -datefield Alt-Date 1 11
205 scan -width 80 >"$actual"
206 check "$expected" "$actual"
207
208 # check -textfield subject (datefield major, subjects grouped)
209 cat >"$expected" <<EOF
210 1 09/28 Test12 common subject<<This is message number 12 >>
211 2 09/29 Test11 Re: common subject<<This is message number 11 >>
212 3 09/29 Test2 Testing message 2<<This is message number 2 >>
213 4 09/29 Test3 Testing message 3<<This is message number 3 >>
214 5 09/29 Test4 Testing message 4<<This is message number 4 >>
215 6 09/29 Test5 Testing message 5<<This is message number 5 >>
216 7 09/29 Test6 Testing message 6<<This is message number 6 >>
217 8 09/29 Test7 Testing message 7<<This is message number 7 >>
218 9 09/29 Test8 Testing message 8<<This is message number 8 >>
219 10 09/29 Test9 Testing message 9<<This is message number 9 >>
220 11 09/29 Test10 Testing message 10<<This is message number 10 >>
221 12+ 09/29 Test1 Testing message 1<<This is message number 1 >>
222 EOF
223
224 run_prog sortm -textfield subject
225 scan -width 80 >"$actual"
226 check "$expected" "$actual"
227
228 # check -nolimit
229 cat >"$expected" <<EOF
230 1 09/28 Test12 common subject<<This is message number 12 >>
231 2 09/29 Test11 Re: common subject<<This is message number 11 >>
232 3 09/29 Test2 Testing message 2<<This is message number 2 >>
233 4 09/29 Test3 Testing message 3<<This is message number 3 >>
234 5 09/29 Test4 Testing message 4<<This is message number 4 >>
235 6 09/29 Test5 Testing message 5<<This is message number 5 >>
236 7 09/29 Test6 Testing message 6<<This is message number 6 >>
237 8 09/29 Test7 Testing message 7<<This is message number 7 >>
238 9 09/29 Test8 Testing message 8<<This is message number 8 >>
239 10 09/29 Test9 Testing message 9<<This is message number 9 >>
240 11 09/29 Test10 Testing message 10<<This is message number 10 >>
241 12+ 09/29 Test1 Testing message 1<<This is message number 1 >>
242 EOF
243
244 run_prog sortm -textfield subject -limit 0 -nolimit
245 scan -width 80 >"$actual"
246 check "$expected" "$actual"
247
248 # check -textfield subject -limit 0 (subject sort)
249 cat >"$expected" <<EOF
250 1 09/29 Test11 Re: common subject<<This is message number 11 >>
251 2 09/28 Test12 common subject<<This is message number 12 >>
252 3 09/29 Test1 Testing message 1<<This is message number 1 >>
253 4 09/29 Test10 Testing message 10<<This is message number 10 >>
254 5 09/29 Test2 Testing message 2<<This is message number 2 >>
255 6 09/29 Test3 Testing message 3<<This is message number 3 >>
256 7 09/29 Test4 Testing message 4<<This is message number 4 >>
257 8 09/29 Test5 Testing message 5<<This is message number 5 >>
258 9 09/29 Test6 Testing message 6<<This is message number 6 >>
259 10 09/29 Test7 Testing message 7<<This is message number 7 >>
260 11 09/29 Test8 Testing message 8<<This is message number 8 >>
261 12+ 09/29 Test9 Testing message 9<<This is message number 9 >>
262 EOF
263
264 refile 2-7 +inbox; refile 1 +inbox; folder -pack last >/dev/null
265 run_prog sortm -textfield subject -limit 0
266 scan -width 80 >"$actual"
267 check "$expected" "$actual"
268
269 # check -textfield -limit 0 (text sort)
270 cat >"$expected" <<EOF
271 1 09/29 Test10 Testing message 10<<This is message number 10 >>
272 2 09/29 Test11 Re: common subject<<This is message number 11 >>
273 3 09/28 Test12 common subject<<This is message number 12 >>
274 4 09/29 Test1 Testing message 1<<This is message number 1 >>
275 5 09/29 Test2 Testing message 2<<This is message number 2 >>
276 6 09/29 Test3 Testing message 3<<This is message number 3 >>
277 7 09/29 Test4 Testing message 4<<This is message number 4 >>
278 8 09/29 Test5 Testing message 5<<This is message number 5 >>
279 9 09/29 Test6 Testing message 6<<This is message number 6 >>
280 10 09/29 Test7 Testing message 7<<This is message number 7 >>
281 11 09/29 Test8 Testing message 8<<This is message number 8 >>
282 12+ 09/29 Test9 Testing message 9<<This is message number 9 >>
283 EOF
284
285 refile 2-7 +inbox; refile 1 +inbox; folder -pack last >/dev/null
286 run_prog sortm -textfield from -limit 0
287 scan -width 80 >"$actual"
288 check "$expected" "$actual"
289
290 # check -textfield with finite -limit that doesn't cover message 13
291 cat >$MH_TEST_DIR/Mail/inbox/13 <<EOF || exit 1
292 From: Test13 <test13@example.com>
293 To: Some User <user@example.com>
294 Date: Tue, 31 Oct 2006 23:59:59
295 Subject: Re: common subject
296
297 This is message number 13
298 EOF
299
300 cat >"$expected" <<EOF
301 1 09/28 Test12 common subject<<This is message number 12 >>
302 2 09/29 Test11 Re: common subject<<This is message number 11 >>
303 3 09/29 Test5 Testing message 5<<This is message number 5 >>
304 4 09/29 Test6 Testing message 6<<This is message number 6 >>
305 5 09/29 Test7 Testing message 7<<This is message number 7 >>
306 6 09/29 Test8 Testing message 8<<This is message number 8 >>
307 7 09/29 Test9 Testing message 9<<This is message number 9 >>
308 8 09/29 Test1 Testing message 1<<This is message number 1 >>
309 9 09/29 Test2 Testing message 2<<This is message number 2 >>
310 10 09/29 Test3 Testing message 3<<This is message number 3 >>
311 11 09/29 Test4 Testing message 4<<This is message number 4 >>
312 12+ 09/29 Test10 Testing message 10<<This is message number 10 >>
313 13 10/31 Test13 Re: common subject<<This is message number 13 >>
314 EOF
315
316 refile 2-7 +inbox; refile 1 +inbox; folder -pack last >/dev/null
317 run_prog sortm -textfield subject -limit 10
318 scan -width 80 >"$actual"
319 check "$expected" "$actual"
320
321 # check -textfield with finite -limit that does cover message 13
322 cat >"$expected" <<EOF
323 1 09/28 Test12 common subject<<This is message number 12 >>
324 2 09/29 Test11 Re: common subject<<This is message number 11 >>
325 3 10/31 Test13 Re: common subject<<This is message number 13 >>
326 4 09/29 Test1 Testing message 1<<This is message number 1 >>
327 5 09/29 Test2 Testing message 2<<This is message number 2 >>
328 6 09/29 Test3 Testing message 3<<This is message number 3 >>
329 7 09/29 Test4 Testing message 4<<This is message number 4 >>
330 8 09/29 Test10 Testing message 10<<This is message number 10 >>
331 9 09/29 Test5 Testing message 5<<This is message number 5 >>
332 10 09/29 Test6 Testing message 6<<This is message number 6 >>
333 11 09/29 Test7 Testing message 7<<This is message number 7 >>
334 12 09/29 Test8 Testing message 8<<This is message number 8 >>
335 13+ 09/29 Test9 Testing message 9<<This is message number 9 >>
336 EOF
337
338 refile 2-7 +inbox; refile 1 +inbox; folder -pack last >/dev/null
339 run_prog sortm -textfield subject -limit 60
340 scan -width 80 >"$actual"
341 check "$expected" "$actual"
342
343 # check -notextfield
344 cat >"$expected" <<EOF
345 1 09/28 Test12 common subject<<This is message number 12 >>
346 2 09/29 Test10 Testing message 10<<This is message number 10 >>
347 3 09/29 Test5 Testing message 5<<This is message number 5 >>
348 4 09/29 Test6 Testing message 6<<This is message number 6 >>
349 5 09/29 Test7 Testing message 7<<This is message number 7 >>
350 6 09/29 Test8 Testing message 8<<This is message number 8 >>
351 7 09/29 Test9 Testing message 9<<This is message number 9 >>
352 8 09/29 Test1 Testing message 1<<This is message number 1 >>
353 9 09/29 Test2 Testing message 2<<This is message number 2 >>
354 10 09/29 Test3 Testing message 3<<This is message number 3 >>
355 11 09/29 Test4 Testing message 4<<This is message number 4 >>
356 12 09/29 Test11 Re: common subject<<This is message number 11 >>
357 13+ 10/31 Test13 Re: common subject<<This is message number 13 >>
358 EOF
359
360 refile 2-7 +inbox; refile 1 +inbox; folder -pack last >/dev/null
361 run_prog sortm -textfield subject -limit 60 -notextfield
362 scan -width 80 >"$actual"
363 check "$expected" "$actual"
364
365 # check -noall
366 run_test 'sortm -noall' 'sortm: must specify messages to sort with -noall'
367
368 # check -all
369 cat >"$expected" <<EOF
370 1 09/28 Test12 common subject<<This is message number 12 >>
371 2+ 09/29 Test10 Testing message 10<<This is message number 10 >>
372 3 09/29 Test5 Testing message 5<<This is message number 5 >>
373 4 09/29 Test6 Testing message 6<<This is message number 6 >>
374 5 09/29 Test7 Testing message 7<<This is message number 7 >>
375 6 09/29 Test8 Testing message 8<<This is message number 8 >>
376 7 09/29 Test9 Testing message 9<<This is message number 9 >>
377 8 09/29 Test1 Testing message 1<<This is message number 1 >>
378 9 09/29 Test2 Testing message 2<<This is message number 2 >>
379 10 09/29 Test3 Testing message 3<<This is message number 3 >>
380 11 09/29 Test4 Testing message 4<<This is message number 4 >>
381 12 09/29 Test11 Re: common subject<<This is message number 11 >>
382 13 10/31 Test13 Re: common subject<<This is message number 13 >>
383 EOF
384
385 refile first +inbox; folder -pack >/dev/null
386 run_prog sortm -noall -all
387 scan -width 80 >"$actual"
388 check "$expected" "$actual"
389
390 # check -check
391 cat >"$expected" <<EOF
392 sortm: can't parse date field in message 14, will use file modification time
393 sortm: errors found, no messages sorted
394 EOF
395
396 sed -e 's/Sep//' $MH_TEST_DIR/Mail/inbox/7 > $MH_TEST_DIR/Mail/inbox/14
397 set +e
398 run_prog sortm -check >"$actual" 2>&1
399 set -e
400 check "$expected" "$actual"
401
402 cat >"$expected" <<EOF
403 1 09/28 Test12 common subject<<This is message number 12 >>
404 2+ 09/29 Test10 Testing message 10<<This is message number 10 >>
405 3 09/29 Test5 Testing message 5<<This is message number 5 >>
406 4 09/29 Test6 Testing message 6<<This is message number 6 >>
407 5 09/29 Test7 Testing message 7<<This is message number 7 >>
408 6 09/29 Test8 Testing message 8<<This is message number 8 >>
409 7 09/29 Test9 Testing message 9<<This is message number 9 >>
410 8 09/29 Test1 Testing message 1<<This is message number 1 >>
411 9 09/29 Test2 Testing message 2<<This is message number 2 >>
412 10 09/29 Test3 Testing message 3<<This is message number 3 >>
413 11 09/29 Test4 Testing message 4<<This is message number 4 >>
414 12 09/29 Test11 Re: common subject<<This is message number 11 >>
415 13 10/31 Test13 Re: common subject<<This is message number 13 >>
416 14 01/00 Test9 Testing message 9<<This is message number 9 >>
417 EOF
418 scan -width 80 >"$actual"
419 check "$expected" "$actual"
420
421 # check -nocheck
422 cat >"$expected" <<EOF
423 1 09/28 Test12 common subject<<This is message number 12 >>
424 2+ 09/29 Test10 Testing message 10<<This is message number 10 >>
425 3 09/29 Test5 Testing message 5<<This is message number 5 >>
426 4 09/29 Test6 Testing message 6<<This is message number 6 >>
427 5 09/29 Test7 Testing message 7<<This is message number 7 >>
428 6 09/29 Test8 Testing message 8<<This is message number 8 >>
429 7 09/29 Test9 Testing message 9<<This is message number 9 >>
430 8 09/29 Test1 Testing message 1<<This is message number 1 >>
431 9 09/29 Test2 Testing message 2<<This is message number 2 >>
432 10 09/29 Test3 Testing message 3<<This is message number 3 >>
433 11 09/29 Test4 Testing message 4<<This is message number 4 >>
434 12 09/29 Test11 Re: common subject<<This is message number 11 >>
435 13 10/31 Test13 Re: common subject<<This is message number 13 >>
436 14 01/00 Test9 Testing message 9<<This is message number 9 >>
437 EOF
438
439 sed -e 's/Sep//' $MH_TEST_DIR/Mail/inbox/7 > $MH_TEST_DIR/Mail/inbox/14
440 run_test 'sortm -check -nocheck' \
441 "sortm: can't parse date field in message 14, will use file \
442 modification time"
443 scan -width 80 >"$actual"
444 check "$expected" "$actual"
445
446
447 exit ${failed:-0}