;; icalendar-testsuite.el --- Test suite for icalendar.el
-;; Copyright (C) 2005, 2008 Free Software Foundation, Inc.
+;; Copyright (C) 2005, 2008, 2009 Free Software Foundation, Inc.
;; Author: Ulf Jasper <ulf.jasper@web.de>
;; Created: March 2005
(icalendar-testsuite--test-first-weekday-of-year)
(icalendar-testsuite--test-datestring-to-isodate)
(icalendar-testsuite--test-datetime-to-diary-date)
- (icalendar-testsuite--test-calendar-style))
+ (icalendar-testsuite--test-diarytime-to-isotime)
+ (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'."
(icalendar-import-format-url " URL %s")
(icalendar-import-format-class " CLA %s")
(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"))
(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 "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-calendar-style ()
"Test method for `icalendar--date-style'."
(dolist (calendar-date-style '(iso american european))
(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
;; ======================================================================
(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))
(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))
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
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
+")
)