summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorAlessio Bogon <youtux@users.noreply.github.com>2020-11-10 10:34:57 +0100
committerGitHub <noreply@github.com>2020-11-10 11:34:57 +0200
commit53153419972aef6e5c06c6cc1c58896de6b2a281 (patch)
tree85d689af8120fb7932472140165438b44025f1ec /tests
parent77a3d2f2a4b897c5a9d09a2cbe7159bf7ef37f0c (diff)
downloadbabel-53153419972aef6e5c06c6cc1c58896de6b2a281.tar.gz
Handle ZoneInfo objects in get_timezone_location, get_timezone_name (#741)
Fixes #740
Diffstat (limited to 'tests')
-rw-r--r--tests/test_dates.py129
1 files changed, 89 insertions, 40 deletions
diff --git a/tests/test_dates.py b/tests/test_dates.py
index 5be0d16..423f737 100644
--- a/tests/test_dates.py
+++ b/tests/test_dates.py
@@ -24,6 +24,23 @@ from babel.dates import NO_INHERITANCE_MARKER
from babel.util import FixedOffsetTimezone
+@pytest.fixture(params=["pytz.timezone", "zoneinfo.ZoneInfo"])
+def timezone_getter(request):
+ if request.param == "pytz.timezone":
+ return timezone
+ elif request.param == "zoneinfo.ZoneInfo":
+ try:
+ import zoneinfo
+ except ImportError:
+ try:
+ from backports import zoneinfo
+ except ImportError:
+ pytest.skip("zoneinfo not available")
+ return zoneinfo.ZoneInfo
+ else:
+ raise NotImplementedError
+
+
class DateTimeFormatTestCase(unittest.TestCase):
def test_quarter_format(self):
@@ -583,8 +600,8 @@ def test_get_timezone_gmt():
assert dates.get_timezone_gmt(dt, 'long', locale='fr_FR') == u'UTC-07:00'
-def test_get_timezone_location():
- tz = timezone('America/St_Johns')
+def test_get_timezone_location(timezone_getter):
+ tz = timezone_getter('America/St_Johns')
assert (dates.get_timezone_location(tz, locale='de_DE') ==
u"Kanada (St. John\u2019s) Zeit")
assert (dates.get_timezone_location(tz, locale='en') ==
@@ -592,51 +609,83 @@ def test_get_timezone_location():
assert (dates.get_timezone_location(tz, locale='en', return_city=True) ==
u'St. John’s')
- tz = timezone('America/Mexico_City')
+ tz = timezone_getter('America/Mexico_City')
assert (dates.get_timezone_location(tz, locale='de_DE') ==
u'Mexiko (Mexiko-Stadt) Zeit')
- tz = timezone('Europe/Berlin')
+ tz = timezone_getter('Europe/Berlin')
assert (dates.get_timezone_location(tz, locale='de_DE') ==
u'Deutschland (Berlin) Zeit')
-def test_get_timezone_name():
- dt = time(15, 30, tzinfo=timezone('America/Los_Angeles'))
- assert (dates.get_timezone_name(dt, locale='en_US') ==
- u'Pacific Standard Time')
- assert (dates.get_timezone_name(dt, locale='en_US', return_zone=True) ==
- u'America/Los_Angeles')
- assert dates.get_timezone_name(dt, width='short', locale='en_US') == u'PST'
-
- tz = timezone('America/Los_Angeles')
- assert dates.get_timezone_name(tz, locale='en_US') == u'Pacific Time'
- assert dates.get_timezone_name(tz, 'short', locale='en_US') == u'PT'
-
- tz = timezone('Europe/Berlin')
- assert (dates.get_timezone_name(tz, locale='de_DE') ==
- u'Mitteleurop\xe4ische Zeit')
- assert (dates.get_timezone_name(tz, locale='pt_BR') ==
- u'Hor\xe1rio da Europa Central')
-
- tz = timezone('America/St_Johns')
- assert dates.get_timezone_name(tz, locale='de_DE') == u'Neufundland-Zeit'
-
- tz = timezone('America/Los_Angeles')
- assert dates.get_timezone_name(tz, locale='en', width='short',
- zone_variant='generic') == u'PT'
- assert dates.get_timezone_name(tz, locale='en', width='short',
- zone_variant='standard') == u'PST'
- assert dates.get_timezone_name(tz, locale='en', width='short',
- zone_variant='daylight') == u'PDT'
- assert dates.get_timezone_name(tz, locale='en', width='long',
- zone_variant='generic') == u'Pacific Time'
- assert dates.get_timezone_name(tz, locale='en', width='long',
- zone_variant='standard') == u'Pacific Standard Time'
- assert dates.get_timezone_name(tz, locale='en', width='long',
- zone_variant='daylight') == u'Pacific Daylight Time'
-
- localnow = datetime.utcnow().replace(tzinfo=timezone('UTC')).astimezone(dates.LOCALTZ)
+@pytest.mark.parametrize(
+ "tzname, params, expected",
+ [
+ ("America/Los_Angeles", {"locale": "en_US"}, u"Pacific Time"),
+ ("America/Los_Angeles", {"width": "short", "locale": "en_US"}, u"PT"),
+ ("Europe/Berlin", {"locale": "de_DE"}, u"Mitteleurop\xe4ische Zeit"),
+ ("Europe/Berlin", {"locale": "pt_BR"}, u"Hor\xe1rio da Europa Central"),
+ ("America/St_Johns", {"locale": "de_DE"}, u"Neufundland-Zeit"),
+ (
+ "America/Los_Angeles",
+ {"locale": "en", "width": "short", "zone_variant": "generic"},
+ u"PT",
+ ),
+ (
+ "America/Los_Angeles",
+ {"locale": "en", "width": "short", "zone_variant": "standard"},
+ u"PST",
+ ),
+ (
+ "America/Los_Angeles",
+ {"locale": "en", "width": "short", "zone_variant": "daylight"},
+ u"PDT",
+ ),
+ (
+ "America/Los_Angeles",
+ {"locale": "en", "width": "long", "zone_variant": "generic"},
+ u"Pacific Time",
+ ),
+ (
+ "America/Los_Angeles",
+ {"locale": "en", "width": "long", "zone_variant": "standard"},
+ u"Pacific Standard Time",
+ ),
+ (
+ "America/Los_Angeles",
+ {"locale": "en", "width": "long", "zone_variant": "daylight"},
+ u"Pacific Daylight Time",
+ ),
+ ("Europe/Berlin", {"locale": "en_US"}, u"Central European Time"),
+ ],
+)
+def test_get_timezone_name_tzinfo(timezone_getter, tzname, params, expected):
+ tz = timezone_getter(tzname)
+ assert dates.get_timezone_name(tz, **params) == expected
+
+
+@pytest.mark.parametrize("timezone_getter", ["pytz.timezone"], indirect=True)
+@pytest.mark.parametrize(
+ "tzname, params, expected",
+ [
+ ("America/Los_Angeles", {"locale": "en_US"}, u"Pacific Standard Time"),
+ (
+ "America/Los_Angeles",
+ {"locale": "en_US", "return_zone": True},
+ u"America/Los_Angeles",
+ ),
+ ("America/Los_Angeles", {"width": "short", "locale": "en_US"}, u"PST"),
+ ],
+)
+def test_get_timezone_name_time_pytz(timezone_getter, tzname, params, expected):
+ """pytz (by design) can't determine if the time is in DST or not,
+ so it will always return Standard time"""
+ dt = time(15, 30, tzinfo=timezone_getter(tzname))
+ assert dates.get_timezone_name(dt, **params) == expected
+
+
+def test_get_timezone_name_misc(timezone_getter):
+ localnow = datetime.utcnow().replace(tzinfo=timezone_getter('UTC')).astimezone(dates.LOCALTZ)
assert (dates.get_timezone_name(None, locale='en_US') ==
dates.get_timezone_name(localnow, locale='en_US'))