diff options
| author | Josh Smeaton <josh.smeaton@gmail.com> | 2015-03-31 16:58:37 +1100 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2015-04-24 13:55:40 -0400 |
| commit | 143255c8bbefe03ff755d7859f029f0bc7a552aa (patch) | |
| tree | 78e82ede5c90277560e304a05a55b0636c779fc2 /tests/utils_tests/test_timezone.py | |
| parent | 269a5dbdd37362e27b2bb3bf3a600ffd5ea2c3bb (diff) | |
Fixed #22598 -- Allowed make_aware() to work with ambiguous datetime
Diffstat (limited to 'tests/utils_tests/test_timezone.py')
| -rw-r--r-- | tests/utils_tests/test_timezone.py | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/utils_tests/test_timezone.py b/tests/utils_tests/test_timezone.py index ff1a210e8b..55158bfeaa 100644 --- a/tests/utils_tests/test_timezone.py +++ b/tests/utils_tests/test_timezone.py @@ -155,3 +155,37 @@ class TimezoneTests(unittest.TestCase): datetime.datetime(2011, 9, 1, 12, 20, 30)) with self.assertRaises(ValueError): timezone.make_naive(datetime.datetime(2011, 9, 1, 12, 20, 30), CET) + + @unittest.skipIf(pytz is None, "this test requires pytz") + def test_make_aware_pytz_ambiguous(self): + # 2:30 happens twice, once before DST ends and once after + ambiguous = datetime.datetime(2015, 10, 25, 2, 30) + + with self.assertRaises(pytz.AmbiguousTimeError): + timezone.make_aware(ambiguous, timezone=CET) + + std = timezone.make_aware(ambiguous, timezone=CET, is_dst=False) + dst = timezone.make_aware(ambiguous, timezone=CET, is_dst=True) + self.assertEqual(std - dst, datetime.timedelta(hours=1)) + self.assertEqual(std.tzinfo.utcoffset(std), datetime.timedelta(hours=1)) + self.assertEqual(dst.tzinfo.utcoffset(dst), datetime.timedelta(hours=2)) + + @unittest.skipIf(pytz is None, "this test requires pytz") + def test_make_aware_pytz_non_existent(self): + # 2:30 never happened due to DST + non_existent = datetime.datetime(2015, 3, 29, 2, 30) + + with self.assertRaises(pytz.NonExistentTimeError): + timezone.make_aware(non_existent, timezone=CET) + + std = timezone.make_aware(non_existent, timezone=CET, is_dst=False) + dst = timezone.make_aware(non_existent, timezone=CET, is_dst=True) + self.assertEqual(std - dst, datetime.timedelta(hours=1)) + self.assertEqual(std.tzinfo.utcoffset(std), datetime.timedelta(hours=1)) + self.assertEqual(dst.tzinfo.utcoffset(dst), datetime.timedelta(hours=2)) + + # round trip to UTC then back to CET + std = timezone.localtime(timezone.localtime(std, timezone.UTC()), CET) + dst = timezone.localtime(timezone.localtime(dst, timezone.UTC()), CET) + self.assertEqual((std.hour, std.minute), (3, 30)) + self.assertEqual((dst.hour, dst.minute), (1, 30)) |
