summaryrefslogtreecommitdiff
path: root/Lib/test/datetimetester.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/datetimetester.py')
-rw-r--r--Lib/test/datetimetester.py76
1 files changed, 76 insertions, 0 deletions
diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py
index 617bf9a255..9fe32ebc5b 100644
--- a/Lib/test/datetimetester.py
+++ b/Lib/test/datetimetester.py
@@ -1795,6 +1795,82 @@ class TestDate(HarmlessMixedComparison, unittest.TestCase):
with self.assertRaises(TypeError):
self.theclass.fromisoformat(bad_type)
+ def test_fromisocalendar(self):
+ # For each test case, assert that fromisocalendar is the
+ # inverse of the isocalendar function
+ dates = [
+ (2016, 4, 3),
+ (2005, 1, 2), # (2004, 53, 7)
+ (2008, 12, 30), # (2009, 1, 2)
+ (2010, 1, 2), # (2009, 53, 6)
+ (2009, 12, 31), # (2009, 53, 4)
+ (1900, 1, 1), # Unusual non-leap year (year % 100 == 0)
+ (1900, 12, 31),
+ (2000, 1, 1), # Unusual leap year (year % 400 == 0)
+ (2000, 12, 31),
+ (2004, 1, 1), # Leap year
+ (2004, 12, 31),
+ (1, 1, 1),
+ (9999, 12, 31),
+ (MINYEAR, 1, 1),
+ (MAXYEAR, 12, 31),
+ ]
+
+ for datecomps in dates:
+ with self.subTest(datecomps=datecomps):
+ dobj = self.theclass(*datecomps)
+ isocal = dobj.isocalendar()
+
+ d_roundtrip = self.theclass.fromisocalendar(*isocal)
+
+ self.assertEqual(dobj, d_roundtrip)
+
+ def test_fromisocalendar_value_errors(self):
+ isocals = [
+ (2019, 0, 1),
+ (2019, -1, 1),
+ (2019, 54, 1),
+ (2019, 1, 0),
+ (2019, 1, -1),
+ (2019, 1, 8),
+ (2019, 53, 1),
+ (10000, 1, 1),
+ (0, 1, 1),
+ (9999999, 1, 1),
+ (2<<32, 1, 1),
+ (2019, 2<<32, 1),
+ (2019, 1, 2<<32),
+ ]
+
+ for isocal in isocals:
+ with self.subTest(isocal=isocal):
+ with self.assertRaises(ValueError):
+ self.theclass.fromisocalendar(*isocal)
+
+ def test_fromisocalendar_type_errors(self):
+ err_txformers = [
+ str,
+ float,
+ lambda x: None,
+ ]
+
+ # Take a valid base tuple and transform it to contain one argument
+ # with the wrong type. Repeat this for each argument, e.g.
+ # [("2019", 1, 1), (2019, "1", 1), (2019, 1, "1"), ...]
+ isocals = []
+ base = (2019, 1, 1)
+ for i in range(3):
+ for txformer in err_txformers:
+ err_val = list(base)
+ err_val[i] = txformer(err_val[i])
+ isocals.append(tuple(err_val))
+
+ for isocal in isocals:
+ with self.subTest(isocal=isocal):
+ with self.assertRaises(TypeError):
+ self.theclass.fromisocalendar(*isocal)
+
+
#############################################################################
# datetime tests