* test/automated/package-x-test.el: Change the commentary.
[bpt/emacs.git] / test / automated / icalendar-tests.el
CommitLineData
4856384c 1;; icalendar-tests.el --- Test suite for icalendar.el
7ec01532 2
ab422c4d 3;; Copyright (C) 2005, 2008-2013 Free Software Foundation, Inc.
7ec01532
GM
4
5;; Author: Ulf Jasper <ulf.jasper@web.de>
6;; Created: March 2005
7;; Keywords: calendar
8;; Human-Keywords: calendar, diary, iCalendar, vCalendar
9
10;; This file is part of GNU Emacs.
11
4f43e937 12;; GNU Emacs is free software: you can redistribute it and/or modify
7ec01532 13;; it under the terms of the GNU General Public License as published by
4f43e937
GM
14;; the Free Software Foundation, either version 3 of the License, or
15;; (at your option) any later version.
7ec01532
GM
16
17;; GNU Emacs is distributed in the hope that it will be useful,
18;; but WITHOUT ANY WARRANTY; without even the implied warranty of
19;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20;; GNU General Public License for more details.
21
22;; You should have received a copy of the GNU General Public License
4f43e937 23;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
7ec01532
GM
24
25;;; Commentary:
26
27;; TODO:
28;; - Add more unit tests for functions, timezone etc.
29
a4766629
GM
30;; Note: Watch the trailing blank that is added on import.
31
7ec01532 32;;; Code:
4856384c
UJ
33
34(require 'ert)
35(require 'icalendar)
7ec01532 36
81ee9410 37;; ======================================================================
4856384c 38;; Helpers
81ee9410 39;; ======================================================================
4856384c
UJ
40
41(defun icalendar-tests--get-ical-event (ical-string)
7877f373 42 "Return iCalendar event for ICAL-STRING."
4856384c
UJ
43 (save-excursion
44 (with-temp-buffer
45 (insert ical-string)
46 (goto-char (point-min))
47 (car (icalendar--read-element nil nil)))))
48
49(defun icalendar-tests--trim (string)
81ee9410
UJ
50 "Remove leading and trailing whitespace from STRING."
51 (replace-regexp-in-string "[ \t\n]+\\'" ""
52 (replace-regexp-in-string "\\`[ \t\n]+" "" string)))
53
7ec01532 54;; ======================================================================
4856384c 55;; Tests of functions
7ec01532 56;; ======================================================================
7ec01532 57
4856384c
UJ
58(ert-deftest icalendar--create-uid ()
59 "Test for `icalendar--create-uid'."
60 (let* ((icalendar-uid-format "xxx-%t-%c-%h-%u-%s")
61 t-ct
62 (icalendar--uid-count 77)
63 (entry-full "30.06.1964 07:01 blahblah")
64 (hash (format "%d" (abs (sxhash entry-full))))
65 (contents "DTSTART:19640630T070100\nblahblah")
66 (username (or user-login-name "UNKNOWN_USER"))
67 )
68 (fset 't-ct (symbol-function 'current-time))
69 (unwind-protect
70 (progn
71 (fset 'current-time (lambda () '(1 2 3)))
72 (should (= 77 icalendar--uid-count))
73 (should (string= (concat "xxx-123-77-" hash "-" username "-19640630")
74 (icalendar--create-uid entry-full contents)))
75 (should (= 78 icalendar--uid-count)))
76 ;; restore 'current-time
77 (fset 'current-time (symbol-function 't-ct)))
78 (setq contents "blahblah")
79 (setq icalendar-uid-format "yyy%syyy")
80 (should (string= (concat "yyyDTSTARTyyy")
81 (icalendar--create-uid entry-full contents)))))
a4766629 82
4856384c
UJ
83(ert-deftest icalendar--calendar-style ()
84 "Test for `icalendar--date-style'."
85 (dolist (calendar-date-style '(iso american european))
86 (should (eq (icalendar--date-style) calendar-date-style)))
87 (let ((cds calendar-date-style)
88 (european-calendar-style t))
89 (makunbound 'calendar-date-style)
90 (should (eq (icalendar--date-style) 'european))
91 (with-no-warnings (setq european-calendar-style nil)) ;still get warning!?! FIXME
92 (should (eq (icalendar--date-style) 'american))
93 (setq calendar-date-style cds)))
f052351a 94
4856384c
UJ
95(ert-deftest icalendar-convert-anniversary-to-ical ()
96 "Test method for `icalendar--convert-anniversary-to-ical'."
b4340b3f
UJ
97 (let* ((calendar-date-style 'iso)
98 result)
4856384c
UJ
99 (setq result (icalendar--convert-anniversary-to-ical
100 "" "%%(diary-anniversary 1964 6 30) g"))
101 (should (= 2 (length result)))
102 (should (string= (concat
103 "\nDTSTART;VALUE=DATE:19640630"
104 "\nDTEND;VALUE=DATE:19640701"
105 "\nRRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=06;BYMONTHDAY=30")
b4340b3f 106 (car result)))
4856384c 107 (should (string= "g" (cadr result)))))
b4340b3f 108
4856384c
UJ
109(ert-deftest icalendar--convert-cyclic-to-ical ()
110 "Test method for `icalendar--convert-cyclic-to-ical'."
b4340b3f
UJ
111 (let* ((calendar-date-style 'iso)
112 result)
81ee9410 113 (setq result (icalendar--convert-block-to-ical
b4340b3f 114 "" "%%(diary-block 2004 7 19 2004 8 27) Sommerferien"))
4856384c
UJ
115 (should (= 2 (length result)))
116 (should (string= (concat
b4340b3f
UJ
117 "\nDTSTART;VALUE=DATE:20040719"
118 "\nDTEND;VALUE=DATE:20040828")
119 (car result)))
4856384c 120 (should (string= "Sommerferien" (cadr result)))))
b4340b3f 121
4856384c
UJ
122(ert-deftest icalendar--convert-block-to-ical ()
123 "Test method for `icalendar--convert-block-to-ical'."
b4340b3f
UJ
124 (let* ((calendar-date-style 'iso)
125 result)
81ee9410 126 (setq result (icalendar--convert-block-to-ical
b4340b3f 127 "" "%%(diary-block 2004 7 19 2004 8 27) Sommerferien"))
4856384c
UJ
128 (should (= 2 (length result)))
129 (should (string= (concat
b4340b3f
UJ
130 "\nDTSTART;VALUE=DATE:20040719"
131 "\nDTEND;VALUE=DATE:20040828")
132 (car result)))
4856384c 133 (should (string= "Sommerferien" (cadr result)))))
b4340b3f 134
4856384c
UJ
135(ert-deftest icalendar--convert-yearly-to-ical ()
136 "Test method for `icalendar--convert-yearly-to-ical'."
b4340b3f 137 (let* ((calendar-date-style 'iso)
4856384c
UJ
138 result
139 (calendar-month-name-array
140 ["January" "February" "March" "April" "May" "June" "July" "August"
141 "September" "October" "November" "December"]))
142 (setq result (icalendar--convert-yearly-to-ical "" "May 1 Tag der Arbeit"))
143 (should (= 2 (length result)))
144 (should (string= (concat
145 "\nDTSTART;VALUE=DATE:19000501"
146 "\nDTEND;VALUE=DATE:19000502"
147 "\nRRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=5;BYMONTHDAY=1")
b4340b3f 148 (car result)))
4856384c 149 (should (string= "Tag der Arbeit" (cadr result)))))
a4766629 150
4856384c
UJ
151(ert-deftest icalendar--convert-weekly-to-ical ()
152 "Test method for `icalendar--convert-weekly-to-ical'."
153 (let* ((calendar-date-style 'iso)
154 result
155 (calendar-day-name-array
156 ["Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday"
157 "Saturday"]))
158 (setq result (icalendar--convert-weekly-to-ical "" "Monday 8:30 subject"))
159 (should (= 2 (length result)))
160 (should (string= (concat "\nDTSTART;VALUE=DATE-TIME:20050103T083000"
161 "\nDTEND;VALUE=DATE-TIME:20050103T093000"
162 "\nRRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO")
163 (car result)))
164 (should (string= "subject" (cadr result)))))
aad81014 165
4856384c 166(ert-deftest icalendar--parse-vtimezone ()
81ee9410 167 "Test method for `icalendar--parse-vtimezone'."
6fe539d2 168 (let (vtimezone result)
4856384c 169 (setq vtimezone (icalendar-tests--get-ical-event "BEGIN:VTIMEZONE
6fe539d2
UJ
170TZID:thename
171BEGIN:STANDARD
172DTSTART:16010101T040000
173TZOFFSETFROM:+0300
174TZOFFSETTO:+0200
175RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10
176END:STANDARD
177BEGIN:DAYLIGHT
178DTSTART:16010101T030000
179TZOFFSETFROM:+0200
180TZOFFSETTO:+0300
181RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=3
182END:DAYLIGHT
183END:VTIMEZONE
184"))
185 (setq result (icalendar--parse-vtimezone vtimezone))
4856384c 186 (should (string= "thename" (car result)))
6fe539d2 187 (message (cdr result))
4856384c 188 (should (string= "STD-02:00DST-03:00,M3.5.0/03:00:00,M10.5.0/04:00:00"
81ee9410 189 (cdr result)))
4856384c 190 (setq vtimezone (icalendar-tests--get-ical-event "BEGIN:VTIMEZONE
ee574791 191TZID:anothername\, with a comma
6fe539d2
UJ
192BEGIN:STANDARD
193DTSTART:16010101T040000
194TZOFFSETFROM:+0300
195TZOFFSETTO:+0200
196RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2MO;BYMONTH=10
197END:STANDARD
198BEGIN:DAYLIGHT
199DTSTART:16010101T030000
200TZOFFSETFROM:+0200
201TZOFFSETTO:+0300
202RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2MO;BYMONTH=3
203END:DAYLIGHT
204END:VTIMEZONE
205"))
206 (setq result (icalendar--parse-vtimezone vtimezone))
ee574791 207 (should (string= "anothername, with a comma" (car result)))
6fe539d2 208 (message (cdr result))
4856384c
UJ
209 (should (string= "STD-02:00DST-03:00,M3.2.1/03:00:00,M10.2.1/04:00:00"
210 (cdr result)))))
211
212(ert-deftest icalendar--convert-ordinary-to-ical ()
213 "Test method for `icalendar--convert-ordinary-to-ical'."
214 (let* ((calendar-date-style 'iso)
215 result)
216 ;; without time
217 (setq result (icalendar--convert-ordinary-to-ical "&?" "2010 2 15 subject"))
218 (should (= 2 (length result)))
219 (should (string= "\nDTSTART;VALUE=DATE:20100215\nDTEND;VALUE=DATE:20100216"
220 (car result)))
221 (should (string= "subject" (cadr result)))
7877f373 222
4856384c
UJ
223 ;; with time
224 (setq result (icalendar--convert-ordinary-to-ical
225 "&?" "&2010 2 15 12:34-23:45 s"))
226 (should (= 2 (length result)))
227 (should (string= (concat "\nDTSTART;VALUE=DATE-TIME:20100215T123400"
228 "\nDTEND;VALUE=DATE-TIME:20100215T234500")
229 (car result)))
230 (should (string= "s" (cadr result)))
231
232 ;; with time, again -- test bug#5549
233 (setq result (icalendar--convert-ordinary-to-ical
234 "x?" "x2010 2 15 0:34-1:45 s"))
235 (should (= 2 (length result)))
236 (should (string= (concat "\nDTSTART;VALUE=DATE-TIME:20100215T003400"
237 "\nDTEND;VALUE=DATE-TIME:20100215T014500")
238 (car result)))
239 (should (string= "s" (cadr result)))))
240
241(ert-deftest icalendar--diarytime-to-isotime ()
242 "Test method for `icalendar--diarytime-to-isotime'."
68575ab0
UJ
243 (should (string= "T011500"
244 (icalendar--diarytime-to-isotime "01:15" "")))
245 (should (string= "T011500"
246 (icalendar--diarytime-to-isotime "1:15" "")))
247 (should (string= "T000100"
248 (icalendar--diarytime-to-isotime "0:01" "")))
249 (should (string= "T010000"
250 (icalendar--diarytime-to-isotime "0100" "")))
251 (should (string= "T010000"
252 (icalendar--diarytime-to-isotime "0100" "am")))
253 (should (string= "T130000"
254 (icalendar--diarytime-to-isotime "0100" "pm")))
255 (should (string= "T120000"
256 (icalendar--diarytime-to-isotime "1200" "")))
257 (should (string= "T171700"
258 (icalendar--diarytime-to-isotime "17:17" "")))
259 (should (string= "T000000"
260 (icalendar--diarytime-to-isotime "1200" "am")))
261 (should (string= "T000100"
262 (icalendar--diarytime-to-isotime "1201" "am")))
263 (should (string= "T005900"
264 (icalendar--diarytime-to-isotime "1259" "am")))
265 (should (string= "T120000"
266 (icalendar--diarytime-to-isotime "1200" "pm")))
267 (should (string= "T120100"
268 (icalendar--diarytime-to-isotime "1201" "pm")))
269 (should (string= "T125900"
270 (icalendar--diarytime-to-isotime "1259" "pm"))))
4856384c
UJ
271
272(ert-deftest icalendar--datetime-to-diary-date ()
273 "Test method for `icalendar--datetime-to-diary-date'."
274 (let* ((datetime '(59 59 23 31 12 2008))
275 (calendar-date-style 'iso))
68575ab0
UJ
276 (should (string= "2008 12 31"
277 (icalendar--datetime-to-diary-date datetime)))
4856384c 278 (setq calendar-date-style 'european)
68575ab0
UJ
279 (should (string= "31 12 2008"
280 (icalendar--datetime-to-diary-date datetime)))
4856384c 281 (setq calendar-date-style 'american)
68575ab0
UJ
282 (should (string= "12 31 2008"
283 (icalendar--datetime-to-diary-date datetime)))))
4856384c
UJ
284
285(ert-deftest icalendar--datestring-to-isodate ()
286 "Test method for `icalendar--datestring-to-isodate'."
287 (let ((calendar-date-style 'iso))
288 ;; numeric iso
68575ab0
UJ
289 (should (string= "20080511"
290 (icalendar--datestring-to-isodate "2008 05 11")))
291 (should (string= "20080531"
292 (icalendar--datestring-to-isodate "2008 05 31")))
293 (should (string= "20080602"
294 (icalendar--datestring-to-isodate "2008 05 31" 2)))
4856384c
UJ
295
296 ;; numeric european
297 (setq calendar-date-style 'european)
68575ab0
UJ
298 (should (string= "20080511"
299 (icalendar--datestring-to-isodate "11 05 2008")))
300 (should (string= "20080531"
301 (icalendar--datestring-to-isodate "31 05 2008")))
302 (should (string= "20080602"
303 (icalendar--datestring-to-isodate "31 05 2008" 2)))
4856384c
UJ
304
305 ;; numeric american
306 (setq calendar-date-style 'american)
68575ab0
UJ
307 (should (string= "20081105"
308 (icalendar--datestring-to-isodate "11 05 2008")))
309 (should (string= "20081230"
310 (icalendar--datestring-to-isodate "12 30 2008")))
311 (should (string= "20090101"
312 (icalendar--datestring-to-isodate "12 30 2008" 2)))
4856384c
UJ
313
314 ;; non-numeric
315 (setq calendar-date-style nil) ;not necessary for conversion
68575ab0
UJ
316 (should (string= "20081105"
317 (icalendar--datestring-to-isodate "Nov 05 2008")))
318 (should (string= "20081105"
319 (icalendar--datestring-to-isodate "05 Nov 2008")))
320 (should (string= "20081105"
321 (icalendar--datestring-to-isodate "2008 Nov 05")))))
4856384c
UJ
322
323(ert-deftest icalendar--first-weekday-of-year ()
324 "Test method for `icalendar-first-weekday-of-year'."
325 (should (eq 1 (icalendar-first-weekday-of-year "TU" 2008)))
326 (should (eq 3 (icalendar-first-weekday-of-year "WE" 2007)))
327 (should (eq 5 (icalendar-first-weekday-of-year "TH" 2006)))
328 (should (eq 7 (icalendar-first-weekday-of-year "FR" 2005)))
329 (should (eq 3 (icalendar-first-weekday-of-year "SA" 2004)))
330 (should (eq 5 (icalendar-first-weekday-of-year "SU" 2003)))
331 (should (eq 7 (icalendar-first-weekday-of-year "MO" 2002)))
332 (should (eq 3 (icalendar-first-weekday-of-year "MO" 2000)))
333 (should (eq 1 (icalendar-first-weekday-of-year "TH" 1970))))
334
335(ert-deftest icalendar--import-format-sample ()
336 "Test method for `icalendar-import-format-sample'."
68575ab0
UJ
337 (should (string= (concat "SUMMARY=`a' DESCRIPTION=`b' LOCATION=`c' "
338 "ORGANIZER=`d' STATUS=`' URL=`' CLASS=`'")
339 (icalendar-import-format-sample
4856384c
UJ
340 (icalendar-tests--get-ical-event "BEGIN:VEVENT
341DTSTAMP:20030509T043439Z
342DTSTART:20030509T103000
343SUMMARY:a
344ORGANIZER:d
345LOCATION:c
346DTEND:20030509T153000
347DESCRIPTION:b
348END:VEVENT
68575ab0 349")))))
4856384c
UJ
350
351(ert-deftest icalendar--format-ical-event ()
352 "Test `icalendar--format-ical-event'."
353 (let ((icalendar-import-format "%s%d%l%o%t%u%c")
354 (icalendar-import-format-summary "SUM %s")
355 (icalendar-import-format-location " LOC %s")
356 (icalendar-import-format-description " DES %s")
357 (icalendar-import-format-organizer " ORG %s")
358 (icalendar-import-format-status " STA %s")
359 (icalendar-import-format-url " URL %s")
360 (icalendar-import-format-class " CLA %s")
361 (event (icalendar-tests--get-ical-event "BEGIN:VEVENT
362DTSTAMP:20030509T043439Z
363DTSTART:20030509T103000
364SUMMARY:sum
365ORGANIZER:org
366LOCATION:loc
367DTEND:20030509T153000
368DESCRIPTION:des
369END:VEVENT
370")))
68575ab0
UJ
371 (should (string= "SUM sum DES des LOC loc ORG org"
372 (icalendar--format-ical-event event)))
4856384c
UJ
373 (setq icalendar-import-format (lambda (&rest ignore)
374 "helloworld"))
68575ab0 375 (should (string= "helloworld" (icalendar--format-ical-event event)))
4856384c
UJ
376 (setq icalendar-import-format
377 (lambda (e)
378 (format "-%s-%s-%s-%s-%s-%s-%s-"
379 (icalendar--get-event-property event 'SUMMARY)
380 (icalendar--get-event-property event 'DESCRIPTION)
381 (icalendar--get-event-property event 'LOCATION)
382 (icalendar--get-event-property event 'ORGANIZER)
383 (icalendar--get-event-property event 'STATUS)
384 (icalendar--get-event-property event 'URL)
385 (icalendar--get-event-property event 'CLASS))))
68575ab0
UJ
386 (should (string= "-sum-des-loc-org-nil-nil-nil-"
387 (icalendar--format-ical-event event)))))
4856384c
UJ
388
389(ert-deftest icalendar--parse-summary-and-rest ()
390 "Test `icalendar--parse-summary-and-rest'."
391 (let ((icalendar-import-format "%s%d%l%o%t%u%c")
392 (icalendar-import-format-summary "SUM %s")
393 (icalendar-import-format-location " LOC %s")
394 (icalendar-import-format-description " DES %s")
395 (icalendar-import-format-organizer " ORG %s")
396 (icalendar-import-format-status " STA %s")
397 (icalendar-import-format-url " URL %s")
398 (icalendar-import-format-class " CLA %s")
399 (result))
400 (setq result (icalendar--parse-summary-and-rest "SUM sum ORG org"))
68575ab0 401 (should (string= "org" (cdr (assoc 'org result))))
4856384c
UJ
402
403 (setq result (icalendar--parse-summary-and-rest
404 "SUM sum DES des LOC loc ORG org STA sta URL url CLA cla"))
68575ab0
UJ
405 (should (string= "des" (cdr (assoc 'des result))))
406 (should (string= "loc" (cdr (assoc 'loc result))))
407 (should (string= "org" (cdr (assoc 'org result))))
408 (should (string= "sta" (cdr (assoc 'sta result))))
409 (should (string= "cla" (cdr (assoc 'cla result))))
4856384c
UJ
410
411 (setq icalendar-import-format (lambda () "Hello world"))
412 (setq result (icalendar--parse-summary-and-rest
413 "blah blah "))
414 (should (not result))
415 ))
f052351a 416
7ec01532 417;; ======================================================================
4856384c 418;; Export tests
7ec01532
GM
419;; ======================================================================
420
4856384c
UJ
421(defun icalendar-tests--test-export (input-iso input-european input-american
422 expected-output)
7ec01532 423 "Perform an export test.
a4766629 424Argument INPUT-ISO iso style diary string.
7ec01532
GM
425Argument INPUT-EUROPEAN european style diary string.
426Argument INPUT-AMERICAN american style diary string.
7877f373 427Argument EXPECTED-OUTPUT expected iCalendar result string.
a4766629
GM
428
429European style input data must use german month names. American
430and ISO style input data must use english month names."
4856384c
UJ
431 (let ((tz (cadr (current-time-zone)))
432 (calendar-date-style 'iso)
433 (icalendar-recurring-start-year 2000))
434 (unwind-protect
435 (progn
436 (set-time-zone-rule "CET")
437 (when input-iso
438 (let ((calendar-month-name-array
439 ["January" "February" "March" "April" "May" "June" "July" "August"
440 "September" "October" "November" "December"])
441 (calendar-day-name-array
442 ["Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday"
443 "Saturday"]))
444 (setq calendar-date-style 'iso)
445 (icalendar-tests--do-test-export input-iso expected-output)))
446 (when input-european
447 (let ((calendar-month-name-array
448 ["Januar" "Februar" "März" "April" "Mai" "Juni" "Juli" "August"
449 "September" "Oktober" "November" "Dezember"])
450 (calendar-day-name-array
451 ["Sonntag" "Montag" "Dienstag" "Mittwoch" "Donnerstag" "Freitag"
452 "Samstag"]))
453 (setq calendar-date-style 'european)
454 (icalendar-tests--do-test-export input-european expected-output)))
455 (when input-american
456 (let ((calendar-month-name-array
457 ["January" "February" "March" "April" "May" "June" "July" "August"
458 "September" "October" "November" "December"])
459 (calendar-day-name-array
460 ["Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday"
461 "Saturday"]))
462 (setq calendar-date-style 'american)
463 (icalendar-tests--do-test-export input-american expected-output))))
464 ;; restore time-zone if something went terribly wrong
465 (set-time-zone-rule tz))))
466
467(defun icalendar-tests--do-test-export (input expected-output)
7ec01532
GM
468 "Actually perform export test.
469Argument INPUT input diary string.
7877f373 470Argument EXPECTED-OUTPUT expected iCalendar result string."
4856384c
UJ
471 (let ((temp-file (make-temp-file "icalendar-tests-ics")))
472 (unwind-protect
473 (progn
474 (with-temp-buffer
475 (insert input)
476 (icalendar-export-region (point-min) (point-max) temp-file))
477 (save-excursion
478 (find-file temp-file)
479 (goto-char (point-min))
480 (cond (expected-output
481 (should (re-search-forward "^\\s-*BEGIN:VCALENDAR
7ec01532
GM
482PRODID:-//Emacs//NONSGML icalendar.el//EN
483VERSION:2.0
484BEGIN:VEVENT
485UID:emacs[0-9]+
486\\(\\(.\\|\n\\)+\\)
487END:VEVENT
488END:VCALENDAR
489\\s-*$"
4856384c
UJ
490 nil t))
491 (should (string-match
492 (concat "^\\s-*"
493 (regexp-quote (buffer-substring-no-properties
494 (match-beginning 1) (match-end 1)))
495 "\\s-*$")
496 expected-output)))
497 (t
498 (should (re-search-forward "^\\s-*BEGIN:VCALENDAR
7ec01532
GM
499PRODID:-//Emacs//NONSGML icalendar.el//EN
500VERSION:2.0
501END:VCALENDAR
502\\s-*$"
4856384c
UJ
503 nil t))))))
504 ;; cleanup!!
505 (kill-buffer (find-buffer-visiting temp-file))
506 (delete-file temp-file))))
507
508(ert-deftest icalendar-export-ordinary-no-time ()
509 "Perform export test."
510
511 (let ((icalendar-export-hidden-diary-entries nil))
512 (icalendar-tests--test-export
513 "&2000 Oct 3 ordinary no time "
514 "&3 Okt 2000 ordinary no time "
515 "&Oct 3 2000 ordinary no time "
516 nil))
517
518 (icalendar-tests--test-export
519 "2000 Oct 3 ordinary no time "
520 "3 Okt 2000 ordinary no time "
521 "Oct 3 2000 ordinary no time "
522 "DTSTART;VALUE=DATE:20001003
523DTEND;VALUE=DATE:20001004
524SUMMARY:ordinary no time
525"))
526
527(ert-deftest icalendar-export-ordinary ()
528 "Perform export test."
529
530 (icalendar-tests--test-export
531 "2000 Oct 3 16:30 ordinary with time"
532 "3 Okt 2000 16:30 ordinary with time"
533 "Oct 3 2000 16:30 ordinary with time"
534 "DTSTART;VALUE=DATE-TIME:20001003T163000
535DTEND;VALUE=DATE-TIME:20001003T173000
536SUMMARY:ordinary with time
537")
538 (icalendar-tests--test-export
539 "2000 10 3 16:30 ordinary with time 2"
540 "3 10 2000 16:30 ordinary with time 2"
541 "10 3 2000 16:30 ordinary with time 2"
542 "DTSTART;VALUE=DATE-TIME:20001003T163000
543DTEND;VALUE=DATE-TIME:20001003T173000
544SUMMARY:ordinary with time 2
545")
546
547 (icalendar-tests--test-export
548 "2000/10/3 16:30 ordinary with time 3"
549 "3/10/2000 16:30 ordinary with time 3"
550 "10/3/2000 16:30 ordinary with time 3"
551 "DTSTART;VALUE=DATE-TIME:20001003T163000
552DTEND;VALUE=DATE-TIME:20001003T173000
553SUMMARY:ordinary with time 3
554"))
555
556(ert-deftest icalendar-export-multiline ()
557 "Perform export test."
558
559 ;; multiline -- FIXME!!!
560 (icalendar-tests--test-export
561 "2000 October 3 16:30 multiline
562 17:30 multiline continued FIXME"
563 "3 Oktober 2000 16:30 multiline
564 17:30 multiline continued FIXME"
565 "October 3 2000 16:30 multiline
566 17:30 multiline continued FIXME"
567 "DTSTART;VALUE=DATE-TIME:20001003T163000
568DTEND;VALUE=DATE-TIME:20001003T173000
569SUMMARY:multiline
570DESCRIPTION:
571 17:30 multiline continued FIXME
572"))
573
574(ert-deftest icalendar-export-weekly-by-day ()
575 "Perform export test."
576
577 ;; weekly by day
578 (icalendar-tests--test-export
579 "Monday 1:30pm weekly by day with start time"
580 "Montag 13:30 weekly by day with start time"
581 "Monday 1:30pm weekly by day with start time"
582 "DTSTART;VALUE=DATE-TIME:20000103T133000
583DTEND;VALUE=DATE-TIME:20000103T143000
584RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO
585SUMMARY:weekly by day with start time
586")
587
588 (icalendar-tests--test-export
589 "Monday 13:30-15:00 weekly by day with start and end time"
590 "Montag 13:30-15:00 weekly by day with start and end time"
591 "Monday 01:30pm-03:00pm weekly by day with start and end time"
592 "DTSTART;VALUE=DATE-TIME:20000103T133000
593DTEND;VALUE=DATE-TIME:20000103T150000
594RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO
595SUMMARY:weekly by day with start and end time
596"))
597
598(ert-deftest icalendar-export-yearly ()
599 "Perform export test."
600 ;; yearly
601 (icalendar-tests--test-export
602 "may 1 yearly no time"
603 "1 Mai yearly no time"
604 "may 1 yearly no time"
605 "DTSTART;VALUE=DATE:19000501
606DTEND;VALUE=DATE:19000502
607RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=5;BYMONTHDAY=1
608SUMMARY:yearly no time
609"))
610
611(ert-deftest icalendar-export-anniversary ()
612 "Perform export test."
613 ;; anniversaries
614 (icalendar-tests--test-export
615 "%%(diary-anniversary 1989 10 3) anniversary no time"
616 "%%(diary-anniversary 3 10 1989) anniversary no time"
617 "%%(diary-anniversary 10 3 1989) anniversary no time"
618 "DTSTART;VALUE=DATE:19891003
619DTEND;VALUE=DATE:19891004
620RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=10;BYMONTHDAY=03
621SUMMARY:anniversary no time
622")
623 (icalendar-tests--test-export
624 "%%(diary-anniversary 1989 10 3) 19:00-20:00 anniversary with time"
625 "%%(diary-anniversary 3 10 1989) 19:00-20:00 anniversary with time"
626 "%%(diary-anniversary 10 3 1989) 19:00-20:00 anniversary with time"
627 "DTSTART;VALUE=DATE-TIME:19891003T190000
628DTEND;VALUE=DATE-TIME:19891004T200000
629RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=10;BYMONTHDAY=03
630SUMMARY:anniversary with time
631"))
632
633(ert-deftest icalendar-export-block ()
634 "Perform export test."
635 ;; block
636 (icalendar-tests--test-export
637 "%%(diary-block 2001 6 18 2001 7 6) block no time"
638 "%%(diary-block 18 6 2001 6 7 2001) block no time"
639 "%%(diary-block 6 18 2001 7 6 2001) block no time"
640 "DTSTART;VALUE=DATE:20010618
641DTEND;VALUE=DATE:20010707
642SUMMARY:block no time
643")
644 (icalendar-tests--test-export
645 "%%(diary-block 2001 6 18 2001 7 6) 13:00-17:00 block with time"
646 "%%(diary-block 18 6 2001 6 7 2001) 13:00-17:00 block with time"
647 "%%(diary-block 6 18 2001 7 6 2001) 13:00-17:00 block with time"
648 "DTSTART;VALUE=DATE-TIME:20010618T130000
649DTEND;VALUE=DATE-TIME:20010618T170000
650RRULE:FREQ=DAILY;INTERVAL=1;UNTIL=20010706
651SUMMARY:block with time
652")
653 (icalendar-tests--test-export
654 "%%(diary-block 2001 6 18 2001 7 6) 13:00 block no end time"
655 "%%(diary-block 18 6 2001 6 7 2001) 13:00 block no end time"
656 "%%(diary-block 6 18 2001 7 6 2001) 13:00 block no end time"
657 "DTSTART;VALUE=DATE-TIME:20010618T130000
658DTEND;VALUE=DATE-TIME:20010618T140000
659RRULE:FREQ=DAILY;INTERVAL=1;UNTIL=20010706
660SUMMARY:block no end time
661"))
7ec01532
GM
662
663;; ======================================================================
4856384c 664;; Import tests
7ec01532
GM
665;; ======================================================================
666
4856384c
UJ
667(defun icalendar-tests--test-import (input expected-iso expected-european
668 expected-american)
7ec01532
GM
669 "Perform import test.
670Argument INPUT icalendar event string.
a4766629 671Argument EXPECTED-ISO expected iso style diary string.
7ec01532
GM
672Argument EXPECTED-EUROPEAN expected european style diary string.
673Argument EXPECTED-AMERICAN expected american style diary string."
7ec01532
GM
674 (let ((timezone (cadr (current-time-zone))))
675 (set-time-zone-rule "CET")
676 (with-temp-buffer
677 (if (string-match "^BEGIN:VCALENDAR" input)
678 (insert input)
679 (insert "BEGIN:VCALENDAR\nPRODID:-//Emacs//NONSGML icalendar.el//EN\n")
680 (insert "VERSION:2.0\nBEGIN:VEVENT\n")
681 (insert input)
682 (unless (eq (char-before) ?\n)
683 (insert "\n"))
684 (insert "END:VEVENT\nEND:VCALENDAR\n"))
6dbaa1c7 685 (let ((icalendar-import-format "%s%d%l%o%t%u%c%U")
7ec01532
GM
686 (icalendar-import-format-summary "%s")
687 (icalendar-import-format-location "\n Location: %s")
688 (icalendar-import-format-description "\n Desc: %s")
689 (icalendar-import-format-organizer "\n Organizer: %s")
690 (icalendar-import-format-status "\n Status: %s")
691 (icalendar-import-format-url "\n URL: %s")
692 (icalendar-import-format-class "\n Class: %s")
6dbaa1c7 693 (icalendar-import-format-uid "\n UID: %s")
a4766629
GM
694 calendar-date-style)
695 (when expected-iso
696 (setq calendar-date-style 'iso)
4856384c 697 (icalendar-tests--do-test-import input expected-iso))
7ec01532 698 (when expected-european
a4766629 699 (setq calendar-date-style 'european)
4856384c 700 (icalendar-tests--do-test-import input expected-european))
7ec01532 701 (when expected-american
a4766629 702 (setq calendar-date-style 'american)
4856384c 703 (icalendar-tests--do-test-import input expected-american))))
7ec01532
GM
704 (set-time-zone-rule timezone)))
705
4856384c 706(defun icalendar-tests--do-test-import (input expected-output)
7ec01532
GM
707 "Actually perform import test.
708Argument INPUT input icalendar string.
709Argument EXPECTED-OUTPUT expected diary string."
710 (let ((temp-file (make-temp-file "icalendar-test-diary")))
711 (icalendar-import-buffer temp-file t t)
68575ab0
UJ
712 (save-excursion
713 (find-file temp-file)
714 (let ((result (buffer-substring-no-properties (point-min) (point-max))))
715 (should (string= expected-output result)))
7ec01532
GM
716 (kill-buffer (find-buffer-visiting temp-file))
717 (delete-file temp-file))))
718
4856384c 719(ert-deftest icalendar-import-non-recurring ()
7ec01532 720 "Perform standard import tests."
4856384c 721 (icalendar-tests--test-import
7ec01532
GM
722 "SUMMARY:non-recurring
723DTSTART;VALUE=DATE-TIME:20030919T090000
724DTEND;VALUE=DATE-TIME:20030919T113000"
68575ab0
UJ
725 "&2003/9/19 09:00-11:30 non-recurring\n"
726 "&19/9/2003 09:00-11:30 non-recurring\n"
727 "&9/19/2003 09:00-11:30 non-recurring\n")
4856384c 728 (icalendar-tests--test-import
7ec01532
GM
729 "SUMMARY:non-recurring allday
730DTSTART;VALUE=DATE-TIME:20030919"
68575ab0
UJ
731 "&2003/9/19 non-recurring allday\n"
732 "&19/9/2003 non-recurring allday\n"
733 "&9/19/2003 non-recurring allday\n")
4856384c 734 (icalendar-tests--test-import
bdbc1c4e
UJ
735 ;; Checkdoc removes trailing blanks. Therefore: format!
736 (format "%s\n%s\n%s" "SUMMARY:long " " summary"
737 "DTSTART;VALUE=DATE:20030919")
68575ab0
UJ
738 "&2003/9/19 long summary\n"
739 "&19/9/2003 long summary\n"
740 "&9/19/2003 long summary\n")
4856384c 741 (icalendar-tests--test-import
7ec01532
GM
742 "UID:748f2da0-0d9b-11d8-97af-b4ec8686ea61
743SUMMARY:Sommerferien
744STATUS:TENTATIVE
745CLASS:PRIVATE
746X-MOZILLA-ALARM-DEFAULT-UNITS:Minuten
747X-MOZILLA-RECUR-DEFAULT-INTERVAL:0
748DTSTART;VALUE=DATE:20040719
749DTEND;VALUE=DATE:20040828
750DTSTAMP:20031103T011641Z
751"
81ee9410
UJ
752 "&%%(and (diary-block 2004 7 19 2004 8 27)) Sommerferien
753 Status: TENTATIVE
754 Class: PRIVATE
6dbaa1c7 755 UID: 748f2da0-0d9b-11d8-97af-b4ec8686ea61
81ee9410
UJ
756"
757 "&%%(and (diary-block 19 7 2004 27 8 2004)) Sommerferien
758 Status: TENTATIVE
759 Class: PRIVATE
6dbaa1c7 760 UID: 748f2da0-0d9b-11d8-97af-b4ec8686ea61
81ee9410
UJ
761"
762 "&%%(and (diary-block 7 19 2004 8 27 2004)) Sommerferien
763 Status: TENTATIVE
68575ab0 764 Class: PRIVATE
6dbaa1c7 765 UID: 748f2da0-0d9b-11d8-97af-b4ec8686ea61
68575ab0 766")
4856384c 767 (icalendar-tests--test-import
7ec01532
GM
768 "UID
769 :04979712-3902-11d9-93dd-8f9f4afe08da
770SUMMARY
771 :folded summary
772STATUS
773 :TENTATIVE
774CLASS
775 :PRIVATE
776X-MOZILLA-ALARM-DEFAULT-LENGTH
777 :0
778DTSTART
779 :20041123T140000
780DTEND
781 :20041123T143000
782DTSTAMP
783 :20041118T013430Z
784LAST-MODIFIED
785 :20041118T013640Z
786"
81ee9410
UJ
787 "&2004/11/23 14:00-14:30 folded summary
788 Status: TENTATIVE
6dbaa1c7
UJ
789 Class: PRIVATE
790 UID: 04979712-3902-11d9-93dd-8f9f4afe08da\n"
81ee9410
UJ
791 "&23/11/2004 14:00-14:30 folded summary
792 Status: TENTATIVE
6dbaa1c7
UJ
793 Class: PRIVATE
794 UID: 04979712-3902-11d9-93dd-8f9f4afe08da\n"
81ee9410
UJ
795 "&11/23/2004 14:00-14:30 folded summary
796 Status: TENTATIVE
6dbaa1c7
UJ
797 Class: PRIVATE
798 UID: 04979712-3902-11d9-93dd-8f9f4afe08da\n")
4856384c
UJ
799
800 (icalendar-tests--test-import
7ec01532
GM
801 "UID
802 :6161a312-3902-11d9-b512-f764153bb28b
803SUMMARY
804 :another example
805STATUS
806 :TENTATIVE
807CLASS
808 :PRIVATE
809X-MOZILLA-ALARM-DEFAULT-LENGTH
810 :0
811DTSTART
812 :20041123T144500
813DTEND
814 :20041123T154500
815DTSTAMP
816 :20041118T013641Z
817"
81ee9410
UJ
818 "&2004/11/23 14:45-15:45 another example
819 Status: TENTATIVE
6dbaa1c7
UJ
820 Class: PRIVATE
821 UID: 6161a312-3902-11d9-b512-f764153bb28b\n"
81ee9410
UJ
822 "&23/11/2004 14:45-15:45 another example
823 Status: TENTATIVE
6dbaa1c7
UJ
824 Class: PRIVATE
825 UID: 6161a312-3902-11d9-b512-f764153bb28b\n"
81ee9410
UJ
826 "&11/23/2004 14:45-15:45 another example
827 Status: TENTATIVE
6dbaa1c7
UJ
828 Class: PRIVATE
829 UID: 6161a312-3902-11d9-b512-f764153bb28b\n"))
a4766629 830
4856384c
UJ
831(ert-deftest icalendar-import-rrule ()
832 (icalendar-tests--test-import
7ec01532
GM
833 "SUMMARY:rrule daily
834DTSTART;VALUE=DATE-TIME:20030919T090000
835DTEND;VALUE=DATE-TIME:20030919T113000
836RRULE:FREQ=DAILY;
837"
68575ab0
UJ
838 "&%%(and (diary-cyclic 1 2003 9 19)) 09:00-11:30 rrule daily\n"
839 "&%%(and (diary-cyclic 1 19 9 2003)) 09:00-11:30 rrule daily\n"
840 "&%%(and (diary-cyclic 1 9 19 2003)) 09:00-11:30 rrule daily\n")
7ec01532 841 ;; RRULE examples
4856384c 842 (icalendar-tests--test-import
7ec01532
GM
843 "SUMMARY:rrule daily
844DTSTART;VALUE=DATE-TIME:20030919T090000
845DTEND;VALUE=DATE-TIME:20030919T113000
846RRULE:FREQ=DAILY;INTERVAL=2
847"
68575ab0
UJ
848 "&%%(and (diary-cyclic 2 2003 9 19)) 09:00-11:30 rrule daily\n"
849 "&%%(and (diary-cyclic 2 19 9 2003)) 09:00-11:30 rrule daily\n"
850 "&%%(and (diary-cyclic 2 9 19 2003)) 09:00-11:30 rrule daily\n")
4856384c 851 (icalendar-tests--test-import
7ec01532
GM
852 "SUMMARY:rrule daily with exceptions
853DTSTART;VALUE=DATE-TIME:20030919T090000
854DTEND;VALUE=DATE-TIME:20030919T113000
855RRULE:FREQ=DAILY;INTERVAL=2
856EXDATE:20030921,20030925
857"
68575ab0
UJ
858 "&%%(and (not (diary-date 2003 9 25)) (not (diary-date 2003 9 21)) (diary-cyclic 2 2003 9 19)) 09:00-11:30 rrule daily with exceptions\n"
859 "&%%(and (not (diary-date 25 9 2003)) (not (diary-date 21 9 2003)) (diary-cyclic 2 19 9 2003)) 09:00-11:30 rrule daily with exceptions\n"
860 "&%%(and (not (diary-date 9 25 2003)) (not (diary-date 9 21 2003)) (diary-cyclic 2 9 19 2003)) 09:00-11:30 rrule daily with exceptions\n")
4856384c 861 (icalendar-tests--test-import
7ec01532
GM
862 "SUMMARY:rrule weekly
863DTSTART;VALUE=DATE-TIME:20030919T090000
864DTEND;VALUE=DATE-TIME:20030919T113000
865RRULE:FREQ=WEEKLY;
866"
68575ab0
UJ
867 "&%%(and (diary-cyclic 7 2003 9 19)) 09:00-11:30 rrule weekly\n"
868 "&%%(and (diary-cyclic 7 19 9 2003)) 09:00-11:30 rrule weekly\n"
869 "&%%(and (diary-cyclic 7 9 19 2003)) 09:00-11:30 rrule weekly\n")
4856384c 870 (icalendar-tests--test-import
7ec01532
GM
871 "SUMMARY:rrule monthly no end
872DTSTART;VALUE=DATE-TIME:20030919T090000
873DTEND;VALUE=DATE-TIME:20030919T113000
874RRULE:FREQ=MONTHLY;
875"
68575ab0
UJ
876 "&%%(and (diary-date t t 19) (diary-block 2003 9 19 9999 1 1)) 09:00-11:30 rrule monthly no end\n"
877 "&%%(and (diary-date 19 t t) (diary-block 19 9 2003 1 1 9999)) 09:00-11:30 rrule monthly no end\n"
878 "&%%(and (diary-date t 19 t) (diary-block 9 19 2003 1 1 9999)) 09:00-11:30 rrule monthly no end\n")
4856384c 879 (icalendar-tests--test-import
7ec01532
GM
880 "SUMMARY:rrule monthly with end
881DTSTART;VALUE=DATE-TIME:20030919T090000
882DTEND;VALUE=DATE-TIME:20030919T113000
883RRULE:FREQ=MONTHLY;UNTIL=20050819;
884"
68575ab0
UJ
885 "&%%(and (diary-date t t 19) (diary-block 2003 9 19 2005 8 19)) 09:00-11:30 rrule monthly with end\n"
886 "&%%(and (diary-date 19 t t) (diary-block 19 9 2003 19 8 2005)) 09:00-11:30 rrule monthly with end\n"
887 "&%%(and (diary-date t 19 t) (diary-block 9 19 2003 8 19 2005)) 09:00-11:30 rrule monthly with end\n")
4856384c 888 (icalendar-tests--test-import
7ec01532
GM
889 "DTSTART;VALUE=DATE:20040815
890DTEND;VALUE=DATE:20040816
891SUMMARY:Maria Himmelfahrt
7ec01532
GM
892RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=8
893"
68575ab0
UJ
894 "&%%(and (diary-anniversary 2004 8 15)) Maria Himmelfahrt\n"
895 "&%%(and (diary-anniversary 15 8 2004)) Maria Himmelfahrt\n"
896 "&%%(and (diary-anniversary 8 15 2004)) Maria Himmelfahrt\n")
4856384c 897 (icalendar-tests--test-import
7ec01532
GM
898 "SUMMARY:rrule yearly
899DTSTART;VALUE=DATE-TIME:20030919T090000
900DTEND;VALUE=DATE-TIME:20030919T113000
901RRULE:FREQ=YEARLY;INTERVAL=2
902"
68575ab0
UJ
903 "&%%(and (diary-anniversary 2003 9 19)) 09:00-11:30 rrule yearly\n" ;FIXME
904 "&%%(and (diary-anniversary 19 9 2003)) 09:00-11:30 rrule yearly\n" ;FIXME
905 "&%%(and (diary-anniversary 9 19 2003)) 09:00-11:30 rrule yearly\n") ;FIXME
4856384c 906 (icalendar-tests--test-import
7ec01532
GM
907 "SUMMARY:rrule count daily short
908DTSTART;VALUE=DATE-TIME:20030919T090000
909DTEND;VALUE=DATE-TIME:20030919T113000
910RRULE:FREQ=DAILY;COUNT=1;INTERVAL=1
911"
68575ab0
UJ
912 "&%%(and (diary-cyclic 1 2003 9 19) (diary-block 2003 9 19 2003 9 19)) 09:00-11:30 rrule count daily short\n"
913 "&%%(and (diary-cyclic 1 19 9 2003) (diary-block 19 9 2003 19 9 2003)) 09:00-11:30 rrule count daily short\n"
914 "&%%(and (diary-cyclic 1 9 19 2003) (diary-block 9 19 2003 9 19 2003)) 09:00-11:30 rrule count daily short\n")
4856384c 915 (icalendar-tests--test-import
7ec01532
GM
916 "SUMMARY:rrule count daily long
917DTSTART;VALUE=DATE-TIME:20030919T090000
918DTEND;VALUE=DATE-TIME:20030919T113000
919RRULE:FREQ=DAILY;COUNT=14;INTERVAL=1
920"
68575ab0
UJ
921 "&%%(and (diary-cyclic 1 2003 9 19) (diary-block 2003 9 19 2003 10 2)) 09:00-11:30 rrule count daily long\n"
922 "&%%(and (diary-cyclic 1 19 9 2003) (diary-block 19 9 2003 2 10 2003)) 09:00-11:30 rrule count daily long\n"
923 "&%%(and (diary-cyclic 1 9 19 2003) (diary-block 9 19 2003 10 2 2003)) 09:00-11:30 rrule count daily long\n")
4856384c 924 (icalendar-tests--test-import
7ec01532
GM
925 "SUMMARY:rrule count bi-weekly 3 times
926DTSTART;VALUE=DATE-TIME:20030919T090000
927DTEND;VALUE=DATE-TIME:20030919T113000
928RRULE:FREQ=WEEKLY;COUNT=3;INTERVAL=2
929"
68575ab0
UJ
930 "&%%(and (diary-cyclic 14 2003 9 19) (diary-block 2003 9 19 2003 10 31)) 09:00-11:30 rrule count bi-weekly 3 times\n"
931 "&%%(and (diary-cyclic 14 19 9 2003) (diary-block 19 9 2003 31 10 2003)) 09:00-11:30 rrule count bi-weekly 3 times\n"
932 "&%%(and (diary-cyclic 14 9 19 2003) (diary-block 9 19 2003 10 31 2003)) 09:00-11:30 rrule count bi-weekly 3 times\n")
4856384c 933 (icalendar-tests--test-import
7ec01532
GM
934 "SUMMARY:rrule count monthly
935DTSTART;VALUE=DATE-TIME:20030919T090000
936DTEND;VALUE=DATE-TIME:20030919T113000
937RRULE:FREQ=MONTHLY;INTERVAL=1;COUNT=5
938"
68575ab0
UJ
939 "&%%(and (diary-date t t 19) (diary-block 2003 9 19 2004 1 19)) 09:00-11:30 rrule count monthly\n"
940 "&%%(and (diary-date 19 t t) (diary-block 19 9 2003 19 1 2004)) 09:00-11:30 rrule count monthly\n"
941 "&%%(and (diary-date t 19 t) (diary-block 9 19 2003 1 19 2004)) 09:00-11:30 rrule count monthly\n")
4856384c 942 (icalendar-tests--test-import
7ec01532
GM
943 "SUMMARY:rrule count every second month
944DTSTART;VALUE=DATE-TIME:20030919T090000
945DTEND;VALUE=DATE-TIME:20030919T113000
946RRULE:FREQ=MONTHLY;INTERVAL=2;COUNT=5
947"
68575ab0
UJ
948 "&%%(and (diary-date t t 19) (diary-block 2003 9 19 2004 5 19)) 09:00-11:30 rrule count every second month\n" ;FIXME
949 "&%%(and (diary-date 19 t t) (diary-block 19 9 2003 19 5 2004)) 09:00-11:30 rrule count every second month\n" ;FIXME
950 "&%%(and (diary-date t 19 t) (diary-block 9 19 2003 5 19 2004)) 09:00-11:30 rrule count every second month\n") ;FIXME
4856384c 951 (icalendar-tests--test-import
7ec01532
GM
952 "SUMMARY:rrule count yearly
953DTSTART;VALUE=DATE-TIME:20030919T090000
954DTEND;VALUE=DATE-TIME:20030919T113000
955RRULE:FREQ=YEARLY;INTERVAL=1;COUNT=5
956"
68575ab0
UJ
957 "&%%(and (diary-date t 9 19) (diary-block 2003 9 19 2007 9 19)) 09:00-11:30 rrule count yearly\n"
958 "&%%(and (diary-date 19 9 t) (diary-block 19 9 2003 19 9 2007)) 09:00-11:30 rrule count yearly\n"
959 "&%%(and (diary-date 9 19 t) (diary-block 9 19 2003 9 19 2007)) 09:00-11:30 rrule count yearly\n")
4856384c 960 (icalendar-tests--test-import
7ec01532
GM
961 "SUMMARY:rrule count every second year
962DTSTART;VALUE=DATE-TIME:20030919T090000
963DTEND;VALUE=DATE-TIME:20030919T113000
964RRULE:FREQ=YEARLY;INTERVAL=2;COUNT=5
965"
68575ab0
UJ
966 "&%%(and (diary-date t 9 19) (diary-block 2003 9 19 2011 9 19)) 09:00-11:30 rrule count every second year\n" ;FIXME!!!
967 "&%%(and (diary-date 19 9 t) (diary-block 19 9 2003 19 9 2011)) 09:00-11:30 rrule count every second year\n" ;FIXME!!!
968 "&%%(and (diary-date 9 19 t) (diary-block 9 19 2003 9 19 2011)) 09:00-11:30 rrule count every second year\n") ;FIXME!!!
4856384c 969)
7ec01532 970
4856384c 971(ert-deftest icalendar-import-duration ()
7ec01532 972 ;; duration
4856384c 973 (icalendar-tests--test-import
7ec01532
GM
974 "DTSTART;VALUE=DATE:20050217
975SUMMARY:duration
976DURATION:P7D
977"
68575ab0
UJ
978 "&%%(and (diary-block 2005 2 17 2005 2 23)) duration\n"
979 "&%%(and (diary-block 17 2 2005 23 2 2005)) duration\n"
980 "&%%(and (diary-block 2 17 2005 2 23 2005)) duration\n")
4856384c 981 (icalendar-tests--test-import
7ec01532
GM
982 "UID:20041127T183329Z-18215-1001-4536-49109@andromeda
983DTSTAMP:20041127T183315Z
984LAST-MODIFIED:20041127T183329
985SUMMARY:Urlaub
986DTSTART;VALUE=DATE:20011221
987DTEND;VALUE=DATE:20011221
988RRULE:FREQ=DAILY;UNTIL=20011229;INTERVAL=1;WKST=SU
989CLASS:PUBLIC
990SEQUENCE:1
991CREATED:20041127T183329
992"
81ee9410 993 "&%%(and (diary-cyclic 1 2001 12 21) (diary-block 2001 12 21 2001 12 29)) Urlaub
6dbaa1c7
UJ
994 Class: PUBLIC
995 UID: 20041127T183329Z-18215-1001-4536-49109@andromeda\n"
81ee9410 996 "&%%(and (diary-cyclic 1 21 12 2001) (diary-block 21 12 2001 29 12 2001)) Urlaub
6dbaa1c7
UJ
997 Class: PUBLIC
998 UID: 20041127T183329Z-18215-1001-4536-49109@andromeda\n"
81ee9410 999 "&%%(and (diary-cyclic 1 12 21 2001) (diary-block 12 21 2001 12 29 2001)) Urlaub
6dbaa1c7
UJ
1000 Class: PUBLIC
1001 UID: 20041127T183329Z-18215-1001-4536-49109@andromeda\n"))
81ee9410 1002
4856384c 1003(ert-deftest icalendar-import-bug-6766 ()
81ee9410 1004 ;;bug#6766 -- multiple byday values in a weekly rrule
4856384c 1005 (icalendar-tests--test-import
81ee9410
UJ
1006"CLASS:PUBLIC
1007DTEND;TZID=America/New_York:20100421T120000
1008DTSTAMP:20100525T141214Z
1009DTSTART;TZID=America/New_York:20100421T113000
1010RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,WE,TH,FR
1011SEQUENCE:1
1012STATUS:CONFIRMED
1013SUMMARY:Scrum
1014TRANSP:OPAQUE
1015UID:8814e3f9-7482-408f-996c-3bfe486a1262
1016END:VEVENT
1017BEGIN:VEVENT
1018CLASS:PUBLIC
1019DTSTAMP:20100525T141214Z
1020DTSTART;VALUE=DATE:20100422
1021DTEND;VALUE=DATE:20100423
1022RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=TU,TH
1023SEQUENCE:1
1024SUMMARY:Tues + Thurs thinking
1025TRANSP:OPAQUE
1026UID:8814e3f9-7482-408f-996c-3bfe486a1263
1027"
1028"&%%(and (memq (calendar-day-of-week date) '(1 3 4 5)) (diary-cyclic 1 2010 4 21)) 11:30-12:00 Scrum
1029 Status: CONFIRMED
1030 Class: PUBLIC
6dbaa1c7 1031 UID: 8814e3f9-7482-408f-996c-3bfe486a1262
81ee9410 1032&%%(and (memq (calendar-day-of-week date) '(2 4)) (diary-cyclic 1 2010 4 22)) Tues + Thurs thinking
68575ab0 1033 Class: PUBLIC
6dbaa1c7 1034 UID: 8814e3f9-7482-408f-996c-3bfe486a1263
68575ab0 1035"
81ee9410
UJ
1036"&%%(and (memq (calendar-day-of-week date) '(1 3 4 5)) (diary-cyclic 1 21 4 2010)) 11:30-12:00 Scrum
1037 Status: CONFIRMED
1038 Class: PUBLIC
6dbaa1c7 1039 UID: 8814e3f9-7482-408f-996c-3bfe486a1262
81ee9410 1040&%%(and (memq (calendar-day-of-week date) '(2 4)) (diary-cyclic 1 22 4 2010)) Tues + Thurs thinking
68575ab0 1041 Class: PUBLIC
6dbaa1c7 1042 UID: 8814e3f9-7482-408f-996c-3bfe486a1263
68575ab0 1043"
81ee9410
UJ
1044"&%%(and (memq (calendar-day-of-week date) '(1 3 4 5)) (diary-cyclic 1 4 21 2010)) 11:30-12:00 Scrum
1045 Status: CONFIRMED
1046 Class: PUBLIC
6dbaa1c7 1047 UID: 8814e3f9-7482-408f-996c-3bfe486a1262
81ee9410 1048&%%(and (memq (calendar-day-of-week date) '(2 4)) (diary-cyclic 1 4 22 2010)) Tues + Thurs thinking
68575ab0 1049 Class: PUBLIC
6dbaa1c7 1050 UID: 8814e3f9-7482-408f-996c-3bfe486a1263
68575ab0 1051"))
4856384c 1052
68575ab0
UJ
1053(ert-deftest icalendar-import-multiple-vcalendars ()
1054 (icalendar-tests--test-import
1055 "DTSTART;VALUE=DATE:20110723
1056SUMMARY:event-1
1057"
1058 "&2011/7/23 event-1\n"
1059 "&23/7/2011 event-1\n"
1060 "&7/23/2011 event-1\n")
7877f373 1061
68575ab0
UJ
1062 (icalendar-tests--test-import
1063 "BEGIN:VCALENDAR
1064PRODID:-//Emacs//NONSGML icalendar.el//EN
1065VERSION:2.0\nBEGIN:VEVENT
1066DTSTART;VALUE=DATE:20110723
1067SUMMARY:event-1
1068END:VEVENT
1069END:VCALENDAR
1070BEGIN:VCALENDAR
1071PRODID:-//Emacs//NONSGML icalendar.el//EN
1072VERSION:2.0
1073BEGIN:VEVENT
1074DTSTART;VALUE=DATE:20110724
1075SUMMARY:event-2
1076END:VEVENT
1077END:VCALENDAR
1078BEGIN:VCALENDAR
1079PRODID:-//Emacs//NONSGML icalendar.el//EN
1080VERSION:2.0
1081BEGIN:VEVENT
1082DTSTART;VALUE=DATE:20110725
1083SUMMARY:event-3a
1084END:VEVENT
1085BEGIN:VEVENT
1086DTSTART;VALUE=DATE:20110725
1087SUMMARY:event-3b
1088END:VEVENT
1089END:VCALENDAR
1090"
1091 "&2011/7/23 event-1\n&2011/7/24 event-2\n&2011/7/25 event-3a\n&2011/7/25 event-3b\n"
1092 "&23/7/2011 event-1\n&24/7/2011 event-2\n&25/7/2011 event-3a\n&25/7/2011 event-3b\n"
1093 "&7/23/2011 event-1\n&7/24/2011 event-2\n&7/25/2011 event-3a\n&7/25/2011 event-3b\n"))
7ec01532 1094
6dbaa1c7
UJ
1095(ert-deftest icalendar-import-with-uid ()
1096 "Perform import test with uid."
1097 (icalendar-tests--test-import
1098 "UID:1234567890uid
1099SUMMARY:non-recurring
1100DTSTART;VALUE=DATE-TIME:20030919T090000
1101DTEND;VALUE=DATE-TIME:20030919T113000"
1102 "&2003/9/19 09:00-11:30 non-recurring\n UID: 1234567890uid\n"
1103 "&19/9/2003 09:00-11:30 non-recurring\n UID: 1234567890uid\n"
1104 "&9/19/2003 09:00-11:30 non-recurring\n UID: 1234567890uid\n"))
1105
ee574791
UJ
1106(ert-deftest icalendar-import-with-timezone ()
1107 ;; bug#11473
1108 (icalendar-tests--test-import
1109 "BEGIN:VCALENDAR
1110BEGIN:VTIMEZONE
1111TZID:fictional\, nonexistent\, arbitrary
1112BEGIN:STANDARD
1113DTSTART:20100101T000000
1114TZOFFSETFROM:+0200
1115TZOFFSETTO:-0200
1116RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=01
1117END:STANDARD
1118BEGIN:DAYLIGHT
1119DTSTART:20101201T000000
1120TZOFFSETFROM:-0200
1121TZOFFSETTO:+0200
1122RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11
1123END:DAYLIGHT
1124END:VTIMEZONE
1125BEGIN:VEVENT
1126SUMMARY:standardtime
1127DTSTART;TZID=\"fictional, nonexistent, arbitrary\":20120115T120000
1128DTEND;TZID=\"fictional, nonexistent, arbitrary\":20120115T123000
1129END:VEVENT
1130BEGIN:VEVENT
1131SUMMARY:daylightsavingtime
1132DTSTART;TZID=\"fictional, nonexistent, arbitrary\":20121215T120000
1133DTEND;TZID=\"fictional, nonexistent, arbitrary\":20121215T123000
1134END:VEVENT
1135END:VCALENDAR"
1136 ;; "standardtime" begins first sunday in january and is 4 hours behind CET
1137 ;; "daylightsavingtime" begins first sunday in november and is 1 hour before CET
1138 "&2012/1/15 15:00-15:30 standardtime
1139&2012/12/15 11:00-11:30 daylightsavingtime
1140"
1141 nil
1142 nil)
1143 )
7ec01532 1144;; ======================================================================
4856384c 1145;; Cycle
7ec01532 1146;; ======================================================================
4856384c
UJ
1147(defun icalendar-tests--test-cycle (input)
1148 "Perform cycle test.
1149Argument INPUT icalendar event string."
1150 (with-temp-buffer
1151 (if (string-match "^BEGIN:VCALENDAR" input)
1152 (insert input)
1153 (insert "BEGIN:VCALENDAR\nPRODID:-//Emacs//NONSGML icalendar.el//EN\n")
1154 (insert "VERSION:2.0\nBEGIN:VEVENT\n")
1155 (insert input)
1156 (unless (eq (char-before) ?\n)
1157 (insert "\n"))
1158 (insert "END:VEVENT\nEND:VCALENDAR\n"))
6dbaa1c7 1159 (let ((icalendar-import-format "%s%d%l%o%t%u%c%U")
4856384c
UJ
1160 (icalendar-import-format-summary "%s")
1161 (icalendar-import-format-location "\n Location: %s")
1162 (icalendar-import-format-description "\n Desc: %s")
1163 (icalendar-import-format-organizer "\n Organizer: %s")
1164 (icalendar-import-format-status "\n Status: %s")
1165 (icalendar-import-format-url "\n URL: %s")
6dbaa1c7
UJ
1166 (icalendar-import-format-class "\n Class: %s")
1167 (icalendar-import-format-class "\n UID: %s"))
4856384c
UJ
1168 (dolist (calendar-date-style '(iso european american))
1169 (icalendar-tests--do-test-cycle)))))
7ec01532 1170
4856384c
UJ
1171(defun icalendar-tests--do-test-cycle ()
1172 "Actually perform import/export cycle test."
1173 (let ((temp-diary (make-temp-file "icalendar-test-diary"))
1174 (temp-ics (make-temp-file "icalendar-test-ics"))
1175 (org-input (buffer-substring-no-properties (point-min) (point-max))))
7ec01532 1176
4856384c
UJ
1177 (unwind-protect
1178 (progn
1179 ;; step 1: import
1180 (icalendar-import-buffer temp-diary t t)
7877f373 1181
4856384c
UJ
1182 ;; step 2: export what was just imported
1183 (save-excursion
1184 (find-file temp-diary)
1185 (icalendar-export-region (point-min) (point-max) temp-ics))
1186
1187 ;; compare the output of step 2 with the input of step 1
1188 (save-excursion
1189 (find-file temp-ics)
1190 (goto-char (point-min))
6dbaa1c7
UJ
1191 ;;(when (re-search-forward "\nUID:.*\n" nil t)
1192 ;;(replace-match "\n"))
4856384c 1193 (let ((cycled (buffer-substring-no-properties (point-min) (point-max))))
68575ab0 1194 (should (string= org-input cycled)))))
4856384c
UJ
1195 ;; clean up
1196 (kill-buffer (find-buffer-visiting temp-diary))
1197 (save-excursion
1198 (set-buffer (find-buffer-visiting temp-ics))
1199 (set-buffer-modified-p nil)
1200 (kill-buffer (current-buffer)))
1201 (delete-file temp-diary)
1202 (delete-file temp-ics))))
1203
1204(ert-deftest icalendar-cycle ()
6dbaa1c7
UJ
1205 "Perform cycling tests.
1206Take care to avoid auto-generated UIDs here."
4856384c 1207 (icalendar-tests--test-cycle
6dbaa1c7
UJ
1208 "UID:dummyuid
1209DTSTART;VALUE=DATE-TIME:20030919T090000
4856384c
UJ
1210DTEND;VALUE=DATE-TIME:20030919T113000
1211SUMMARY:Cycletest
7ec01532 1212")
4856384c 1213 (icalendar-tests--test-cycle
6dbaa1c7
UJ
1214 "UID:blah
1215DTSTART;VALUE=DATE-TIME:20030919T090000
4856384c
UJ
1216DTEND;VALUE=DATE-TIME:20030919T113000
1217SUMMARY:Cycletest
1218DESCRIPTION:beschreibung!
1219LOCATION:nowhere
1220ORGANIZER:ulf
7ec01532 1221")
4856384c 1222 (icalendar-tests--test-cycle
6dbaa1c7
UJ
1223 "UID:4711
1224DTSTART;VALUE=DATE:19190909
4856384c
UJ
1225DTEND;VALUE=DATE:19190910
1226RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=09;BYMONTHDAY=09
1227SUMMARY:and diary-anniversary
1228"))
7ec01532
GM
1229
1230;; ======================================================================
1231;; Real world
1232;; ======================================================================
4856384c 1233(ert-deftest icalendar-real-world ()
7ec01532
GM
1234 "Perform real-world tests, as gathered from problem reports."
1235 ;; 2003-05-29
4856384c 1236 (icalendar-tests--test-import
7ec01532
GM
1237 "BEGIN:VCALENDAR
1238METHOD:REQUEST
1239PRODID:Microsoft CDO for Microsoft Exchange
1240VERSION:2.0
1241BEGIN:VTIMEZONE
1242TZID:Kolkata\, Chennai\, Mumbai\, New Delhi
1243X-MICROSOFT-CDO-TZID:23
1244BEGIN:STANDARD
1245DTSTART:16010101T000000
1246TZOFFSETFROM:+0530
1247TZOFFSETTO:+0530
1248END:STANDARD
1249BEGIN:DAYLIGHT
1250DTSTART:16010101T000000
1251TZOFFSETFROM:+0530
1252TZOFFSETTO:+0530
1253END:DAYLIGHT
1254END:VTIMEZONE
1255BEGIN:VEVENT
1256DTSTAMP:20030509T043439Z
1257DTSTART;TZID=\"Kolkata, Chennai, Mumbai, New Delhi\":20030509T103000
1258SUMMARY:On-Site Interview
1259UID:040000008200E00074C5B7101A82E0080000000080B6DE661216C301000000000000000
1260 010000000DB823520692542408ED02D7023F9DFF9
1261ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=\"Xxxxx
1262 xxx Xxxxxxxxxxxx\":MAILTO:xxxxxxxx@xxxxxxx.com
1263ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=\"Yyyyyyy Y
1264 yyyy\":MAILTO:yyyyyyy@yyyyyyy.com
1265ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=\"Zzzz Zzzz
1266 zz\":MAILTO:zzzzzz@zzzzzzz.com
1267ORGANIZER;CN=\"Aaaaaa Aaaaa\":MAILTO:aaaaaaa@aaaaaaa.com
1268LOCATION:Cccc
1269DTEND;TZID=\"Kolkata, Chennai, Mumbai, New Delhi\":20030509T153000
1270DESCRIPTION:10:30am - Blah
1271SEQUENCE:0
1272PRIORITY:5
1273CLASS:
1274CREATED:20030509T043439Z
1275LAST-MODIFIED:20030509T043459Z
1276STATUS:CONFIRMED
1277TRANSP:OPAQUE
1278X-MICROSOFT-CDO-BUSYSTATUS:BUSY
1279X-MICROSOFT-CDO-INSTTYPE:0
1280X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY
1281X-MICROSOFT-CDO-ALLDAYEVENT:FALSE
1282X-MICROSOFT-CDO-IMPORTANCE:1
1283X-MICROSOFT-CDO-OWNERAPPTID:126441427
1284BEGIN:VALARM
1285ACTION:DISPLAY
1286DESCRIPTION:REMINDER
1287TRIGGER;RELATED=START:-PT00H15M00S
1288END:VALARM
1289END:VEVENT
1290END:VCALENDAR"
a4766629 1291 nil
7ec01532
GM
1292 "&9/5/2003 10:30-15:30 On-Site Interview
1293 Desc: 10:30am - Blah
1294 Location: Cccc
81ee9410 1295 Organizer: MAILTO:aaaaaaa@aaaaaaa.com
68575ab0 1296 Status: CONFIRMED
6dbaa1c7 1297 UID: 040000008200E00074C5B7101A82E0080000000080B6DE661216C301000000000000000010000000DB823520692542408ED02D7023F9DFF9
68575ab0 1298"
7ec01532
GM
1299 "&5/9/2003 10:30-15:30 On-Site Interview
1300 Desc: 10:30am - Blah
1301 Location: Cccc
81ee9410 1302 Organizer: MAILTO:aaaaaaa@aaaaaaa.com
68575ab0 1303 Status: CONFIRMED
6dbaa1c7 1304 UID: 040000008200E00074C5B7101A82E0080000000080B6DE661216C301000000000000000010000000DB823520692542408ED02D7023F9DFF9
68575ab0 1305")
7ec01532
GM
1306
1307 ;; 2003-06-18 a
4856384c 1308 (icalendar-tests--test-import
7ec01532
GM
1309 "DTSTAMP:20030618T195512Z
1310DTSTART;TZID=\"Mountain Time (US & Canada)\":20030623T110000
1311SUMMARY:Dress Rehearsal for XXXX-XXXX
1312UID:040000008200E00074C5B7101A82E00800000000608AA7DA9835C301000000000000000
1313 0100000007C3A6D65EE726E40B7F3D69A23BD567E
1314ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=\"AAAAA,AAA
1315 AA (A-AAAAAAA,ex1)\":MAILTO:aaaaa_aaaaa@aaaaa.com
1316ORGANIZER;CN=\"ABCD,TECHTRAINING
1317 (A-Americas,exgen1)\":MAILTO:xxx@xxxxx.com
1318LOCATION:555 or TN 555-5555 ID 5555 & NochWas (see below)
1319DTEND;TZID=\"Mountain Time (US & Canada)\":20030623T120000
1320DESCRIPTION:753 Zeichen hier radiert
1321SEQUENCE:0
1322PRIORITY:5
1323CLASS:
1324CREATED:20030618T195518Z
1325LAST-MODIFIED:20030618T195527Z
1326STATUS:CONFIRMED
1327TRANSP:OPAQUE
1328X-MICROSOFT-CDO-BUSYSTATUS:BUSY
1329X-MICROSOFT-CDO-INSTTYPE:0
1330X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY
1331X-MICROSOFT-CDO-ALLDAYEVENT:FALSE
1332X-MICROSOFT-CDO-IMPORTANCE:1
1333X-MICROSOFT-CDO-OWNERAPPTID:1022519251
1334BEGIN:VALARM
1335ACTION:DISPLAY
1336DESCRIPTION:REMINDER
1337TRIGGER;RELATED=START:-PT00H15M00S
1338END:VALARM"
a4766629 1339 nil
7ec01532
GM
1340 "&23/6/2003 11:00-12:00 Dress Rehearsal for XXXX-XXXX
1341 Desc: 753 Zeichen hier radiert
1342 Location: 555 or TN 555-5555 ID 5555 & NochWas (see below)
81ee9410 1343 Organizer: MAILTO:xxx@xxxxx.com
68575ab0 1344 Status: CONFIRMED
6dbaa1c7 1345 UID: 040000008200E00074C5B7101A82E00800000000608AA7DA9835C3010000000000000000100000007C3A6D65EE726E40B7F3D69A23BD567E
68575ab0 1346"
7ec01532
GM
1347 "&6/23/2003 11:00-12:00 Dress Rehearsal for XXXX-XXXX
1348 Desc: 753 Zeichen hier radiert
1349 Location: 555 or TN 555-5555 ID 5555 & NochWas (see below)
81ee9410 1350 Organizer: MAILTO:xxx@xxxxx.com
68575ab0 1351 Status: CONFIRMED
6dbaa1c7 1352 UID: 040000008200E00074C5B7101A82E00800000000608AA7DA9835C3010000000000000000100000007C3A6D65EE726E40B7F3D69A23BD567E
68575ab0 1353")
7ec01532 1354 ;; 2003-06-18 b -- uses timezone
4856384c 1355 (icalendar-tests--test-import
7ec01532
GM
1356 "BEGIN:VCALENDAR
1357METHOD:REQUEST
1358PRODID:Microsoft CDO for Microsoft Exchange
1359VERSION:2.0
1360BEGIN:VTIMEZONE
1361TZID:Mountain Time (US & Canada)
1362X-MICROSOFT-CDO-TZID:12
1363BEGIN:STANDARD
1364DTSTART:16010101T020000
1365TZOFFSETFROM:-0600
1366TZOFFSETTO:-0700
1367RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=10;BYDAY=-1SU
1368END:STANDARD
1369BEGIN:DAYLIGHT
1370DTSTART:16010101T020000
1371TZOFFSETFROM:-0700
1372TZOFFSETTO:-0600
1373RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=4;BYDAY=1SU
1374END:DAYLIGHT
1375END:VTIMEZONE
1376BEGIN:VEVENT
1377DTSTAMP:20030618T230323Z
1378DTSTART;TZID=\"Mountain Time (US & Canada)\":20030623T090000
1379SUMMARY:Updated: Dress Rehearsal for ABC01-15
1380UID:040000008200E00074C5B7101A82E00800000000608AA7DA9835C301000000000000000
1381 0100000007C3A6D65EE726E40B7F3D69A23BD567E
1382ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;X-REPLYTIME=20030618T20
1383 0700Z;RSVP=TRUE;CN=\"AAAAA,AAAAAA
1384\(A-AAAAAAA,ex1)\":MAILTO:aaaaaa_aaaaa@aaaaa
1385 .com
1386ORGANIZER;CN=\"ABCD,TECHTRAINING
1387\(A-Americas,exgen1)\":MAILTO:bbb@bbbbb.com
1388LOCATION:123 or TN 123-1234 ID abcd & SonstWo (see below)
1389DTEND;TZID=\"Mountain Time (US & Canada)\":20030623T100000
81ee9410 1390DESCRIPTION:Viele Zeichen standen hier früher
7ec01532
GM
1391SEQUENCE:0
1392PRIORITY:5
1393CLASS:
1394CREATED:20030618T230326Z
1395LAST-MODIFIED:20030618T230335Z
1396STATUS:CONFIRMED
1397TRANSP:OPAQUE
1398X-MICROSOFT-CDO-BUSYSTATUS:BUSY
1399X-MICROSOFT-CDO-INSTTYPE:0
1400X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY
1401X-MICROSOFT-CDO-ALLDAYEVENT:FALSE
1402X-MICROSOFT-CDO-IMPORTANCE:1
1403X-MICROSOFT-CDO-OWNERAPPTID:1022519251
1404BEGIN:VALARM
1405ACTION:DISPLAY
1406DESCRIPTION:REMINDER
1407TRIGGER;RELATED=START:-PT00H15M00S
1408END:VALARM
1409END:VEVENT
1410END:VCALENDAR"
a4766629 1411 nil
7ec01532 1412 "&23/6/2003 17:00-18:00 Updated: Dress Rehearsal for ABC01-15
81ee9410 1413 Desc: Viele Zeichen standen hier früher
7ec01532
GM
1414 Location: 123 or TN 123-1234 ID abcd & SonstWo (see below)
1415 Organizer: MAILTO:bbb@bbbbb.com
68575ab0 1416 Status: CONFIRMED
6dbaa1c7 1417 UID: 040000008200E00074C5B7101A82E00800000000608AA7DA9835C3010000000000000000100000007C3A6D65EE726E40B7F3D69A23BD567E
68575ab0 1418"
7ec01532 1419 "&6/23/2003 17:00-18:00 Updated: Dress Rehearsal for ABC01-15
81ee9410 1420 Desc: Viele Zeichen standen hier früher
7ec01532
GM
1421 Location: 123 or TN 123-1234 ID abcd & SonstWo (see below)
1422 Organizer: MAILTO:bbb@bbbbb.com
68575ab0 1423 Status: CONFIRMED
6dbaa1c7 1424 UID: 040000008200E00074C5B7101A82E00800000000608AA7DA9835C3010000000000000000100000007C3A6D65EE726E40B7F3D69A23BD567E
68575ab0 1425")
7ec01532 1426 ;; export 2004-10-28 block entries
4856384c 1427 (icalendar-tests--test-export
a4766629 1428 nil
7ec01532
GM
1429 nil
1430 "-*- mode: text; fill-column: 256;-*-
1431
1432>>> block entries:
1433
1434%%(diary-block 11 8 2004 11 10 2004) Nov 8-10 aa
1435"
1436 "DTSTART;VALUE=DATE:20041108
1437DTEND;VALUE=DATE:20041111
1438SUMMARY:Nov 8-10 aa")
1439
4856384c 1440 (icalendar-tests--test-export
a4766629 1441 nil
7ec01532
GM
1442 nil
1443 "%%(diary-block 12 13 2004 12 17 2004) Dec 13-17 bb"
1444 "DTSTART;VALUE=DATE:20041213
1445DTEND;VALUE=DATE:20041218
1446SUMMARY:Dec 13-17 bb")
1447
4856384c 1448 (icalendar-tests--test-export
a4766629 1449 nil
7ec01532
GM
1450 nil
1451 "%%(diary-block 2 3 2005 2 4 2005) Feb 3-4 cc"
1452 "DTSTART;VALUE=DATE:20050203
1453DTEND;VALUE=DATE:20050205
1454SUMMARY:Feb 3-4 cc")
1455
4856384c 1456 (icalendar-tests--test-export
a4766629 1457 nil
7ec01532
GM
1458 nil
1459 "%%(diary-block 4 24 2005 4 29 2005) April 24-29 dd"
1460 "DTSTART;VALUE=DATE:20050424
1461DTEND;VALUE=DATE:20050430
1462SUMMARY:April 24-29 dd
1463")
4856384c 1464 (icalendar-tests--test-export
a4766629 1465 nil
7ec01532
GM
1466 nil
1467 "%%(diary-block 5 30 2005 6 1 2005) may 30 - June 1: ee"
1468 "DTSTART;VALUE=DATE:20050530
1469DTEND;VALUE=DATE:20050602
1470SUMMARY:may 30 - June 1: ee")
1471
4856384c 1472 (icalendar-tests--test-export
a4766629 1473 nil
7ec01532
GM
1474 nil
1475 "%%(diary-block 6 6 2005 6 8 2005) ff"
1476 "DTSTART;VALUE=DATE:20050606
1477DTEND;VALUE=DATE:20050609
1478SUMMARY:ff")
7877f373 1479
7ec01532 1480 ;; export 2004-10-28 anniversary entries
4856384c 1481 (icalendar-tests--test-export
a4766629 1482 nil
7ec01532
GM
1483 nil
1484 "
1485>>> anniversaries:
1486
1487%%(diary-anniversary 3 28 1991) aa birthday (%d years old)"
1488 "DTSTART;VALUE=DATE:19910328
1489DTEND;VALUE=DATE:19910329
1490RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=03;BYMONTHDAY=28
1491SUMMARY:aa birthday (%d years old)
1492")
1493
4856384c 1494 (icalendar-tests--test-export
a4766629 1495 nil
7ec01532
GM
1496 nil
1497 "%%(diary-anniversary 5 17 1957) bb birthday (%d years old)"
1498 "DTSTART;VALUE=DATE:19570517
1499DTEND;VALUE=DATE:19570518
1500RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=05;BYMONTHDAY=17
1501SUMMARY:bb birthday (%d years old)")
1502
4856384c 1503 (icalendar-tests--test-export
a4766629 1504 nil
7ec01532
GM
1505 nil
1506 "%%(diary-anniversary 6 8 1997) cc birthday (%d years old)"
1507 "DTSTART;VALUE=DATE:19970608
1508DTEND;VALUE=DATE:19970609
1509RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=06;BYMONTHDAY=08
1510SUMMARY:cc birthday (%d years old)")
1511
4856384c 1512 (icalendar-tests--test-export
a4766629 1513 nil
7ec01532
GM
1514 nil
1515 "%%(diary-anniversary 7 22 1983) dd (%d years ago...!)"
1516 "DTSTART;VALUE=DATE:19830722
1517DTEND;VALUE=DATE:19830723
1518RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=07;BYMONTHDAY=22
1519SUMMARY:dd (%d years ago...!)")
1520
4856384c 1521 (icalendar-tests--test-export
a4766629 1522 nil
7ec01532
GM
1523 nil
1524 "%%(diary-anniversary 8 1 1988) ee birthday (%d years old)"
1525 "DTSTART;VALUE=DATE:19880801
1526DTEND;VALUE=DATE:19880802
1527RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=08;BYMONTHDAY=01
1528SUMMARY:ee birthday (%d years old)")
1529
4856384c 1530 (icalendar-tests--test-export
a4766629 1531 nil
7ec01532
GM
1532 nil
1533 "%%(diary-anniversary 9 21 1957) ff birthday (%d years old)"
1534 "DTSTART;VALUE=DATE:19570921
1535DTEND;VALUE=DATE:19570922
1536RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=09;BYMONTHDAY=21
1537SUMMARY:ff birthday (%d years old)")
1538
1539
1540 ;; FIXME!
1541
1542 ;; export 2004-10-28 monthly, weekly entries
1543
4856384c 1544 ;; (icalendar-tests--test-export
7ec01532
GM
1545 ;; nil
1546 ;; "
1547 ;; >>> ------------ monthly:
1548
1549 ;; */27/* 10:00 blah blah"
1550 ;; "xxx")
1551
4856384c 1552 (icalendar-tests--test-export
a4766629 1553 nil
7ec01532
GM
1554 nil
1555 ">>> ------------ my week:
1556
1557Monday 13:00 MAC"
1558 "DTSTART;VALUE=DATE-TIME:20000103T130000
1559DTEND;VALUE=DATE-TIME:20000103T140000
1560RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO
1561SUMMARY:MAC")
1562
4856384c 1563 (icalendar-tests--test-export
a4766629 1564 nil
7ec01532
GM
1565 nil
1566 "Monday 15:00 a1"
1567 "DTSTART;VALUE=DATE-TIME:20000103T150000
1568DTEND;VALUE=DATE-TIME:20000103T160000
1569RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO
1570SUMMARY:a1")
1571
1572
4856384c 1573 (icalendar-tests--test-export
a4766629 1574 nil
7ec01532
GM
1575 nil
1576 "Monday 16:00-17:00 a2"
1577 "DTSTART;VALUE=DATE-TIME:20000103T160000
1578DTEND;VALUE=DATE-TIME:20000103T170000
1579RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO
1580SUMMARY:a2")
1581
4856384c 1582 (icalendar-tests--test-export
a4766629 1583 nil
7ec01532
GM
1584 nil
1585 "Tuesday 11:30-13:00 a3"
1586 "DTSTART;VALUE=DATE-TIME:20000104T113000
1587DTEND;VALUE=DATE-TIME:20000104T130000
1588RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=TU
1589SUMMARY:a3")
1590
4856384c 1591 (icalendar-tests--test-export
a4766629 1592 nil
7ec01532
GM
1593 nil
1594 "Tuesday 15:00 a4"
1595 "DTSTART;VALUE=DATE-TIME:20000104T150000
1596DTEND;VALUE=DATE-TIME:20000104T160000
1597RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=TU
1598SUMMARY:a4")
1599
4856384c 1600 (icalendar-tests--test-export
a4766629 1601 nil
7ec01532
GM
1602 nil
1603 "Wednesday 13:00 a5"
1604 "DTSTART;VALUE=DATE-TIME:20000105T130000
1605DTEND;VALUE=DATE-TIME:20000105T140000
1606RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=WE
1607SUMMARY:a5")
1608
4856384c 1609 (icalendar-tests--test-export
a4766629 1610 nil
7ec01532
GM
1611 nil
1612 "Wednesday 11:30-13:30 a6"
1613 "DTSTART;VALUE=DATE-TIME:20000105T113000
1614DTEND;VALUE=DATE-TIME:20000105T133000
1615RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=WE
1616SUMMARY:a6")
1617
4856384c 1618 (icalendar-tests--test-export
a4766629 1619 nil
7ec01532
GM
1620 nil
1621 "Wednesday 15:00 s1"
1622 "DTSTART;VALUE=DATE-TIME:20000105T150000
1623DTEND;VALUE=DATE-TIME:20000105T160000
1624RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=WE
1625SUMMARY:s1")
1626
1627
1628 ;; export 2004-10-28 regular entries
4856384c 1629 (icalendar-tests--test-export
a4766629 1630 nil
7ec01532
GM
1631 nil
1632 "
1633>>> regular diary entries:
1634
1635Oct 12 2004, 14:00 Tue: [2004-10-12] q1"
1636 "DTSTART;VALUE=DATE-TIME:20041012T140000
1637DTEND;VALUE=DATE-TIME:20041012T150000
1638SUMMARY:Tue: [2004-10-12] q1")
1639
1640 ;; 2004-11-19
4856384c 1641 (icalendar-tests--test-import
7ec01532
GM
1642 "BEGIN:VCALENDAR
1643VERSION
1644 :2.0
1645PRODID
1646 :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
1647BEGIN:VEVENT
7ec01532
GM
1648SUMMARY
1649 :Jjjjj & Wwwww
1650STATUS
1651 :TENTATIVE
1652CLASS
1653 :PRIVATE
1654X-MOZILLA-ALARM-DEFAULT-LENGTH
1655 :0
1656DTSTART
1657 :20041123T140000
1658DTEND
1659 :20041123T143000
1660DTSTAMP
1661 :20041118T013430Z
1662LAST-MODIFIED
1663 :20041118T013640Z
1664END:VEVENT
1665BEGIN:VEVENT
7ec01532
GM
1666SUMMARY
1667 :BB Aaaaaaaa Bbbbb
1668STATUS
1669 :TENTATIVE
1670CLASS
1671 :PRIVATE
1672X-MOZILLA-ALARM-DEFAULT-LENGTH
1673 :0
1674DTSTART
1675 :20041123T144500
1676DTEND
1677 :20041123T154500
1678DTSTAMP
1679 :20041118T013641Z
1680END:VEVENT
1681BEGIN:VEVENT
7ec01532
GM
1682SUMMARY
1683 :Hhhhhhhh
1684STATUS
1685 :TENTATIVE
1686CLASS
1687 :PRIVATE
1688X-MOZILLA-ALARM-DEFAULT-LENGTH
1689 :0
1690DTSTART
1691 :20041123T110000
1692DTEND
1693 :20041123T120000
1694DTSTAMP
1695 :20041118T013831Z
1696END:VEVENT
1697BEGIN:VEVENT
7ec01532
GM
1698SUMMARY
1699 :MMM Aaaaaaaaa
1700STATUS
1701 :TENTATIVE
1702CLASS
1703 :PRIVATE
1704X-MOZILLA-ALARM-DEFAULT-LENGTH
1705 :0
1706X-MOZILLA-RECUR-DEFAULT-INTERVAL
1707 :2
1708RRULE
1709 :FREQ=WEEKLY;INTERVAL=2;BYDAY=FR
1710DTSTART
1711 :20041112T140000
1712DTEND
1713 :20041112T183000
1714DTSTAMP
1715 :20041118T014117Z
1716END:VEVENT
1717BEGIN:VEVENT
7ec01532
GM
1718SUMMARY
1719 :Rrrr/Cccccc ii Aaaaaaaa
1720DESCRIPTION
1721 :Vvvvv Rrrr aaa Cccccc
1722STATUS
1723 :TENTATIVE
1724CLASS
1725 :PRIVATE
1726X-MOZILLA-ALARM-DEFAULT-LENGTH
1727 :0
1728DTSTART
1729 ;VALUE=DATE
1730 :20041119
1731DTEND
1732 ;VALUE=DATE
1733 :20041120
1734DTSTAMP
1735 :20041118T013107Z
1736LAST-MODIFIED
1737 :20041118T014203Z
1738END:VEVENT
1739BEGIN:VEVENT
7ec01532
GM
1740SUMMARY
1741 :Wwww aa hhhh
1742STATUS
1743 :TENTATIVE
1744CLASS
1745 :PRIVATE
1746X-MOZILLA-ALARM-DEFAULT-LENGTH
1747 :0
1748RRULE
1749 :FREQ=WEEKLY;INTERVAL=1;BYDAY=MO
1750DTSTART
1751 ;VALUE=DATE
1752 :20041101
1753DTEND
1754 ;VALUE=DATE
1755 :20041102
1756DTSTAMP
1757 :20041118T014045Z
1758LAST-MODIFIED
1759 :20041118T023846Z
1760END:VEVENT
1761END:VCALENDAR
1762"
a4766629 1763 nil
7ec01532
GM
1764 "&23/11/2004 14:00-14:30 Jjjjj & Wwwww
1765 Status: TENTATIVE
6fe539d2 1766 Class: PRIVATE
7ec01532
GM
1767&23/11/2004 14:45-15:45 BB Aaaaaaaa Bbbbb
1768 Status: TENTATIVE
6fe539d2 1769 Class: PRIVATE
7ec01532
GM
1770&23/11/2004 11:00-12:00 Hhhhhhhh
1771 Status: TENTATIVE
6fe539d2 1772 Class: PRIVATE
7ec01532
GM
1773&%%(and (diary-cyclic 14 12 11 2004)) 14:00-18:30 MMM Aaaaaaaaa
1774 Status: TENTATIVE
6fe539d2 1775 Class: PRIVATE
7ec01532
GM
1776&%%(and (diary-block 19 11 2004 19 11 2004)) Rrrr/Cccccc ii Aaaaaaaa
1777 Desc: Vvvvv Rrrr aaa Cccccc
1778 Status: TENTATIVE
6fe539d2 1779 Class: PRIVATE
7ec01532
GM
1780&%%(and (diary-cyclic 7 1 11 2004)) Wwww aa hhhh
1781 Status: TENTATIVE
68575ab0
UJ
1782 Class: PRIVATE
1783"
7ec01532
GM
1784 "&11/23/2004 14:00-14:30 Jjjjj & Wwwww
1785 Status: TENTATIVE
6fe539d2 1786 Class: PRIVATE
7ec01532
GM
1787&11/23/2004 14:45-15:45 BB Aaaaaaaa Bbbbb
1788 Status: TENTATIVE
6fe539d2 1789 Class: PRIVATE
7ec01532
GM
1790&11/23/2004 11:00-12:00 Hhhhhhhh
1791 Status: TENTATIVE
6fe539d2 1792 Class: PRIVATE
7ec01532
GM
1793&%%(and (diary-cyclic 14 11 12 2004)) 14:00-18:30 MMM Aaaaaaaaa
1794 Status: TENTATIVE
6fe539d2 1795 Class: PRIVATE
7ec01532
GM
1796&%%(and (diary-block 11 19 2004 11 19 2004)) Rrrr/Cccccc ii Aaaaaaaa
1797 Desc: Vvvvv Rrrr aaa Cccccc
1798 Status: TENTATIVE
6fe539d2 1799 Class: PRIVATE
7ec01532
GM
1800&%%(and (diary-cyclic 7 11 1 2004)) Wwww aa hhhh
1801 Status: TENTATIVE
68575ab0
UJ
1802 Class: PRIVATE
1803")
7ec01532
GM
1804
1805 ;; 2004-09-09 pg
4856384c 1806 (icalendar-tests--test-export
7ec01532
GM
1807 "%%(diary-block 1 1 2004 4 1 2004) Urlaub"
1808 nil
a4766629 1809 nil
7ec01532
GM
1810 "DTSTART;VALUE=DATE:20040101
1811DTEND;VALUE=DATE:20040105
1812SUMMARY:Urlaub")
1813
1814 ;; 2004-10-25 pg
4856384c 1815 (icalendar-tests--test-export
a4766629 1816 nil
7ec01532
GM
1817 "5 11 2004 Bla Fasel"
1818 nil
1819 "DTSTART;VALUE=DATE:20041105
1820DTEND;VALUE=DATE:20041106
1821SUMMARY:Bla Fasel")
1822
1823 ;; 2004-10-30 pg
4856384c 1824 (icalendar-tests--test-export
a4766629 1825 nil
7ec01532
GM
1826 "2 Nov 2004 15:00-16:30 Zahnarzt"
1827 nil
1828 "DTSTART;VALUE=DATE-TIME:20041102T150000
1829DTEND;VALUE=DATE-TIME:20041102T163000
1830SUMMARY:Zahnarzt")
1831
1832 ;; 2005-02-07 lt
4856384c 1833 (icalendar-tests--test-import
7ec01532
GM
1834 "UID
1835 :b60d398e-1dd1-11b2-a159-cf8cb05139f4
1836SUMMARY
1837 :Waitangi Day
1838DESCRIPTION
1839 :abcdef
1840CATEGORIES
1841 :Public Holiday
1842STATUS
1843 :CONFIRMED
1844CLASS
1845 :PRIVATE
1846DTSTART
1847 ;VALUE=DATE
1848 :20050206
1849DTEND
1850 ;VALUE=DATE
1851 :20050207
1852DTSTAMP
1853 :20050128T011209Z"
a4766629 1854 nil
7ec01532 1855 "&%%(and (diary-block 6 2 2005 6 2 2005)) Waitangi Day
81ee9410
UJ
1856 Desc: abcdef
1857 Status: CONFIRMED
68575ab0 1858 Class: PRIVATE
6dbaa1c7 1859 UID: b60d398e-1dd1-11b2-a159-cf8cb05139f4
68575ab0 1860"
7ec01532 1861 "&%%(and (diary-block 2 6 2005 2 6 2005)) Waitangi Day
81ee9410
UJ
1862 Desc: abcdef
1863 Status: CONFIRMED
68575ab0 1864 Class: PRIVATE
6dbaa1c7 1865 UID: b60d398e-1dd1-11b2-a159-cf8cb05139f4
68575ab0 1866")
7ec01532
GM
1867
1868 ;; 2005-03-01 lt
4856384c 1869 (icalendar-tests--test-import
7ec01532
GM
1870 "DTSTART;VALUE=DATE:20050217
1871SUMMARY:Hhhhhh Aaaaa ii Aaaaaaaa
1872UID:6AFA7558-6994-11D9-8A3A-000A95A0E830-RID
1873DTSTAMP:20050118T210335Z
1874DURATION:P7D"
a4766629 1875 nil
6dbaa1c7
UJ
1876 "&%%(and (diary-block 17 2 2005 23 2 2005)) Hhhhhh Aaaaa ii Aaaaaaaa
1877 UID: 6AFA7558-6994-11D9-8A3A-000A95A0E830-RID\n"
1878 "&%%(and (diary-block 2 17 2005 2 23 2005)) Hhhhhh Aaaaa ii Aaaaaaaa
1879 UID: 6AFA7558-6994-11D9-8A3A-000A95A0E830-RID\n")
7ec01532
GM
1880
1881 ;; 2005-03-23 lt
4856384c 1882 (icalendar-tests--test-export
a4766629 1883 nil
7ec01532
GM
1884 "&%%(diary-cyclic 7 8 2 2005) 16:00-16:45 [WORK] Pppp"
1885 nil
1886 "DTSTART;VALUE=DATE-TIME:20050208T160000
1887DTEND;VALUE=DATE-TIME:20050208T164500
1888RRULE:FREQ=DAILY;INTERVAL=7
1889SUMMARY:[WORK] Pppp
1890")
1891
1892 ;; 2005-05-27 eu
4856384c 1893 (icalendar-tests--test-export
a4766629 1894 nil
7ec01532
GM
1895 nil
1896 ;; FIXME: colon not allowed!
1897 ;;"Nov 1: NNN Wwwwwwww Wwwww - Aaaaaa Pppppppp rrrrrr ddd oo Nnnnnnnn 30"
1898 "Nov 1 NNN Wwwwwwww Wwwww - Aaaaaa Pppppppp rrrrrr ddd oo Nnnnnnnn 30"
1899 "DTSTART;VALUE=DATE:19001101
1900DTEND;VALUE=DATE:19001102
1901RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=11;BYMONTHDAY=1
1902SUMMARY:NNN Wwwwwwww Wwwww - Aaaaaa Pppppppp rrrrrr ddd oo Nnnnnnnn 30
1903")
ee574791
UJ
1904
1905 ;; bug#11473
1906 (icalendar-tests--test-import
1907 "BEGIN:VCALENDAR
1908METHOD:REQUEST
1909PRODID:Microsoft Exchange Server 2007
1910VERSION:2.0
1911BEGIN:VTIMEZONE
1912TZID:(UTC+01:00) Amsterdam\, Berlin\, Bern\, Rome\, Stockholm\, Vienna
1913BEGIN:STANDARD
1914DTSTART:16010101T030000
1915TZOFFSETFROM:+0200
1916TZOFFSETTO:+0100
1917RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10
1918END:STANDARD
1919BEGIN:DAYLIGHT
1920DTSTART:16010101T020000
1921TZOFFSETFROM:+0100
1922TZOFFSETTO:+0200
1923RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=3
1924END:DAYLIGHT
1925END:VTIMEZONE
1926BEGIN:VEVENT
1927ORGANIZER;CN=\"A. Luser\":MAILTO:a.luser@foo.com
1928ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=\"Luser, Oth
1929 er\":MAILTO:other.luser@foo.com
1930DESCRIPTION;LANGUAGE=en-US:\nWhassup?\n\n
1931SUMMARY;LANGUAGE=en-US:Query
1932DTSTART;TZID=\"(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna\"
1933 :20120515T150000
1934DTEND;TZID=\"(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna\":2
1935 0120515T153000
1936UID:040000008200E00074C5B7101A82E0080000000020FFAED0CFEFCC01000000000000000
1937 010000000575268034ECDB649A15349B1BF240F15
1938RECURRENCE-ID;TZID=\"(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, V
1939 ienna\":20120515T170000
1940CLASS:PUBLIC
1941PRIORITY:5
1942DTSTAMP:20120514T153645Z
1943TRANSP:OPAQUE
1944STATUS:CONFIRMED
1945SEQUENCE:15
1946LOCATION;LANGUAGE=en-US:phone
1947X-MICROSOFT-CDO-APPT-SEQUENCE:15
1948X-MICROSOFT-CDO-OWNERAPPTID:1907632092
1949X-MICROSOFT-CDO-BUSYSTATUS:TENTATIVE
1950X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY
1951X-MICROSOFT-CDO-ALLDAYEVENT:FALSE
1952X-MICROSOFT-CDO-IMPORTANCE:1
1953X-MICROSOFT-CDO-INSTTYPE:3
1954BEGIN:VALARM
1955ACTION:DISPLAY
1956DESCRIPTION:REMINDER
1957TRIGGER;RELATED=START:-PT15M
1958END:VALARM
1959END:VEVENT
1960END:VCALENDAR"
1961 nil
1962 "&15/5/2012 15:00-15:30 Query
1963 Location: phone
1964 Organizer: MAILTO:a.luser@foo.com
1965 Status: CONFIRMED
1966 Class: PUBLIC
1967 UID: 040000008200E00074C5B7101A82E0080000000020FFAED0CFEFCC01000000000000000010000000575268034ECDB649A15349B1BF240F15
1968" nil)
1969)
7ec01532 1970
4856384c
UJ
1971(provide 'icalendar-tests)
1972;;; icalendar-tests.el ends here