mirror of
https://github.com/bjc/prosody.git
synced 2025-04-01 20:27:39 +03:00
104 lines
3.6 KiB
Lua
104 lines
3.6 KiB
Lua
local util_datetime = require "util.datetime";
|
|
|
|
describe("util.datetime", function ()
|
|
it("should have been loaded", function ()
|
|
assert.is_table(util_datetime);
|
|
end);
|
|
describe("#date", function ()
|
|
local date = util_datetime.date;
|
|
it("should exist", function ()
|
|
assert.is_function(date);
|
|
end);
|
|
it("should return a string", function ()
|
|
assert.is_string(date());
|
|
end);
|
|
it("should look like a date", function ()
|
|
assert.truthy(string.find(date(), "^%d%d%d%d%-%d%d%-%d%d$"));
|
|
end);
|
|
it("should work", function ()
|
|
assert.equals("2006-01-02", date(1136239445));
|
|
end);
|
|
it("should ignore fractional parts", function ()
|
|
assert.equals("2006-01-02", date(1136239445.5));
|
|
end);
|
|
end);
|
|
describe("#time", function ()
|
|
local time = util_datetime.time;
|
|
it("should exist", function ()
|
|
assert.is_function(time);
|
|
end);
|
|
it("should return a string", function ()
|
|
assert.is_string(time());
|
|
end);
|
|
it("should look like a timestamp", function ()
|
|
-- Note: Sub-second precision and timezones are ignored
|
|
assert.truthy(string.find(time(), "^%d%d:%d%d:%d%d"));
|
|
end);
|
|
it("should work", function ()
|
|
assert.equals("22:04:05", time(1136239445));
|
|
end);
|
|
it("should handle precision", function ()
|
|
assert.equal("14:46:31.158200", time(1660488391.1582))
|
|
assert.equal("14:46:32.158200", time(1660488392.1582))
|
|
assert.equal("14:46:33.158200", time(1660488393.1582))
|
|
assert.equal("14:46:33.999900", time(1660488393.9999))
|
|
end)
|
|
end);
|
|
describe("#datetime", function ()
|
|
local datetime = util_datetime.datetime;
|
|
it("should exist", function ()
|
|
assert.is_function(datetime);
|
|
end);
|
|
it("should return a string", function ()
|
|
assert.is_string(datetime());
|
|
end);
|
|
it("should look like a timestamp", function ()
|
|
-- Note: Sub-second precision and timezones are ignored
|
|
assert.truthy(string.find(datetime(), "^%d%d%d%d%-%d%d%-%d%dT%d%d:%d%d:%d%d"));
|
|
end);
|
|
it("should work", function ()
|
|
assert.equals("2006-01-02T22:04:05Z", datetime(1136239445));
|
|
end);
|
|
it("should handle precision", function ()
|
|
assert.equal("2022-08-14T14:46:31.158200Z", datetime(1660488391.1582))
|
|
assert.equal("2022-08-14T14:46:32.158200Z", datetime(1660488392.1582))
|
|
assert.equal("2022-08-14T14:46:33.158200Z", datetime(1660488393.1582))
|
|
assert.equal("2022-08-14T14:46:33.999900Z", datetime(1660488393.9999))
|
|
end)
|
|
end);
|
|
describe("#legacy", function ()
|
|
local legacy = util_datetime.legacy;
|
|
it("should exist", function ()
|
|
assert.is_function(legacy);
|
|
end);
|
|
it("should not add precision", function ()
|
|
assert.equal("20220814T14:46:31", legacy(1660488391.1582));
|
|
end);
|
|
end);
|
|
describe("#parse", function ()
|
|
local parse = util_datetime.parse;
|
|
it("should exist", function ()
|
|
assert.is_function(parse);
|
|
end);
|
|
it("should work", function ()
|
|
-- Timestamp used by Go
|
|
assert.equals(1511114293, parse("2017-11-19T17:58:13Z"));
|
|
assert.equals(1511114330, parse("2017-11-19T18:58:50+0100"));
|
|
assert.equals(1136239445, parse("2006-01-02T15:04:05-0700"));
|
|
assert.equals(1136239445, parse("2006-01-02T15:04:05-07"));
|
|
end);
|
|
it("should handle timezones", function ()
|
|
-- https://xmpp.org/extensions/xep-0082.html#example-2 and 3
|
|
assert.equals(parse("1969-07-21T02:56:15Z"), parse("1969-07-20T21:56:15-05:00"));
|
|
end);
|
|
it("should handle precision", function ()
|
|
-- floating point comparison is not an exact science
|
|
assert.truthy(math.abs(1660488392.1582 - parse("2022-08-14T14:46:32.158200Z")) < 0.001)
|
|
end)
|
|
it("should return nil when given invalid inputs", function ()
|
|
assert.is_nil(parse(nil));
|
|
assert.is_nil(parse("hello world"));
|
|
assert.is_nil(parse("2017-11-19T18:58:50$0100"));
|
|
end);
|
|
end);
|
|
end);
|