Software /
code /
prosody
Annotate
spec/util_datetime_spec.lua @ 12751:2639e0e1c378
util.promise: Add some missing test cases (found through mutation testing)
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Fri, 07 Oct 2022 17:56:38 +0100 |
parent | 12629:4c1d3f817063 |
child | 12755:a09dacf660d2 |
rev | line source |
---|---|
8392 | 1 local util_datetime = require "util.datetime"; |
2 | |
3 describe("util.datetime", function () | |
4 it("should have been loaded", function () | |
5 assert.is_table(util_datetime); | |
6 end); | |
7 describe("#date", function () | |
8 local date = util_datetime.date; | |
9 it("should exist", function () | |
10 assert.is_function(date); | |
11 end); | |
12 it("should return a string", function () | |
13 assert.is_string(date()); | |
14 end); | |
15 it("should look like a date", function () | |
16 assert.truthy(string.find(date(), "^%d%d%d%d%-%d%d%-%d%d$")); | |
17 end); | |
18 it("should work", function () | |
12628
b95da9a593be
util.datetime: Fix argument order in tests
Kim Alvefur <zash@zash.se>
parents:
8392
diff
changeset
|
19 assert.equals("2006-01-02", date(1136239445)); |
8392 | 20 end); |
12629
4c1d3f817063
util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents:
12628
diff
changeset
|
21 it("should ignore fractional parts", function () |
4c1d3f817063
util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents:
12628
diff
changeset
|
22 assert.equals("2006-01-02", date(1136239445.5)); |
4c1d3f817063
util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents:
12628
diff
changeset
|
23 end); |
8392 | 24 end); |
25 describe("#time", function () | |
26 local time = util_datetime.time; | |
27 it("should exist", function () | |
28 assert.is_function(time); | |
29 end); | |
30 it("should return a string", function () | |
31 assert.is_string(time()); | |
32 end); | |
33 it("should look like a timestamp", function () | |
34 -- Note: Sub-second precision and timezones are ignored | |
35 assert.truthy(string.find(time(), "^%d%d:%d%d:%d%d")); | |
36 end); | |
37 it("should work", function () | |
12628
b95da9a593be
util.datetime: Fix argument order in tests
Kim Alvefur <zash@zash.se>
parents:
8392
diff
changeset
|
38 assert.equals("22:04:05", time(1136239445)); |
8392 | 39 end); |
12629
4c1d3f817063
util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents:
12628
diff
changeset
|
40 it("should handle precision", function () |
4c1d3f817063
util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents:
12628
diff
changeset
|
41 assert.equal("14:46:32.158200", time(1660488392.1582)) |
4c1d3f817063
util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents:
12628
diff
changeset
|
42 end) |
8392 | 43 end); |
44 describe("#datetime", function () | |
45 local datetime = util_datetime.datetime; | |
46 it("should exist", function () | |
47 assert.is_function(datetime); | |
48 end); | |
49 it("should return a string", function () | |
50 assert.is_string(datetime()); | |
51 end); | |
52 it("should look like a timestamp", function () | |
53 -- Note: Sub-second precision and timezones are ignored | |
54 assert.truthy(string.find(datetime(), "^%d%d%d%d%-%d%d%-%d%dT%d%d:%d%d:%d%d")); | |
55 end); | |
56 it("should work", function () | |
12628
b95da9a593be
util.datetime: Fix argument order in tests
Kim Alvefur <zash@zash.se>
parents:
8392
diff
changeset
|
57 assert.equals("2006-01-02T22:04:05Z", datetime(1136239445)); |
8392 | 58 end); |
12629
4c1d3f817063
util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents:
12628
diff
changeset
|
59 it("should handle precision", function () |
4c1d3f817063
util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents:
12628
diff
changeset
|
60 assert.equal("2022-08-14T14:46:32.158200Z", datetime(1660488392.1582)) |
4c1d3f817063
util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents:
12628
diff
changeset
|
61 end) |
8392 | 62 end); |
63 describe("#legacy", function () | |
64 local legacy = util_datetime.legacy; | |
65 it("should exist", function () | |
66 assert.is_function(legacy); | |
67 end); | |
68 end); | |
69 describe("#parse", function () | |
70 local parse = util_datetime.parse; | |
71 it("should exist", function () | |
72 assert.is_function(parse); | |
73 end); | |
74 it("should work", function () | |
75 -- Timestamp used by Go | |
12628
b95da9a593be
util.datetime: Fix argument order in tests
Kim Alvefur <zash@zash.se>
parents:
8392
diff
changeset
|
76 assert.equals(1511114293, parse("2017-11-19T17:58:13Z")); |
b95da9a593be
util.datetime: Fix argument order in tests
Kim Alvefur <zash@zash.se>
parents:
8392
diff
changeset
|
77 assert.equals(1511114330, parse("2017-11-19T18:58:50+0100")); |
b95da9a593be
util.datetime: Fix argument order in tests
Kim Alvefur <zash@zash.se>
parents:
8392
diff
changeset
|
78 assert.equals(1136239445, parse("2006-01-02T15:04:05-0700")); |
8392 | 79 end); |
80 it("should handle timezones", function () | |
81 -- https://xmpp.org/extensions/xep-0082.html#example-2 and 3 | |
82 assert.equals(parse("1969-07-21T02:56:15Z"), parse("1969-07-20T21:56:15-05:00")); | |
83 end); | |
12629
4c1d3f817063
util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents:
12628
diff
changeset
|
84 it("should handle precision", function () |
4c1d3f817063
util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents:
12628
diff
changeset
|
85 -- floating point comparison is not an exact science |
4c1d3f817063
util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents:
12628
diff
changeset
|
86 assert.truthy(math.abs(1660488392.1582 - parse("2022-08-14T14:46:32.158200Z")) < 0.001) |
4c1d3f817063
util.datetime: Add support for sub-second precision timestamps
Kim Alvefur <zash@zash.se>
parents:
12628
diff
changeset
|
87 end) |
8392 | 88 end); |
89 end); |