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