Mercurial > prosody-hg
comparison spec/util_datetime_spec.lua @ 12629:4c1d3f817063
util.datetime: Add support for sub-second precision timestamps
Lua since 5.3 raises a fuss when time functions are handed a number with
a fractional part and the underlying C functions are all based on
integer seconds without support for more precision.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sun, 14 Aug 2022 16:57:31 +0200 |
| parents | b95da9a593be |
| children | a09dacf660d2 |
comparison
equal
deleted
inserted
replaced
| 12628:b95da9a593be | 12629:4c1d3f817063 |
|---|---|
| 16 assert.truthy(string.find(date(), "^%d%d%d%d%-%d%d%-%d%d$")); | 16 assert.truthy(string.find(date(), "^%d%d%d%d%-%d%d%-%d%d$")); |
| 17 end); | 17 end); |
| 18 it("should work", function () | 18 it("should work", function () |
| 19 assert.equals("2006-01-02", date(1136239445)); | 19 assert.equals("2006-01-02", date(1136239445)); |
| 20 end); | 20 end); |
| 21 it("should ignore fractional parts", function () | |
| 22 assert.equals("2006-01-02", date(1136239445.5)); | |
| 23 end); | |
| 21 end); | 24 end); |
| 22 describe("#time", function () | 25 describe("#time", function () |
| 23 local time = util_datetime.time; | 26 local time = util_datetime.time; |
| 24 it("should exist", function () | 27 it("should exist", function () |
| 25 assert.is_function(time); | 28 assert.is_function(time); |
| 32 assert.truthy(string.find(time(), "^%d%d:%d%d:%d%d")); | 35 assert.truthy(string.find(time(), "^%d%d:%d%d:%d%d")); |
| 33 end); | 36 end); |
| 34 it("should work", function () | 37 it("should work", function () |
| 35 assert.equals("22:04:05", time(1136239445)); | 38 assert.equals("22:04:05", time(1136239445)); |
| 36 end); | 39 end); |
| 40 it("should handle precision", function () | |
| 41 assert.equal("14:46:32.158200", time(1660488392.1582)) | |
| 42 end) | |
| 37 end); | 43 end); |
| 38 describe("#datetime", function () | 44 describe("#datetime", function () |
| 39 local datetime = util_datetime.datetime; | 45 local datetime = util_datetime.datetime; |
| 40 it("should exist", function () | 46 it("should exist", function () |
| 41 assert.is_function(datetime); | 47 assert.is_function(datetime); |
| 48 assert.truthy(string.find(datetime(), "^%d%d%d%d%-%d%d%-%d%dT%d%d:%d%d:%d%d")); | 54 assert.truthy(string.find(datetime(), "^%d%d%d%d%-%d%d%-%d%dT%d%d:%d%d:%d%d")); |
| 49 end); | 55 end); |
| 50 it("should work", function () | 56 it("should work", function () |
| 51 assert.equals("2006-01-02T22:04:05Z", datetime(1136239445)); | 57 assert.equals("2006-01-02T22:04:05Z", datetime(1136239445)); |
| 52 end); | 58 end); |
| 59 it("should handle precision", function () | |
| 60 assert.equal("2022-08-14T14:46:32.158200Z", datetime(1660488392.1582)) | |
| 61 end) | |
| 53 end); | 62 end); |
| 54 describe("#legacy", function () | 63 describe("#legacy", function () |
| 55 local legacy = util_datetime.legacy; | 64 local legacy = util_datetime.legacy; |
| 56 it("should exist", function () | 65 it("should exist", function () |
| 57 assert.is_function(legacy); | 66 assert.is_function(legacy); |
| 70 end); | 79 end); |
| 71 it("should handle timezones", function () | 80 it("should handle timezones", function () |
| 72 -- https://xmpp.org/extensions/xep-0082.html#example-2 and 3 | 81 -- https://xmpp.org/extensions/xep-0082.html#example-2 and 3 |
| 73 assert.equals(parse("1969-07-21T02:56:15Z"), parse("1969-07-20T21:56:15-05:00")); | 82 assert.equals(parse("1969-07-21T02:56:15Z"), parse("1969-07-20T21:56:15-05:00")); |
| 74 end); | 83 end); |
| 84 it("should handle precision", function () | |
| 85 -- floating point comparison is not an exact science | |
| 86 assert.truthy(math.abs(1660488392.1582 - parse("2022-08-14T14:46:32.158200Z")) < 0.001) | |
| 87 end) | |
| 75 end); | 88 end); |
| 76 end); | 89 end); |
