bpo-46587: Skip tests if strftime does not support glibc extension (GH-31873)

Co-authored-by: Victor Stinner <vstinner@python.org>
This commit is contained in:
Christian Heimes 2022-03-15 11:41:04 +02:00 committed by GitHub
parent d8066b420b
commit 2cf7f865f0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 38 additions and 21 deletions

View File

@ -1676,7 +1676,8 @@ class TestDate(HarmlessMixedComparison, unittest.TestCase):
# Year 42 returns '42', not padded
self.assertEqual(d.strftime("%Y"), '%d' % y)
# '0042' is obtained anyway
self.assertEqual(d.strftime("%4Y"), '%04d' % y)
if support.has_strftime_extensions:
self.assertEqual(d.strftime("%4Y"), '%04d' % y)
def test_replace(self):
cls = self.theclass

View File

@ -520,6 +520,11 @@ def requires_subprocess():
"""Used for subprocess, os.spawn calls, fd inheritance"""
return unittest.skipUnless(has_subprocess_support, "requires subprocess support")
# Does strftime() support glibc extension like '%4Y'?
try:
has_strftime_extensions = time.strftime("%4Y") != "%4Y"
except ValueError:
has_strftime_extensions = False
# Define the URL of a dedicated HTTP server for the network tests.
# The URL must use clear-text HTTP: no redirection to encrypted HTTPS.
@ -769,29 +774,29 @@ def check_sizeof(test, o, size):
@contextlib.contextmanager
def run_with_locale(catstr, *locales):
try:
import locale
category = getattr(locale, catstr)
orig_locale = locale.setlocale(category)
except AttributeError:
# if the test author gives us an invalid category string
raise
except:
# cannot retrieve original locale, so do nothing
locale = orig_locale = None
else:
for loc in locales:
try:
import locale
category = getattr(locale, catstr)
orig_locale = locale.setlocale(category)
except AttributeError:
# if the test author gives us an invalid category string
raise
locale.setlocale(category, loc)
break
except:
# cannot retrieve original locale, so do nothing
locale = orig_locale = None
else:
for loc in locales:
try:
locale.setlocale(category, loc)
break
except:
pass
pass
try:
yield
finally:
if locale and orig_locale:
locale.setlocale(category, orig_locale)
try:
yield
finally:
if locale and orig_locale:
locale.setlocale(category, orig_locale)
#=======================================================================
# Decorator for running a function in a specific timezone, correctly

View File

@ -682,6 +682,12 @@ class TestSupport(unittest.TestCase):
self.check_print_warning("a\nb",
'Warning -- a\nWarning -- b\n')
def test_has_strftime_extensions(self):
if support.is_emscripten or support.is_wasi or sys.platform == "win32":
self.assertFalse(support.has_strftime_extensions)
else:
self.assertTrue(support.has_strftime_extensions)
# XXX -follows a list of untested API
# make_legacy_pyc
# is_resource_enabled

View File

@ -622,6 +622,9 @@ class _TestStrftimeYear:
def yearstr(self, y):
return time.strftime('%Y', (y,) + (0,) * 8)
@unittest.skipUnless(
support.has_strftime_extensions, "requires strftime extension"
)
def test_4dyear(self):
# Check that we can return the zero padded value.
if self._format == '%04d':

View File

@ -0,0 +1,2 @@
Skip tests if platform's ``strftime`` does not support non-portable glibc
extensions.