]> diplodocus.org Git - nmh/blob - test/mhical/test-mhical
mh-mkstemp.man: Detail exit status as 255 rather than -1.
[nmh] / test / mhical / test-mhical
1 #!/bin/sh
2 ######################################################
3 #
4 # Test mhical
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 check_exit '-eq 1' mhical - # gcov
20
21 #### Make sure that html-to-text conversion is what we expect.
22 require_locale en_US.UTF-8 en_US.UTF8 en_US.utf-8 en_US.utf8
23
24 #### Disable colorized output.
25 TERM=dumb; export TERM
26
27 expected="$MH_TEST_DIR/test-mhical$$.expected"
28 expected_err="$MH_TEST_DIR/test-mhical$$.expected_err"
29 actual="$MH_TEST_DIR/test-mhical$$.actual"
30 actual_err="$MH_TEST_DIR/test-mhical$$.actual_err"
31
32
33 # check -help
34 cat >"$expected" <<EOF
35 Usage: mhical [switches]
36 switches are:
37 -reply accept|decline|tentative
38 -cancel
39 -form formatfile
40 -(forma)t string
41 -infile
42 -outfile
43 -[no]contenttype
44 -unfold
45 -debug
46 -version
47 -help
48 EOF
49
50 #### Skip nmh intro text.
51 run_prog mhical -help | sed '/^$/,$d' >"$actual" 2>&1
52 check "$expected" "$actual"
53
54
55 # check -version
56 case `mhical -version` in
57 mhical\ --*) ;;
58 *) printf '%s: mhical -version generated unexpected output\n' "$0" >&2
59 failed=`expr ${failed:-0} + 1`;;
60 esac
61
62
63 # check display with timezone that only has standard time
64 cat >"$expected" <<'EOF'
65 Summary: Santa Watch
66 Description: See Santa here first!
67 At: Wed, 24 Dec 2014 12:00 +0000
68 To: Fri, 25 Dec 2015 11:59
69 EOF
70
71 cat >"$MH_TEST_DIR/test1.ics" <<'EOF'
72 BEGIN:VCALENDAR
73 VERSION:2.0
74 PRODID:test-mhical
75
76 BEGIN:VTIMEZONE
77 TZID:MHT-12
78 BEGIN:STANDARD
79 DTSTART:16010101T020000
80 TZOFFSETFROM:+1200
81 TZOFFSETTO:+1200
82 END:STANDARD
83 END:VTIMEZONE
84
85 BEGIN:VEVENT
86 DTSTAMP:20141224T140426Z
87 DTSTART;TZID=MHT-12:20141225T000000
88 DTEND;TZID=MHT-12:20151225T235959
89 SUMMARY:Santa Watch
90 DESCRIPTION: See Santa here first!
91 END:VEVENT
92
93 END:VCALENDAR
94 EOF
95
96 TZ=UTC mhical <"$MH_TEST_DIR/test1.ics" >"$MH_TEST_DIR/test1.txt"
97 check "$expected" "$MH_TEST_DIR/test1.txt"
98
99
100 # check display with 24 hour time format and -outfile
101 cat >"$expected" <<'EOF'
102 Summary: 4 pm meeting
103 At: Mon, 05 Jan 2015 16:00
104 To: Mon, 05 Jan 2015 16:30
105 EOF
106
107 cat >"$MH_TEST_DIR/test1.ics" <<'EOF'
108 BEGIN:VCALENDAR
109 VERSION:2.0
110 PRODID:test-mhical
111
112 BEGIN:VEVENT
113 DTSTAMP:20150101T162400Z
114 DTSTART:20150105T160000
115 DTEND:20150105T163000
116 SUMMARY:4 pm meeting
117 END:VEVENT
118
119 END:VCALENDAR
120 EOF
121
122 mhical -outfile "$MH_TEST_DIR/test1.txt" <"$MH_TEST_DIR/test1.ics"
123 check "$expected" "$MH_TEST_DIR/test1.txt"
124
125
126 # check display with 12 hour time format and -infile
127 cat >"$expected" <<'EOF'
128 Summary: 4 pm meeting
129 At: Mon, 05 Jan 2015 4:00 PM
130 To: Mon, 05 Jan 2015 4:30 PM
131 EOF
132
133 cat >"$MH_TEST_DIR/test1.ics" <<'EOF'
134 BEGIN:VCALENDAR
135 VERSION:2.0
136 PRODID:test-mhical
137
138 BEGIN:VEVENT
139 DTSTAMP:20150101T162800Z
140 DTSTART:20150105T160000
141 DTEND:20150105T163000
142 SUMMARY:4 pm meeting
143 END:VEVENT
144
145 END:VCALENDAR
146 EOF
147
148 mhical -form mhical.12hour -infile "$MH_TEST_DIR/test1.ics" \
149 >"$MH_TEST_DIR/test1.txt"
150 check "$expected" "$MH_TEST_DIR/test1.txt"
151
152
153 # check display with DST
154 cat >"$expected" <<'EOF'
155 Method: REQUEST
156 Organizer: Requester
157 Summary: Big Meeting
158 Location: The Office
159 At: Mon, 05 Jan 2015 08:00 -0500
160 To: Mon, 05 Jan 2015 09:00
161 Attendees: Requestee
162 EOF
163
164 cat >"$MH_TEST_DIR/test1.ics" <<'EOF'
165 BEGIN:VCALENDAR
166 METHOD:REQUEST
167 PRODID:Microsoft Exchange Server 2010
168 VERSION:2.0
169 BEGIN:VTIMEZONE
170 TZID:Eastern Standard Time
171 BEGIN:STANDARD
172 DTSTART:16010101T020000
173 TZOFFSETFROM:-0400
174 TZOFFSETTO:-0500
175 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11
176 END:STANDARD
177 BEGIN:DAYLIGHT
178 DTSTART:16010101T020000
179 TZOFFSETFROM:-0500
180 TZOFFSETTO:-0400
181 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2SU;BYMONTH=3
182 END:DAYLIGHT
183 END:VTIMEZONE
184 BEGIN:VEVENT
185 ORGANIZER;CN=Requester:MAILTO:requester@example.com
186 ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=FALSE;CN=Requestee
187 :MAILTO:requestee@example.com
188 DESCRIPTION;LANGUAGE=en-US:\n\n
189 SUMMARY;LANGUAGE=en-US:Big Meeting
190 DTSTART;TZID=Eastern Standard Time:20150105T080000
191 DTEND;TZID=Eastern Standard Time:20150105T090000
192 UID:0123456789
193 CLASS:PUBLIC
194 PRIORITY:5
195 DTSTAMP:20141231T235959Z
196 TRANSP:OPAQUE
197 STATUS:CONFIRMED
198 SEQUENCE:0
199 LOCATION;LANGUAGE=en-US:The Office
200 X-MICROSOFT-CDO-APPT-SEQUENCE:0
201 X-MICROSOFT-CDO-OWNERAPPTID:-0123456789
202 X-MICROSOFT-CDO-BUSYSTATUS:TENTATIVE
203 X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY
204 X-MICROSOFT-CDO-ALLDAYEVENT:FALSE
205 X-MICROSOFT-CDO-IMPORTANCE:1
206 X-MICROSOFT-CDO-INSTTYPE:0
207 X-MICROSOFT-DISALLOW-COUNTER:FALSE
208 BEGIN:VALARM
209 ACTION:DISPLAY
210 DESCRIPTION:REMINDER
211 TRIGGER;RELATED=START:-PT15M
212 END:VALARM
213 END:VEVENT
214 END:VCALENDAR
215 EOF
216
217 TZ=EST mhical <"$MH_TEST_DIR/test1.ics" >"$MH_TEST_DIR/test1.txt"
218 check "$expected" "$MH_TEST_DIR/test1.txt"
219
220
221 # check timezone boundary at transition to daylight saving time
222 # The default mhical display format doesn't show the timezone for the
223 # To: time, but it is different than that of the At: time.
224 cat >"$expected" <<'EOF'
225 Summary: EST to EDT
226 At: Sun, 09 Mar 2014 01:59 -0500
227 To: Sun, 09 Mar 2014 03:30
228 EOF
229
230 cat >"$MH_TEST_DIR/test1.ics" <<'EOF'
231 BEGIN:VCALENDAR
232 VERSION:2.0
233 PRODID:test-mhical
234 BEGIN:VTIMEZONE
235 TZID:Eastern Standard Time
236 BEGIN:STANDARD
237 DTSTART:16010101T020000
238 TZOFFSETFROM:-0400
239 TZOFFSETTO:-0500
240 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11
241 END:STANDARD
242 BEGIN:DAYLIGHT
243 DTSTART:16010101T020000
244 TZOFFSETFROM:-0500
245 TZOFFSETTO:-0400
246 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2SU;BYMONTH=3
247 END:DAYLIGHT
248 END:VTIMEZONE
249 BEGIN:VEVENT
250 DTSTAMP:20150101T000000Z
251 DTSTART;TZID=Eastern Standard Time:20140309T015959
252 DTEND;TZID=Eastern Standard Time:20140309T023000
253 Summary: EST to EDT
254 END:VEVENT
255 END:VCALENDAR
256 EOF
257
258 TZ=EST5EDT mhical <"$MH_TEST_DIR/test1.ics" >"$MH_TEST_DIR/test1.txt"
259 check "$expected" "$MH_TEST_DIR/test1.txt"
260
261
262 # check -format, and that timezone is correct in end time
263 cat >"$expected" <<'EOF'
264 Sun, 09 Mar 2014 03:30:00 -0400
265 EOF
266
267 TZ=EST5EDT mhical -format '%(pretty{dtend})' \
268 -infile "$MH_TEST_DIR/test1.ics" -outfile "$MH_TEST_DIR/test1.txt"
269 check "$expected" "$MH_TEST_DIR/test1.txt"
270
271
272 # check timezone boundary at transition from daylight saving time
273 cat >"$expected" <<'EOF'
274 Summary: EDT to EST
275 At: Sun, 02 Nov 2014 01:59 -0400
276 To: Sun, 02 Nov 2014 02:00
277 EOF
278
279 cat >"$MH_TEST_DIR/test1.ics" <<'EOF'
280 BEGIN:VCALENDAR
281 VERSION:2.0
282 PRODID:test-mhical
283 BEGIN:VTIMEZONE
284 TZID:Eastern Standard Time
285 BEGIN:STANDARD
286 DTSTART:16010101T020000
287 TZOFFSETFROM:-0400
288 TZOFFSETTO:-0500
289 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11
290 END:STANDARD
291 BEGIN:DAYLIGHT
292 DTSTART:16010101T020000
293 TZOFFSETFROM:-0500
294 TZOFFSETTO:-0400
295 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2SU;BYMONTH=3
296 END:DAYLIGHT
297 END:VTIMEZONE
298 BEGIN:VEVENT
299 DTSTAMP:20150101T000000Z
300 DTSTART;TZID=Eastern Standard Time:20141102T015959
301 DTEND;TZID=Eastern Standard Time:20141102T020000
302 Summary: EDT to EST
303 END:VEVENT
304 END:VCALENDAR
305 EOF
306
307 TZ=EST5EDT mhical <"$MH_TEST_DIR/test1.ics" >"$MH_TEST_DIR/test1.txt"
308 check "$expected" "$MH_TEST_DIR/test1.txt"
309
310
311 # check -format, and that timezone is correct in end time
312 cat >"$expected" <<'EOF'
313 Sun, 02 Nov 2014 02:00:00 -0500
314 EOF
315
316 TZ=EST5EDT mhical -format '%(pretty{dtend})' \
317 -infile "$MH_TEST_DIR/test1.ics" -outfile "$MH_TEST_DIR/test1.txt"
318 check "$expected" "$MH_TEST_DIR/test1.txt"
319
320
321 printf 'Local-Mailbox: Requestee2 <requestee2@example.com>\n' >> "$MH"
322
323 # check accept of request
324 cat >"$expected" <<'EOF'
325 BEGIN:VCALENDAR
326 METHOD:REPLY
327 PRODID:nmh mhical v0.1
328 VERSION:2.0
329 BEGIN:VTIMEZONE
330 TZID:Eastern Standard Time
331 BEGIN:STANDARD
332 DTSTART:16010101T020000
333 TZOFFSETFROM:-0400
334 TZOFFSETTO:-0500
335 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11
336 END:STANDARD
337 BEGIN:DAYLIGHT
338 DTSTART:16010101T020000
339 TZOFFSETFROM:-0500
340 TZOFFSETTO:-0400
341 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2SU;BYMONTH=3
342 END:DAYLIGHT
343 END:VTIMEZONE
344 BEGIN:VEVENT
345 ORGANIZER;CN=Requester:MAILTO:requester@example.com
346 ATTENDEE;PARTSTAT=ACCEPTED;CN=Requestee2:MAILTO:requestee2@example.com
347 SUMMARY;LANGUAGE=en-US:Accepted: test request
348 DTSTART;TZID=Eastern Standard Time:20150105T090000
349 DTEND;TZID=Eastern Standard Time:20150105T093000
350 UID:0123456789
351 CLASS:PUBLIC
352 PRIORITY:5
353 TRANSP:OPAQUE
354 STATUS:CONFIRMED
355 SEQUENCE:0
356 LOCATION;LANGUAGE=en-US:
357 END:VEVENT
358 END:VCALENDAR
359 EOF
360
361 cat >"$MH_TEST_DIR/test1.ics" <<'EOF'
362 BEGIN:VCALENDAR
363 METHOD:REQUEST
364 PRODID:test-mhical
365 VERSION:2.0
366 BEGIN:VTIMEZONE
367 TZID:Eastern Standard Time
368 BEGIN:STANDARD
369 DTSTART:16010101T020000
370 TZOFFSETFROM:-0400
371 TZOFFSETTO:-0500
372 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11
373 END:STANDARD
374 BEGIN:DAYLIGHT
375 DTSTART:16010101T020000
376 TZOFFSETFROM:-0500
377 TZOFFSETTO:-0400
378 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2SU;BYMONTH=3
379 END:DAYLIGHT
380 END:VTIMEZONE
381 BEGIN:VEVENT
382 ORGANIZER;CN=Requester:MAILTO:requester@example.com
383 ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=Requestee1
384 :MAILTO:requestee1@example.com
385 ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=Requestee2
386 :MAILTO:requestee2@example.com
387 ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=Requestee3
388 :MAILTO:requestee3@example.com
389 SUMMARY;LANGUAGE=en-US:test request
390 DTSTART;TZID=Eastern Standard Time:20150105T090000
391 DTEND;TZID=Eastern Standard Time:20150105T093000
392 UID:0123456789
393 CLASS:PUBLIC
394 PRIORITY:5
395 DTSTAMP:20150101T171600Z
396 TRANSP:OPAQUE
397 STATUS:CONFIRMED
398 SEQUENCE:0
399 LOCATION;LANGUAGE=en-US:
400 BEGIN:VALARM
401 ACTION:DISPLAY
402 DESCRIPTION:REMINDER
403 TRIGGER;RELATED=START:-PT15M
404 END:VALARM
405 END:VEVENT
406 END:VCALENDAR
407 EOF
408
409 mhical -reply accept <"$MH_TEST_DIR/test1.ics" | egrep -v '^DTSTAMP:' \
410 >"$MH_TEST_DIR/test1.txt"
411 check "$expected" "$MH_TEST_DIR/test1.txt"
412
413 # check accept of multiple vevent requests in single vcalendar
414 cat >"$expected" <<'EOF'
415 BEGIN:VCALENDAR
416 METHOD:REPLY
417 PRODID:nmh mhical v0.1
418 VERSION:2.0
419 BEGIN:VTIMEZONE
420 TZID:Eastern Standard Time
421 BEGIN:STANDARD
422 DTSTART:16010101T020000
423 TZOFFSETFROM:-0400
424 TZOFFSETTO:-0500
425 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11
426 END:STANDARD
427 BEGIN:DAYLIGHT
428 DTSTART:16010101T020000
429 TZOFFSETFROM:-0500
430 TZOFFSETTO:-0400
431 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2SU;BYMONTH=3
432 END:DAYLIGHT
433 END:VTIMEZONE
434 BEGIN:VEVENT
435 ORGANIZER;CN=Requester:MAILTO:requester@example.com
436 ATTENDEE;PARTSTAT=ACCEPTED;CN=Requestee2:MAILTO:requestee2@example.com
437 SUMMARY;LANGUAGE=en-US:Accepted: test request
438 DTSTART;TZID=Eastern Standard Time:20150105T090000
439 DTEND;TZID=Eastern Standard Time:20150105T093000
440 UID:0123456790
441 CLASS:PUBLIC
442 PRIORITY:5
443 TRANSP:OPAQUE
444 STATUS:CONFIRMED
445 SEQUENCE:0
446 LOCATION;LANGUAGE=en-US:
447 END:VEVENT
448
449 BEGIN:VEVENT
450 ORGANIZER;CN=Requester:MAILTO:requester@example.com
451 ATTENDEE;PARTSTAT=ACCEPTED;CN=Requestee2:MAILTO:requestee2@example.com
452 SUMMARY;LANGUAGE=en-US:Accepted: test request
453 DTSTART;TZID=Eastern Standard Time:20150105T130000
454 DTEND;TZID=Eastern Standard Time:20150105T134500
455 UID:0123456791
456 CLASS:PUBLIC
457 PRIORITY:5
458 TRANSP:OPAQUE
459 STATUS:CONFIRMED
460 SEQUENCE:0
461 LOCATION;LANGUAGE=en-US:
462 END:VEVENT
463 END:VCALENDAR
464 EOF
465
466 cat >"$MH_TEST_DIR/test1.ics" <<'EOF'
467 BEGIN:VCALENDAR
468 METHOD:REQUEST
469 PRODID:test-mhical
470 VERSION:2.0
471
472 BEGIN:VTIMEZONE
473 TZID:Eastern Standard Time
474 BEGIN:STANDARD
475 DTSTART:16010101T020000
476 TZOFFSETFROM:-0400
477 TZOFFSETTO:-0500
478 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11
479 END:STANDARD
480 BEGIN:DAYLIGHT
481 DTSTART:16010101T020000
482 TZOFFSETFROM:-0500
483 TZOFFSETTO:-0400
484 RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2SU;BYMONTH=3
485 END:DAYLIGHT
486 END:VTIMEZONE
487
488 BEGIN:VEVENT
489 ORGANIZER;CN=Requester:MAILTO:requester@example.com
490 ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=Requestee1
491 :MAILTO:requestee1@example.com
492 ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=Requestee2
493 :MAILTO:requestee2@example.com
494 ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=Requestee3
495 :MAILTO:requestee3@example.com
496 SUMMARY;LANGUAGE=en-US:test request
497 DTSTART;TZID=Eastern Standard Time:20150105T090000
498 DTEND;TZID=Eastern Standard Time:20150105T093000
499 UID:0123456790
500 CLASS:PUBLIC
501 PRIORITY:5
502 DTSTAMP:20150101T171600Z
503 TRANSP:OPAQUE
504 STATUS:CONFIRMED
505 SEQUENCE:0
506 LOCATION;LANGUAGE=en-US:
507 BEGIN:VALARM
508 ACTION:DISPLAY
509 DESCRIPTION:REMINDER
510 TRIGGER;RELATED=START:-PT15M
511 END:VALARM
512 END:VEVENT
513
514 BEGIN:VEVENT
515 ORGANIZER;CN=Requester:MAILTO:requester@example.com
516 ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=Requestee2
517 :MAILTO:requestee2@example.com
518 ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=Requestee3
519 :MAILTO:requestee3@example.com
520 SUMMARY;LANGUAGE=en-US:test request
521 DTSTART;TZID=Eastern Standard Time:20150105T130000
522 DTEND;TZID=Eastern Standard Time:20150105T134500
523 UID:0123456791
524 CLASS:PUBLIC
525 PRIORITY:5
526 DTSTAMP:20150101T171600Z
527 TRANSP:OPAQUE
528 STATUS:CONFIRMED
529 SEQUENCE:0
530 LOCATION;LANGUAGE=en-US:
531 BEGIN:VALARM
532 ACTION:DISPLAY
533 DESCRIPTION:REMINDER
534 TRIGGER;RELATED=START:-PT15M
535 END:VALARM
536 END:VEVENT
537
538 END:VCALENDAR
539 EOF
540
541 mhical -reply accept <"$MH_TEST_DIR/test1.ics" | egrep -v '^DTSTAMP:' \
542 >"$MH_TEST_DIR/test1.txt"
543 check "$expected" "$MH_TEST_DIR/test1.txt"
544
545
546 # check decline of request
547 cat >"$expected" <<'EOF'
548 BEGIN:VCALENDAR
549 METHOD:REPLY
550 PRODID:nmh mhical v0.1
551 VERSION:2.0
552 BEGIN:VEVENT
553 ORGANIZER;CN=Requester:MAILTO:requester@example.com
554 ATTENDEE;PARTSTAT=DECLINED;CN=Requestee2:MAILTO:requestee2@example.com
555 SUMMARY;LANGUAGE=en-US:Declined: test request
556 DTSTART:20150105T090000
557 DTEND:20150105T093000
558 UID:0123456789
559 CLASS:PUBLIC
560 PRIORITY:5
561 TRANSP:OPAQUE
562 STATUS:CONFIRMED
563 SEQUENCE:0
564 LOCATION;LANGUAGE=en-US:
565 END:VEVENT
566 END:VCALENDAR
567 EOF
568
569 cat >"$MH_TEST_DIR/test1.ics" <<'EOF'
570 BEGIN:VCALENDAR
571 METHOD:REQUEST
572 PRODID:test-mhical
573 VERSION:2.0
574 BEGIN:VEVENT
575 ORGANIZER;CN=Requester:MAILTO:requester@example.com
576 ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=Requestee1
577 :MAILTO:requestee1@example.com
578 ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=Requestee2
579 :MAILTO:requestee2@example.com
580 ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=Requestee3
581 :MAILTO:requestee3@example.com
582 SUMMARY;LANGUAGE=en-US:test request
583 DTSTART:20150105T090000
584 DTEND:20150105T093000
585 UID:0123456789
586 CLASS:PUBLIC
587 PRIORITY:5
588 DTSTAMP:20150101T171600Z
589 TRANSP:OPAQUE
590 STATUS:CONFIRMED
591 SEQUENCE:0
592 LOCATION;LANGUAGE=en-US:
593 BEGIN:VALARM
594 ACTION:DISPLAY
595 DESCRIPTION:REMINDER
596 TRIGGER;RELATED=START:-PT15M
597 END:VALARM
598 END:VEVENT
599 END:VCALENDAR
600 EOF
601
602 mhical -reply decline <"$MH_TEST_DIR/test1.ics" | egrep -v '^DTSTAMP:' \
603 >"$MH_TEST_DIR/test1.txt"
604 check "$expected" "$MH_TEST_DIR/test1.txt"
605
606
607 # check response of tentative to request, and -nocontenttype
608 cat >"$expected" <<'EOF'
609 BEGIN:VCALENDAR
610 METHOD:REPLY
611 PRODID:nmh mhical v0.1
612 VERSION:2.0
613 BEGIN:VEVENT
614 ORGANIZER;CN=Requester:MAILTO:requester@example.com
615 ATTENDEE;PARTSTAT=TENTATIVE;CN=Requestee2:MAILTO:requestee2@example.com
616 SUMMARY;LANGUAGE=en-US:Tentative: test request
617 DTSTART:20150105T090000
618 DTEND:20150105T093000
619 UID:0123456789
620 CLASS:PUBLIC
621 PRIORITY:5
622 TRANSP:OPAQUE
623 STATUS:CONFIRMED
624 SEQUENCE:0
625 LOCATION;LANGUAGE=en-US:
626 END:VEVENT
627 END:VCALENDAR
628 EOF
629
630 cat >"$MH_TEST_DIR/test1.ics" <<'EOF'
631 BEGIN:VCALENDAR
632 METHOD:REQUEST
633 PRODID:test-mhical
634 VERSION:2.0
635 BEGIN:VEVENT
636 ORGANIZER;CN=Requester:MAILTO:requester@example.com
637 ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=Requestee1
638 :MAILTO:requestee1@example.com
639 ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=Requestee2
640 :MAILTO:requestee2@example.com
641 ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=Requestee3
642 :MAILTO:requestee3@example.com
643 SUMMARY;LANGUAGE=en-US:test request
644 DTSTART:20150105T090000
645 DTEND:20150105T093000
646 UID:0123456789
647 CLASS:PUBLIC
648 PRIORITY:5
649 DTSTAMP:20150101T171600Z
650 TRANSP:OPAQUE
651 STATUS:CONFIRMED
652 SEQUENCE:0
653 LOCATION;LANGUAGE=en-US:
654 BEGIN:VALARM
655 ACTION:DISPLAY
656 DESCRIPTION:REMINDER
657 TRIGGER;RELATED=START:-PT15M
658 END:VALARM
659 END:VEVENT
660 END:VCALENDAR
661 EOF
662
663 mhical -reply tentative -contenttype -nocontenttype \
664 -infile "$MH_TEST_DIR/test1.ics" | egrep -v '^DTSTAMP:' \
665 >"$MH_TEST_DIR/test1.txt"
666 check "$expected" "$MH_TEST_DIR/test1.txt"
667
668
669 # check cancel request, and -contenttype
670 cat >"$expected" <<'EOF'
671 Content-Type: text/calendar; method="CANCEL"; charset="UTF-8"
672
673 BEGIN:VCALENDAR
674 METHOD:CANCEL
675 PRODID:nmh mhical v0.1
676 VERSION:2.0
677 BEGIN:VEVENT
678 ORGANIZER;CN=Requestee2:MAILTO:requestee2@example.com
679 ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=Requestee1
680 :MAILTO:requestee1@example.com
681 ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=Requestee3
682 :MAILTO:requestee3@example.com
683 SUMMARY;LANGUAGE=en-US:Cancelled:test request
684 DTSTART:20150105T090000
685 DTEND:20150105T093000
686 UID:0123456789
687 CLASS:PUBLIC
688 PRIORITY:5
689 TRANSP:OPAQUE
690 STATUS:CANCELLED
691 SEQUENCE:1
692 LOCATION;LANGUAGE=en-US:
693 END:VEVENT
694 END:VCALENDAR
695 EOF
696
697 cat >"$MH_TEST_DIR/test1.ics" <<'EOF'
698 BEGIN:VCALENDAR
699 METHOD:REQUEST
700 PRODID:test-mhical
701 VERSION:2.0
702 BEGIN:VEVENT
703 ORGANIZER;CN=Requestee2:MAILTO:requestee2@example.com
704 ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=Requestee1
705 :MAILTO:requestee1@example.com
706 ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=Requestee3
707 :MAILTO:requestee3@example.com
708 SUMMARY;LANGUAGE=en-US:test request
709 DTSTART:20150105T090000
710 DTEND:20150105T093000
711 UID:0123456789
712 CLASS:PUBLIC
713 PRIORITY:5
714 DTSTAMP:20150101T171600Z
715 TRANSP:OPAQUE
716 STATUS:CONFIRMED
717 SEQUENCE:0
718 LOCATION;LANGUAGE=en-US:
719 BEGIN:VALARM
720 ACTION:DISPLAY
721 DESCRIPTION:REMINDER
722 TRIGGER;RELATED=START:-PT15M
723 END:VALARM
724 END:VEVENT
725 END:VCALENDAR
726 EOF
727
728 mhical -cancel -contenttype <"$MH_TEST_DIR/test1.ics" | egrep -v '^DTSTAMP:' \
729 >"$MH_TEST_DIR/test1.txt"
730 check "$expected" "$MH_TEST_DIR/test1.txt"
731
732
733 # Check TZID name wrapped with quotes, this used to cause a segfault.
734 cat >"$expected" <<'EOF'
735 Method: REQUEST
736 Summary: Quoted timezone ID
737 At: Wed, 01 Jan 2014 00:00
738 To: Wed, 01 Jan 2014 01:00
739 EOF
740
741 cat >"$MH_TEST_DIR/test1.ics" <<'EOF'
742 BEGIN:VCALENDAR
743 PRODID:Zimbra-Calendar-Provider
744 VERSION:2.0
745 METHOD:REQUEST
746 SUMMARY:Quoted timezone ID
747 BEGIN:VTIMEZONE
748 TZID:Etc/GMT
749 BEGIN:STANDARD
750 DTSTART:19710101T000000
751 TZOFFSETTO:-0000
752 TZOFFSETFROM:-0000
753 TZNAME:GMT
754 END:STANDARD
755 END:VTIMEZONE
756 BEGIN:VEVENT
757 DTSTART:20140101T000000
758 DTEND;TZID="Etc/GMT":20140101T010000
759 SEQUENCE:0
760 END:VEVENT
761 END:VCALENDAR
762 EOF
763
764 TZ=UTC mhical <"$MH_TEST_DIR/test1.ics" >"$MH_TEST_DIR/test1.txt"
765 check "$expected" "$MH_TEST_DIR/test1.txt"
766
767
768 # Check start datetime without a time, and missing end datetime.
769 cat >"$expected" <<'EOF'
770 Method: PUBLISH
771 Summary: Test datetime without time
772 At: Wed, 30 Dec 2015 00:00
773 To: Wed, 30 Dec 2015 23:59
774 EOF
775
776 cat >"$MH_TEST_DIR/test1.ics" <<'EOF'
777 BEGIN:VCALENDAR
778 VERSION:2.0
779 PRODID:icalendar-ruby
780 CALSCALE:GREGORIAN
781 METHOD:PUBLISH
782 BEGIN:VEVENT
783 DTSTAMP:20151208T204350Z
784 UID:0123456789
785 DTSTART;VALUE=DATE:20151230
786 CLASS:PRIVATE
787 SUMMARY:Test datetime without time
788 BEGIN:VALARM
789 ACTION:DISPLAY
790 DESCRIPTION:REMINDER
791 TRIGGER;RELATED=START:-PT15M
792 END:VALARM
793 END:VEVENT
794 END:VCALENDAR
795 EOF
796
797 TZ=UTC mhical <"$MH_TEST_DIR/test1.ics" >"$MH_TEST_DIR/test1.txt"
798 check "$expected" "$MH_TEST_DIR/test1.txt"
799 rm -f "$MH_TEST_DIR/test1.ics"
800
801
802 exit $failed