From a55cc6dd3be6188cdf2e8ec30f5e5a383ebbf050 Mon Sep 17 00:00:00 2001 From: Utkarsh Upadhyay Date: Sat, 1 Jul 2017 14:56:56 +0200 Subject: [PATCH 1/6] Test both _Pure and _Fast impl of datetime. --- Lib/test/test_datetime.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_datetime.py b/Lib/test/test_datetime.py index 242e1bba035bf9..41f8658ef34e67 100644 --- a/Lib/test/test_datetime.py +++ b/Lib/test/test_datetime.py @@ -20,7 +20,7 @@ # XXX(gb) First run all the _Pure tests, then all the _Fast tests. You might # not believe this, but in spite of all the sys.modules trickery running a _Pure # test last will leave a mix of pure and native datetime stuff lying around. -test_classes = [] +all_test_classes = [] for module, suffix in zip(test_modules, test_suffixes): test_classes = [] @@ -46,9 +46,10 @@ def tearDownClass(cls_): sys.modules.update(cls_._save_sys_modules) cls.setUpClass = setUpClass cls.tearDownClass = tearDownClass + all_test_classes.extend(test_classes) def test_main(): - run_unittest(*test_classes) + run_unittest(*all_test_classes) if __name__ == "__main__": test_main() From c4b6b328183ec1244a86f437d30e0e06ff44c920 Mon Sep 17 00:00:00 2001 From: Utkarsh Upadhyay Date: Sat, 1 Jul 2017 17:48:55 +0200 Subject: [PATCH 2/6] Fix name modification and variant saving of tests. --- Lib/datetime.py | 3 ++- Lib/test/datetimetester.py | 7 ++++--- Lib/test/test_datetime.py | 3 ++- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Lib/datetime.py b/Lib/datetime.py index 5d5579c1c6f4be..b95536fb7afc02 100644 --- a/Lib/datetime.py +++ b/Lib/datetime.py @@ -2271,7 +2271,8 @@ def _name_from_offset(delta): _check_tzinfo_arg, _check_tzname, _check_utc_offset, _cmp, _cmperror, _date_class, _days_before_month, _days_before_year, _days_in_month, _format_time, _is_leap, _isoweek1monday, _math, _ord2ymd, - _time, _time_class, _tzinfo_class, _wrap_strftime, _ymd2ord) + _time, _time_class, _tzinfo_class, _wrap_strftime, _ymd2ord, + _divide_and_round) # XXX Since import * above excludes names that start with _, # docstring does not get overwritten. In the future, it may be # appropriate to maintain a single module level docstring and diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py index bccd97aa3c7f60..3fe912f47d138e 100644 --- a/Lib/test/datetimetester.py +++ b/Lib/test/datetimetester.py @@ -61,7 +61,7 @@ def test_constants(self): self.assertEqual(datetime.MAXYEAR, 9999) def test_name_cleanup(self): - if '_Fast' not in str(self): + if self._test_type == 'Pure': return datetime = datetime_module names = set(name for name in dir(datetime) @@ -72,8 +72,9 @@ def test_name_cleanup(self): self.assertEqual(names - allowed, set([])) def test_divide_and_round(self): - if '_Fast' in str(self): + if self._test_type == 'Fast': return + dar = datetime_module._divide_and_round self.assertEqual(dar(-10, -3), 3) @@ -2851,7 +2852,7 @@ def tzname(self, dt): return self.tz self.assertRaises(TypeError, t.strftime, "%Z") # Issue #6697: - if '_Fast' in str(self): + if self._test_type == 'Fast': Badtzname.tz = '\ud800' self.assertRaises(ValueError, t.strftime, "%Z") diff --git a/Lib/test/test_datetime.py b/Lib/test/test_datetime.py index 41f8658ef34e67..a1970987f9b9b4 100644 --- a/Lib/test/test_datetime.py +++ b/Lib/test/test_datetime.py @@ -33,7 +33,8 @@ suit = cls() test_classes.extend(type(test) for test in suit) for cls in test_classes: - cls.__name__ = name + suffix + cls.__qualname__ += suffix + cls._test_type = suffix[1:] @classmethod def setUpClass(cls_, module=module): cls_._save_sys_modules = sys.modules.copy() From 7f52babb1fc88c23ea784039fc2aae967745404d Mon Sep 17 00:00:00 2001 From: Utkarsh Upadhyay Date: Sun, 2 Jul 2017 01:47:01 +0200 Subject: [PATCH 3/6] Add name to ACKS file. --- Misc/ACKS | 1 + 1 file changed, 1 insertion(+) diff --git a/Misc/ACKS b/Misc/ACKS index 910f8196a764af..2152aef4f428fc 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1601,6 +1601,7 @@ Doobee R. Tzeck Eren Türkay Lionel Ulmer Adnan Umer +Utkarsh Upadhyay Roger Upole Daniel Urban Michael Urman From a67964b526ec0521dc5f1fce786752c22bd3a626 Mon Sep 17 00:00:00 2001 From: Utkarsh Upadhyay Date: Sun, 2 Jul 2017 11:01:56 +0200 Subject: [PATCH 4/6] Report skipped tests. --- Lib/test/datetimetester.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py index 3fe912f47d138e..adbcae177b54de 100644 --- a/Lib/test/datetimetester.py +++ b/Lib/test/datetimetester.py @@ -62,7 +62,8 @@ def test_constants(self): def test_name_cleanup(self): if self._test_type == 'Pure': - return + return self.skipTest('Only run for Fast C implementation') + datetime = datetime_module names = set(name for name in dir(datetime) if not name.startswith('__') and not name.endswith('__')) @@ -73,7 +74,7 @@ def test_name_cleanup(self): def test_divide_and_round(self): if self._test_type == 'Fast': - return + return self.skipTest('Only run for Pure Python implementation') dar = datetime_module._divide_and_round From db40f96590c94503d2407f7bb91408c61ee03f5a Mon Sep 17 00:00:00 2001 From: Utkarsh Upadhyay Date: Sun, 2 Jul 2017 12:21:50 +0200 Subject: [PATCH 5/6] Drop testing _test_type in favor of cls.__name__. --- Lib/test/datetimetester.py | 6 +++--- Lib/test/test_datetime.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py index adbcae177b54de..81fc7b09da7710 100644 --- a/Lib/test/datetimetester.py +++ b/Lib/test/datetimetester.py @@ -61,7 +61,7 @@ def test_constants(self): self.assertEqual(datetime.MAXYEAR, 9999) def test_name_cleanup(self): - if self._test_type == 'Pure': + if '_Pure' in self.__class__.__name__: return self.skipTest('Only run for Fast C implementation') datetime = datetime_module @@ -73,7 +73,7 @@ def test_name_cleanup(self): self.assertEqual(names - allowed, set([])) def test_divide_and_round(self): - if self._test_type == 'Fast': + if '_Fast' in self.__class__.__name__: return self.skipTest('Only run for Pure Python implementation') dar = datetime_module._divide_and_round @@ -2853,7 +2853,7 @@ def tzname(self, dt): return self.tz self.assertRaises(TypeError, t.strftime, "%Z") # Issue #6697: - if self._test_type == 'Fast': + if '_Fast' in self.__class__.__name__: Badtzname.tz = '\ud800' self.assertRaises(ValueError, t.strftime, "%Z") diff --git a/Lib/test/test_datetime.py b/Lib/test/test_datetime.py index a1970987f9b9b4..2d00b56c1cce1a 100644 --- a/Lib/test/test_datetime.py +++ b/Lib/test/test_datetime.py @@ -33,8 +33,8 @@ suit = cls() test_classes.extend(type(test) for test in suit) for cls in test_classes: + cls.__name__ += suffix cls.__qualname__ += suffix - cls._test_type = suffix[1:] @classmethod def setUpClass(cls_, module=module): cls_._save_sys_modules = sys.modules.copy() From 61c240daad33c66c6c27614d8d39fc7fedfa6c1f Mon Sep 17 00:00:00 2001 From: Utkarsh Upadhyay Date: Sun, 2 Jul 2017 14:18:22 +0200 Subject: [PATCH 6/6] Remove redundant returns. --- Lib/test/datetimetester.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py index 81fc7b09da7710..b25e6c17136790 100644 --- a/Lib/test/datetimetester.py +++ b/Lib/test/datetimetester.py @@ -62,7 +62,7 @@ def test_constants(self): def test_name_cleanup(self): if '_Pure' in self.__class__.__name__: - return self.skipTest('Only run for Fast C implementation') + self.skipTest('Only run for Fast C implementation') datetime = datetime_module names = set(name for name in dir(datetime) @@ -74,7 +74,7 @@ def test_name_cleanup(self): def test_divide_and_round(self): if '_Fast' in self.__class__.__name__: - return self.skipTest('Only run for Pure Python implementation') + self.skipTest('Only run for Pure Python implementation') dar = datetime_module._divide_and_round