aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorPaul Eggert2019-08-16 22:09:04 -0700
committerPaul Eggert2019-08-16 23:25:07 -0700
commit37257d6acadff17bd1e52cfa460950bcb684c5c3 (patch)
treeab7088cfa725561c8456f388cff79466948b3532 /test
parentd7c9ed8445d13de7350be3360d68717362f89929 (diff)
downloademacs-37257d6acadff17bd1e52cfa460950bcb684c5c3.tar.gz
emacs-37257d6acadff17bd1e52cfa460950bcb684c5c3.zip
More-compatible subsecond calendrical timestamps
Instead of appending a subseconds member to the result of ‘decode-time’, this keeps the format unchanged unless you give a new optional argument to ‘decode-time’. Also, the augmented format now puts the subsecond info in the SECONDS element, so the total number of elements is unchanged; this is more compatible with code that expects the traditional 9 elements, such as ‘(pcase decoded-time (`(,SEC ,MIN ,HOUR ,DAY ,MON ,YEAR ,DOW ,DST ,ZONE) ...) ...)’. * doc/lispref/os.texi, doc/misc/emacs-mime.texi, etc/NEWS: * lisp/net/soap-client.el (soap-decode-date-time): * lisp/simple.el (decoded-time): Document the new behavior. * lisp/calendar/icalendar.el (icalendar--decode-isodatetime): * lisp/calendar/iso8601.el (iso8601-parse) (iso8601-parse-time, iso8601-parse-duration) (iso8601--decoded-time): * lisp/calendar/parse-time.el (parse-time-string): * lisp/calendar/time-date.el (decoded-time-add) (decoded-time--alter-second): * lisp/org/org.el (org-parse-time-string): * lisp/simple.el (decoded-time): * src/timefns.c (Fdecode_time, Fencode_time): * test/lisp/calendar/icalendar-tests.el: (icalendar--decode-isodatetime): * 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-fractions) (standard-test-time-of-day-beginning-of-day) (standard-test-time-of-day-utc) (standard-test-time-of-day-zone) (standard-test-date-and-time-of-day, standard-test-interval): * test/lisp/calendar/parse-time-tests.el (parse-time-tests): * test/src/timefns-tests.el (format-time-string-with-zone) (encode-time-dst-numeric-zone): Revert recent changes that added a SUBSECS member to calendrical timestamps, since that component is no longer present (the info, if any, is now in the SECONDS member). * lisp/calendar/time-date.el (decoded-time-add) (decoded-time--alter-second): Support fractional seconds in the new form. Simplify. * src/timefns.c (Fdecode_time): Support new arg FORM. (Fencode_time): Support subsecond resolution. * test/src/timefns-tests.el (format-time-string-with-zone) (decode-then-encode-time): Test subsecond calendrical timestamps.
Diffstat (limited to 'test')
-rw-r--r--test/lisp/calendar/icalendar-tests.el8
-rw-r--r--test/lisp/calendar/iso8601-tests.el190
-rw-r--r--test/lisp/calendar/parse-time-tests.el18
-rw-r--r--test/src/timefns-tests.el46
4 files changed, 137 insertions, 125 deletions
diff --git a/test/lisp/calendar/icalendar-tests.el b/test/lisp/calendar/icalendar-tests.el
index 060cd8c9091..baea4804045 100644
--- a/test/lisp/calendar/icalendar-tests.el
+++ b/test/lisp/calendar/icalendar-tests.el
@@ -477,18 +477,18 @@ END:VEVENT
477 477
478 ;; testcase: no time zone in input -> keep time as is 478 ;; testcase: no time zone in input -> keep time as is
479 ;; 1 Jan 2013 10:00 479 ;; 1 Jan 2013 10:00
480 (should (equal '(0 0 10 1 1 2013 2 nil 7200 0) 480 (should (equal '(0 0 10 1 1 2013 2 nil 7200)
481 (icalendar--decode-isodatetime "20130101T100000"))) 481 (icalendar--decode-isodatetime "20130101T100000")))
482 ;; 1 Aug 2013 10:00 (DST) 482 ;; 1 Aug 2013 10:00 (DST)
483 (should (equal '(0 0 10 1 8 2013 4 t 10800 0) 483 (should (equal '(0 0 10 1 8 2013 4 t 10800)
484 (icalendar--decode-isodatetime "20130801T100000"))) 484 (icalendar--decode-isodatetime "20130801T100000")))
485 485
486 ;; testcase: UTC time zone specifier in input -> convert to local time 486 ;; testcase: UTC time zone specifier in input -> convert to local time
487 ;; 31 Dec 2013 23:00 UTC -> 1 Jan 2013 01:00 EET 487 ;; 31 Dec 2013 23:00 UTC -> 1 Jan 2013 01:00 EET
488 (should (equal '(0 0 1 1 1 2014 3 nil 7200 0) 488 (should (equal '(0 0 1 1 1 2014 3 nil 7200)
489 (icalendar--decode-isodatetime "20131231T230000Z"))) 489 (icalendar--decode-isodatetime "20131231T230000Z")))
490 ;; 1 Aug 2013 10:00 UTC -> 1 Aug 2013 13:00 EEST 490 ;; 1 Aug 2013 10:00 UTC -> 1 Aug 2013 13:00 EEST
491 (should (equal '(0 0 13 1 8 2013 4 t 10800 0) 491 (should (equal '(0 0 13 1 8 2013 4 t 10800)
492 (icalendar--decode-isodatetime "20130801T100000Z"))) 492 (icalendar--decode-isodatetime "20130801T100000Z")))
493 493
494 ) 494 )
diff --git a/test/lisp/calendar/iso8601-tests.el b/test/lisp/calendar/iso8601-tests.el
index 3f1149c864d..35c319ed036 100644
--- a/test/lisp/calendar/iso8601-tests.el
+++ b/test/lisp/calendar/iso8601-tests.el
@@ -24,65 +24,65 @@
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 nil))) 27 '(nil nil nil nil nil 1985 nil nil nil)))
28 (should (equal (iso8601-parse-date "-0003") 28 (should (equal (iso8601-parse-date "-0003")
29 '(nil nil nil nil nil -4 nil nil nil nil))) 29 '(nil nil nil nil nil -4 nil nil 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 nil)))) 31 '(nil nil nil nil nil 1985 nil nil 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 nil))) 35 '(nil nil nil 14 3 1985 nil nil 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 nil))) 37 '(nil nil nil 14 3 1985 nil nil 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 nil)))) 39 '(nil nil nil nil 2 1985 nil nil 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 nil))) 43 '(nil nil nil 1 2 nil nil nil 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 nil)))) 45 '(nil nil nil 1 2 nil nil nil 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 nil))) 49 '(nil nil nil 27 9 2008 nil nil 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 nil))) 51 '(nil nil nil 29 12 2008 nil nil 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 nil)))) 53 '(nil nil nil 3 1 2010 nil nil 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 nil)))) 57 '(nil nil nil 5 4 1981 nil nil 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 0))) 61 '(30 47 13 nil nil nil nil nil 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 0))) 63 '(30 47 13 nil nil nil nil nil 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 0)))) 65 '(0 47 13 nil nil nil nil nil 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 0))) 69 '(30 47 13 2 3 2008 nil nil 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 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")
73 '(30 47 13 2 3 2008 nil nil 3600 0))) 73 '(30 47 13 2 3 2008 nil nil 3600)))
74 (should (equal (iso8601-parse "2008-03-02T13:47:30-01") 74 (should (equal (iso8601-parse "2008-03-02T13:47:30-01")
75 '(30 47 13 2 3 2008 nil nil -3600 0)))) 75 '(30 47 13 2 3 2008 nil nil -3600))))
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 0))) 79 '(5 30 12 4 6 3 nil nil 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 0))) 81 '(0 0 0 0 1 0 nil nil 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 0))) 83 '(0 1 0 0 0 0 nil nil 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 0)))) 85 '(5 30 12 4 6 3 nil nil 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"))
@@ -94,149 +94,149 @@
94(ert-deftest test-iso8601-intervals () 94(ert-deftest test-iso8601-intervals ()
95 (should (equal 95 (should (equal
96 (iso8601-parse-interval "2007-03-01T13:00:00Z/2008-05-11T15:30:00Z") 96 (iso8601-parse-interval "2007-03-01T13:00:00Z/2008-05-11T15:30:00Z")
97 '((0 0 13 1 3 2007 nil nil 0 0) 97 '((0 0 13 1 3 2007 nil nil 0)
98 (0 30 15 11 5 2008 nil nil 0 0) 98 (0 30 15 11 5 2008 nil nil 0)
99 ;; Hm... can't really use decode-time for time differences... 99 ;; Hm... can't really use decode-time for time differences...
100 (0 30 2 14 3 1971 0 nil 0 0)))) 100 (0 30 2 14 3 1971 0 nil 0))))
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 0) 102 '((0 0 13 1 3 2007 nil nil 0)
103 (0 30 15 11 5 2008 nil nil 0 0) 103 (0 30 15 11 5 2008 nil nil 0)
104 (0 30 2 10 2 1 nil nil nil 0)))) 104 (0 30 2 10 2 1 nil nil 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 0) 106 '((0 0 13 1 3 2007 nil nil 0)
107 (0 30 15 11 5 2008 nil nil 0 0) 107 (0 30 15 11 5 2008 nil nil 0)
108 (0 30 2 10 2 1 nil nil nil 0))))) 108 (0 30 2 10 2 1 nil nil 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 nil))) 112 '(nil nil nil 12 4 1985 nil nil 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 nil))) 114 '(nil nil nil 12 4 1985 nil nil 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 nil))) 117 '(nil nil nil 12 4 1985 nil nil 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 nil))) 119 '(nil nil nil 12 4 1985 nil nil 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 nil))) 122 '(nil nil nil 12 4 1985 nil nil 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 nil))) 124 '(nil nil nil 12 4 1985 nil nil 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 nil))) 127 '(nil nil nil 7 4 1985 nil nil 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 nil))) 129 '(nil nil nil 7 4 1985 nil nil 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 nil))) 132 '(nil nil nil nil 4 1985 nil nil 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 nil))) 135 '(nil nil nil nil nil 1985 nil nil 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 nil))) 138 '(nil nil nil 12 4 1985 nil nil 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 nil)))) 140 '(nil nil nil 12 4 1985 nil nil 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 0))) 144 '(46 27 15 nil nil nil nil nil 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 0))) 146 '(46 27 15 nil nil nil nil nil 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 0))) 149 '(0 28 15 nil nil nil nil nil 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 0))) 151 '(0 28 15 nil nil nil nil nil 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 0)))) 154 '(0 0 15 nil nil nil nil nil nil))))
155 155
156(ert-deftest standard-test-time-of-day-fractions () 156(ert-deftest standard-test-time-of-day-fractions ()
157 ;; decoded-time doesn't support sub-second times. 157 ;; decoded-time doesn't support sub-second times.
158 ;; (should (equal (iso8601-parse-time "152735,5") 158 ;; (should (equal (iso8601-parse-time "152735,5")
159 ;; '(46 27 15 nil nil nil nil nil nil (5 . 10)))) 159 ;; '(46 27 15 nil nil nil nil nil nil)))
160 ;; (should (equal (iso8601-parse-time "15:27:35,5") 160 ;; (should (equal (iso8601-parse-time "15:27:35,5")
161 ;; '(46 27 15 nil nil nil nil nil nil (5 . 10)))) 161 ;; '(46 27 15 nil nil nil nil nil nil)))
162 ) 162 )
163 163
164(ert-deftest standard-test-time-of-day-beginning-of-day () 164(ert-deftest standard-test-time-of-day-beginning-of-day ()
165 (should (equal (iso8601-parse-time "000000") 165 (should (equal (iso8601-parse-time "000000")
166 '(0 0 0 nil nil nil nil nil nil 0))) 166 '(0 0 0 nil nil nil nil nil nil)))
167 (should (equal (iso8601-parse-time "00:00:00") 167 (should (equal (iso8601-parse-time "00:00:00")
168 '(0 0 0 nil nil nil nil nil nil 0))) 168 '(0 0 0 nil nil nil nil nil nil)))
169 169
170 (should (equal (iso8601-parse-time "0000") 170 (should (equal (iso8601-parse-time "0000")
171 '(0 0 0 nil nil nil nil nil nil 0))) 171 '(0 0 0 nil nil nil nil nil nil)))
172 (should (equal (iso8601-parse-time "00:00") 172 (should (equal (iso8601-parse-time "00:00")
173 '(0 0 0 nil nil nil nil nil nil 0)))) 173 '(0 0 0 nil nil nil nil nil nil))))
174 174
175(ert-deftest standard-test-time-of-day-utc () 175(ert-deftest standard-test-time-of-day-utc ()
176 (should (equal (iso8601-parse-time "232030Z") 176 (should (equal (iso8601-parse-time "232030Z")
177 '(30 20 23 nil nil nil nil nil 0 0))) 177 '(30 20 23 nil nil nil nil nil 0)))
178 (should (equal (iso8601-parse-time "23:20:30Z") 178 (should (equal (iso8601-parse-time "23:20:30Z")
179 '(30 20 23 nil nil nil nil nil 0 0))) 179 '(30 20 23 nil nil nil nil nil 0)))
180 180
181 (should (equal (iso8601-parse-time "2320Z") 181 (should (equal (iso8601-parse-time "2320Z")
182 '(0 20 23 nil nil nil nil nil 0 0))) 182 '(0 20 23 nil nil nil nil nil 0)))
183 (should (equal (iso8601-parse-time "23:20Z") 183 (should (equal (iso8601-parse-time "23:20Z")
184 '(0 20 23 nil nil nil nil nil 0 0))) 184 '(0 20 23 nil nil nil nil nil 0)))
185 185
186 (should (equal (iso8601-parse-time "23Z") 186 (should (equal (iso8601-parse-time "23Z")
187 '(0 0 23 nil nil nil nil nil 0 0)))) 187 '(0 0 23 nil nil nil nil nil 0))))
188 188
189 189
190(ert-deftest standard-test-time-of-day-zone () 190(ert-deftest standard-test-time-of-day-zone ()
191 (should (equal (iso8601-parse-time "152746+0100") 191 (should (equal (iso8601-parse-time "152746+0100")
192 '(46 27 15 nil nil nil nil nil 3600 0))) 192 '(46 27 15 nil nil nil nil nil 3600)))
193 (should (equal (iso8601-parse-time "15:27:46+0100") 193 (should (equal (iso8601-parse-time "15:27:46+0100")
194 '(46 27 15 nil nil nil nil nil 3600 0))) 194 '(46 27 15 nil nil nil nil nil 3600)))
195 195
196 (should (equal (iso8601-parse-time "152746+01") 196 (should (equal (iso8601-parse-time "152746+01")
197 '(46 27 15 nil nil nil nil nil 3600 0))) 197 '(46 27 15 nil nil nil nil nil 3600)))
198 (should (equal (iso8601-parse-time "15:27:46+01") 198 (should (equal (iso8601-parse-time "15:27:46+01")
199 '(46 27 15 nil nil nil nil nil 3600 0))) 199 '(46 27 15 nil nil nil nil nil 3600)))
200 200
201 (should (equal (iso8601-parse-time "152746-0500") 201 (should (equal (iso8601-parse-time "152746-0500")
202 '(46 27 15 nil nil nil nil nil -18000 0))) 202 '(46 27 15 nil nil nil nil nil -18000)))
203 (should (equal (iso8601-parse-time "15:27:46-0500") 203 (should (equal (iso8601-parse-time "15:27:46-0500")
204 '(46 27 15 nil nil nil nil nil -18000 0))) 204 '(46 27 15 nil nil nil nil nil -18000)))
205 205
206 (should (equal (iso8601-parse-time "152746-05") 206 (should (equal (iso8601-parse-time "152746-05")
207 '(46 27 15 nil nil nil nil nil -18000 0))) 207 '(46 27 15 nil nil nil nil nil -18000)))
208 (should (equal (iso8601-parse-time "15:27:46-05") 208 (should (equal (iso8601-parse-time "15:27:46-05")
209 '(46 27 15 nil nil nil nil nil -18000 0)))) 209 '(46 27 15 nil nil nil nil nil -18000))))
210 210
211(ert-deftest standard-test-date-and-time-of-day () 211(ert-deftest standard-test-date-and-time-of-day ()
212 (should (equal (iso8601-parse "19850412T101530") 212 (should (equal (iso8601-parse "19850412T101530")
213 '(30 15 10 12 4 1985 nil nil nil 0))) 213 '(30 15 10 12 4 1985 nil nil nil)))
214 (should (equal (iso8601-parse "1985-04-12T10:15:30") 214 (should (equal (iso8601-parse "1985-04-12T10:15:30")
215 '(30 15 10 12 4 1985 nil nil nil 0))) 215 '(30 15 10 12 4 1985 nil nil nil)))
216 216
217 (should (equal (iso8601-parse "1985102T235030Z") 217 (should (equal (iso8601-parse "1985102T235030Z")
218 '(30 50 23 12 4 1985 nil nil 0 0))) 218 '(30 50 23 12 4 1985 nil nil 0)))
219 (should (equal (iso8601-parse "1985-102T23:50:30Z") 219 (should (equal (iso8601-parse "1985-102T23:50:30Z")
220 '(30 50 23 12 4 1985 nil nil 0 0))) 220 '(30 50 23 12 4 1985 nil nil 0)))
221 221
222 (should (equal (iso8601-parse "1985W155T235030") 222 (should (equal (iso8601-parse "1985W155T235030")
223 '(30 50 23 12 4 1985 nil nil nil 0))) 223 '(30 50 23 12 4 1985 nil nil nil)))
224 (should (equal (iso8601-parse "1985-W155T23:50:30") 224 (should (equal (iso8601-parse "1985-W155T23:50:30")
225 '(30 50 23 12 4 1985 nil nil nil 0)))) 225 '(30 50 23 12 4 1985 nil nil nil))))
226 226
227(ert-deftest standard-test-interval () 227(ert-deftest standard-test-interval ()
228 ;; A time interval starting at 20 minutes and 50 seconds past 23 228 ;; A time interval starting at 20 minutes and 50 seconds past 23
229 ;; hours on 12 April 1985 and ending at 30 minutes past 10 hours on 229 ;; hours on 12 April 1985 and ending at 30 minutes past 10 hours on
230 ;; 25 June 1985. 230 ;; 25 June 1985.
231 (should (equal (iso8601-parse-interval "19850412T232050Z/19850625T103000Z") 231 (should (equal (iso8601-parse-interval "19850412T232050Z/19850625T103000Z")
232 '((50 20 23 12 4 1985 nil nil 0 0) 232 '((50 20 23 12 4 1985 nil nil 0)
233 (0 30 10 25 6 1985 nil nil 0 0) 233 (0 30 10 25 6 1985 nil nil 0)
234 (10 9 11 15 3 1970 0 nil 0 0)))) 234 (10 9 11 15 3 1970 0 nil 0))))
235 (should (equal (iso8601-parse-interval 235 (should (equal (iso8601-parse-interval
236 "1985-04-12T23:20:50Z/1985-06-25T10:30:00Z") 236 "1985-04-12T23:20:50Z/1985-06-25T10:30:00Z")
237 '((50 20 23 12 4 1985 nil nil 0 0) 237 '((50 20 23 12 4 1985 nil nil 0)
238 (0 30 10 25 6 1985 nil nil 0 0) 238 (0 30 10 25 6 1985 nil nil 0)
239 (10 9 11 15 3 1970 0 nil 0 0)))) 239 (10 9 11 15 3 1970 0 nil 0))))
240 240
241 ;; A time interval starting at 12 April 1985 and ending on 25 June 241 ;; A time interval starting at 12 April 1985 and ending on 25 June
242 ;; 1985. 242 ;; 1985.
@@ -251,41 +251,41 @@
251 ;; A time interval of 2 years, 10 months, 15 days, 10 hours, 20 251 ;; A time interval of 2 years, 10 months, 15 days, 10 hours, 20
252 ;; minutes and 30 seconds. 252 ;; minutes and 30 seconds.
253 (should (equal (iso8601-parse-duration "P2Y10M15DT10H20M30S") 253 (should (equal (iso8601-parse-duration "P2Y10M15DT10H20M30S")
254 '(30 20 10 15 10 2 nil nil nil 0))) 254 '(30 20 10 15 10 2 nil nil nil)))
255 255
256 (should (equal (iso8601-parse-duration "P00021015T102030") 256 (should (equal (iso8601-parse-duration "P00021015T102030")
257 '(30 20 10 15 10 2 nil nil nil 0))) 257 '(30 20 10 15 10 2 nil nil nil)))
258 (should (equal (iso8601-parse-duration "P0002-10-15T10:20:30") 258 (should (equal (iso8601-parse-duration "P0002-10-15T10:20:30")
259 '(30 20 10 15 10 2 nil nil nil 0))) 259 '(30 20 10 15 10 2 nil nil nil)))
260 260
261 ;; A time interval of 1 year and 6 months. 261 ;; A time interval of 1 year and 6 months.
262 (should (equal (iso8601-parse-duration "P1Y6M") 262 (should (equal (iso8601-parse-duration "P1Y6M")
263 '(0 0 0 0 6 1 nil nil nil 0))) 263 '(0 0 0 0 6 1 nil nil nil)))
264 (should (equal (iso8601-parse-duration "P0001-06") 264 (should (equal (iso8601-parse-duration "P0001-06")
265 '(nil nil nil nil 6 1 nil nil nil nil))) 265 '(nil nil nil nil 6 1 nil nil nil)))
266 266
267 ;; A time interval of seventy-two hours. 267 ;; A time interval of seventy-two hours.
268 (should (equal (iso8601-parse-duration "PT72H") 268 (should (equal (iso8601-parse-duration "PT72H")
269 '(0 0 72 0 0 0 nil nil nil 0))) 269 '(0 0 72 0 0 0 nil nil nil)))
270 270
271 ;; Defined by start and duration 271 ;; Defined by start and duration
272 ;; A time interval of 1 year, 2 months, 15 days and 12 hours, 272 ;; A time interval of 1 year, 2 months, 15 days and 12 hours,
273 ;; beginning on 12 April 1985 at 20 minutes past 23 hours. 273 ;; beginning on 12 April 1985 at 20 minutes past 23 hours.
274 (should (equal (iso8601-parse-interval "19850412T232000/P1Y2M15DT12H") 274 (should (equal (iso8601-parse-interval "19850412T232000/P1Y2M15DT12H")
275 '((0 20 23 12 4 1985 nil nil nil 0) 275 '((0 20 23 12 4 1985 nil nil nil)
276 (0 20 11 28 6 1986 nil nil nil 0) 276 (0 20 11 28 6 1986 nil nil nil)
277 (0 0 12 15 2 1 nil nil nil 0)))) 277 (0 0 12 15 2 1 nil nil nil))))
278 (should (equal (iso8601-parse-interval "1985-04-12T23:20:00/P1Y2M15DT12H") 278 (should (equal (iso8601-parse-interval "1985-04-12T23:20:00/P1Y2M15DT12H")
279 '((0 20 23 12 4 1985 nil nil nil 0) 279 '((0 20 23 12 4 1985 nil nil nil)
280 (0 20 11 28 6 1986 nil nil nil 0) 280 (0 20 11 28 6 1986 nil nil nil)
281 (0 0 12 15 2 1 nil nil nil 0)))) 281 (0 0 12 15 2 1 nil nil nil))))
282 282
283 ;; Defined by duration and end 283 ;; Defined by duration and end
284 ;; A time interval of 1 year, 2 months, 15 days and 12 hours, ending 284 ;; A time interval of 1 year, 2 months, 15 days and 12 hours, ending
285 ;; on 12 April 1985 at 20 minutes past 23 hour. 285 ;; on 12 April 1985 at 20 minutes past 23 hour.
286 (should (equal (iso8601-parse-interval "P1Y2M15DT12H/19850412T232000") 286 (should (equal (iso8601-parse-interval "P1Y2M15DT12H/19850412T232000")
287 '((0 20 11 28 1 1984 nil nil nil 0) 287 '((0 20 11 28 1 1984 nil nil nil)
288 (0 20 23 12 4 1985 nil nil nil 0) 288 (0 20 23 12 4 1985 nil nil nil)
289 (0 0 12 15 2 1 nil nil nil 0))))) 289 (0 0 12 15 2 1 nil nil nil)))))
290 290
291;;; iso8601-tests.el ends here 291;;; iso8601-tests.el ends here
diff --git a/test/lisp/calendar/parse-time-tests.el b/test/lisp/calendar/parse-time-tests.el
index 61a3838a52b..7435620b71f 100644
--- a/test/lisp/calendar/parse-time-tests.el
+++ b/test/lisp/calendar/parse-time-tests.el
@@ -28,23 +28,23 @@
28 28
29(ert-deftest parse-time-tests () 29(ert-deftest parse-time-tests ()
30 (should (equal (parse-time-string "Mon, 22 Feb 2016 19:35:42 +0100") 30 (should (equal (parse-time-string "Mon, 22 Feb 2016 19:35:42 +0100")
31 '(42 35 19 22 2 2016 1 -1 3600 0))) 31 '(42 35 19 22 2 2016 1 -1 3600)))
32 (should (equal (parse-time-string "22 Feb 2016 19:35:42 +0100") 32 (should (equal (parse-time-string "22 Feb 2016 19:35:42 +0100")
33 '(42 35 19 22 2 2016 nil -1 3600 0))) 33 '(42 35 19 22 2 2016 nil -1 3600)))
34 (should (equal (parse-time-string "22 Feb 2016 +0100") 34 (should (equal (parse-time-string "22 Feb 2016 +0100")
35 '(nil nil nil 22 2 2016 nil -1 3600 nil))) 35 '(nil nil nil 22 2 2016 nil -1 3600)))
36 (should (equal (parse-time-string "Mon, 22 Feb 16 19:35:42 +0100") 36 (should (equal (parse-time-string "Mon, 22 Feb 16 19:35:42 +0100")
37 '(42 35 19 22 2 2016 1 -1 3600 0))) 37 '(42 35 19 22 2 2016 1 -1 3600)))
38 (should (equal (parse-time-string "Mon, 22 February 2016 19:35:42 +0100") 38 (should (equal (parse-time-string "Mon, 22 February 2016 19:35:42 +0100")
39 '(42 35 19 22 2 2016 1 -1 3600 0))) 39 '(42 35 19 22 2 2016 1 -1 3600)))
40 (should (equal (parse-time-string "Mon, 22 feb 2016 19:35:42 +0100") 40 (should (equal (parse-time-string "Mon, 22 feb 2016 19:35:42 +0100")
41 '(42 35 19 22 2 2016 1 -1 3600 0))) 41 '(42 35 19 22 2 2016 1 -1 3600)))
42 (should (equal (parse-time-string "Monday, 22 february 2016 19:35:42 +0100") 42 (should (equal (parse-time-string "Monday, 22 february 2016 19:35:42 +0100")
43 '(42 35 19 22 2 2016 1 -1 3600 0))) 43 '(42 35 19 22 2 2016 1 -1 3600)))
44 (should (equal (parse-time-string "Monday, 22 february 2016 19:35:42 PST") 44 (should (equal (parse-time-string "Monday, 22 february 2016 19:35:42 PST")
45 '(42 35 19 22 2 2016 1 nil -28800 0))) 45 '(42 35 19 22 2 2016 1 nil -28800)))
46 (should (equal (parse-time-string "Friday, 21 Sep 2018 13:47:58 PDT") 46 (should (equal (parse-time-string "Friday, 21 Sep 2018 13:47:58 PDT")
47 '(58 47 13 21 9 2018 5 t -25200 0))) 47 '(58 47 13 21 9 2018 5 t -25200)))
48 (should (equal (format-time-string 48 (should (equal (format-time-string
49 "%Y-%m-%d %H:%M:%S" 49 "%Y-%m-%d %H:%M:%S"
50 (parse-iso8601-time-string "1998-09-12T12:21:54-0200") t) 50 (parse-iso8601-time-string "1998-09-12T12:21:54-0200") t)
diff --git a/test/src/timefns-tests.el b/test/src/timefns-tests.el
index 362e7655a91..13ab7d83c3e 100644
--- a/test/src/timefns-tests.el
+++ b/test/src/timefns-tests.el
@@ -40,25 +40,31 @@
40 (7879679999900 . 100000) 40 (7879679999900 . 100000)
41 (78796799999999999999 . 1000000000000))) 41 (78796799999999999999 . 1000000000000)))
42 ;; UTC. 42 ;; UTC.
43 (let ((subsec (time-subtract (time-convert look t) 43 (let ((sec (time-add 59 (time-subtract (time-convert look t)
44 (time-convert look 'integer)))) 44 (time-convert look 'integer)))))
45 (should (string-equal 45 (should (string-equal
46 (format-time-string "%Y-%m-%d %H:%M:%S.%3N %z" look t) 46 (format-time-string "%Y-%m-%d %H:%M:%S.%3N %z" look t)
47 "1972-06-30 23:59:59.999 +0000")) 47 "1972-06-30 23:59:59.999 +0000"))
48 (should (equal (decode-time look t) 48 (should (equal (decode-time look t 'integer)
49 (list 59 59 23 30 6 1972 5 nil 0 subsec))) 49 '(59 59 23 30 6 1972 5 nil 0)))
50 (should (equal (decode-time look t t)
51 (list sec 59 23 30 6 1972 5 nil 0)))
50 ;; "UTC0". 52 ;; "UTC0".
51 (should (string-equal 53 (should (string-equal
52 (format-time-string format look "UTC0") 54 (format-time-string format look "UTC0")
53 "1972-06-30 23:59:59.999 +0000 (UTC)")) 55 "1972-06-30 23:59:59.999 +0000 (UTC)"))
54 (should (equal (decode-time look "UTC0") 56 (should (equal (decode-time look "UTC0" 'integer)
55 (list 59 59 23 30 6 1972 5 nil 0 subsec))) 57 '(59 59 23 30 6 1972 5 nil 0)))
58 (should (equal (decode-time look "UTC0" t)
59 (list sec 59 23 30 6 1972 5 nil 0)))
56 ;; Negative UTC offset, as a Lisp list. 60 ;; Negative UTC offset, as a Lisp list.
57 (should (string-equal 61 (should (string-equal
58 (format-time-string format look '(-28800 "PST")) 62 (format-time-string format look '(-28800 "PST"))
59 "1972-06-30 15:59:59.999 -0800 (PST)")) 63 "1972-06-30 15:59:59.999 -0800 (PST)"))
60 (should (equal (decode-time look '(-28800 "PST")) 64 (should (equal (decode-time look '(-28800 "PST") 'integer)
61 (list 59 59 15 30 6 1972 5 nil -28800 subsec))) 65 '(59 59 15 30 6 1972 5 nil -28800)))
66 (should (equal (decode-time look '(-28800 "PST") t)
67 (list sec 59 15 30 6 1972 5 nil -28800)))
62 ;; Negative UTC offset, as a Lisp integer. 68 ;; Negative UTC offset, as a Lisp integer.
63 (should (string-equal 69 (should (string-equal
64 (format-time-string format look -28800) 70 (format-time-string format look -28800)
@@ -67,14 +73,18 @@
67 (if (eq system-type 'windows-nt) 73 (if (eq system-type 'windows-nt)
68 "1972-06-30 15:59:59.999 -0800 (ZZZ)" 74 "1972-06-30 15:59:59.999 -0800 (ZZZ)"
69 "1972-06-30 15:59:59.999 -0800 (-08)"))) 75 "1972-06-30 15:59:59.999 -0800 (-08)")))
70 (should (equal (decode-time look -28800) 76 (should (equal (decode-time look -28800 'integer)
71 (list 59 59 15 30 6 1972 5 nil -28800 subsec))) 77 '(59 59 15 30 6 1972 5 nil -28800)))
78 (should (equal (decode-time look -28800 t)
79 (list sec 59 15 30 6 1972 5 nil -28800)))
72 ;; Positive UTC offset that is not an hour multiple, as a string. 80 ;; Positive UTC offset that is not an hour multiple, as a string.
73 (should (string-equal 81 (should (string-equal
74 (format-time-string format look "IST-5:30") 82 (format-time-string format look "IST-5:30")
75 "1972-07-01 05:29:59.999 +0530 (IST)")) 83 "1972-07-01 05:29:59.999 +0530 (IST)"))
76 (should (equal (decode-time look "IST-5:30") 84 (should (equal (decode-time look "IST-5:30" 'integer)
77 (list 59 29 5 1 7 1972 6 nil 19800 subsec))))))) 85 '(59 29 5 1 7 1972 6 nil 19800)))
86 (should (equal (decode-time look "IST-5:30" t)
87 (list sec 29 5 1 7 1972 6 nil 19800)))))))
78 88
79(ert-deftest decode-then-encode-time () 89(ert-deftest decode-then-encode-time ()
80 (let ((time-values (list 0 -2 1 0.0 -0.0 -2.0 1.0 90 (let ((time-values (list 0 -2 1 0.0 -0.0 -2.0 1.0
@@ -87,11 +97,13 @@
87 (cons (1+ most-positive-fixnum) 1000000000000) 97 (cons (1+ most-positive-fixnum) 1000000000000)
88 (cons 1000000000000 (1+ most-positive-fixnum))))) 98 (cons 1000000000000 (1+ most-positive-fixnum)))))
89 (dolist (a time-values) 99 (dolist (a time-values)
90 (let* ((d (ignore-errors (decode-time a t))) 100 (let* ((d (ignore-errors (decode-time a t t)))
101 (d-integer (ignore-errors (decode-time a t 'integer)))
91 (e (if d (encode-time d))) 102 (e (if d (encode-time d)))
92 (diff (float-time (time-subtract a e)))) 103 (e-integer (if d-integer (encode-time d-integer))))
93 (should (or (not d) 104 (should (or (not d) (time-equal-p a e)))
94 (and (<= 0 diff) (< diff 1)))))))) 105 (should (or (not d-integer) (time-equal-p (time-convert a 'integer)
106 e-integer)))))))
95 107
96;;; This should not dump core. 108;;; This should not dump core.
97(ert-deftest format-time-string-with-outlandish-zone () 109(ert-deftest format-time-string-with-outlandish-zone ()
@@ -151,7 +163,7 @@
151(ert-deftest encode-time-dst-numeric-zone () 163(ert-deftest encode-time-dst-numeric-zone ()
152 "Check for Bug#35502." 164 "Check for Bug#35502."
153 (should (time-equal-p 165 (should (time-equal-p
154 (encode-time '(29 31 17 30 4 2019 2 t 7200 0)) 166 (encode-time '(29 31 17 30 4 2019 2 t 7200))
155 '(23752 27217)))) 167 '(23752 27217))))
156 168
157(ert-deftest float-time-precision () 169(ert-deftest float-time-precision ()