aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/lisp/calendar/iso8601-tests.el291
1 files changed, 291 insertions, 0 deletions
diff --git a/test/lisp/calendar/iso8601-tests.el b/test/lisp/calendar/iso8601-tests.el
new file mode 100644
index 00000000000..2959f54b811
--- /dev/null
+++ b/test/lisp/calendar/iso8601-tests.el
@@ -0,0 +1,291 @@
1;;; iso8601-tests.el --- tests for calendar/iso8601.el -*- lexical-binding:t -*-
2
3;; Copyright (C) 2019 Free Software Foundation, Inc.
4
5;; This file is part of GNU Emacs.
6
7;; GNU Emacs is free software: you can redistribute it and/or modify
8;; it under the terms of the GNU General Public License as published by
9;; the Free Software Foundation, either version 3 of the License, or
10;; (at your option) any later version.
11
12;; GNU Emacs is distributed in the hope that it will be useful,
13;; but WITHOUT ANY WARRANTY; without even the implied warranty of
14;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15;; GNU General Public License for more details.
16
17;; You should have received a copy of the GNU General Public License
18;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
19
20;;; Code:
21
22(require 'ert)
23(require 'iso8601)
24
25(ert-deftest test-iso8601-date-years ()
26 (should (equal (iso8601-parse-date "1985")
27 '(nil nil nil nil nil 1985 nil nil nil)))
28 (should (equal (iso8601-parse-date "-0003")
29 '(nil nil nil nil nil -4 nil nil nil)))
30 (should (equal (iso8601-parse-date "+1985")
31 '(nil nil nil nil nil 1985 nil nil nil))))
32
33(ert-deftest test-iso8601-date-dates ()
34 (should (equal (iso8601-parse-date "1985-03-14")
35 '(nil nil nil 14 3 1985 nil nil nil)))
36 (should (equal (iso8601-parse-date "19850314")
37 '(nil nil nil 14 3 1985 nil nil nil)))
38 (should (equal (iso8601-parse-date "1985-02")
39 '(nil nil nil nil 2 1985 nil nil nil))))
40
41(ert-deftest test-iso8601-date-obsolete ()
42 (should (equal (iso8601-parse-date "--02-01")
43 '(nil nil nil 1 2 nil nil nil nil)))
44 (should (equal (iso8601-parse-date "--0201")
45 '(nil nil nil 1 2 nil nil nil nil))))
46
47(ert-deftest test-iso8601-date-weeks ()
48 (should (equal (iso8601-parse-date "2008W39-6")
49 '(nil nil nil 27 9 2008 nil nil nil)))
50 (should (equal (iso8601-parse-date "2009W01-1")
51 '(nil nil nil 29 12 2008 nil nil nil)))
52 (should (equal (iso8601-parse-date "2009W53-7")
53 '(nil nil nil 3 1 2010 nil nil nil))))
54
55(ert-deftest test-iso8601-date-ordinals ()
56 (should (equal (iso8601-parse-date "1981-095")
57 '(nil nil nil 5 4 1981 nil nil nil))))
58
59(ert-deftest test-iso8601-time ()
60 (should (equal (iso8601-parse-time "13:47:30")
61 '(30 47 13 nil nil nil nil nil nil)))
62 (should (equal (iso8601-parse-time "134730")
63 '(30 47 13 nil nil nil nil nil nil)))
64 (should (equal (iso8601-parse-time "1347")
65 '(0 47 13 nil nil nil nil nil nil))))
66
67(ert-deftest test-iso8601-combined ()
68 (should (equal (iso8601-parse "2008-03-02T13:47:30")
69 '(30 47 13 2 3 2008 nil nil nil)))
70 (should (equal (iso8601-parse "2008-03-02T13:47:30Z")
71 '(30 47 13 2 3 2008 nil nil 0)))
72 (should (equal (iso8601-parse "2008-03-02T13:47:30+01:00")
73 '(30 47 13 2 3 2008 nil nil 3600)))
74 (should (equal (iso8601-parse "2008-03-02T13:47:30-01")
75 '(30 47 13 2 3 2008 nil nil -3600))))
76
77(ert-deftest test-iso8601-duration ()
78 (should (equal (iso8601-parse-duration "P3Y6M4DT12H30M5S")
79 '(5 30 12 4 6 3 nil nil nil)))
80 (should (equal (iso8601-parse-duration "P1M")
81 '(0 0 0 0 1 0 nil nil nil)))
82 (should (equal (iso8601-parse-duration "PT1M")
83 '(0 1 0 0 0 0 nil nil nil)))
84 (should (equal (iso8601-parse-duration "P0003-06-04T12:30:05")
85 '(5 30 12 4 6 3 nil nil nil))))
86
87(ert-deftest test-iso8601-invalid ()
88 (should-not (iso8601-valid-p " 2008-03-02T13:47:30-01"))
89 (should-not (iso8601-valid-p "2008-03-02T13:47:30-01:200"))
90 (should-not (iso8601-valid-p "2008-03-02T13:47:30-01 "))
91 (should-not (iso8601-valid-p "2008-03-02 T 13:47:30-01 "))
92 (should-not (iso8601-valid-p "20008-03-02T13:47:30-01")))
93
94(ert-deftest test-iso8601-intervals ()
95 (should (equal
96 (iso8601-parse-interval "2007-03-01T13:00:00Z/2008-05-11T15:30:00Z")
97 '((0 0 13 1 3 2007 nil nil 0)
98 (0 30 15 11 5 2008 nil nil 0)
99 ;; Hm... can't really use decode-time for time differences...
100 (0 30 2 14 3 1971 0 nil 0))))
101 (should (equal (iso8601-parse-interval "2007-03-01T13:00:00Z/P1Y2M10DT2H30M")
102 '((0 0 13 1 3 2007 nil nil 0)
103 (0 30 15 11 5 2008 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")
106 '((0 0 13 1 3 2007 nil nil 0)
107 (0 30 15 11 5 2008 nil nil 0)
108 (0 30 2 10 2 1 nil nil nil)))))
109
110(ert-deftest standard-test-dates ()
111 (should (equal (iso8601-parse-date "19850412")
112 '(nil nil nil 12 4 1985 nil nil nil)))
113 (should (equal (iso8601-parse-date "1985-04-12")
114 '(nil nil nil 12 4 1985 nil nil nil)))
115
116 (should (equal (iso8601-parse-date "1985102")
117 '(nil nil nil 12 4 1985 nil nil nil)))
118 (should (equal (iso8601-parse-date "1985-102")
119 '(nil nil nil 12 4 1985 nil nil nil)))
120
121 (should (equal (iso8601-parse-date "1985W155")
122 '(nil nil nil 12 4 1985 nil nil nil)))
123 (should (equal (iso8601-parse-date "1985-W15-5")
124 '(nil nil nil 12 4 1985 nil nil nil)))
125
126 (should (equal (iso8601-parse-date "1985W15")
127 '(nil nil nil 7 4 1985 nil nil nil)))
128 (should (equal (iso8601-parse-date "1985-W15")
129 '(nil nil nil 7 4 1985 nil nil nil)))
130
131 (should (equal (iso8601-parse-date "1985-04")
132 '(nil nil nil nil 4 1985 nil nil nil)))
133
134 (should (equal (iso8601-parse-date "1985")
135 '(nil nil nil nil nil 1985 nil nil nil)))
136
137 (should (equal (iso8601-parse-date "+1985-04-12")
138 '(nil nil nil 12 4 1985 nil nil nil)))
139 (should (equal (iso8601-parse-date "+19850412")
140 '(nil nil nil 12 4 1985 nil nil nil))))
141
142(ert-deftest standard-test-time-of-day-local-time ()
143 (should (equal (iso8601-parse-time "152746")
144 '(46 27 15 nil nil nil nil nil nil)))
145 (should (equal (iso8601-parse-time "15:27:46")
146 '(46 27 15 nil nil nil nil nil nil)))
147
148 (should (equal (iso8601-parse-time "1528")
149 '(0 28 15 nil nil nil nil nil nil)))
150 (should (equal (iso8601-parse-time "15:28")
151 '(0 28 15 nil nil nil nil nil nil)))
152
153 (should (equal (iso8601-parse-time "15")
154 '(0 0 15 nil nil nil nil nil nil))))
155
156(ert-deftest standard-test-time-of-day-fractions ()
157 ;; decoded-time doesn't support sub-second times.
158 ;; (should (equal (iso8601-parse-time "152735,5")
159 ;; '(46 27 15 nil nil nil nil nil nil)))
160 ;; (should (equal (iso8601-parse-time "15:27:35,5")
161 ;; '(46 27 15 nil nil nil nil nil nil)))
162 )
163
164(ert-deftest standard-test-time-of-day-beginning-of-day ()
165 (should (equal (iso8601-parse-time "000000")
166 '(0 0 0 nil nil nil nil nil nil)))
167 (should (equal (iso8601-parse-time "00:00:00")
168 '(0 0 0 nil nil nil nil nil nil)))
169
170 (should (equal (iso8601-parse-time "0000")
171 '(0 0 0 nil nil nil nil nil nil)))
172 (should (equal (iso8601-parse-time "00:00")
173 '(0 0 0 nil nil nil nil nil nil))))
174
175(ert-deftest standard-test-time-of-day-utc ()
176 (should (equal (iso8601-parse-time "232030Z")
177 '(30 20 23 nil nil nil nil nil 0)))
178 (should (equal (iso8601-parse-time "23:20:30Z")
179 '(30 20 23 nil nil nil nil nil 0)))
180
181 (should (equal (iso8601-parse-time "2320Z")
182 '(0 20 23 nil nil nil nil nil 0)))
183 (should (equal (iso8601-parse-time "23:20Z")
184 '(0 20 23 nil nil nil nil nil 0)))
185
186 (should (equal (iso8601-parse-time "23Z")
187 '(0 0 23 nil nil nil nil nil 0))))
188
189
190(ert-deftest standard-test-time-of-day-zone ()
191 (should (equal (iso8601-parse-time "152746+0100")
192 '(46 27 15 nil nil nil nil nil 3600)))
193 (should (equal (iso8601-parse-time "15:27:46+0100")
194 '(46 27 15 nil nil nil nil nil 3600)))
195
196 (should (equal (iso8601-parse-time "152746+01")
197 '(46 27 15 nil nil nil nil nil 3600)))
198 (should (equal (iso8601-parse-time "15:27:46+01")
199 '(46 27 15 nil nil nil nil nil 3600)))
200
201 (should (equal (iso8601-parse-time "152746-0500")
202 '(46 27 15 nil nil nil nil nil -18000)))
203 (should (equal (iso8601-parse-time "15:27:46-0500")
204 '(46 27 15 nil nil nil nil nil -18000)))
205
206 (should (equal (iso8601-parse-time "152746-05")
207 '(46 27 15 nil nil nil nil nil -18000)))
208 (should (equal (iso8601-parse-time "15:27:46-05")
209 '(46 27 15 nil nil nil nil nil -18000))))
210
211(ert-deftest standard-test-date-and-time-of-day ()
212 (should (equal (iso8601-parse "19850412T101530")
213 '(30 15 10 12 4 1985 nil nil nil)))
214 (should (equal (iso8601-parse "1985-04-12T10:15:30")
215 '(30 15 10 12 4 1985 nil nil nil)))
216
217 (should (equal (iso8601-parse "1985102T235030Z")
218 '(30 50 23 12 4 1985 nil nil 0)))
219 (should (equal (iso8601-parse "1985-102T23:50:30Z")
220 '(30 50 23 12 4 1985 nil nil 0)))
221
222 (should (equal (iso8601-parse "1985W155T235030")
223 '(30 50 23 12 4 1985 nil nil nil)))
224 (should (equal (iso8601-parse "1985-W155T23:50:30")
225 '(30 50 23 12 4 1985 nil nil nil))))
226
227(ert-deftest standard-test-interval ()
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
230 ;; 25 June 1985.
231 (should (equal (iso8601-parse-interval "19850412T232050/19850625T103000")
232 '((50 20 23 12 4 1985 nil nil nil)
233 (0 30 10 25 6 1985 nil nil nil)
234 (10 9 11 15 3 1970 0 nil 0))))
235 (should (equal (iso8601-parse-interval
236 "1985-04-12T23:20:50/1985-06-25T10:30:00")
237 '((50 20 23 12 4 1985 nil nil nil)
238 (0 30 10 25 6 1985 nil nil nil)
239 (10 9 11 15 3 1970 0 nil 0))))
240
241 ;; A time interval starting at 12 April 1985 and ending on 25 June
242 ;; 1985.
243
244 ;; This example doesn't seem valid according to the standard.
245 ;; "0625" is unambiguous, and means "the year 625". Weird.
246 ;; (should (equal (iso8601-parse-interval "19850412/0625")
247 ;; '((nil nil nil 12 4 1985 nil nil nil)
248 ;; (nil nil nil nil nil 625 nil nil nil)
249 ;; (0 17 0 22 9 609 5 nil 0))))
250
251 ;; A time interval of 2 years, 10 months, 15 days, 10 hours, 20
252 ;; minutes and 30 seconds.
253 (should (equal (iso8601-parse-duration "P2Y10M15DT10H20M30S")
254 '(30 20 10 15 10 2 nil nil nil)))
255
256 (should (equal (iso8601-parse-duration "P00021015T102030")
257 '(30 20 10 15 10 2 nil nil nil)))
258 (should (equal (iso8601-parse-duration "P0002-10-15T10:20:30")
259 '(30 20 10 15 10 2 nil nil nil)))
260
261 ;; A time interval of 1 year and 6 months.
262 (should (equal (iso8601-parse-duration "P1Y6M")
263 '(0 0 0 0 6 1 nil nil nil)))
264 (should (equal (iso8601-parse-duration "P0001-06")
265 '(nil nil nil nil 6 1 nil nil nil)))
266
267 ;; A time interval of seventy-two hours.
268 (should (equal (iso8601-parse-duration "PT72H")
269 '(0 0 72 0 0 0 nil nil nil)))
270
271 ;; Defined by start and duration
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.
274 (should (equal (iso8601-parse-interval "19850412T232000/P1Y2M15DT12H")
275 '((0 20 23 12 4 1985 nil nil nil)
276 (0 20 11 28 6 1986 nil nil nil)
277 (0 0 12 15 2 1 nil nil nil))))
278 (should (equal (iso8601-parse-interval "1985-04-12T23:20:00/P1Y2M15DT12H")
279 '((0 20 23 12 4 1985 nil nil nil)
280 (0 20 11 28 6 1986 nil nil nil)
281 (0 0 12 15 2 1 nil nil nil))))
282
283 ;; Defined by duration and end
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.
286 (should (equal (iso8601-parse-interval "P1Y2M15DT12H/19850412T232000")
287 '((0 20 11 28 1 1984 nil nil nil)
288 (0 20 23 12 4 1985 nil nil nil)
289 (0 0 12 15 2 1 nil nil nil)))))
290
291;;; iso8601-tests.el ends here