diff options
| author | Paul Eggert | 2020-01-24 13:36:56 -0800 |
|---|---|---|
| committer | Paul Eggert | 2020-01-24 13:41:56 -0800 |
| commit | a391ffa2f0377306449b36cc62858db823d2e990 (patch) | |
| tree | 6b4c1723452ea8ec3ce456278f964626df209275 | |
| parent | 9c576c207a8f4f98fd89deb4f3b4bfbe1ad37e37 (diff) | |
| download | emacs-a391ffa2f0377306449b36cc62858db823d2e990.tar.gz emacs-a391ffa2f0377306449b36cc62858db823d2e990.zip | |
Fix iso8601-parse so unknown DST is -1, not nil
The convention in a decoded time’s dst flag is that t means DST,
nil means standard time, and -1 means unknown. This differs from
the convention for other components of a decoded time, where nil
means unknown. Fix some places where iso8601-parse mistakenly
treated nil as meaning that the dst flag was unknown.
* doc/lispref/os.texi (Time Parsing):
Adjust to match parse-time-string’s doc string.
* lisp/calendar/iso8601.el (iso8601-parse):
Set dst flag to nil if a numeric time zone or "Z" is given.
(iso8601--decoded-time): Default dst flag to -1 if no dst
flag or zone is given.
* lisp/calendar/time-date.el (decoded-time-set-defaults):
When we don’t have a time zone, set the dst flag consistently
with DEFAULT-ZONE.
* test/lisp/calendar/iso8601-tests.el (test-iso8601-date-years)
(test-iso8601-date-dates, test-iso8601-date-obsolete)
(test-iso8601-date-weeks, test-iso8601-date-ordinals)
(test-iso8601-time, test-iso8601-combined)
(test-iso8601-duration, test-iso8601-intervals)
(standard-test-dates, standard-test-time-of-day-local-time)
(standard-test-time-of-day-fractions)
(nonstandard-test-time-of-day-decimals)
(standard-test-time-of-day-beginning-of-day)
(standard-test-date-and-time-of-day, standard-test-interval):
Adjust tests to match fixed behavior.
| -rw-r--r-- | doc/lispref/os.texi | 3 | ||||
| -rw-r--r-- | lisp/calendar/iso8601.el | 8 | ||||
| -rw-r--r-- | lisp/calendar/time-date.el | 17 | ||||
| -rw-r--r-- | test/lisp/calendar/iso8601-tests.el | 142 |
4 files changed, 87 insertions, 83 deletions
diff --git a/doc/lispref/os.texi b/doc/lispref/os.texi index 201ca18c1e4..a034ccdcd5c 100644 --- a/doc/lispref/os.texi +++ b/doc/lispref/os.texi | |||
| @@ -1689,7 +1689,8 @@ following form: | |||
| 1689 | @noindent | 1689 | @noindent |
| 1690 | The format of this list is the same as what @code{decode-time} accepts | 1690 | The format of this list is the same as what @code{decode-time} accepts |
| 1691 | (@pxref{Time Conversion}), and is described in more detail there. Any | 1691 | (@pxref{Time Conversion}), and is described in more detail there. Any |
| 1692 | element that cannot be determined from the input will be set to | 1692 | @code{dst} element that cannot be determined from the input is set to |
| 1693 | @minus{}1, and any other unknown element is set to | ||
| 1693 | @code{nil}. The argument @var{string} should resemble an RFC 822 (or later) or | 1694 | @code{nil}. The argument @var{string} should resemble an RFC 822 (or later) or |
| 1694 | ISO 8601 string, like ``Fri, 25 Mar 2016 16:24:56 +0100'' or | 1695 | ISO 8601 string, like ``Fri, 25 Mar 2016 16:24:56 +0100'' or |
| 1695 | ``1998-09-12T12:21:54-0200'', but this function will attempt to parse | 1696 | ``1998-09-12T12:21:54-0200'', but this function will attempt to parse |
diff --git a/lisp/calendar/iso8601.el b/lisp/calendar/iso8601.el index ae1dab17252..e42fe0fa21f 100644 --- a/lisp/calendar/iso8601.el +++ b/lisp/calendar/iso8601.el | |||
| @@ -136,7 +136,8 @@ See `decode-time' for the meaning of FORM." | |||
| 136 | (when zone-string | 136 | (when zone-string |
| 137 | (setf (decoded-time-zone date) | 137 | (setf (decoded-time-zone date) |
| 138 | ;; The time zone in decoded times are in seconds. | 138 | ;; The time zone in decoded times are in seconds. |
| 139 | (* (iso8601-parse-zone zone-string) 60))) | 139 | (* (iso8601-parse-zone zone-string) 60)) |
| 140 | (setf (decoded-time-dst date) nil)) | ||
| 140 | date))) | 141 | date))) |
| 141 | 142 | ||
| 142 | (defun iso8601-parse-date (string) | 143 | (defun iso8601-parse-date (string) |
| @@ -332,6 +333,9 @@ Return the number of minutes." | |||
| 332 | (list start end | 333 | (list start end |
| 333 | (or duration | 334 | (or duration |
| 334 | ;; FIXME: Support subseconds. | 335 | ;; FIXME: Support subseconds. |
| 336 | ;; FIXME: It makes no sense to decode a time difference | ||
| 337 | ;; according to (decoded-time-zone end), or according to | ||
| 338 | ;; any other time zone for that matter. | ||
| 335 | (decode-time (time-subtract (iso8601--encode-time end) | 339 | (decode-time (time-subtract (iso8601--encode-time end) |
| 336 | (iso8601--encode-time start)) | 340 | (iso8601--encode-time start)) |
| 337 | (or (decoded-time-zone end) 0) 'integer))))) | 341 | (or (decoded-time-zone end) 0) 'integer))))) |
| @@ -354,7 +358,7 @@ Return the number of minutes." | |||
| 354 | (iso8601--value month) | 358 | (iso8601--value month) |
| 355 | (iso8601--value year) | 359 | (iso8601--value year) |
| 356 | nil | 360 | nil |
| 357 | dst | 361 | (if (or dst zone) dst -1) |
| 358 | zone)) | 362 | zone)) |
| 359 | 363 | ||
| 360 | (defun iso8601--encode-time (time) | 364 | (defun iso8601--encode-time (time) |
diff --git a/lisp/calendar/time-date.el b/lisp/calendar/time-date.el index 1e589ece29d..e2402de8010 100644 --- a/lisp/calendar/time-date.el +++ b/lisp/calendar/time-date.el | |||
| @@ -515,15 +515,14 @@ TIME is modified and returned." | |||
| 515 | (unless (decoded-time-year time) | 515 | (unless (decoded-time-year time) |
| 516 | (setf (decoded-time-year time) 0)) | 516 | (setf (decoded-time-year time) 0)) |
| 517 | 517 | ||
| 518 | ;; When we don't have a time zone and we don't have a DST, then mark | 518 | ;; When we don't have a time zone, default to DEFAULT-ZONE without |
| 519 | ;; it as unknown. | 519 | ;; DST if DEFAULT-ZONE if given, and to unknown DST otherwise. |
| 520 | (when (and (not (decoded-time-zone time)) | 520 | (unless (decoded-time-zone time) |
| 521 | (not (decoded-time-dst time))) | 521 | (if default-zone |
| 522 | (setf (decoded-time-dst time) -1)) | 522 | (progn (setf (decoded-time-zone time) default-zone) |
| 523 | 523 | (setf (decoded-time-dst time) nil)) | |
| 524 | (when (and (not (decoded-time-zone time)) | 524 | (setf (decoded-time-dst time) -1))) |
| 525 | default-zone) | 525 | |
| 526 | (setf (decoded-time-zone time) 0)) | ||
| 527 | time) | 526 | time) |
| 528 | 527 | ||
| 529 | (provide 'time-date) | 528 | (provide 'time-date) |
diff --git a/test/lisp/calendar/iso8601-tests.el b/test/lisp/calendar/iso8601-tests.el index 430680c5077..6e7a4724a6b 100644 --- a/test/lisp/calendar/iso8601-tests.el +++ b/test/lisp/calendar/iso8601-tests.el | |||
| @@ -24,49 +24,49 @@ | |||
| 24 | 24 | ||
| 25 | (ert-deftest test-iso8601-date-years () | 25 | (ert-deftest test-iso8601-date-years () |
| 26 | (should (equal (iso8601-parse-date "1985") | 26 | (should (equal (iso8601-parse-date "1985") |
| 27 | '(nil nil nil nil nil 1985 nil nil nil))) | 27 | '(nil nil nil nil nil 1985 nil -1 nil))) |
| 28 | (should (equal (iso8601-parse-date "-0003") | 28 | (should (equal (iso8601-parse-date "-0003") |
| 29 | '(nil nil nil nil nil -3 nil nil nil))) | 29 | '(nil nil nil nil nil -3 nil -1 nil))) |
| 30 | (should (equal (iso8601-parse-date "+1985") | 30 | (should (equal (iso8601-parse-date "+1985") |
| 31 | '(nil nil nil nil nil 1985 nil nil nil)))) | 31 | '(nil nil nil nil nil 1985 nil -1 nil)))) |
| 32 | 32 | ||
| 33 | (ert-deftest test-iso8601-date-dates () | 33 | (ert-deftest test-iso8601-date-dates () |
| 34 | (should (equal (iso8601-parse-date "1985-03-14") | 34 | (should (equal (iso8601-parse-date "1985-03-14") |
| 35 | '(nil nil nil 14 3 1985 nil nil nil))) | 35 | '(nil nil nil 14 3 1985 nil -1 nil))) |
| 36 | (should (equal (iso8601-parse-date "19850314") | 36 | (should (equal (iso8601-parse-date "19850314") |
| 37 | '(nil nil nil 14 3 1985 nil nil nil))) | 37 | '(nil nil nil 14 3 1985 nil -1 nil))) |
| 38 | (should (equal (iso8601-parse-date "1985-02") | 38 | (should (equal (iso8601-parse-date "1985-02") |
| 39 | '(nil nil nil nil 2 1985 nil nil nil)))) | 39 | '(nil nil nil nil 2 1985 nil -1 nil)))) |
| 40 | 40 | ||
| 41 | (ert-deftest test-iso8601-date-obsolete () | 41 | (ert-deftest test-iso8601-date-obsolete () |
| 42 | (should (equal (iso8601-parse-date "--02-01") | 42 | (should (equal (iso8601-parse-date "--02-01") |
| 43 | '(nil nil nil 1 2 nil nil nil nil))) | 43 | '(nil nil nil 1 2 nil nil -1 nil))) |
| 44 | (should (equal (iso8601-parse-date "--0201") | 44 | (should (equal (iso8601-parse-date "--0201") |
| 45 | '(nil nil nil 1 2 nil nil nil nil)))) | 45 | '(nil nil nil 1 2 nil nil -1 nil)))) |
| 46 | 46 | ||
| 47 | (ert-deftest test-iso8601-date-weeks () | 47 | (ert-deftest test-iso8601-date-weeks () |
| 48 | (should (equal (iso8601-parse-date "2008W39-6") | 48 | (should (equal (iso8601-parse-date "2008W39-6") |
| 49 | '(nil nil nil 27 9 2008 nil nil nil))) | 49 | '(nil nil nil 27 9 2008 nil -1 nil))) |
| 50 | (should (equal (iso8601-parse-date "2009W01-1") | 50 | (should (equal (iso8601-parse-date "2009W01-1") |
| 51 | '(nil nil nil 29 12 2008 nil nil nil))) | 51 | '(nil nil nil 29 12 2008 nil -1 nil))) |
| 52 | (should (equal (iso8601-parse-date "2009W53-7") | 52 | (should (equal (iso8601-parse-date "2009W53-7") |
| 53 | '(nil nil nil 3 1 2010 nil nil nil)))) | 53 | '(nil nil nil 3 1 2010 nil -1 nil)))) |
| 54 | 54 | ||
| 55 | (ert-deftest test-iso8601-date-ordinals () | 55 | (ert-deftest test-iso8601-date-ordinals () |
| 56 | (should (equal (iso8601-parse-date "1981-095") | 56 | (should (equal (iso8601-parse-date "1981-095") |
| 57 | '(nil nil nil 5 4 1981 nil nil nil)))) | 57 | '(nil nil nil 5 4 1981 nil -1 nil)))) |
| 58 | 58 | ||
| 59 | (ert-deftest test-iso8601-time () | 59 | (ert-deftest test-iso8601-time () |
| 60 | (should (equal (iso8601-parse-time "13:47:30") | 60 | (should (equal (iso8601-parse-time "13:47:30") |
| 61 | '(30 47 13 nil nil nil nil nil nil))) | 61 | '(30 47 13 nil nil nil nil -1 nil))) |
| 62 | (should (equal (iso8601-parse-time "134730") | 62 | (should (equal (iso8601-parse-time "134730") |
| 63 | '(30 47 13 nil nil nil nil nil nil))) | 63 | '(30 47 13 nil nil nil nil -1 nil))) |
| 64 | (should (equal (iso8601-parse-time "1347") | 64 | (should (equal (iso8601-parse-time "1347") |
| 65 | '(0 47 13 nil nil nil nil nil nil)))) | 65 | '(0 47 13 nil nil nil nil -1 nil)))) |
| 66 | 66 | ||
| 67 | (ert-deftest test-iso8601-combined () | 67 | (ert-deftest test-iso8601-combined () |
| 68 | (should (equal (iso8601-parse "2008-03-02T13:47:30") | 68 | (should (equal (iso8601-parse "2008-03-02T13:47:30") |
| 69 | '(30 47 13 2 3 2008 nil nil nil))) | 69 | '(30 47 13 2 3 2008 nil -1 nil))) |
| 70 | (should (equal (iso8601-parse "2008-03-02T13:47:30Z") | 70 | (should (equal (iso8601-parse "2008-03-02T13:47:30Z") |
| 71 | '(30 47 13 2 3 2008 nil nil 0))) | 71 | '(30 47 13 2 3 2008 nil nil 0))) |
| 72 | (should (equal (iso8601-parse "2008-03-02T13:47:30+01:00") | 72 | (should (equal (iso8601-parse "2008-03-02T13:47:30+01:00") |
| @@ -76,13 +76,13 @@ | |||
| 76 | 76 | ||
| 77 | (ert-deftest test-iso8601-duration () | 77 | (ert-deftest test-iso8601-duration () |
| 78 | (should (equal (iso8601-parse-duration "P3Y6M4DT12H30M5S") | 78 | (should (equal (iso8601-parse-duration "P3Y6M4DT12H30M5S") |
| 79 | '(5 30 12 4 6 3 nil nil nil))) | 79 | '(5 30 12 4 6 3 nil -1 nil))) |
| 80 | (should (equal (iso8601-parse-duration "P1M") | 80 | (should (equal (iso8601-parse-duration "P1M") |
| 81 | '(0 0 0 0 1 0 nil nil nil))) | 81 | '(0 0 0 0 1 0 nil -1 nil))) |
| 82 | (should (equal (iso8601-parse-duration "PT1M") | 82 | (should (equal (iso8601-parse-duration "PT1M") |
| 83 | '(0 1 0 0 0 0 nil nil nil))) | 83 | '(0 1 0 0 0 0 nil -1 nil))) |
| 84 | (should (equal (iso8601-parse-duration "P0003-06-04T12:30:05") | 84 | (should (equal (iso8601-parse-duration "P0003-06-04T12:30:05") |
| 85 | '(5 30 12 4 6 3 nil nil nil)))) | 85 | '(5 30 12 4 6 3 nil -1 nil)))) |
| 86 | 86 | ||
| 87 | (ert-deftest test-iso8601-invalid () | 87 | (ert-deftest test-iso8601-invalid () |
| 88 | (should-not (iso8601-valid-p " 2008-03-02T13:47:30-01")) | 88 | (should-not (iso8601-valid-p " 2008-03-02T13:47:30-01")) |
| @@ -101,88 +101,88 @@ | |||
| 101 | (should (equal (iso8601-parse-interval "2007-03-01T13:00:00Z/P1Y2M10DT2H30M") | 101 | (should (equal (iso8601-parse-interval "2007-03-01T13:00:00Z/P1Y2M10DT2H30M") |
| 102 | '((0 0 13 1 3 2007 nil nil 0) | 102 | '((0 0 13 1 3 2007 nil nil 0) |
| 103 | (0 30 15 11 5 2008 nil nil 0) | 103 | (0 30 15 11 5 2008 nil nil 0) |
| 104 | (0 30 2 10 2 1 nil nil nil)))) | 104 | (0 30 2 10 2 1 nil -1 nil)))) |
| 105 | (should (equal (iso8601-parse-interval "P1Y2M10DT2H30M/2008-05-11T15:30:00Z") | 105 | (should (equal (iso8601-parse-interval "P1Y2M10DT2H30M/2008-05-11T15:30:00Z") |
| 106 | '((0 0 13 1 3 2007 nil nil 0) | 106 | '((0 0 13 1 3 2007 nil nil 0) |
| 107 | (0 30 15 11 5 2008 nil nil 0) | 107 | (0 30 15 11 5 2008 nil nil 0) |
| 108 | (0 30 2 10 2 1 nil nil nil))))) | 108 | (0 30 2 10 2 1 nil -1 nil))))) |
| 109 | 109 | ||
| 110 | (ert-deftest standard-test-dates () | 110 | (ert-deftest standard-test-dates () |
| 111 | (should (equal (iso8601-parse-date "19850412") | 111 | (should (equal (iso8601-parse-date "19850412") |
| 112 | '(nil nil nil 12 4 1985 nil nil nil))) | 112 | '(nil nil nil 12 4 1985 nil -1 nil))) |
| 113 | (should (equal (iso8601-parse-date "1985-04-12") | 113 | (should (equal (iso8601-parse-date "1985-04-12") |
| 114 | '(nil nil nil 12 4 1985 nil nil nil))) | 114 | '(nil nil nil 12 4 1985 nil -1 nil))) |
| 115 | 115 | ||
| 116 | (should (equal (iso8601-parse-date "1985102") | 116 | (should (equal (iso8601-parse-date "1985102") |
| 117 | '(nil nil nil 12 4 1985 nil nil nil))) | 117 | '(nil nil nil 12 4 1985 nil -1 nil))) |
| 118 | (should (equal (iso8601-parse-date "1985-102") | 118 | (should (equal (iso8601-parse-date "1985-102") |
| 119 | '(nil nil nil 12 4 1985 nil nil nil))) | 119 | '(nil nil nil 12 4 1985 nil -1 nil))) |
| 120 | 120 | ||
| 121 | (should (equal (iso8601-parse-date "1985W155") | 121 | (should (equal (iso8601-parse-date "1985W155") |
| 122 | '(nil nil nil 12 4 1985 nil nil nil))) | 122 | '(nil nil nil 12 4 1985 nil -1 nil))) |
| 123 | (should (equal (iso8601-parse-date "1985-W15-5") | 123 | (should (equal (iso8601-parse-date "1985-W15-5") |
| 124 | '(nil nil nil 12 4 1985 nil nil nil))) | 124 | '(nil nil nil 12 4 1985 nil -1 nil))) |
| 125 | 125 | ||
| 126 | (should (equal (iso8601-parse-date "1985W15") | 126 | (should (equal (iso8601-parse-date "1985W15") |
| 127 | '(nil nil nil 7 4 1985 nil nil nil))) | 127 | '(nil nil nil 7 4 1985 nil -1 nil))) |
| 128 | (should (equal (iso8601-parse-date "1985-W15") | 128 | (should (equal (iso8601-parse-date "1985-W15") |
| 129 | '(nil nil nil 7 4 1985 nil nil nil))) | 129 | '(nil nil nil 7 4 1985 nil -1 nil))) |
| 130 | 130 | ||
| 131 | (should (equal (iso8601-parse-date "1985-04") | 131 | (should (equal (iso8601-parse-date "1985-04") |
| 132 | '(nil nil nil nil 4 1985 nil nil nil))) | 132 | '(nil nil nil nil 4 1985 nil -1 nil))) |
| 133 | 133 | ||
| 134 | (should (equal (iso8601-parse-date "1985") | 134 | (should (equal (iso8601-parse-date "1985") |
| 135 | '(nil nil nil nil nil 1985 nil nil nil))) | 135 | '(nil nil nil nil nil 1985 nil -1 nil))) |
| 136 | 136 | ||
| 137 | (should (equal (iso8601-parse-date "+1985-04-12") | 137 | (should (equal (iso8601-parse-date "+1985-04-12") |
| 138 | '(nil nil nil 12 4 1985 nil nil nil))) | 138 | '(nil nil nil 12 4 1985 nil -1 nil))) |
| 139 | (should (equal (iso8601-parse-date "+19850412") | 139 | (should (equal (iso8601-parse-date "+19850412") |
| 140 | '(nil nil nil 12 4 1985 nil nil nil)))) | 140 | '(nil nil nil 12 4 1985 nil -1 nil)))) |
| 141 | 141 | ||
| 142 | (ert-deftest standard-test-time-of-day-local-time () | 142 | (ert-deftest standard-test-time-of-day-local-time () |
| 143 | (should (equal (iso8601-parse-time "152746") | 143 | (should (equal (iso8601-parse-time "152746") |
| 144 | '(46 27 15 nil nil nil nil nil nil))) | 144 | '(46 27 15 nil nil nil nil -1 nil))) |
| 145 | (should (equal (iso8601-parse-time "15:27:46") | 145 | (should (equal (iso8601-parse-time "15:27:46") |
| 146 | '(46 27 15 nil nil nil nil nil nil))) | 146 | '(46 27 15 nil nil nil nil -1 nil))) |
| 147 | 147 | ||
| 148 | (should (equal (iso8601-parse-time "1528") | 148 | (should (equal (iso8601-parse-time "1528") |
| 149 | '(0 28 15 nil nil nil nil nil nil))) | 149 | '(0 28 15 nil nil nil nil -1 nil))) |
| 150 | (should (equal (iso8601-parse-time "15:28") | 150 | (should (equal (iso8601-parse-time "15:28") |
| 151 | '(0 28 15 nil nil nil nil nil nil))) | 151 | '(0 28 15 nil nil nil nil -1 nil))) |
| 152 | 152 | ||
| 153 | (should (equal (iso8601-parse-time "15") | 153 | (should (equal (iso8601-parse-time "15") |
| 154 | '(0 0 15 nil nil nil nil nil nil)))) | 154 | '(0 0 15 nil nil nil nil -1 nil)))) |
| 155 | 155 | ||
| 156 | (ert-deftest standard-test-time-of-day-fractions () | 156 | (ert-deftest standard-test-time-of-day-fractions () |
| 157 | (should (equal (iso8601-parse-time "152735,5" t) | 157 | (should (equal (iso8601-parse-time "152735,5" t) |
| 158 | '((355 . 10) 27 15 nil nil nil nil nil nil))) | 158 | '((355 . 10) 27 15 nil nil nil nil -1 nil))) |
| 159 | (should (equal (iso8601-parse-time "15:27:35,5" t) | 159 | (should (equal (iso8601-parse-time "15:27:35,5" t) |
| 160 | '((355 . 10) 27 15 nil nil nil nil nil nil))) | 160 | '((355 . 10) 27 15 nil nil nil nil -1 nil))) |
| 161 | 161 | ||
| 162 | (should (equal (iso8601-parse-time "2320,5" t) | 162 | (should (equal (iso8601-parse-time "2320,5" t) |
| 163 | '(30 20 23 nil nil nil nil nil nil))) | 163 | '(30 20 23 nil nil nil nil -1 nil))) |
| 164 | (should (equal (iso8601-parse-time "23:20,8" t) | 164 | (should (equal (iso8601-parse-time "23:20,8" t) |
| 165 | '(48 20 23 nil nil nil nil nil nil))) | 165 | '(48 20 23 nil nil nil nil -1 nil))) |
| 166 | 166 | ||
| 167 | (should (equal (iso8601-parse-time "23,3" t) | 167 | (should (equal (iso8601-parse-time "23,3" t) |
| 168 | '(0 18 23 nil nil nil nil nil nil)))) | 168 | '(0 18 23 nil nil nil nil -1 nil)))) |
| 169 | 169 | ||
| 170 | (ert-deftest nonstandard-test-time-of-day-decimals () | 170 | (ert-deftest nonstandard-test-time-of-day-decimals () |
| 171 | (should (equal (iso8601-parse-time "15:27:35.123" t) | 171 | (should (equal (iso8601-parse-time "15:27:35.123" t) |
| 172 | '((35123 . 1000) 27 15 nil nil nil nil nil nil))) | 172 | '((35123 . 1000) 27 15 nil nil nil nil -1 nil))) |
| 173 | (should (equal (iso8601-parse-time "15:27:35.123456789" t) | 173 | (should (equal (iso8601-parse-time "15:27:35.123456789" t) |
| 174 | '((35123456789 . 1000000000) 27 15 nil nil nil nil nil nil)))) | 174 | '((35123456789 . 1000000000) 27 15 nil nil nil nil -1 nil)))) |
| 175 | 175 | ||
| 176 | (ert-deftest standard-test-time-of-day-beginning-of-day () | 176 | (ert-deftest standard-test-time-of-day-beginning-of-day () |
| 177 | (should (equal (iso8601-parse-time "000000") | 177 | (should (equal (iso8601-parse-time "000000") |
| 178 | '(0 0 0 nil nil nil nil nil nil))) | 178 | '(0 0 0 nil nil nil nil -1 nil))) |
| 179 | (should (equal (iso8601-parse-time "00:00:00") | 179 | (should (equal (iso8601-parse-time "00:00:00") |
| 180 | '(0 0 0 nil nil nil nil nil nil))) | 180 | '(0 0 0 nil nil nil nil -1 nil))) |
| 181 | 181 | ||
| 182 | (should (equal (iso8601-parse-time "0000") | 182 | (should (equal (iso8601-parse-time "0000") |
| 183 | '(0 0 0 nil nil nil nil nil nil))) | 183 | '(0 0 0 nil nil nil nil -1 nil))) |
| 184 | (should (equal (iso8601-parse-time "00:00") | 184 | (should (equal (iso8601-parse-time "00:00") |
| 185 | '(0 0 0 nil nil nil nil nil nil)))) | 185 | '(0 0 0 nil nil nil nil -1 nil)))) |
| 186 | 186 | ||
| 187 | (ert-deftest standard-test-time-of-day-utc () | 187 | (ert-deftest standard-test-time-of-day-utc () |
| 188 | (should (equal (iso8601-parse-time "232030Z") | 188 | (should (equal (iso8601-parse-time "232030Z") |
| @@ -222,9 +222,9 @@ | |||
| 222 | 222 | ||
| 223 | (ert-deftest standard-test-date-and-time-of-day () | 223 | (ert-deftest standard-test-date-and-time-of-day () |
| 224 | (should (equal (iso8601-parse "19850412T101530") | 224 | (should (equal (iso8601-parse "19850412T101530") |
| 225 | '(30 15 10 12 4 1985 nil nil nil))) | 225 | '(30 15 10 12 4 1985 nil -1 nil))) |
| 226 | (should (equal (iso8601-parse "1985-04-12T10:15:30") | 226 | (should (equal (iso8601-parse "1985-04-12T10:15:30") |
| 227 | '(30 15 10 12 4 1985 nil nil nil))) | 227 | '(30 15 10 12 4 1985 nil -1 nil))) |
| 228 | 228 | ||
| 229 | (should (equal (iso8601-parse "1985102T235030Z") | 229 | (should (equal (iso8601-parse "1985102T235030Z") |
| 230 | '(30 50 23 12 4 1985 nil nil 0))) | 230 | '(30 50 23 12 4 1985 nil nil 0))) |
| @@ -232,9 +232,9 @@ | |||
| 232 | '(30 50 23 12 4 1985 nil nil 0))) | 232 | '(30 50 23 12 4 1985 nil nil 0))) |
| 233 | 233 | ||
| 234 | (should (equal (iso8601-parse "1985W155T235030") | 234 | (should (equal (iso8601-parse "1985W155T235030") |
| 235 | '(30 50 23 12 4 1985 nil nil nil))) | 235 | '(30 50 23 12 4 1985 nil -1 nil))) |
| 236 | (should (equal (iso8601-parse "1985-W155T23:50:30") | 236 | (should (equal (iso8601-parse "1985-W155T23:50:30") |
| 237 | '(30 50 23 12 4 1985 nil nil nil)))) | 237 | '(30 50 23 12 4 1985 nil -1 nil)))) |
| 238 | 238 | ||
| 239 | (ert-deftest standard-test-interval () | 239 | (ert-deftest standard-test-interval () |
| 240 | ;; A time interval starting at 20 minutes and 50 seconds past 23 | 240 | ;; A time interval starting at 20 minutes and 50 seconds past 23 |
| @@ -256,48 +256,48 @@ | |||
| 256 | ;; This example doesn't seem valid according to the standard. | 256 | ;; This example doesn't seem valid according to the standard. |
| 257 | ;; "0625" is unambiguous, and means "the year 625". Weird. | 257 | ;; "0625" is unambiguous, and means "the year 625". Weird. |
| 258 | ;; (should (equal (iso8601-parse-interval "19850412/0625") | 258 | ;; (should (equal (iso8601-parse-interval "19850412/0625") |
| 259 | ;; '((nil nil nil 12 4 1985 nil nil nil) | 259 | ;; '((nil nil nil 12 4 1985 nil -1 nil) |
| 260 | ;; (nil nil nil nil nil 625 nil nil nil) | 260 | ;; (nil nil nil nil nil 625 nil -1 nil) |
| 261 | ;; (0 17 0 22 9 609 5 nil 0)))) | 261 | ;; (0 17 0 22 9 609 5 nil 0)))) |
| 262 | 262 | ||
| 263 | ;; A time interval of 2 years, 10 months, 15 days, 10 hours, 20 | 263 | ;; A time interval of 2 years, 10 months, 15 days, 10 hours, 20 |
| 264 | ;; minutes and 30 seconds. | 264 | ;; minutes and 30 seconds. |
| 265 | (should (equal (iso8601-parse-duration "P2Y10M15DT10H20M30S") | 265 | (should (equal (iso8601-parse-duration "P2Y10M15DT10H20M30S") |
| 266 | '(30 20 10 15 10 2 nil nil nil))) | 266 | '(30 20 10 15 10 2 nil -1 nil))) |
| 267 | 267 | ||
| 268 | (should (equal (iso8601-parse-duration "P00021015T102030") | 268 | (should (equal (iso8601-parse-duration "P00021015T102030") |
| 269 | '(30 20 10 15 10 2 nil nil nil))) | 269 | '(30 20 10 15 10 2 nil -1 nil))) |
| 270 | (should (equal (iso8601-parse-duration "P0002-10-15T10:20:30") | 270 | (should (equal (iso8601-parse-duration "P0002-10-15T10:20:30") |
| 271 | '(30 20 10 15 10 2 nil nil nil))) | 271 | '(30 20 10 15 10 2 nil -1 nil))) |
| 272 | 272 | ||
| 273 | ;; A time interval of 1 year and 6 months. | 273 | ;; A time interval of 1 year and 6 months. |
| 274 | (should (equal (iso8601-parse-duration "P1Y6M") | 274 | (should (equal (iso8601-parse-duration "P1Y6M") |
| 275 | '(0 0 0 0 6 1 nil nil nil))) | 275 | '(0 0 0 0 6 1 nil -1 nil))) |
| 276 | (should (equal (iso8601-parse-duration "P0001-06") | 276 | (should (equal (iso8601-parse-duration "P0001-06") |
| 277 | '(nil nil nil nil 6 1 nil nil nil))) | 277 | '(nil nil nil nil 6 1 nil -1 nil))) |
| 278 | 278 | ||
| 279 | ;; A time interval of seventy-two hours. | 279 | ;; A time interval of seventy-two hours. |
| 280 | (should (equal (iso8601-parse-duration "PT72H") | 280 | (should (equal (iso8601-parse-duration "PT72H") |
| 281 | '(0 0 72 0 0 0 nil nil nil))) | 281 | '(0 0 72 0 0 0 nil -1 nil))) |
| 282 | 282 | ||
| 283 | ;; Defined by start and duration | 283 | ;; Defined by start and duration |
| 284 | ;; A time interval of 1 year, 2 months, 15 days and 12 hours, | 284 | ;; A time interval of 1 year, 2 months, 15 days and 12 hours, |
| 285 | ;; beginning on 12 April 1985 at 20 minutes past 23 hours. | 285 | ;; beginning on 12 April 1985 at 20 minutes past 23 hours. |
| 286 | (should (equal (iso8601-parse-interval "19850412T232000/P1Y2M15DT12H") | 286 | (should (equal (iso8601-parse-interval "19850412T232000/P1Y2M15DT12H") |
| 287 | '((0 20 23 12 4 1985 nil nil nil) | 287 | '((0 20 23 12 4 1985 nil -1 nil) |
| 288 | (0 20 11 28 6 1986 nil nil nil) | 288 | (0 20 11 28 6 1986 nil -1 nil) |
| 289 | (0 0 12 15 2 1 nil nil nil)))) | 289 | (0 0 12 15 2 1 nil -1 nil)))) |
| 290 | (should (equal (iso8601-parse-interval "1985-04-12T23:20:00/P1Y2M15DT12H") | 290 | (should (equal (iso8601-parse-interval "1985-04-12T23:20:00/P1Y2M15DT12H") |
| 291 | '((0 20 23 12 4 1985 nil nil nil) | 291 | '((0 20 23 12 4 1985 nil -1 nil) |
| 292 | (0 20 11 28 6 1986 nil nil nil) | 292 | (0 20 11 28 6 1986 nil -1 nil) |
| 293 | (0 0 12 15 2 1 nil nil nil)))) | 293 | (0 0 12 15 2 1 nil -1 nil)))) |
| 294 | 294 | ||
| 295 | ;; Defined by duration and end | 295 | ;; Defined by duration and end |
| 296 | ;; A time interval of 1 year, 2 months, 15 days and 12 hours, ending | 296 | ;; A time interval of 1 year, 2 months, 15 days and 12 hours, ending |
| 297 | ;; on 12 April 1985 at 20 minutes past 23 hour. | 297 | ;; on 12 April 1985 at 20 minutes past 23 hour. |
| 298 | (should (equal (iso8601-parse-interval "P1Y2M15DT12H/19850412T232000") | 298 | (should (equal (iso8601-parse-interval "P1Y2M15DT12H/19850412T232000") |
| 299 | '((0 20 11 28 1 1984 nil nil nil) | 299 | '((0 20 11 28 1 1984 nil -1 nil) |
| 300 | (0 20 23 12 4 1985 nil nil nil) | 300 | (0 20 23 12 4 1985 nil -1 nil) |
| 301 | (0 0 12 15 2 1 nil nil nil))))) | 301 | (0 0 12 15 2 1 nil -1 nil))))) |
| 302 | 302 | ||
| 303 | ;;; iso8601-tests.el ends here | 303 | ;;; iso8601-tests.el ends here |