65 lines
2.0 KiB
Python
65 lines
2.0 KiB
Python
import datetime
|
|
import os
|
|
from backup.time import Time, _infer_timezone_from_env, _infer_timezone_from_name, _infer_timezone_from_offset, _infer_timezone_from_system
|
|
from .faketime import FakeTime
|
|
|
|
|
|
def test_parse() -> None:
|
|
time = Time.parse("1985-12-06 01:01:01.0001")
|
|
assert str(time) == "1985-12-06 01:01:01.000100+00:00"
|
|
|
|
time = Time.parse("1985-12-06 01:01:01.0001+01:00")
|
|
assert str(time) == "1985-12-06 01:01:01.000100+01:00"
|
|
|
|
|
|
def test_parse_timezone(time) -> None:
|
|
assertUtc(Time.parse("1985-12-06"))
|
|
assertUtc(Time.parse("1985-12-06 21:21"))
|
|
assertUtc(Time.parse("1985-12-06 21:21+00:00"))
|
|
assertUtc(Time.parse("1985-12-06 21:21 UTC"))
|
|
assertUtc(Time.parse("1985-12-06 21:21 GGGR"))
|
|
|
|
assertOffset(Time.parse("1985-12-06 21:21+10"), 10)
|
|
assertOffset(Time.parse("1985-12-06 21:21-10"), -10)
|
|
|
|
|
|
def assertOffset(time, hours):
|
|
assert time.tzinfo.utcoffset(time) == datetime.timedelta(hours=hours)
|
|
|
|
|
|
def assertUtc(time):
|
|
assertOffset(time, 0)
|
|
|
|
|
|
def test_common_timezones(time: FakeTime):
|
|
assert _infer_timezone_from_system() is not None
|
|
assert _infer_timezone_from_name() is not None
|
|
assert _infer_timezone_from_offset() is not None
|
|
assert _infer_timezone_from_env() is None
|
|
|
|
os.environ["TZ"] = "America/Denver"
|
|
assert _infer_timezone_from_env().tzname(None) == "America/Denver"
|
|
|
|
os.environ["TZ"] = "Australia/Brisbane"
|
|
assert _infer_timezone_from_env().tzname(None) == "Australia/Brisbane"
|
|
|
|
tzs = {"SYSTEM": _infer_timezone_from_system(),
|
|
"ENV": _infer_timezone_from_env(),
|
|
"OFFSET": _infer_timezone_from_offset(),
|
|
"NAME": _infer_timezone_from_name()}
|
|
|
|
for name, tz in tzs.items():
|
|
print(name)
|
|
time.setTimeZone(tz)
|
|
time.now()
|
|
time.nowLocal()
|
|
time.localize(datetime.datetime(1985, 12, 6))
|
|
time.local(1985, 12, 6)
|
|
time.toLocal(time.now())
|
|
time.toUtc(time.nowLocal())
|
|
|
|
|
|
def test_system_timezone(time: FakeTime):
|
|
tz = _infer_timezone_from_system()
|
|
assert tz.tzname(time.now()) == "UTC"
|