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