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