(Merge 3.2) Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes,

the file descriptor of a pipe closed in the parent process is valid in the
child process according to fstat(), but the mode of the file descriptor is
invalid, and read or write raise an error.

test.support.requires_mac_ver() is now a decorator, as suggested by Ezio
Melotti, and its docstring is fixed (linux_version => mac_ver).
This commit is contained in:
Victor Stinner 2011-06-01 13:19:07 +02:00
commit ebbbdafd87
3 changed files with 31 additions and 18 deletions

View File

@ -301,23 +301,32 @@ def linux_version():
return 0, 0, 0
def requires_mac_ver(*min_version):
"""Raise SkipTest if the OS is Mac OS X and the OS X version if less than
min_version.
"""Decorator raising SkipTest if the OS is Mac OS X and the OS X
version if less than min_version.
For example, support.requires_linux_version(10, 5) raises SkipTest if the
version is less than 10.5.
For example, @requires_mac_ver(10, 5) raises SkipTest if the OS X version
is lesser than 10.5.
"""
if sys.platform != 'darwin':
return
version_txt = platform.mac_ver()[0]
try:
version = tuple(map(int, version_txt.split('.')))
except ValueError:
return
if version < min_version:
min_version_txt = '.'.join(map(str, min_version))
raise unittest.SkipTest("Mac OS X %s or higher required, not %s"
% (min_version_txt, version_txt))
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kw):
if sys.platform == 'darwin':
version_txt = platform.mac_ver()[0]
try:
version = tuple(map(int, version_txt.split('.')))
except ValueError:
pass
else:
if version < min_version:
min_version_txt = '.'.join(map(str, min_version))
raise unittest.SkipTest(
"Mac OS X %s or higher required, not %s"
% (min_version_txt, version_txt))
return func(*args, **kw)
wrapper.min_version = min_version
return wrapper
return decorator
HOST = 'localhost'

View File

@ -670,10 +670,9 @@ def testLog2(self):
self.assertTrue(math.isnan(math.log2(NAN)))
@requires_IEEE_754
# log2() is not accurate enough on Mac OS X Tiger (10.4)
@support.requires_mac_ver(10, 5)
def testLog2Exact(self):
# log2() is not accurate enough on Mac OS X Tiger (10.4)
support.requires_mac_ver(10, 5)
# Check that we get exact equality for log2 of powers of 2.
actual = [math.log2(math.ldexp(1.0, n)) for n in range(-1074, 1024)]
expected = [float(n) for n in range(-1074, 1024)]

View File

@ -1281,6 +1281,11 @@ def test_close_fds(self):
"Some fds were left open")
self.assertIn(1, remaining_fds, "Subprocess failed")
# Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
# descriptor of a pipe closed in the parent process is valid in the
# child process according to fstat(), but the mode of the file
# descriptor is invalid, and read or write raise an error.
@support.requires_mac_ver(10, 5)
def test_pass_fds(self):
fd_status = support.findfile("fd_status.py", subdir="subprocessdata")