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