* s/cygwin.h: Avoid linking against static libgcc.
[bpt/emacs.git] / test / icalendar-testsuite.el
index 17340ad..012f586 100644 (file)
@@ -1,6 +1,6 @@
 ;; icalendar-testsuite.el --- Test suite for icalendar.el
 
-;; Copyright (C) 2005, 2008  Free Software Foundation, Inc.
+;; Copyright (C) 2005, 2008, 2009, 2010  Free Software Foundation, Inc.
 
 ;; Author:         Ulf Jasper <ulf.jasper@web.de>
 ;; Created:        March 2005
@@ -27,6 +27,8 @@
 ;; TODO:
 ;; - Add more unit tests for functions, timezone etc.
 
+;; Note: Watch the trailing blank that is added on import.
+
 ;;; Code:
 (defun icalendar-testsuite-run ()
   "Run icalendar test suite."
   (icalendar-testsuite--test-parse-summary-and-rest)
   (icalendar-testsuite--test-format-ical-event)
   (icalendar-testsuite--test-import-format-sample)
-  (icalendar-testsuite--test-first-weekday-of-year))
+  (icalendar-testsuite--test-first-weekday-of-year)
+  (icalendar-testsuite--test-datestring-to-isodate)
+  (icalendar-testsuite--test-datetime-to-diary-date)
+  (icalendar-testsuite--test-diarytime-to-isotime)
+  (icalendar-testsuite--test-convert-ordinary-to-ical)
+  (icalendar-testsuite--test-convert-weekly-to-ical)
+  (icalendar-testsuite--test-convert-yearly-to-ical)
+  (icalendar-testsuite--test-convert-block-to-ical)
+  (icalendar-testsuite--test-convert-cyclic-to-ical)
+  (icalendar-testsuite--test-convert-anniversary-to-ical)
+  (icalendar-testsuite--test-calendar-style)
+  (icalendar-testsuite--test-create-uid)
+  (icalendar-testsuite--test-parse-vtimezone))
 
 (defun icalendar-testsuite--test-format-ical-event ()
-  "Test icalendar--format-ical-event"
+  "Test `icalendar--format-ical-event'."
   (let ((icalendar-import-format "%s%d%l%o%t%u%c")
         (icalendar-import-format-summary "SUM %s")
         (icalendar-import-format-location " LOC %s")
@@ -58,7 +72,6 @@
         (icalendar-import-format-status " STA %s")
         (icalendar-import-format-url " URL %s")
         (icalendar-import-format-class " CLA %s")
-        (was-european-calendar european-calendar-style)
         (event (icalendar-testsuite--get-ical-event "BEGIN:VEVENT
 DTSTAMP:20030509T043439Z
 DTSTART:20030509T103000
@@ -89,7 +102,7 @@ END:VEVENT
                      "-sum-des-loc-org-nil-nil-nil-") t)))
 
 (defun icalendar-testsuite--test-parse-summary-and-rest ()
-  "Test icalendar--parse-summary-and-rest."
+  "Test `icalendar--parse-summary-and-rest'."
   (let ((icalendar-import-format "%s%d%l%o%t%u%c")
         (icalendar-import-format-summary "SUM %s")
         (icalendar-import-format-location " LOC %s")
@@ -98,14 +111,12 @@ END:VEVENT
         (icalendar-import-format-status " STA %s")
         (icalendar-import-format-url " URL %s")
         (icalendar-import-format-class " CLA %s")
-        (was-european-calendar european-calendar-style)
         (result))
-    ;; FIXME: need a trailing blank char!
-    (setq result (icalendar--parse-summary-and-rest "SUM sum ORG org "))
+    (setq result (icalendar--parse-summary-and-rest "SUM sum ORG org"))
     (assert (string= (cdr (assoc 'org result)) "org"))
 
     (setq result (icalendar--parse-summary-and-rest
-                  "SUM sum DES des LOC loc ORG org STA sta URL url CLA cla "))
+                  "SUM sum DES des LOC loc ORG org STA sta URL url CLA cla"))
     (assert (string= (cdr (assoc 'des result)) "des"))
     (assert (string= (cdr (assoc 'loc result)) "loc"))
     (assert (string= (cdr (assoc 'org result)) "org"))
@@ -119,7 +130,8 @@ END:VEVENT
     ))
 
 (defun icalendar-testsuite--get-ical-event (ical-string)
-  "Helper function for testing `icalendar-testsuite--test-format-ical-event'."
+  "Helper function for testing `icalendar-testsuite--test-format-ical-event'.
+Return icalendar event for ICAL-STRING."
   (save-excursion
     (with-temp-buffer
       (insert ical-string)
@@ -143,6 +155,7 @@ END:VEVENT
                            "ORGANIZER=`d' STATUS=`' URL=`' CLASS=`'"))))
 
 (defun icalendar-testsuite--test-first-weekday-of-year ()
+  "Test method for `icalendar-first-weekday-of-year'."
   (assert (eq 1 (icalendar-first-weekday-of-year "TU" 2008)))
   (assert (eq 3 (icalendar-first-weekday-of-year "WE" 2007)))
   (assert (eq 5 (icalendar-first-weekday-of-year "TH" 2006)))
@@ -153,20 +166,295 @@ END:VEVENT
   (assert (eq 3 (icalendar-first-weekday-of-year "MO" 2000)))
   (assert (eq 1 (icalendar-first-weekday-of-year "TH" 1970))))
 
+(defun icalendar-testsuite--test-datestring-to-isodate ()
+  "Test method for `icalendar--datestring-to-isodate'."
+  (let ((calendar-date-style 'iso))
+    ;; numeric iso
+    (assert (string= (icalendar--datestring-to-isodate "2008 05 11")
+                     "20080511"))
+    (assert (string= (icalendar--datestring-to-isodate "2008 05 31")
+                     "20080531"))
+    (assert (string= (icalendar--datestring-to-isodate "2008 05 31" 2)
+                     "20080602"))
+
+    ;; numeric european
+    (setq calendar-date-style 'european)
+    (assert (string= (icalendar--datestring-to-isodate "11 05 2008")
+                     "20080511"))
+    (assert (string= (icalendar--datestring-to-isodate "31 05 2008")
+                     "20080531"))
+    (assert (string= (icalendar--datestring-to-isodate "31 05 2008" 2)
+                     "20080602"))
+
+    ;; numeric american
+    (setq calendar-date-style 'american)
+    (assert (string= (icalendar--datestring-to-isodate "11 05 2008")
+                     "20081105"))
+    (assert (string= (icalendar--datestring-to-isodate "12 30 2008")
+                     "20081230"))
+    (assert (string= (icalendar--datestring-to-isodate "12 30 2008" 2)
+                     "20090101"))
+
+    ;; non-numeric
+    (setq calendar-date-style nil)      ;not necessary for conversion
+    (assert (string= (icalendar--datestring-to-isodate "Nov 05 2008")
+                     "20081105"))
+    (assert (string= (icalendar--datestring-to-isodate "05 Nov 2008")
+                     "20081105"))
+    (assert (string= (icalendar--datestring-to-isodate "2008 Nov 05")
+                     "20081105"))))
+
+(defun icalendar-testsuite--test-datetime-to-diary-date ()
+  "Test method for `icalendar--datetime-to-diary-date'."
+  (let* ((datetime '(59 59 23 31 12 2008))
+         (calendar-date-style 'iso))
+    (assert (string= (icalendar--datetime-to-diary-date datetime)
+                     "2008 12 31"))
+    (setq calendar-date-style 'european)
+    (assert (string= (icalendar--datetime-to-diary-date datetime)
+                     "31 12 2008"))
+    (setq calendar-date-style 'american)
+    (assert (string= (icalendar--datetime-to-diary-date datetime)
+                     "12 31 2008"))))
+
+(defun icalendar-testsuite--test-diarytime-to-isotime ()
+  "Test method for `icalendar--diarytime-to-isotime'."
+  (assert (string= (icalendar--diarytime-to-isotime "01:15" "")
+                   "T011500"))
+  (assert (string= (icalendar--diarytime-to-isotime "1:15" "")
+                   "T011500"))
+  (assert (string= (icalendar--diarytime-to-isotime "0:01" "")
+                   "T000100"))
+  (assert (string= (icalendar--diarytime-to-isotime "0100" "")
+                   "T010000"))
+  (assert (string= (icalendar--diarytime-to-isotime "0100" "am")
+                   "T010000"))
+  (assert (string= (icalendar--diarytime-to-isotime "0100" "pm")
+                   "T130000"))
+  (assert (string= (icalendar--diarytime-to-isotime "1200" "")
+                   "T120000"))
+  (assert (string= (icalendar--diarytime-to-isotime "17:17" "")
+                   "T171700"))
+  (assert (string= (icalendar--diarytime-to-isotime "1200" "am")
+                   "T000000"))
+  (assert (string= (icalendar--diarytime-to-isotime "1201" "am")
+                   "T000100"))
+  (assert (string= (icalendar--diarytime-to-isotime "1259" "am")
+                   "T005900"))
+  (assert (string= (icalendar--diarytime-to-isotime "1200" "pm")
+                   "T120000"))
+  (assert (string= (icalendar--diarytime-to-isotime "1201" "pm")
+                   "T120100"))
+  (assert (string= (icalendar--diarytime-to-isotime "1259" "pm")
+                   "T125900")))
+
+(defun icalendar-testsuite--test-convert-ordinary-to-ical ()
+  "Test method for `icalendar--convert-ordinary-to-ical'."
+  (let* ((calendar-date-style 'iso)
+         result)
+    ;; without time
+    (setq result (icalendar--convert-ordinary-to-ical "&?" "2010 2 15 subject"))
+    (assert (= 2 (length result)))
+    (assert (string=  "\nDTSTART;VALUE=DATE:20100215\nDTEND;VALUE=DATE:20100216"
+                      (car result)))
+    (assert (string= "subject" (cadr result)))
+  
+    ;; with time
+    (setq result (icalendar--convert-ordinary-to-ical 
+                  "&?" "&2010 2 15 12:34-23:45 s"))
+    (assert (= 2 (length result)))
+    (assert (string=  (concat "\nDTSTART;VALUE=DATE-TIME:20100215T123400"
+                              "\nDTEND;VALUE=DATE-TIME:20100215T234500")
+                      (car result)))
+    (assert (string= "s" (cadr result)))
+
+    ;; with time, again -- test bug#5549
+    (setq result (icalendar--convert-ordinary-to-ical 
+                  "x?" "x2010 2 15 0:34-1:45 s"))
+    (assert (= 2 (length result)))
+    (assert (string=  (concat "\nDTSTART;VALUE=DATE-TIME:20100215T003400"
+                              "\nDTEND;VALUE=DATE-TIME:20100215T014500")
+                      (car result)))
+    (assert (string= "s" (cadr result)))))
+
+(defun icalendar-testsuite--test-convert-weekly-to-ical ()
+  "Test method for `icalendar--convert-weekly-to-ical'."
+  (let* ((calendar-date-style 'iso)
+         result
+         (calendar-day-name-array
+          ["Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday"
+           "Saturday"]))
+    (setq result (icalendar--convert-weekly-to-ical "" "Monday 8:30 subject"))
+    (assert (= 2 (length result)))
+    (assert (string= (concat "\nDTSTART;VALUE=DATE-TIME:20050103T083000"
+                             "\nDTEND;VALUE=DATE-TIME:20050103T093000"
+                             "\nRRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO")
+                     (car result)))
+    (assert (string= "subject" (cadr result)))))
+
+(defun icalendar-testsuite--test-convert-yearly-to-ical ()
+  "Test method for `icalendar--convert-yearly-to-ical'."
+  (let* ((calendar-date-style 'iso)
+         result
+         (calendar-month-name-array
+          ["January" "February" "March" "April" "May" "June" "July" "August"
+           "September" "October" "November" "December"]))
+    (setq result (icalendar--convert-yearly-to-ical "" "May 1 Tag der Arbeit"))
+    (assert (= 2 (length result)))
+    (assert (string= (concat
+                      "\nDTSTART;VALUE=DATE:19000501"
+                      "\nDTEND;VALUE=DATE:19000502"
+                      "\nRRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=5;BYMONTHDAY=1")
+                     (car result)))
+    (assert (string= "Tag der Arbeit" (cadr result)))))
+
+(defun icalendar-testsuite--test-convert-block-to-ical ()
+  "Test method for `icalendar--convert-block-to-ical'."
+  (let* ((calendar-date-style 'iso)
+         result)
+    (setq result (icalendar--convert-block-to-ical 
+                  "" "%%(diary-block 2004 7 19 2004 8 27) Sommerferien"))
+    (assert (= 2 (length result)))
+    (assert (string= (concat
+                      "\nDTSTART;VALUE=DATE:20040719"
+                      "\nDTEND;VALUE=DATE:20040828")
+                     (car result)))
+    (assert (string= "Sommerferien" (cadr result)))))
+
+(defun icalendar-testsuite--test-convert-cyclic-to-ical ()
+  "Test method for `icalendar--convert-cyclic-to-ical'."
+  (let* ((calendar-date-style 'iso)
+         result)
+    (setq result (icalendar--convert-block-to-ical 
+                  "" "%%(diary-block 2004 7 19 2004 8 27) Sommerferien"))
+    (assert (= 2 (length result)))
+    (assert (string= (concat
+                      "\nDTSTART;VALUE=DATE:20040719"
+                      "\nDTEND;VALUE=DATE:20040828")
+                     (car result)))
+    (assert (string= "Sommerferien" (cadr result)))))
+
+(defun icalendar-testsuite--test-convert-anniversary-to-ical ()
+  "Test method for `icalendar--convert-anniversary-to-ical'."
+  (let* ((calendar-date-style 'iso)
+         result)
+    (setq result (icalendar--convert-anniversary-to-ical 
+                  "" "%%(diary-anniversary 1964 6 30) g"))
+    (assert (= 2 (length result)))
+    (assert (string= (concat
+                      "\nDTSTART;VALUE=DATE:19640630"
+                      "\nDTEND;VALUE=DATE:19640701"
+                      "\nRRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=06;BYMONTHDAY=30")
+                     (car result)))
+    (assert (string= "g" (cadr result)))))
+
+(defun icalendar-testsuite--test-calendar-style ()
+  "Test method for `icalendar--date-style'."
+  (dolist (calendar-date-style '(iso american european))
+    (assert (eq (icalendar--date-style) calendar-date-style)))
+  (let ((cds calendar-date-style)
+        (european-calendar-style t))
+    (makunbound 'calendar-date-style)
+    (assert (eq (icalendar--date-style) 'european))
+    (with-no-warnings (setq european-calendar-style nil)) ;still get warning!?! FIXME
+    (assert (eq (icalendar--date-style) 'american))
+    (setq calendar-date-style cds)))
+
+(defun icalendar-testsuite--test-create-uid ()
+  "Test method for `icalendar--create-uid'."
+  (let* ((icalendar-uid-format "xxx-%t-%c-%h-%u-%s")
+         t-ct
+         (icalendar--uid-count 77)
+         (entry-full "30.06.1964 07:01 blahblah")
+         (hash (format "%d" (abs (sxhash entry-full))))
+         (contents "DTSTART:19640630T070100\nblahblah")
+         (username (or user-login-name "UNKNOWN_USER"))
+         )
+    ;; FIXME! If a test fails 'current-time is screwed. FIXME!
+    (fset 't-ct (symbol-function 'current-time))
+    (fset 'current-time (lambda () '(1 2 3)))
+    (assert (= 77 icalendar--uid-count))
+    (assert (string=  (concat "xxx-123-77-" hash "-" username "-19640630")
+                      (icalendar--create-uid entry-full contents)))
+    (assert (= 78 icalendar--uid-count))
+    (fset 'current-time (symbol-function 't-ct))
+
+    (setq contents "blahblah")
+    (setq icalendar-uid-format "yyy%syyy")
+    (assert (string=  (concat "yyyDTSTARTyyy")
+                      (icalendar--create-uid entry-full contents)))
+    ))
+
+(defun icalendar-testsuite--test-parse-vtimezone ()
+  (let (vtimezone result)
+    (setq vtimezone (icalendar-testsuite--get-ical-event "BEGIN:VTIMEZONE
+TZID:thename
+BEGIN:STANDARD
+DTSTART:16010101T040000
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:16010101T030000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=3
+END:DAYLIGHT
+END:VTIMEZONE
+"))
+    (setq result (icalendar--parse-vtimezone vtimezone))
+    (assert (string= "thename" (car result)))
+    (message (cdr result))
+    (assert (string= "STD-02:00DST-03:00,M3.5.0/03:00:00,M10.5.0/04:00:00" (cdr result)))
+    (setq vtimezone (icalendar-testsuite--get-ical-event "BEGIN:VTIMEZONE
+TZID:anothername
+BEGIN:STANDARD
+DTSTART:16010101T040000
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2MO;BYMONTH=10
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:16010101T030000
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2MO;BYMONTH=3
+END:DAYLIGHT
+END:VTIMEZONE
+"))
+    (setq result (icalendar--parse-vtimezone vtimezone))
+    (assert (string= "anothername" (car result)))
+    (message (cdr result))
+    (assert (string= "STD-02:00DST-03:00,M3.2.1/03:00:00,M10.2.1/04:00:00" (cdr result)))))
+
 ;; ======================================================================
 ;; Test methods for exporting from diary to icalendar
 ;; ======================================================================
 
-(defun icalendar-testsuite--test-export (input-european input-american
-                                                        expected-output)
+(defun icalendar-testsuite--test-export (input-iso input-european input-american
+                                                   expected-output)
   "Perform an export test.
+Argument INPUT-ISO iso style diary string.
 Argument INPUT-EUROPEAN european style diary string.
 Argument INPUT-AMERICAN american style diary string.
-Argument EXPECTED-OUTPUT expected icalendar result string."
+Argument EXPECTED-OUTPUT expected icalendar result string.
+
+European style input data must use german month names.  American
+and ISO style input data must use english month names."
   (message "--- icalendar-testsuite--test-export ---")
-  (let ((was-european-calendar european-calendar-style)
+  (let ((calendar-date-style 'iso)
         (icalendar-recurring-start-year 2000))
     (set-time-zone-rule "CET") ;;FIXME: reset timezone!
+    (when input-iso
+      (let ((calendar-month-name-array
+             ["January" "February" "March" "April" "May" "June" "July" "August"
+              "September" "October" "November" "December"])
+            (calendar-day-name-array
+             ["Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday"
+              "Saturday"]))
+        (setq calendar-date-style 'iso)
+        (icalendar-testsuite--do-test-export input-iso expected-output)))
     (when input-european
       (let ((calendar-month-name-array
              ["Januar" "Februar" "März" "April" "Mai" "Juni" "Juli" "August"
@@ -174,7 +462,7 @@ Argument EXPECTED-OUTPUT expected icalendar result string."
             (calendar-day-name-array
              ["Sonntag" "Montag" "Dienstag" "Mittwoch" "Donnerstag" "Freitag"
               "Samstag"]))
-        (european-calendar)
+        (setq calendar-date-style 'european)
         (icalendar-testsuite--do-test-export input-european expected-output)))
     (when input-american
       (let ((calendar-month-name-array
@@ -183,11 +471,8 @@ Argument EXPECTED-OUTPUT expected icalendar result string."
             (calendar-day-name-array
              ["Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday"
               "Saturday"]))
-        (american-calendar)
-        (icalendar-testsuite--do-test-export input-american expected-output)))
-    (if was-european-calendar
-        (european-calendar)
-      (american-calendar))))
+        (setq calendar-date-style 'american)
+        (icalendar-testsuite--do-test-export input-american expected-output)))))
 
 (defun icalendar-testsuite--do-test-export (input expected-output)
   "Actually perform export test.
@@ -239,10 +524,11 @@ END:VCALENDAR
 ;; Test methods for importing from icalendar to diary
 ;; ======================================================================
 
-(defun icalendar-testsuite--test-import (input expected-european
+(defun icalendar-testsuite--test-import (input expected-iso expected-european
                                                expected-american)
   "Perform import test.
 Argument INPUT icalendar event string.
+Argument EXPECTED-ISO expected iso style diary string.
 Argument EXPECTED-EUROPEAN expected european style diary string.
 Argument EXPECTED-AMERICAN expected american style diary string."
   (message "--- icalendar-testsuite--test-import ---")
@@ -265,16 +551,16 @@ Argument EXPECTED-AMERICAN expected american style diary string."
             (icalendar-import-format-status "\n Status: %s")
             (icalendar-import-format-url "\n URL: %s")
             (icalendar-import-format-class "\n Class: %s")
-            (was-european-calendar european-calendar-style))
+            calendar-date-style)
+        (when expected-iso
+          (setq calendar-date-style 'iso)
+          (icalendar-testsuite--do-test-import input expected-iso))
         (when expected-european
-          (european-calendar)
+          (setq calendar-date-style 'european)
           (icalendar-testsuite--do-test-import input expected-european))
         (when expected-american
-          (american-calendar)
-          (icalendar-testsuite--do-test-import input expected-american))
-        (if was-european-calendar
-            (european-calendar)
-          (american-calendar))))
+          (setq calendar-date-style 'american)
+          (icalendar-testsuite--do-test-import input expected-american))))
     (set-time-zone-rule timezone)))
 
 (defun icalendar-testsuite--do-test-import (input expected-output)
@@ -315,25 +601,25 @@ Argument INPUT icalendar event string."
           (icalendar-import-format-organizer "\n Organizer: %s")
           (icalendar-import-format-status "\n Status: %s")
           (icalendar-import-format-url "\n URL: %s")
-          (icalendar-import-format-class "\n Class: %s")
-          (was-european-calendar european-calendar-style))
-      (european-calendar)
-      (icalendar-testsuite--do-test-cycle)
-      (american-calendar)
-      (icalendar-testsuite--do-test-cycle)
-      (if was-european-calendar
-          (european-calendar)
-        (american-calendar)))))
+          (icalendar-import-format-class "\n Class: %s"))
+      (dolist (calendar-date-style '(iso european american))
+        (icalendar-testsuite--do-test-cycle)))))
 
 (defun icalendar-testsuite--do-test-cycle ()
   "Actually perform import/export cycle test."
   (let ((temp-diary (make-temp-file "icalendar-test-diary"))
         (temp-ics (make-temp-file "icalendar-test-ics"))
         (org-input (buffer-substring-no-properties (point-min) (point-max))))
+
+    ;; step 1: import
     (icalendar-import-buffer temp-diary t t)
+
+    ;; step 2: export what was just imported
     (save-excursion
       (find-file temp-diary)
       (icalendar-export-region (point-min) (point-max) temp-ics))
+
+    ;; compare the output of step 2 with the input of step 1
     (save-excursion
       (find-file temp-ics)
       (goto-char (point-min))
@@ -343,6 +629,8 @@ Argument INPUT icalendar event string."
         (unless (string-equal org-input cycled)
           (error "Import test failed! Found `%s'\nbut expected `%s'" cycled
                  org-input))))
+
+    ;; clean up -- Note this is done only if test is passed
     (kill-buffer (find-buffer-visiting temp-diary))
     (save-excursion
       (set-buffer (find-buffer-visiting temp-ics))
@@ -360,12 +648,14 @@ Argument INPUT icalendar event string."
    "SUMMARY:non-recurring
 DTSTART;VALUE=DATE-TIME:20030919T090000
 DTEND;VALUE=DATE-TIME:20030919T113000"
+   "&2003/9/19 09:00-11:30 non-recurring"
    "&19/9/2003 09:00-11:30 non-recurring"
    "&9/19/2003 09:00-11:30 non-recurring")
 
   (icalendar-testsuite--test-import
    "SUMMARY:non-recurring allday
 DTSTART;VALUE=DATE-TIME:20030919"
+   "&2003/9/19 non-recurring allday"
    "&19/9/2003 non-recurring allday"
    "&9/19/2003 non-recurring allday")
 
@@ -373,6 +663,7 @@ DTSTART;VALUE=DATE-TIME:20030919"
    "SUMMARY:long 
  summary
 DTSTART;VALUE=DATE:20030919"
+   "&2003/9/19 long summary"
    "&19/9/2003 long summary"
    "&9/19/2003 long summary")
 
@@ -387,8 +678,10 @@ DTSTART;VALUE=DATE:20040719
 DTEND;VALUE=DATE:20040828
 DTSTAMP:20031103T011641Z
 "
+   "&%%(and (diary-block 2004 7 19 2004 8 27)) Sommerferien"
    "&%%(and (diary-block 19 7 2004 27 8 2004)) Sommerferien"
    "&%%(and (diary-block 7 19 2004 8 27 2004)) Sommerferien")
+
   (icalendar-testsuite--test-import
    "UID
  :04979712-3902-11d9-93dd-8f9f4afe08da
@@ -409,6 +702,7 @@ DTSTAMP
 LAST-MODIFIED
  :20041118T013640Z
 "
+   "&2004/11/23 14:00-14:30 folded summary"
    "&23/11/2004 14:00-14:30 folded summary"
    "&11/23/2004 14:00-14:30 folded summary")
   (icalendar-testsuite--test-import
@@ -429,14 +723,17 @@ DTEND
 DTSTAMP
  :20041118T013641Z
 "
+   "&2004/11/23 14:45-15:45 another example"
    "&23/11/2004 14:45-15:45 another example"
    "&11/23/2004 14:45-15:45 another example")
+
   (icalendar-testsuite--test-import
    "SUMMARY:rrule daily
 DTSTART;VALUE=DATE-TIME:20030919T090000
 DTEND;VALUE=DATE-TIME:20030919T113000
 RRULE:FREQ=DAILY;
 "
+   "&%%(and (diary-cyclic 1 2003 9 19)) 09:00-11:30 rrule daily"
    "&%%(and (diary-cyclic 1 19 9 2003)) 09:00-11:30 rrule daily"
    "&%%(and (diary-cyclic 1 9 19 2003)) 09:00-11:30 rrule daily")
 
@@ -447,6 +744,7 @@ DTSTART;VALUE=DATE-TIME:20030919T090000
 DTEND;VALUE=DATE-TIME:20030919T113000
 RRULE:FREQ=DAILY;INTERVAL=2
 "
+   "&%%(and (diary-cyclic 2 2003 9 19)) 09:00-11:30 rrule daily"
    "&%%(and (diary-cyclic 2 19 9 2003)) 09:00-11:30 rrule daily"
    "&%%(and (diary-cyclic 2 9 19 2003)) 09:00-11:30 rrule daily")
   (icalendar-testsuite--test-import
@@ -456,14 +754,17 @@ DTEND;VALUE=DATE-TIME:20030919T113000
 RRULE:FREQ=DAILY;INTERVAL=2
 EXDATE:20030921,20030925
 "
+   "&%%(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"
    "&%%(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"
    "&%%(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")
+
   (icalendar-testsuite--test-import
    "SUMMARY:rrule weekly
 DTSTART;VALUE=DATE-TIME:20030919T090000
 DTEND;VALUE=DATE-TIME:20030919T113000
 RRULE:FREQ=WEEKLY;
 "
+   "&%%(and (diary-cyclic 7 2003 9 19)) 09:00-11:30 rrule weekly"
    "&%%(and (diary-cyclic 7 19 9 2003)) 09:00-11:30 rrule weekly"
    "&%%(and (diary-cyclic 7 9 19 2003)) 09:00-11:30 rrule weekly")
   (icalendar-testsuite--test-import
@@ -472,6 +773,7 @@ DTSTART;VALUE=DATE-TIME:20030919T090000
 DTEND;VALUE=DATE-TIME:20030919T113000
 RRULE:FREQ=MONTHLY;
 "
+   "&%%(and (diary-date t t 19) (diary-block 2003 9 19 9999 1 1)) 09:00-11:30 rrule monthly no end"
    "&%%(and (diary-date 19 t t) (diary-block 19 9 2003 1 1 9999)) 09:00-11:30 rrule monthly no end"
    "&%%(and (diary-date t 19 t) (diary-block 9 19 2003 1 1 9999)) 09:00-11:30 rrule monthly no end")
   (icalendar-testsuite--test-import
@@ -480,6 +782,7 @@ DTSTART;VALUE=DATE-TIME:20030919T090000
 DTEND;VALUE=DATE-TIME:20030919T113000
 RRULE:FREQ=MONTHLY;UNTIL=20050819;
 "
+   "&%%(and (diary-date t t 19) (diary-block 2003 9 19 2005 8 19)) 09:00-11:30 rrule monthly with end"
    "&%%(and (diary-date 19 t t) (diary-block 19 9 2003 19 8 2005)) 09:00-11:30 rrule monthly with end"
    "&%%(and (diary-date t 19 t) (diary-block 9 19 2003 8 19 2005)) 09:00-11:30 rrule monthly with end")
   (icalendar-testsuite--test-import
@@ -489,6 +792,7 @@ SUMMARY:Maria Himmelfahrt
 UID:CC56BEA6-49D2-11D8-8833-00039386D1C2-RID
 RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=8
 "
+   "&%%(and (diary-anniversary 2004 8 15))  Maria Himmelfahrt"
    "&%%(and (diary-anniversary 15 8 2004))  Maria Himmelfahrt"
    "&%%(and (diary-anniversary 8 15 2004))  Maria Himmelfahrt")
   (icalendar-testsuite--test-import
@@ -497,6 +801,7 @@ DTSTART;VALUE=DATE-TIME:20030919T090000
 DTEND;VALUE=DATE-TIME:20030919T113000
 RRULE:FREQ=YEARLY;INTERVAL=2
 "
+   "&%%(and (diary-anniversary 2003 9 19)) 09:00-11:30 rrule yearly" ;FIXME
    "&%%(and (diary-anniversary 19 9 2003)) 09:00-11:30 rrule yearly" ;FIXME
    "&%%(and (diary-anniversary 9 19 2003)) 09:00-11:30 rrule yearly") ;FIXME
   (icalendar-testsuite--test-import
@@ -505,6 +810,7 @@ DTSTART;VALUE=DATE-TIME:20030919T090000
 DTEND;VALUE=DATE-TIME:20030919T113000
 RRULE:FREQ=DAILY;COUNT=1;INTERVAL=1
 "
+   "&%%(and (diary-cyclic 1 2003 9 19) (diary-block 2003 9 19 2003 9 19)) 09:00-11:30 rrule count daily short"
    "&%%(and (diary-cyclic 1 19 9 2003) (diary-block 19 9 2003 19 9 2003)) 09:00-11:30 rrule count daily short"
    "&%%(and (diary-cyclic 1 9 19 2003) (diary-block 9 19 2003 9 19 2003)) 09:00-11:30 rrule count daily short")
   (icalendar-testsuite--test-import
@@ -513,6 +819,7 @@ DTSTART;VALUE=DATE-TIME:20030919T090000
 DTEND;VALUE=DATE-TIME:20030919T113000
 RRULE:FREQ=DAILY;COUNT=14;INTERVAL=1
 "
+   "&%%(and (diary-cyclic 1 2003 9 19) (diary-block 2003 9 19 2003 10 2)) 09:00-11:30 rrule count daily long"
    "&%%(and (diary-cyclic 1 19 9 2003) (diary-block 19 9 2003 2 10 2003)) 09:00-11:30 rrule count daily long"
    "&%%(and (diary-cyclic 1 9 19 2003) (diary-block 9 19 2003 10 2 2003)) 09:00-11:30 rrule count daily long")
   (icalendar-testsuite--test-import
@@ -521,6 +828,7 @@ DTSTART;VALUE=DATE-TIME:20030919T090000
 DTEND;VALUE=DATE-TIME:20030919T113000
 RRULE:FREQ=WEEKLY;COUNT=3;INTERVAL=2
 "
+   "&%%(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"
    "&%%(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"
    "&%%(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")
   (icalendar-testsuite--test-import
@@ -529,6 +837,7 @@ DTSTART;VALUE=DATE-TIME:20030919T090000
 DTEND;VALUE=DATE-TIME:20030919T113000
 RRULE:FREQ=MONTHLY;INTERVAL=1;COUNT=5
 "
+   "&%%(and (diary-date t t 19) (diary-block 2003 9 19 2004 1 19)) 09:00-11:30 rrule count monthly"
    "&%%(and (diary-date 19 t t) (diary-block 19 9 2003 19 1 2004)) 09:00-11:30 rrule count monthly"
    "&%%(and (diary-date t 19 t) (diary-block 9 19 2003 1 19 2004)) 09:00-11:30 rrule count monthly")
   (icalendar-testsuite--test-import
@@ -537,6 +846,7 @@ DTSTART;VALUE=DATE-TIME:20030919T090000
 DTEND;VALUE=DATE-TIME:20030919T113000
 RRULE:FREQ=MONTHLY;INTERVAL=2;COUNT=5
 "
+   "&%%(and (diary-date t t 19) (diary-block 2003 9 19 2004 5 19)) 09:00-11:30 rrule count every second month" ;FIXME
    "&%%(and (diary-date 19 t t) (diary-block 19 9 2003 19 5 2004)) 09:00-11:30 rrule count every second month" ;FIXME
    "&%%(and (diary-date t 19 t) (diary-block 9 19 2003 5 19 2004)) 09:00-11:30 rrule count every second month") ;FIXME
   (icalendar-testsuite--test-import
@@ -545,6 +855,7 @@ DTSTART;VALUE=DATE-TIME:20030919T090000
 DTEND;VALUE=DATE-TIME:20030919T113000
 RRULE:FREQ=YEARLY;INTERVAL=1;COUNT=5
 "
+   "&%%(and (diary-date t 9 19) (diary-block 2003 9 19 2007 9 19)) 09:00-11:30 rrule count yearly"
    "&%%(and (diary-date 19 9 t) (diary-block 19 9 2003 19 9 2007)) 09:00-11:30 rrule count yearly"
    "&%%(and (diary-date 9 19 t) (diary-block 9 19 2003 9 19 2007)) 09:00-11:30 rrule count yearly")
   (icalendar-testsuite--test-import
@@ -553,6 +864,7 @@ DTSTART;VALUE=DATE-TIME:20030919T090000
 DTEND;VALUE=DATE-TIME:20030919T113000
 RRULE:FREQ=YEARLY;INTERVAL=2;COUNT=5
 "
+   "&%%(and (diary-date t 9 19) (diary-block 2003 9 19 2011 9 19)) 09:00-11:30 rrule count every second year" ;FIXME!!!
    "&%%(and (diary-date 19 9 t) (diary-block 19 9 2003 19 9 2011)) 09:00-11:30 rrule count every second year" ;FIXME!!!
    "&%%(and (diary-date 9 19 t) (diary-block 9 19 2003 9 19 2011)) 09:00-11:30 rrule count every second year") ;FIXME!!!
 
@@ -562,6 +874,7 @@ RRULE:FREQ=YEARLY;INTERVAL=2;COUNT=5
 SUMMARY:duration
 DURATION:P7D
 "
+   "&%%(and (diary-block 2005 2 17 2005 2 23)) duration"
    "&%%(and (diary-block 17 2 2005 23 2 2005)) duration"
    "&%%(and (diary-block 2 17 2005 2 23 2005)) duration")
 
@@ -577,6 +890,7 @@ CLASS:PUBLIC
 SEQUENCE:1
 CREATED:20041127T183329
 "
+   "&%%(and (diary-cyclic 1 2001 12 21) (diary-block 2001 12 21 2001 12 29))  Urlaub"
    "&%%(and (diary-cyclic 1 21 12 2001) (diary-block 21 12 2001 29 12 2001))  Urlaub"
    "&%%(and (diary-cyclic 1 12 21 2001) (diary-block 12 21 2001 12 29 2001))  Urlaub")
   )
@@ -589,19 +903,22 @@ CREATED:20041127T183329
 
   (let ((icalendar-export-hidden-diary-entries nil))
     (icalendar-testsuite--test-export
+     "&2000 Oct 3 ordinary no time "
      "&3 Okt 2000 ordinary no time "
      "&Oct 3 2000 ordinary no time "
      nil))
 
   ;; "ordinary" events
   (icalendar-testsuite--test-export
+   "2000 Oct 3 ordinary no time "
    "3 Okt 2000 ordinary no time "
    "Oct 3 2000 ordinary no time "
    "DTSTART;VALUE=DATE:20001003
 DTEND;VALUE=DATE:20001004
-SUMMARY:ordinary no time 
+SUMMARY:ordinary no time
 ")
   (icalendar-testsuite--test-export
+   "2000 Oct 3 16:30 ordinary with time"
    "3 Okt 2000 16:30 ordinary with time"
    "Oct 3 2000 16:30 ordinary with time"
    "DTSTART;VALUE=DATE-TIME:20001003T163000
@@ -609,6 +926,7 @@ DTEND;VALUE=DATE-TIME:20001003T173000
 SUMMARY:ordinary with time
 ")
   (icalendar-testsuite--test-export
+   "2000 10 3 16:30 ordinary with time 2"
    "3 10 2000 16:30 ordinary with time 2"
    "10 3 2000 16:30 ordinary with time 2"
    "DTSTART;VALUE=DATE-TIME:20001003T163000
@@ -617,6 +935,7 @@ SUMMARY:ordinary with time 2
 ")
 
   (icalendar-testsuite--test-export
+   "2000/10/3 16:30 ordinary with time 3"
    "3/10/2000 16:30 ordinary with time 3"
    "10/3/2000 16:30 ordinary with time 3"
    "DTSTART;VALUE=DATE-TIME:20001003T163000
@@ -626,6 +945,8 @@ SUMMARY:ordinary with time 3
 
   ;; multiline -- FIXME!!!
   (icalendar-testsuite--test-export
+   "2000 October 3 16:30 multiline
+  17:30 multiline continued FIXME"
    "3 Oktober 2000 16:30 multiline
   17:30 multiline continued FIXME"
    "October 3 2000 16:30 multiline
@@ -639,6 +960,7 @@ DESCRIPTION:
 
   ;; weekly by day
   (icalendar-testsuite--test-export
+   "Monday 1:30pm weekly by day with start time"
    "Montag 13:30 weekly by day with start time"
    "Monday 1:30pm weekly by day with start time"
    "DTSTART;VALUE=DATE-TIME:20000103T133000
@@ -648,6 +970,7 @@ SUMMARY:weekly by day with start time
 ")
 
   (icalendar-testsuite--test-export
+   "Monday 13:30-15:00 weekly by day with start and end time"
    "Montag 13:30-15:00 weekly by day with start and end time"
    "Monday 01:30pm-03:00pm weekly by day with start and end time"
    "DTSTART;VALUE=DATE-TIME:20000103T133000
@@ -658,6 +981,7 @@ SUMMARY:weekly by day with start and end time
 
   ;; yearly
   (icalendar-testsuite--test-export
+   "may 1 yearly no time"
    "1 Mai yearly no time"
    "may 1 yearly no time"
    "DTSTART;VALUE=DATE:19000501
@@ -668,6 +992,7 @@ SUMMARY:yearly no time
 
   ;; anniversaries
   (icalendar-testsuite--test-export
+   "%%(diary-anniversary 1989 10 3) anniversary no time"
    "%%(diary-anniversary 3 10 1989) anniversary no time"
    "%%(diary-anniversary 10 3 1989) anniversary no time"
    "DTSTART;VALUE=DATE:19891003
@@ -676,6 +1001,7 @@ RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=10;BYMONTHDAY=03
 SUMMARY:anniversary no time
 ")
   (icalendar-testsuite--test-export
+   "%%(diary-anniversary 1989 10 3) 19:00-20:00 anniversary with time"
    "%%(diary-anniversary 3 10 1989) 19:00-20:00 anniversary with time"
    "%%(diary-anniversary 10 3 1989) 19:00-20:00 anniversary with time"
    "DTSTART;VALUE=DATE-TIME:19891003T190000
@@ -686,6 +1012,7 @@ SUMMARY:anniversary with time
 
   ;; block
   (icalendar-testsuite--test-export
+   "%%(diary-block 2001 6 18 2001 7 6) block no time"
    "%%(diary-block 18 6 2001 6 7 2001) block no time"
    "%%(diary-block 6 18 2001 7 6 2001) block no time"
    "DTSTART;VALUE=DATE:20010618
@@ -693,6 +1020,7 @@ DTEND;VALUE=DATE:20010707
 SUMMARY:block no time
 ")
   (icalendar-testsuite--test-export
+   "%%(diary-block 2001 6 18 2001 7 6) 13:00-17:00 block with time"
    "%%(diary-block 18 6 2001 6 7 2001) 13:00-17:00 block with time"
    "%%(diary-block 6 18 2001 7 6 2001) 13:00-17:00 block with time"
    "DTSTART;VALUE=DATE-TIME:20010618T130000
@@ -701,6 +1029,7 @@ RRULE:FREQ=DAILY;INTERVAL=1;UNTIL=20010706
 SUMMARY:block with time
 ")
   (icalendar-testsuite--test-export
+   "%%(diary-block 2001 6 18 2001 7 6) 13:00 block no end time"
    "%%(diary-block 18 6 2001 6 7 2001) 13:00 block no end time"
    "%%(diary-block 6 18 2001 7 6 2001) 13:00 block no end time"
    "DTSTART;VALUE=DATE-TIME:20010618T130000
@@ -771,6 +1100,7 @@ TRIGGER;RELATED=START:-PT00H15M00S
 END:VALARM
 END:VEVENT
 END:VCALENDAR"
+   nil
    "&9/5/2003 10:30-15:30 On-Site Interview
  Desc: 10:30am - Blah
  Location: Cccc
@@ -812,6 +1142,7 @@ ACTION:DISPLAY
 DESCRIPTION:REMINDER
 TRIGGER;RELATED=START:-PT00H15M00S
 END:VALARM"
+   nil
    "&23/6/2003 11:00-12:00 Dress Rehearsal for XXXX-XXXX
  Desc: 753 Zeichen hier radiert
  Location: 555 or TN 555-5555 ID 5555 & NochWas (see below)
@@ -878,6 +1209,7 @@ TRIGGER;RELATED=START:-PT00H15M00S
 END:VALARM
 END:VEVENT
 END:VCALENDAR"
+   nil
    "&23/6/2003 17:00-18:00 Updated: Dress Rehearsal for ABC01-15
  Desc: Viele Zeichen standen hier früher
  Location: 123 or TN 123-1234 ID abcd & SonstWo (see below)
@@ -891,6 +1223,7 @@ END:VCALENDAR"
 
   ;; export 2004-10-28 block entries
   (icalendar-testsuite--test-export
+   nil
    nil
    "-*- mode: text; fill-column: 256;-*-
 
@@ -903,6 +1236,7 @@ DTEND;VALUE=DATE:20041111
 SUMMARY:Nov 8-10 aa")
 
   (icalendar-testsuite--test-export
+   nil
    nil
    "%%(diary-block 12 13 2004 12 17 2004) Dec 13-17 bb"
    "DTSTART;VALUE=DATE:20041213
@@ -910,6 +1244,7 @@ DTEND;VALUE=DATE:20041218
 SUMMARY:Dec 13-17 bb")
 
   (icalendar-testsuite--test-export
+   nil
    nil
    "%%(diary-block 2 3 2005 2 4 2005) Feb 3-4 cc"
    "DTSTART;VALUE=DATE:20050203
@@ -917,6 +1252,7 @@ DTEND;VALUE=DATE:20050205
 SUMMARY:Feb 3-4 cc")
 
   (icalendar-testsuite--test-export
+   nil
    nil
    "%%(diary-block 4 24 2005 4 29 2005) April 24-29 dd"
    "DTSTART;VALUE=DATE:20050424
@@ -924,6 +1260,7 @@ DTEND;VALUE=DATE:20050430
 SUMMARY:April 24-29 dd
 ")
   (icalendar-testsuite--test-export
+   nil
    nil
    "%%(diary-block 5 30 2005 6 1 2005) may 30 - June 1: ee"
    "DTSTART;VALUE=DATE:20050530
@@ -931,6 +1268,7 @@ DTEND;VALUE=DATE:20050602
 SUMMARY:may 30 - June 1: ee")
 
   (icalendar-testsuite--test-export
+   nil
    nil
    "%%(diary-block 6 6 2005 6 8 2005) ff"
    "DTSTART;VALUE=DATE:20050606
@@ -939,6 +1277,7 @@ SUMMARY:ff")
 
   ;; export 2004-10-28 anniversary entries
   (icalendar-testsuite--test-export
+   nil
    nil
    "
 >>> anniversaries:
@@ -951,6 +1290,7 @@ SUMMARY:aa birthday (%d years old)
 ")
 
   (icalendar-testsuite--test-export
+   nil
    nil
    "%%(diary-anniversary 5 17 1957) bb birthday (%d years old)"
    "DTSTART;VALUE=DATE:19570517
@@ -959,6 +1299,7 @@ RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=05;BYMONTHDAY=17
 SUMMARY:bb birthday (%d years old)")
 
   (icalendar-testsuite--test-export
+   nil
    nil
    "%%(diary-anniversary 6 8 1997) cc birthday (%d years old)"
    "DTSTART;VALUE=DATE:19970608
@@ -967,6 +1308,7 @@ RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=06;BYMONTHDAY=08
 SUMMARY:cc birthday (%d years old)")
 
   (icalendar-testsuite--test-export
+   nil
    nil
    "%%(diary-anniversary 7 22 1983) dd (%d years ago...!)"
    "DTSTART;VALUE=DATE:19830722
@@ -975,6 +1317,7 @@ RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=07;BYMONTHDAY=22
 SUMMARY:dd (%d years ago...!)")
 
   (icalendar-testsuite--test-export
+   nil
    nil
    "%%(diary-anniversary 8 1 1988) ee birthday (%d years old)"
    "DTSTART;VALUE=DATE:19880801
@@ -983,6 +1326,7 @@ RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=08;BYMONTHDAY=01
 SUMMARY:ee birthday (%d years old)")
 
   (icalendar-testsuite--test-export
+   nil
    nil
    "%%(diary-anniversary 9 21 1957) ff birthday (%d years old)"
    "DTSTART;VALUE=DATE:19570921
@@ -1004,6 +1348,7 @@ SUMMARY:ff birthday (%d years old)")
   ;; "xxx")
 
   (icalendar-testsuite--test-export
+   nil
    nil
    ">>> ------------ my week:
 
@@ -1014,6 +1359,7 @@ RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO
 SUMMARY:MAC")
 
   (icalendar-testsuite--test-export
+   nil
    nil
    "Monday 15:00 a1"
    "DTSTART;VALUE=DATE-TIME:20000103T150000
@@ -1023,6 +1369,7 @@ SUMMARY:a1")
 
 
   (icalendar-testsuite--test-export
+   nil
    nil
    "Monday 16:00-17:00 a2"
    "DTSTART;VALUE=DATE-TIME:20000103T160000
@@ -1031,6 +1378,7 @@ RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO
 SUMMARY:a2")
 
   (icalendar-testsuite--test-export
+   nil
    nil
    "Tuesday 11:30-13:00 a3"
    "DTSTART;VALUE=DATE-TIME:20000104T113000
@@ -1039,6 +1387,7 @@ RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=TU
 SUMMARY:a3")
 
   (icalendar-testsuite--test-export
+   nil
    nil
    "Tuesday 15:00 a4"
    "DTSTART;VALUE=DATE-TIME:20000104T150000
@@ -1047,6 +1396,7 @@ RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=TU
 SUMMARY:a4")
 
   (icalendar-testsuite--test-export
+   nil
    nil
    "Wednesday 13:00 a5"
    "DTSTART;VALUE=DATE-TIME:20000105T130000
@@ -1055,6 +1405,7 @@ RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=WE
 SUMMARY:a5")
 
   (icalendar-testsuite--test-export
+   nil
    nil
    "Wednesday 11:30-13:30 a6"
    "DTSTART;VALUE=DATE-TIME:20000105T113000
@@ -1063,6 +1414,7 @@ RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=WE
 SUMMARY:a6")
 
   (icalendar-testsuite--test-export
+   nil
    nil
    "Wednesday 15:00 s1"
    "DTSTART;VALUE=DATE-TIME:20000105T150000
@@ -1073,6 +1425,7 @@ SUMMARY:s1")
 
   ;; export 2004-10-28 regular entries
   (icalendar-testsuite--test-export
+   nil
    nil
    "
 >>> regular diary entries:
@@ -1217,55 +1570,58 @@ LAST-MODIFIED
 END:VEVENT
 END:VCALENDAR
 "
+   nil
    "&23/11/2004 14:00-14:30 Jjjjj & Wwwww
  Status: TENTATIVE
- Class: PRIVATE 
+ Class: PRIVATE
 &23/11/2004 14:45-15:45 BB Aaaaaaaa Bbbbb
  Status: TENTATIVE
- Class: PRIVATE 
+ Class: PRIVATE
 &23/11/2004 11:00-12:00 Hhhhhhhh
  Status: TENTATIVE
- Class: PRIVATE 
+ Class: PRIVATE
 &%%(and (diary-cyclic 14 12 11 2004)) 14:00-18:30 MMM Aaaaaaaaa
  Status: TENTATIVE
- Class: PRIVATE 
+ Class: PRIVATE
 &%%(and (diary-block 19 11 2004 19 11 2004)) Rrrr/Cccccc ii Aaaaaaaa
  Desc: Vvvvv Rrrr aaa Cccccc
  Status: TENTATIVE
- Class: PRIVATE 
+ Class: PRIVATE
 &%%(and (diary-cyclic 7 1 11 2004)) Wwww aa hhhh
  Status: TENTATIVE
- Class: PRIVATE "
+ Class: PRIVATE"
    "&11/23/2004 14:00-14:30 Jjjjj & Wwwww
  Status: TENTATIVE
- Class: PRIVATE 
+ Class: PRIVATE
 &11/23/2004 14:45-15:45 BB Aaaaaaaa Bbbbb
  Status: TENTATIVE
- Class: PRIVATE 
+ Class: PRIVATE
 &11/23/2004 11:00-12:00 Hhhhhhhh
  Status: TENTATIVE
- Class: PRIVATE 
+ Class: PRIVATE
 &%%(and (diary-cyclic 14 11 12 2004)) 14:00-18:30 MMM Aaaaaaaaa
  Status: TENTATIVE
- Class: PRIVATE 
+ Class: PRIVATE
 &%%(and (diary-block 11 19 2004 11 19 2004)) Rrrr/Cccccc ii Aaaaaaaa
  Desc: Vvvvv Rrrr aaa Cccccc
  Status: TENTATIVE
- Class: PRIVATE 
+ Class: PRIVATE
 &%%(and (diary-cyclic 7 11 1 2004)) Wwww aa hhhh
  Status: TENTATIVE
- Class: PRIVATE ")
+ Class: PRIVATE")
 
   ;; 2004-09-09 pg
   (icalendar-testsuite--test-export
    "%%(diary-block 1 1 2004 4 1 2004) Urlaub"
    nil
+   nil
    "DTSTART;VALUE=DATE:20040101
 DTEND;VALUE=DATE:20040105
 SUMMARY:Urlaub")
 
   ;; 2004-10-25 pg
   (icalendar-testsuite--test-export
+   nil
    "5 11 2004 Bla Fasel"
    nil
    "DTSTART;VALUE=DATE:20041105
@@ -1274,6 +1630,7 @@ SUMMARY:Bla Fasel")
 
   ;; 2004-10-30 pg
   (icalendar-testsuite--test-export
+   nil
    "2 Nov 2004 15:00-16:30 Zahnarzt"
    nil
    "DTSTART;VALUE=DATE-TIME:20041102T150000
@@ -1302,6 +1659,7 @@ DTEND
  :20050207
 DTSTAMP
  :20050128T011209Z"
+   nil
    "&%%(and (diary-block 6 2 2005 6 2 2005)) Waitangi Day
  Desc: abcdef"
    "&%%(and (diary-block 2 6 2005 2 6 2005)) Waitangi Day
@@ -1314,11 +1672,13 @@ SUMMARY:Hhhhhh Aaaaa ii Aaaaaaaa
 UID:6AFA7558-6994-11D9-8A3A-000A95A0E830-RID
 DTSTAMP:20050118T210335Z
 DURATION:P7D"
+   nil
    "&%%(and (diary-block 17 2 2005 23 2 2005)) Hhhhhh Aaaaa ii Aaaaaaaa"
    "&%%(and (diary-block 2 17 2005 2 23 2005)) Hhhhhh Aaaaa ii Aaaaaaaa")
 
   ;; 2005-03-23 lt
   (icalendar-testsuite--test-export
+   nil
    "&%%(diary-cyclic 7 8 2 2005) 16:00-16:45 [WORK] Pppp"
    nil
    "DTSTART;VALUE=DATE-TIME:20050208T160000
@@ -1329,6 +1689,7 @@ SUMMARY:[WORK] Pppp
 
   ;; 2005-05-27 eu
   (icalendar-testsuite--test-export
+   nil
    nil
    ;; FIXME: colon not allowed!
    ;;"Nov 1: NNN Wwwwwwww Wwwww - Aaaaaa Pppppppp rrrrrr ddd oo Nnnnnnnn 30"
@@ -1341,6 +1702,7 @@ SUMMARY:NNN Wwwwwwww Wwwww - Aaaaaa Pppppppp rrrrrr ddd oo Nnnnnnnn 30
   )
 
 (defun icalendar-testsuite--run-cycle-tests ()
+  "Perform cycling tests."
   (icalendar-testsuite--test-cycle
    "DTSTART;VALUE=DATE-TIME:20030919T090000
 DTEND;VALUE=DATE-TIME:20030919T113000
@@ -1356,13 +1718,12 @@ LOCATION:nowhere
 ORGANIZER:ulf
 ")
 
-  ;; FIXME: does not work
-  ;;  (icalendar-testsuite--test-cycle
-  ;;   "DTSTART;VALUE=DATE:19190909
-  ;;DTEND;VALUE=DATE:19190910
-  ;;RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=09;BYMONTHDAY=09
-  ;;SUMMARY:and diary-anniversary
-  ;;")
+    (icalendar-testsuite--test-cycle
+     "DTSTART;VALUE=DATE:19190909
+DTEND;VALUE=DATE:19190910
+RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=09;BYMONTHDAY=09
+SUMMARY:and diary-anniversary
+")
   )