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