Commit 32e23e73 authored by Serhiy Storchaka's avatar Serhiy Storchaka

Issue #18702: All skipped tests now reported as skipped.

parent 68f518ce
...@@ -9,6 +9,7 @@ from test import test_support ...@@ -9,6 +9,7 @@ from test import test_support
from weakref import proxy from weakref import proxy
import array, cStringIO import array, cStringIO
from cPickle import loads, dumps, HIGHEST_PROTOCOL from cPickle import loads, dumps, HIGHEST_PROTOCOL
import sys
class ArraySubclass(array.array): class ArraySubclass(array.array):
pass pass
...@@ -772,9 +773,9 @@ class BaseTest(unittest.TestCase): ...@@ -772,9 +773,9 @@ class BaseTest(unittest.TestCase):
s = None s = None
self.assertRaises(ReferenceError, len, p) self.assertRaises(ReferenceError, len, p)
@unittest.skipUnless(hasattr(sys, 'getrefcount'),
'test needs sys.getrefcount()')
def test_bug_782369(self): def test_bug_782369(self):
import sys
if hasattr(sys, "getrefcount"):
for i in range(10): for i in range(10):
b = array.array('B', range(64)) b = array.array('B', range(64))
rc = sys.getrefcount(10) rc = sys.getrefcount(10)
......
...@@ -31,11 +31,10 @@ class CompileallTests(unittest.TestCase): ...@@ -31,11 +31,10 @@ class CompileallTests(unittest.TestCase):
compare = struct.pack('<4sl', imp.get_magic(), mtime) compare = struct.pack('<4sl', imp.get_magic(), mtime)
return data, compare return data, compare
@unittest.skipUnless(hasattr(os, 'stat'), 'test needs os.stat()')
def recreation_check(self, metadata): def recreation_check(self, metadata):
"""Check that compileall recreates bytecode when the new metadata is """Check that compileall recreates bytecode when the new metadata is
used.""" used."""
if not hasattr(os, 'stat'):
return
py_compile.compile(self.source_path) py_compile.compile(self.source_path)
self.assertEqual(*self.data()) self.assertEqual(*self.data())
with open(self.bc_path, 'rb') as file: with open(self.bc_path, 'rb') as file:
......
...@@ -1014,15 +1014,14 @@ Stonecutters Seafood and Chop House+ Lemont+ IL+ 12/19/02+ Week Back ...@@ -1014,15 +1014,14 @@ Stonecutters Seafood and Chop House+ Lemont+ IL+ 12/19/02+ Week Back
dialect = sniffer.sniff(self.sample9) dialect = sniffer.sniff(self.sample9)
self.assertTrue(dialect.doublequote) self.assertTrue(dialect.doublequote)
if not hasattr(sys, "gettotalrefcount"): class NUL:
if test_support.verbose: print "*** skipping leakage tests ***"
else:
class NUL:
def write(s, *args): def write(s, *args):
pass pass
writelines = write writelines = write
class TestLeaks(unittest.TestCase): @unittest.skipUnless(hasattr(sys, "gettotalrefcount"),
'requires sys.gettotalrefcount()')
class TestLeaks(unittest.TestCase):
def test_create_read(self): def test_create_read(self):
delta = 0 delta = 0
lastrc = sys.gettotalrefcount() lastrc = sys.gettotalrefcount()
......
...@@ -188,11 +188,10 @@ class TestReversed(unittest.TestCase): ...@@ -188,11 +188,10 @@ class TestReversed(unittest.TestCase):
self.assertRaises(TypeError, reversed) self.assertRaises(TypeError, reversed)
self.assertRaises(TypeError, reversed, [], 'extra') self.assertRaises(TypeError, reversed, [], 'extra')
@unittest.skipUnless(hasattr(sys, 'getrefcount'), 'test needs sys.getrefcount()')
def test_bug1229429(self): def test_bug1229429(self):
# this bug was never in reversed, it was in # this bug was never in reversed, it was in
# PyObject_CallMethod, and reversed_new calls that sometimes. # PyObject_CallMethod, and reversed_new calls that sometimes.
if not hasattr(sys, "getrefcount"):
return
def f(): def f():
pass pass
r = f.__reversed__ = object() r = f.__reversed__ = object()
......
...@@ -15,7 +15,7 @@ try: ...@@ -15,7 +15,7 @@ try:
except ImportError: except ImportError:
ssl = None ssl = None
from unittest import TestCase from unittest import TestCase, SkipTest, skipUnless
from test import test_support from test import test_support
from test.test_support import HOST, HOSTv6 from test.test_support import HOST, HOSTv6
threading = test_support.import_module('threading') threading = test_support.import_module('threading')
...@@ -579,8 +579,16 @@ class TestFTPClass(TestCase): ...@@ -579,8 +579,16 @@ class TestFTPClass(TestCase):
self.assertRaises(ftplib.Error, self.client.storlines, 'stor', f) self.assertRaises(ftplib.Error, self.client.storlines, 'stor', f)
@skipUnless(socket.has_ipv6, "IPv6 not enabled")
class TestIPv6Environment(TestCase): class TestIPv6Environment(TestCase):
@classmethod
def setUpClass(cls):
try:
DummyFTPServer((HOST, 0), af=socket.AF_INET6)
except socket.error:
raise SkipTest("IPv6 not enabled")
def setUp(self): def setUp(self):
self.server = DummyFTPServer((HOSTv6, 0), af=socket.AF_INET6) self.server = DummyFTPServer((HOSTv6, 0), af=socket.AF_INET6)
self.server.start() self.server.start()
...@@ -615,6 +623,7 @@ class TestIPv6Environment(TestCase): ...@@ -615,6 +623,7 @@ class TestIPv6Environment(TestCase):
retr() retr()
@skipUnless(ssl, "SSL not available")
class TestTLS_FTPClassMixin(TestFTPClass): class TestTLS_FTPClassMixin(TestFTPClass):
"""Repeat TestFTPClass tests starting the TLS layer for both control """Repeat TestFTPClass tests starting the TLS layer for both control
and data connections first. and data connections first.
...@@ -630,6 +639,7 @@ class TestTLS_FTPClassMixin(TestFTPClass): ...@@ -630,6 +639,7 @@ class TestTLS_FTPClassMixin(TestFTPClass):
self.client.prot_p() self.client.prot_p()
@skipUnless(ssl, "SSL not available")
class TestTLS_FTPClass(TestCase): class TestTLS_FTPClass(TestCase):
"""Specific TLS_FTP class tests.""" """Specific TLS_FTP class tests."""
...@@ -783,17 +793,9 @@ class TestTimeouts(TestCase): ...@@ -783,17 +793,9 @@ class TestTimeouts(TestCase):
def test_main(): def test_main():
tests = [TestFTPClass, TestTimeouts] tests = [TestFTPClass, TestTimeouts,
if socket.has_ipv6: TestIPv6Environment,
try: TestTLS_FTPClassMixin, TestTLS_FTPClass]
DummyFTPServer((HOST, 0), af=socket.AF_INET6)
except socket.error:
pass
else:
tests.append(TestIPv6Environment)
if ssl is not None:
tests.extend([TestTLS_FTPClassMixin, TestTLS_FTPClass])
thread_info = test_support.threading_setup() thread_info = test_support.threading_setup()
try: try:
......
...@@ -772,10 +772,10 @@ class TestMaildir(TestMailbox, unittest.TestCase): ...@@ -772,10 +772,10 @@ class TestMaildir(TestMailbox, unittest.TestCase):
for msg in self._box: for msg in self._box:
pass pass
@unittest.skipUnless(hasattr(os, 'umask'), 'test needs os.umask()')
@unittest.skipUnless(hasattr(os, 'stat'), 'test needs os.stat()')
def test_file_permissions(self): def test_file_permissions(self):
# Verify that message files are created without execute permissions # Verify that message files are created without execute permissions
if not hasattr(os, "stat") or not hasattr(os, "umask"):
return
msg = mailbox.MaildirMessage(self._template % 0) msg = mailbox.MaildirMessage(self._template % 0)
orig_umask = os.umask(0) orig_umask = os.umask(0)
try: try:
...@@ -786,12 +786,11 @@ class TestMaildir(TestMailbox, unittest.TestCase): ...@@ -786,12 +786,11 @@ class TestMaildir(TestMailbox, unittest.TestCase):
mode = os.stat(path).st_mode mode = os.stat(path).st_mode
self.assertEqual(mode & 0111, 0) self.assertEqual(mode & 0111, 0)
@unittest.skipUnless(hasattr(os, 'umask'), 'test needs os.umask()')
@unittest.skipUnless(hasattr(os, 'stat'), 'test needs os.stat()')
def test_folder_file_perms(self): def test_folder_file_perms(self):
# From bug #3228, we want to verify that the file created inside a Maildir # From bug #3228, we want to verify that the file created inside a Maildir
# subfolder isn't marked as executable. # subfolder isn't marked as executable.
if not hasattr(os, "stat") or not hasattr(os, "umask"):
return
orig_umask = os.umask(0) orig_umask = os.umask(0)
try: try:
subfolder = self._box.add_folder('subfolder') subfolder = self._box.add_folder('subfolder')
...@@ -991,11 +990,12 @@ class TestMbox(_TestMboxMMDF, unittest.TestCase): ...@@ -991,11 +990,12 @@ class TestMbox(_TestMboxMMDF, unittest.TestCase):
_factory = lambda self, path, factory=None: mailbox.mbox(path, factory) _factory = lambda self, path, factory=None: mailbox.mbox(path, factory)
@unittest.skipUnless(hasattr(os, 'umask'), 'test needs os.umask()')
@unittest.skipUnless(hasattr(os, 'stat'), 'test needs os.stat()')
def test_file_perms(self): def test_file_perms(self):
# From bug #3228, we want to verify that the mailbox file isn't executable, # From bug #3228, we want to verify that the mailbox file isn't executable,
# even if the umask is set to something that would leave executable bits set. # even if the umask is set to something that would leave executable bits set.
# We only run this test on platforms that support umask. # We only run this test on platforms that support umask.
if hasattr(os, 'umask') and hasattr(os, 'stat'):
try: try:
old_umask = os.umask(0077) old_umask = os.umask(0077)
self._box.close() self._box.close()
......
...@@ -906,8 +906,7 @@ class MathTests(unittest.TestCase): ...@@ -906,8 +906,7 @@ class MathTests(unittest.TestCase):
# still fails this part of the test on some platforms. For now, we only # still fails this part of the test on some platforms. For now, we only
# *run* test_exceptions() in verbose mode, so that this isn't normally # *run* test_exceptions() in verbose mode, so that this isn't normally
# tested. # tested.
@unittest.skipUnless(verbose, 'requires verbose mode')
if verbose:
def test_exceptions(self): def test_exceptions(self):
try: try:
x = math.exp(-1000000000) x = math.exp(-1000000000)
......
...@@ -320,9 +320,9 @@ class MmapTests(unittest.TestCase): ...@@ -320,9 +320,9 @@ class MmapTests(unittest.TestCase):
mf.close() mf.close()
f.close() f.close()
@unittest.skipUnless(hasattr(os, "stat"), "needs os.stat()")
def test_entire_file(self): def test_entire_file(self):
# test mapping of entire file by passing 0 for map length # test mapping of entire file by passing 0 for map length
if hasattr(os, "stat"):
f = open(TESTFN, "w+") f = open(TESTFN, "w+")
f.write(2**16 * 'm') # Arbitrary character f.write(2**16 * 'm') # Arbitrary character
...@@ -335,11 +335,10 @@ class MmapTests(unittest.TestCase): ...@@ -335,11 +335,10 @@ class MmapTests(unittest.TestCase):
mf.close() mf.close()
f.close() f.close()
@unittest.skipUnless(hasattr(os, "stat"), "needs os.stat()")
def test_length_0_offset(self): def test_length_0_offset(self):
# Issue #10916: test mapping of remainder of file by passing 0 for # Issue #10916: test mapping of remainder of file by passing 0 for
# map length with an offset doesn't cause a segfault. # map length with an offset doesn't cause a segfault.
if not hasattr(os, "stat"):
self.skipTest("needs os.stat")
# NOTE: allocation granularity is currently 65536 under Win64, # NOTE: allocation granularity is currently 65536 under Win64,
# and therefore the minimum offset alignment. # and therefore the minimum offset alignment.
with open(TESTFN, "wb") as f: with open(TESTFN, "wb") as f:
...@@ -352,12 +351,10 @@ class MmapTests(unittest.TestCase): ...@@ -352,12 +351,10 @@ class MmapTests(unittest.TestCase):
finally: finally:
mf.close() mf.close()
@unittest.skipUnless(hasattr(os, "stat"), "needs os.stat()")
def test_length_0_large_offset(self): def test_length_0_large_offset(self):
# Issue #10959: test mapping of a file by passing 0 for # Issue #10959: test mapping of a file by passing 0 for
# map length with a large offset doesn't cause a segfault. # map length with a large offset doesn't cause a segfault.
if not hasattr(os, "stat"):
self.skipTest("needs os.stat")
with open(TESTFN, "wb") as f: with open(TESTFN, "wb") as f:
f.write(115699 * b'm') # Arbitrary character f.write(115699 * b'm') # Arbitrary character
...@@ -538,9 +535,8 @@ class MmapTests(unittest.TestCase): ...@@ -538,9 +535,8 @@ class MmapTests(unittest.TestCase):
return mmap.mmap.__new__(klass, -1, *args, **kwargs) return mmap.mmap.__new__(klass, -1, *args, **kwargs)
anon_mmap(PAGESIZE) anon_mmap(PAGESIZE)
@unittest.skipUnless(hasattr(mmap, 'PROT_READ'), "needs mmap.PROT_READ")
def test_prot_readonly(self): def test_prot_readonly(self):
if not hasattr(mmap, 'PROT_READ'):
return
mapsize = 10 mapsize = 10
open(TESTFN, "wb").write("a"*mapsize) open(TESTFN, "wb").write("a"*mapsize)
f = open(TESTFN, "rb") f = open(TESTFN, "rb")
...@@ -584,7 +580,7 @@ class MmapTests(unittest.TestCase): ...@@ -584,7 +580,7 @@ class MmapTests(unittest.TestCase):
m.seek(8) m.seek(8)
self.assertRaises(ValueError, m.write, "bar") self.assertRaises(ValueError, m.write, "bar")
if os.name == 'nt': @unittest.skipUnless(os.name == 'nt', 'requires Windows')
def test_tagname(self): def test_tagname(self):
data1 = "0123456789" data1 = "0123456789"
data2 = "abcdefghij" data2 = "abcdefghij"
...@@ -610,6 +606,7 @@ class MmapTests(unittest.TestCase): ...@@ -610,6 +606,7 @@ class MmapTests(unittest.TestCase):
m2.close() m2.close()
m1.close() m1.close()
@unittest.skipUnless(os.name == 'nt', 'requires Windows')
def test_crasher_on_windows(self): def test_crasher_on_windows(self):
# Should not crash (Issue 1733986) # Should not crash (Issue 1733986)
m = mmap.mmap(-1, 1000, tagname="foo") m = mmap.mmap(-1, 1000, tagname="foo")
...@@ -634,6 +631,7 @@ class MmapTests(unittest.TestCase): ...@@ -634,6 +631,7 @@ class MmapTests(unittest.TestCase):
pass pass
m.close() m.close()
@unittest.skipUnless(os.name == 'nt', 'requires Windows')
def test_invalid_descriptor(self): def test_invalid_descriptor(self):
# socket file descriptors are valid, but out of range # socket file descriptors are valid, but out of range
# for _get_osfhandle, causing a crash when validating the # for _get_osfhandle, causing a crash when validating the
......
...@@ -83,9 +83,8 @@ class TemporaryFileTests(unittest.TestCase): ...@@ -83,9 +83,8 @@ class TemporaryFileTests(unittest.TestCase):
open(name, "w") open(name, "w")
self.files.append(name) self.files.append(name)
@unittest.skipUnless(hasattr(os, 'tempnam'), 'test needs os.tempnam()')
def test_tempnam(self): def test_tempnam(self):
if not hasattr(os, "tempnam"):
return
with warnings.catch_warnings(): with warnings.catch_warnings():
warnings.filterwarnings("ignore", "tempnam", RuntimeWarning, warnings.filterwarnings("ignore", "tempnam", RuntimeWarning,
r"test_os$") r"test_os$")
...@@ -99,9 +98,8 @@ class TemporaryFileTests(unittest.TestCase): ...@@ -99,9 +98,8 @@ class TemporaryFileTests(unittest.TestCase):
self.assertTrue(os.path.basename(name)[:3] == "pfx") self.assertTrue(os.path.basename(name)[:3] == "pfx")
self.check_tempfile(name) self.check_tempfile(name)
@unittest.skipUnless(hasattr(os, 'tmpfile'), 'test needs os.tmpfile()')
def test_tmpfile(self): def test_tmpfile(self):
if not hasattr(os, "tmpfile"):
return
# As with test_tmpnam() below, the Windows implementation of tmpfile() # As with test_tmpnam() below, the Windows implementation of tmpfile()
# attempts to create a file in the root directory of the current drive. # attempts to create a file in the root directory of the current drive.
# On Vista and Server 2008, this test will always fail for normal users # On Vista and Server 2008, this test will always fail for normal users
...@@ -150,9 +148,8 @@ class TemporaryFileTests(unittest.TestCase): ...@@ -150,9 +148,8 @@ class TemporaryFileTests(unittest.TestCase):
fp.close() fp.close()
self.assertTrue(s == "foobar") self.assertTrue(s == "foobar")
@unittest.skipUnless(hasattr(os, 'tmpnam'), 'test needs os.tmpnam()')
def test_tmpnam(self): def test_tmpnam(self):
if not hasattr(os, "tmpnam"):
return
with warnings.catch_warnings(): with warnings.catch_warnings():
warnings.filterwarnings("ignore", "tmpnam", RuntimeWarning, warnings.filterwarnings("ignore", "tmpnam", RuntimeWarning,
r"test_os$") r"test_os$")
...@@ -193,10 +190,8 @@ class StatAttributeTests(unittest.TestCase): ...@@ -193,10 +190,8 @@ class StatAttributeTests(unittest.TestCase):
os.unlink(self.fname) os.unlink(self.fname)
os.rmdir(test_support.TESTFN) os.rmdir(test_support.TESTFN)
@unittest.skipUnless(hasattr(os, 'stat'), 'test needs os.stat()')
def test_stat_attributes(self): def test_stat_attributes(self):
if not hasattr(os, "stat"):
return
import stat import stat
result = os.stat(self.fname) result = os.stat(self.fname)
...@@ -256,10 +251,8 @@ class StatAttributeTests(unittest.TestCase): ...@@ -256,10 +251,8 @@ class StatAttributeTests(unittest.TestCase):
pass pass
@unittest.skipUnless(hasattr(os, 'statvfs'), 'test needs os.statvfs()')
def test_statvfs_attributes(self): def test_statvfs_attributes(self):
if not hasattr(os, "statvfs"):
return
try: try:
result = os.statvfs(self.fname) result = os.statvfs(self.fname)
except OSError, e: except OSError, e:
...@@ -311,10 +304,10 @@ class StatAttributeTests(unittest.TestCase): ...@@ -311,10 +304,10 @@ class StatAttributeTests(unittest.TestCase):
st2 = os.stat(test_support.TESTFN) st2 = os.stat(test_support.TESTFN)
self.assertEqual(st2.st_mtime, int(st.st_mtime-delta)) self.assertEqual(st2.st_mtime, int(st.st_mtime-delta))
# Restrict test to Win32, since there is no guarantee other # Restrict tests to Win32, since there is no guarantee other
# systems support centiseconds # systems support centiseconds
if sys.platform == 'win32':
def get_file_system(path): def get_file_system(path):
if sys.platform == 'win32':
root = os.path.splitdrive(os.path.abspath(path))[0] + '\\' root = os.path.splitdrive(os.path.abspath(path))[0] + '\\'
import ctypes import ctypes
kernel32 = ctypes.windll.kernel32 kernel32 = ctypes.windll.kernel32
...@@ -322,17 +315,23 @@ class StatAttributeTests(unittest.TestCase): ...@@ -322,17 +315,23 @@ class StatAttributeTests(unittest.TestCase):
if kernel32.GetVolumeInformationA(root, None, 0, None, None, None, buf, len(buf)): if kernel32.GetVolumeInformationA(root, None, 0, None, None, None, buf, len(buf)):
return buf.value return buf.value
if get_file_system(test_support.TESTFN) == "NTFS": @unittest.skipUnless(sys.platform == "win32", "Win32 specific tests")
@unittest.skipUnless(get_file_system(support.TESTFN) == "NTFS",
"requires NTFS")
def test_1565150(self): def test_1565150(self):
t1 = 1159195039.25 t1 = 1159195039.25
os.utime(self.fname, (t1, t1)) os.utime(self.fname, (t1, t1))
self.assertEqual(os.stat(self.fname).st_mtime, t1) self.assertEqual(os.stat(self.fname).st_mtime, t1)
@unittest.skipUnless(sys.platform == "win32", "Win32 specific tests")
@unittest.skipUnless(get_file_system(support.TESTFN) == "NTFS",
"requires NTFS")
def test_large_time(self): def test_large_time(self):
t1 = 5000000000 # some day in 2128 t1 = 5000000000 # some day in 2128
os.utime(self.fname, (t1, t1)) os.utime(self.fname, (t1, t1))
self.assertEqual(os.stat(self.fname).st_mtime, t1) self.assertEqual(os.stat(self.fname).st_mtime, t1)
@unittest.skipUnless(sys.platform == "win32", "Win32 specific tests")
def test_1686475(self): def test_1686475(self):
# Verify that an open file can be stat'ed # Verify that an open file can be stat'ed
try: try:
...@@ -598,6 +597,7 @@ class ExecvpeTests(unittest.TestCase): ...@@ -598,6 +597,7 @@ class ExecvpeTests(unittest.TestCase):
self.assertRaises(ValueError, os.execvpe, 'notepad', [], None) self.assertRaises(ValueError, os.execvpe, 'notepad', [], None)
@unittest.skipUnless(sys.platform == "win32", "Win32 specific tests")
class Win32ErrorTests(unittest.TestCase): class Win32ErrorTests(unittest.TestCase):
def test_rename(self): def test_rename(self):
self.assertRaises(WindowsError, os.rename, test_support.TESTFN, test_support.TESTFN+".bak") self.assertRaises(WindowsError, os.rename, test_support.TESTFN, test_support.TESTFN+".bak")
...@@ -644,12 +644,12 @@ class TestInvalidFD(unittest.TestCase): ...@@ -644,12 +644,12 @@ class TestInvalidFD(unittest.TestCase):
self.fail("%r didn't raise a OSError with a bad file descriptor" self.fail("%r didn't raise a OSError with a bad file descriptor"
% f) % f)
@unittest.skipUnless(hasattr(os, 'isatty'), 'test needs os.isatty()')
def test_isatty(self): def test_isatty(self):
if hasattr(os, "isatty"):
self.assertEqual(os.isatty(test_support.make_bad_fd()), False) self.assertEqual(os.isatty(test_support.make_bad_fd()), False)
@unittest.skipUnless(hasattr(os, 'closerange'), 'test needs os.closerange()')
def test_closerange(self): def test_closerange(self):
if hasattr(os, "closerange"):
fd = test_support.make_bad_fd() fd = test_support.make_bad_fd()
# Make sure none of the descriptors we are about to close are # Make sure none of the descriptors we are about to close are
# currently valid (issue 6542). # currently valid (issue 6542).
...@@ -664,78 +664,76 @@ class TestInvalidFD(unittest.TestCase): ...@@ -664,78 +664,76 @@ class TestInvalidFD(unittest.TestCase):
"Unable to acquire a range of invalid file descriptors") "Unable to acquire a range of invalid file descriptors")
self.assertEqual(os.closerange(fd, fd + i-1), None) self.assertEqual(os.closerange(fd, fd + i-1), None)
@unittest.skipUnless(hasattr(os, 'dup2'), 'test needs os.dup2()')
def test_dup2(self): def test_dup2(self):
if hasattr(os, "dup2"):
self.check(os.dup2, 20) self.check(os.dup2, 20)
@unittest.skipUnless(hasattr(os, 'fchmod'), 'test needs os.fchmod()')
def test_fchmod(self): def test_fchmod(self):
if hasattr(os, "fchmod"):
self.check(os.fchmod, 0) self.check(os.fchmod, 0)
@unittest.skipUnless(hasattr(os, 'fchown'), 'test needs os.fchown()')
def test_fchown(self): def test_fchown(self):
if hasattr(os, "fchown"):
self.check(os.fchown, -1, -1) self.check(os.fchown, -1, -1)
@unittest.skipUnless(hasattr(os, 'fpathconf'), 'test needs os.fpathconf()')
def test_fpathconf(self): def test_fpathconf(self):
if hasattr(os, "fpathconf"):
self.check(os.fpathconf, "PC_NAME_MAX") self.check(os.fpathconf, "PC_NAME_MAX")
@unittest.skipUnless(hasattr(os, 'ftruncate'), 'test needs os.ftruncate()')
def test_ftruncate(self): def test_ftruncate(self):
if hasattr(os, "ftruncate"):
self.check(os.ftruncate, 0) self.check(os.ftruncate, 0)
@unittest.skipUnless(hasattr(os, 'lseek'), 'test needs os.lseek()')
def test_lseek(self): def test_lseek(self):
if hasattr(os, "lseek"):
self.check(os.lseek, 0, 0) self.check(os.lseek, 0, 0)
@unittest.skipUnless(hasattr(os, 'read'), 'test needs os.read()')
def test_read(self): def test_read(self):
if hasattr(os, "read"):
self.check(os.read, 1) self.check(os.read, 1)
@unittest.skipUnless(hasattr(os, 'tcsetpgrp'), 'test needs os.tcsetpgrp()')
def test_tcsetpgrpt(self): def test_tcsetpgrpt(self):
if hasattr(os, "tcsetpgrp"):
self.check(os.tcsetpgrp, 0) self.check(os.tcsetpgrp, 0)
@unittest.skipUnless(hasattr(os, 'write'), 'test needs os.write()')
def test_write(self): def test_write(self):
if hasattr(os, "write"):
self.check(os.write, " ") self.check(os.write, " ")
if sys.platform != 'win32': @unittest.skipIf(sys.platform == "win32", "Posix specific tests")
class Win32ErrorTests(unittest.TestCase): class PosixUidGidTests(unittest.TestCase):
pass @unittest.skipUnless(hasattr(os, 'setuid'), 'test needs os.setuid()')
class PosixUidGidTests(unittest.TestCase):
if hasattr(os, 'setuid'):
def test_setuid(self): def test_setuid(self):
if os.getuid() != 0: if os.getuid() != 0:
self.assertRaises(os.error, os.setuid, 0) self.assertRaises(os.error, os.setuid, 0)
self.assertRaises(OverflowError, os.setuid, 1<<32) self.assertRaises(OverflowError, os.setuid, 1<<32)
if hasattr(os, 'setgid'): @unittest.skipUnless(hasattr(os, 'setgid'), 'test needs os.setgid()')
def test_setgid(self): def test_setgid(self):
if os.getuid() != 0: if os.getuid() != 0:
self.assertRaises(os.error, os.setgid, 0) self.assertRaises(os.error, os.setgid, 0)
self.assertRaises(OverflowError, os.setgid, 1<<32) self.assertRaises(OverflowError, os.setgid, 1<<32)
if hasattr(os, 'seteuid'): @unittest.skipUnless(hasattr(os, 'seteuid'), 'test needs os.seteuid()')
def test_seteuid(self): def test_seteuid(self):
if os.getuid() != 0: if os.getuid() != 0:
self.assertRaises(os.error, os.seteuid, 0) self.assertRaises(os.error, os.seteuid, 0)
self.assertRaises(OverflowError, os.seteuid, 1<<32) self.assertRaises(OverflowError, os.seteuid, 1<<32)
if hasattr(os, 'setegid'): @unittest.skipUnless(hasattr(os, 'setegid'), 'test needs os.setegid()')
def test_setegid(self): def test_setegid(self):
if os.getuid() != 0: if os.getuid() != 0:
self.assertRaises(os.error, os.setegid, 0) self.assertRaises(os.error, os.setegid, 0)
self.assertRaises(OverflowError, os.setegid, 1<<32) self.assertRaises(OverflowError, os.setegid, 1<<32)
if hasattr(os, 'setreuid'): @unittest.skipUnless(hasattr(os, 'setreuid'), 'test needs os.setreuid()')
def test_setreuid(self): def test_setreuid(self):
if os.getuid() != 0: if os.getuid() != 0:
self.assertRaises(os.error, os.setreuid, 0, 0) self.assertRaises(os.error, os.setreuid, 0, 0)
self.assertRaises(OverflowError, os.setreuid, 1<<32, 0) self.assertRaises(OverflowError, os.setreuid, 1<<32, 0)
self.assertRaises(OverflowError, os.setreuid, 0, 1<<32) self.assertRaises(OverflowError, os.setreuid, 0, 1<<32)
@unittest.skipUnless(hasattr(os, 'setreuid'), 'test needs os.setreuid()')
def test_setreuid_neg1(self): def test_setreuid_neg1(self):
# Needs to accept -1. We run this in a subprocess to avoid # Needs to accept -1. We run this in a subprocess to avoid
# altering the test runner's process state (issue8045). # altering the test runner's process state (issue8045).
...@@ -743,22 +741,21 @@ if sys.platform != 'win32': ...@@ -743,22 +741,21 @@ if sys.platform != 'win32':
sys.executable, '-c', sys.executable, '-c',
'import os,sys;os.setreuid(-1,-1);sys.exit(0)']) 'import os,sys;os.setreuid(-1,-1);sys.exit(0)'])
if hasattr(os, 'setregid'): @unittest.skipUnless(hasattr(os, 'setregid'), 'test needs os.setregid()')
def test_setregid(self): def test_setregid(self):
if os.getuid() != 0: if os.getuid() != 0:
self.assertRaises(os.error, os.setregid, 0, 0) self.assertRaises(os.error, os.setregid, 0, 0)
self.assertRaises(OverflowError, os.setregid, 1<<32, 0) self.assertRaises(OverflowError, os.setregid, 1<<32, 0)
self.assertRaises(OverflowError, os.setregid, 0, 1<<32) self.assertRaises(OverflowError, os.setregid, 0, 1<<32)
@unittest.skipUnless(hasattr(os, 'setregid'), 'test needs os.setregid()')
def test_setregid_neg1(self): def test_setregid_neg1(self):
# Needs to accept -1. We run this in a subprocess to avoid # Needs to accept -1. We run this in a subprocess to avoid
# altering the test runner's process state (issue8045). # altering the test runner's process state (issue8045).
subprocess.check_call([ subprocess.check_call([
sys.executable, '-c', sys.executable, '-c',
'import os,sys;os.setregid(-1,-1);sys.exit(0)']) 'import os,sys;os.setregid(-1,-1);sys.exit(0)'])
else:
class PosixUidGidTests(unittest.TestCase):
pass
@unittest.skipUnless(sys.platform == "win32", "Win32 specific tests") @unittest.skipUnless(sys.platform == "win32", "Win32 specific tests")
class Win32KillTests(unittest.TestCase): class Win32KillTests(unittest.TestCase):
......
...@@ -11,7 +11,7 @@ import os ...@@ -11,7 +11,7 @@ import os
import time import time
import errno import errno
from unittest import TestCase from unittest import TestCase, skipUnless
from test import test_support from test import test_support
from test.test_support import HOST from test.test_support import HOST
threading = test_support.import_module('threading') threading = test_support.import_module('threading')
...@@ -263,7 +263,10 @@ if hasattr(poplib, 'POP3_SSL'): ...@@ -263,7 +263,10 @@ if hasattr(poplib, 'POP3_SSL'):
else: else:
DummyPOP3Handler.handle_read(self) DummyPOP3Handler.handle_read(self)
class TestPOP3_SSLClass(TestPOP3Class): requires_ssl = skipUnless(SUPPORTS_SSL, 'SSL not supported')
@requires_ssl
class TestPOP3_SSLClass(TestPOP3Class):
# repeat previous tests by using poplib.POP3_SSL # repeat previous tests by using poplib.POP3_SSL
def setUp(self): def setUp(self):
...@@ -331,9 +334,8 @@ class TestTimeouts(TestCase): ...@@ -331,9 +334,8 @@ class TestTimeouts(TestCase):
def test_main(): def test_main():
tests = [TestPOP3Class, TestTimeouts] tests = [TestPOP3Class, TestTimeouts,
if SUPPORTS_SSL: TestPOP3_SSLClass]
tests.append(TestPOP3_SSLClass)
thread_info = test_support.threading_setup() thread_info = test_support.threading_setup()
try: try:
test_support.run_unittest(*tests) test_support.run_unittest(*tests)
......
...@@ -53,27 +53,32 @@ class PosixTester(unittest.TestCase): ...@@ -53,27 +53,32 @@ class PosixTester(unittest.TestCase):
posix_func() posix_func()
self.assertRaises(TypeError, posix_func, 1) self.assertRaises(TypeError, posix_func, 1)
if hasattr(posix, 'getresuid'): @unittest.skipUnless(hasattr(posix, 'getresuid'),
'test needs posix.getresuid()')
def test_getresuid(self): def test_getresuid(self):
user_ids = posix.getresuid() user_ids = posix.getresuid()
self.assertEqual(len(user_ids), 3) self.assertEqual(len(user_ids), 3)
for val in user_ids: for val in user_ids:
self.assertGreaterEqual(val, 0) self.assertGreaterEqual(val, 0)
if hasattr(posix, 'getresgid'): @unittest.skipUnless(hasattr(posix, 'getresgid'),
'test needs posix.getresgid()')
def test_getresgid(self): def test_getresgid(self):
group_ids = posix.getresgid() group_ids = posix.getresgid()
self.assertEqual(len(group_ids), 3) self.assertEqual(len(group_ids), 3)
for val in group_ids: for val in group_ids:
self.assertGreaterEqual(val, 0) self.assertGreaterEqual(val, 0)
if hasattr(posix, 'setresuid'): @unittest.skipUnless(hasattr(posix, 'setresuid'),
'test needs posix.setresuid()')
def test_setresuid(self): def test_setresuid(self):
current_user_ids = posix.getresuid() current_user_ids = posix.getresuid()
self.assertIsNone(posix.setresuid(*current_user_ids)) self.assertIsNone(posix.setresuid(*current_user_ids))
# -1 means don't change that value. # -1 means don't change that value.
self.assertIsNone(posix.setresuid(-1, -1, -1)) self.assertIsNone(posix.setresuid(-1, -1, -1))
@unittest.skipUnless(hasattr(posix, 'setresuid'),
'test needs posix.setresuid()')
def test_setresuid_exception(self): def test_setresuid_exception(self):
# Don't do this test if someone is silly enough to run us as root. # Don't do this test if someone is silly enough to run us as root.
current_user_ids = posix.getresuid() current_user_ids = posix.getresuid()
...@@ -81,13 +86,16 @@ class PosixTester(unittest.TestCase): ...@@ -81,13 +86,16 @@ class PosixTester(unittest.TestCase):
new_user_ids = (current_user_ids[0]+1, -1, -1) new_user_ids = (current_user_ids[0]+1, -1, -1)
self.assertRaises(OSError, posix.setresuid, *new_user_ids) self.assertRaises(OSError, posix.setresuid, *new_user_ids)
if hasattr(posix, 'setresgid'): @unittest.skipUnless(hasattr(posix, 'setresgid'),
'test needs posix.setresgid()')
def test_setresgid(self): def test_setresgid(self):
current_group_ids = posix.getresgid() current_group_ids = posix.getresgid()
self.assertIsNone(posix.setresgid(*current_group_ids)) self.assertIsNone(posix.setresgid(*current_group_ids))
# -1 means don't change that value. # -1 means don't change that value.
self.assertIsNone(posix.setresgid(-1, -1, -1)) self.assertIsNone(posix.setresgid(-1, -1, -1))
@unittest.skipUnless(hasattr(posix, 'setresgid'),
'test needs posix.setresgid()')
def test_setresgid_exception(self): def test_setresgid_exception(self):
# Don't do this test if someone is silly enough to run us as root. # Don't do this test if someone is silly enough to run us as root.
current_group_ids = posix.getresgid() current_group_ids = posix.getresgid()
...@@ -120,20 +128,23 @@ class PosixTester(unittest.TestCase): ...@@ -120,20 +128,23 @@ class PosixTester(unittest.TestCase):
else: else:
self.fail("Expected OSError to be raised by initgroups") self.fail("Expected OSError to be raised by initgroups")
@unittest.skipUnless(hasattr(posix, 'statvfs'),
'test needs posix.statvfs()')
def test_statvfs(self): def test_statvfs(self):
if hasattr(posix, 'statvfs'):
self.assertTrue(posix.statvfs(os.curdir)) self.assertTrue(posix.statvfs(os.curdir))
@unittest.skipUnless(hasattr(posix, 'fstatvfs'),
'test needs posix.fstatvfs()')
def test_fstatvfs(self): def test_fstatvfs(self):
if hasattr(posix, 'fstatvfs'):
fp = open(test_support.TESTFN) fp = open(test_support.TESTFN)
try: try:
self.assertTrue(posix.fstatvfs(fp.fileno())) self.assertTrue(posix.fstatvfs(fp.fileno()))
finally: finally:
fp.close() fp.close()
@unittest.skipUnless(hasattr(posix, 'ftruncate'),
'test needs posix.ftruncate()')
def test_ftruncate(self): def test_ftruncate(self):
if hasattr(posix, 'ftruncate'):
fp = open(test_support.TESTFN, 'w+') fp = open(test_support.TESTFN, 'w+')
try: try:
# we need to have some data to truncate # we need to have some data to truncate
...@@ -143,8 +154,9 @@ class PosixTester(unittest.TestCase): ...@@ -143,8 +154,9 @@ class PosixTester(unittest.TestCase):
finally: finally:
fp.close() fp.close()
@unittest.skipUnless(hasattr(posix, 'dup'),
'test needs posix.dup()')
def test_dup(self): def test_dup(self):
if hasattr(posix, 'dup'):
fp = open(test_support.TESTFN) fp = open(test_support.TESTFN)
try: try:
fd = posix.dup(fp.fileno()) fd = posix.dup(fp.fileno())
...@@ -153,13 +165,15 @@ class PosixTester(unittest.TestCase): ...@@ -153,13 +165,15 @@ class PosixTester(unittest.TestCase):
finally: finally:
fp.close() fp.close()
@unittest.skipUnless(hasattr(posix, 'confstr'),
'test needs posix.confstr()')
def test_confstr(self): def test_confstr(self):
if hasattr(posix, 'confstr'):
self.assertRaises(ValueError, posix.confstr, "CS_garbage") self.assertRaises(ValueError, posix.confstr, "CS_garbage")
self.assertEqual(len(posix.confstr("CS_PATH")) > 0, True) self.assertEqual(len(posix.confstr("CS_PATH")) > 0, True)
@unittest.skipUnless(hasattr(posix, 'dup2'),
'test needs posix.dup2()')
def test_dup2(self): def test_dup2(self):
if hasattr(posix, 'dup2'):
fp1 = open(test_support.TESTFN) fp1 = open(test_support.TESTFN)
fp2 = open(test_support.TESTFN) fp2 = open(test_support.TESTFN)
try: try:
...@@ -173,14 +187,16 @@ class PosixTester(unittest.TestCase): ...@@ -173,14 +187,16 @@ class PosixTester(unittest.TestCase):
fp2 = posix.fdopen(fd, *args) fp2 = posix.fdopen(fd, *args)
fp2.close() fp2.close()
@unittest.skipUnless(hasattr(posix, 'fdopen'),
'test needs posix.fdopen()')
def test_fdopen(self): def test_fdopen(self):
if hasattr(posix, 'fdopen'):
self.fdopen_helper() self.fdopen_helper()
self.fdopen_helper('r') self.fdopen_helper('r')
self.fdopen_helper('r', 100) self.fdopen_helper('r', 100)
@unittest.skipUnless(hasattr(posix, 'O_EXLOCK'),
'test needs posix.O_EXLOCK')
def test_osexlock(self): def test_osexlock(self):
if hasattr(posix, "O_EXLOCK"):
fd = os.open(test_support.TESTFN, fd = os.open(test_support.TESTFN,
os.O_WRONLY|os.O_EXLOCK|os.O_CREAT) os.O_WRONLY|os.O_EXLOCK|os.O_CREAT)
self.assertRaises(OSError, os.open, test_support.TESTFN, self.assertRaises(OSError, os.open, test_support.TESTFN,
...@@ -194,8 +210,9 @@ class PosixTester(unittest.TestCase): ...@@ -194,8 +210,9 @@ class PosixTester(unittest.TestCase):
os.O_WRONLY|os.O_EXLOCK|os.O_NONBLOCK) os.O_WRONLY|os.O_EXLOCK|os.O_NONBLOCK)
os.close(fd) os.close(fd)
@unittest.skipUnless(hasattr(posix, 'O_SHLOCK'),
'test needs posix.O_SHLOCK')
def test_osshlock(self): def test_osshlock(self):
if hasattr(posix, "O_SHLOCK"):
fd1 = os.open(test_support.TESTFN, fd1 = os.open(test_support.TESTFN,
os.O_WRONLY|os.O_SHLOCK|os.O_CREAT) os.O_WRONLY|os.O_SHLOCK|os.O_CREAT)
fd2 = os.open(test_support.TESTFN, fd2 = os.open(test_support.TESTFN,
...@@ -210,16 +227,18 @@ class PosixTester(unittest.TestCase): ...@@ -210,16 +227,18 @@ class PosixTester(unittest.TestCase):
os.O_RDONLY|os.O_EXLOCK|os.O_NONBLOCK) os.O_RDONLY|os.O_EXLOCK|os.O_NONBLOCK)
os.close(fd) os.close(fd)
@unittest.skipUnless(hasattr(posix, 'fstat'),
'test needs posix.fstat()')
def test_fstat(self): def test_fstat(self):
if hasattr(posix, 'fstat'):
fp = open(test_support.TESTFN) fp = open(test_support.TESTFN)
try: try:
self.assertTrue(posix.fstat(fp.fileno())) self.assertTrue(posix.fstat(fp.fileno()))
finally: finally:
fp.close() fp.close()
@unittest.skipUnless(hasattr(posix, 'stat'),
'test needs posix.stat()')
def test_stat(self): def test_stat(self):
if hasattr(posix, 'stat'):
self.assertTrue(posix.stat(test_support.TESTFN)) self.assertTrue(posix.stat(test_support.TESTFN))
def _test_all_chown_common(self, chown_func, first_param, stat_func): def _test_all_chown_common(self, chown_func, first_param, stat_func):
...@@ -313,52 +332,55 @@ class PosixTester(unittest.TestCase): ...@@ -313,52 +332,55 @@ class PosixTester(unittest.TestCase):
self._test_all_chown_common(posix.lchown, test_support.TESTFN, self._test_all_chown_common(posix.lchown, test_support.TESTFN,
getattr(posix, 'lstat', None)) getattr(posix, 'lstat', None))
@unittest.skipUnless(hasattr(posix, 'chdir'), 'test needs posix.chdir()')
def test_chdir(self): def test_chdir(self):
if hasattr(posix, 'chdir'):
posix.chdir(os.curdir) posix.chdir(os.curdir)
self.assertRaises(OSError, posix.chdir, test_support.TESTFN) self.assertRaises(OSError, posix.chdir, test_support.TESTFN)
@unittest.skipUnless(hasattr(posix, 'lsdir'), 'test needs posix.lsdir()')
def test_lsdir(self): def test_lsdir(self):
if hasattr(posix, 'lsdir'):
self.assertIn(test_support.TESTFN, posix.lsdir(os.curdir)) self.assertIn(test_support.TESTFN, posix.lsdir(os.curdir))
@unittest.skipUnless(hasattr(posix, 'access'), 'test needs posix.access()')
def test_access(self): def test_access(self):
if hasattr(posix, 'access'):
self.assertTrue(posix.access(test_support.TESTFN, os.R_OK)) self.assertTrue(posix.access(test_support.TESTFN, os.R_OK))
@unittest.skipUnless(hasattr(posix, 'umask'), 'test needs posix.umask()')
def test_umask(self): def test_umask(self):
if hasattr(posix, 'umask'):
old_mask = posix.umask(0) old_mask = posix.umask(0)
self.assertIsInstance(old_mask, int) self.assertIsInstance(old_mask, int)
posix.umask(old_mask) posix.umask(old_mask)
@unittest.skipUnless(hasattr(posix, 'strerror'),
'test needs posix.strerror()')
def test_strerror(self): def test_strerror(self):
if hasattr(posix, 'strerror'):
self.assertTrue(posix.strerror(0)) self.assertTrue(posix.strerror(0))
@unittest.skipUnless(hasattr(posix, 'pipe'), 'test needs posix.pipe()')
def test_pipe(self): def test_pipe(self):
if hasattr(posix, 'pipe'):
reader, writer = posix.pipe() reader, writer = posix.pipe()
os.close(reader) os.close(reader)
os.close(writer) os.close(writer)
@unittest.skipUnless(hasattr(posix, 'tempnam'),
'test needs posix.tempnam()')
def test_tempnam(self): def test_tempnam(self):
if hasattr(posix, 'tempnam'):
with warnings.catch_warnings(): with warnings.catch_warnings():
warnings.filterwarnings("ignore", "tempnam", DeprecationWarning) warnings.filterwarnings("ignore", "tempnam", DeprecationWarning)
self.assertTrue(posix.tempnam()) self.assertTrue(posix.tempnam())
self.assertTrue(posix.tempnam(os.curdir)) self.assertTrue(posix.tempnam(os.curdir))
self.assertTrue(posix.tempnam(os.curdir, 'blah')) self.assertTrue(posix.tempnam(os.curdir, 'blah'))
@unittest.skipUnless(hasattr(posix, 'tmpfile'),
'test needs posix.tmpfile()')
def test_tmpfile(self): def test_tmpfile(self):
if hasattr(posix, 'tmpfile'):
with warnings.catch_warnings(): with warnings.catch_warnings():
warnings.filterwarnings("ignore", "tmpfile", DeprecationWarning) warnings.filterwarnings("ignore", "tmpfile", DeprecationWarning)
fp = posix.tmpfile() fp = posix.tmpfile()
fp.close() fp.close()
@unittest.skipUnless(hasattr(posix, 'utime'), 'test needs posix.utime()')
def test_utime(self): def test_utime(self):
if hasattr(posix, 'utime'):
now = time.time() now = time.time()
posix.utime(test_support.TESTFN, None) posix.utime(test_support.TESTFN, None)
self.assertRaises(TypeError, posix.utime, test_support.TESTFN, (None, None)) self.assertRaises(TypeError, posix.utime, test_support.TESTFN, (None, None))
...@@ -428,8 +450,9 @@ class PosixTester(unittest.TestCase): ...@@ -428,8 +450,9 @@ class PosixTester(unittest.TestCase):
finally: finally:
posix.lchflags(_DUMMY_SYMLINK, dummy_symlink_st.st_flags) posix.lchflags(_DUMMY_SYMLINK, dummy_symlink_st.st_flags)
@unittest.skipUnless(hasattr(posix, 'getcwd'),
'test needs posix.getcwd()')
def test_getcwd_long_pathnames(self): def test_getcwd_long_pathnames(self):
if hasattr(posix, 'getcwd'):
dirname = 'getcwd-test-directory-0123456789abcdef-01234567890abcdef' dirname = 'getcwd-test-directory-0123456789abcdef-01234567890abcdef'
curdir = os.getcwd() curdir = os.getcwd()
base_path = os.path.abspath(test_support.TESTFN) + '.getcwd' base_path = os.path.abspath(test_support.TESTFN) + '.getcwd'
...@@ -522,7 +545,7 @@ class PosixGroupsTester(unittest.TestCase): ...@@ -522,7 +545,7 @@ class PosixGroupsTester(unittest.TestCase):
posix.initgroups(name, self.saved_groups[0]) posix.initgroups(name, self.saved_groups[0])
@unittest.skipUnless(hasattr(posix, 'initgroups'), @unittest.skipUnless(hasattr(posix, 'initgroups'),
"test needs posix.initgroups()") 'test needs posix.initgroups()')
def test_initgroups(self): def test_initgroups(self):
# find missing group # find missing group
...@@ -532,7 +555,7 @@ class PosixGroupsTester(unittest.TestCase): ...@@ -532,7 +555,7 @@ class PosixGroupsTester(unittest.TestCase):
self.assertIn(g, posix.getgroups()) self.assertIn(g, posix.getgroups())
@unittest.skipUnless(hasattr(posix, 'setgroups'), @unittest.skipUnless(hasattr(posix, 'setgroups'),
"test needs posix.setgroups()") 'test needs posix.setgroups()')
def test_setgroups(self): def test_setgroups(self):
for groups in [[0], range(16)]: for groups in [[0], range(16)]:
posix.setgroups(groups) posix.setgroups(groups)
......
...@@ -561,8 +561,8 @@ class TestSet(TestJointOps): ...@@ -561,8 +561,8 @@ class TestSet(TestJointOps):
s = None s = None
self.assertRaises(ReferenceError, str, p) self.assertRaises(ReferenceError, str, p)
# C API test only available in a debug build @unittest.skipUnless(hasattr(set, "test_c_api"),
if hasattr(set, "test_c_api"): 'C API test only available in a debug build')
def test_c_api(self): def test_c_api(self):
self.assertEqual(set().test_c_api(), True) self.assertEqual(set().test_c_api(), True)
......
...@@ -78,10 +78,11 @@ class TestShutil(unittest.TestCase): ...@@ -78,10 +78,11 @@ class TestShutil(unittest.TestCase):
filename = tempfile.mktemp() filename = tempfile.mktemp()
self.assertRaises(OSError, shutil.rmtree, filename) self.assertRaises(OSError, shutil.rmtree, filename)
# See bug #1071513 for why we don't run this on cygwin @unittest.skipUnless(hasattr(os, 'chmod'), 'requires os.chmod()')
# and bug #1076467 for why we don't run this as root. @unittest.skipIf(sys.platform[:6] == 'cygwin',
if (hasattr(os, 'chmod') and sys.platform[:6] != 'cygwin' "This test can't be run on Cygwin (issue #1071513).")
and not (hasattr(os, 'geteuid') and os.geteuid() == 0)): @unittest.skipIf(hasattr(os, 'geteuid') and os.geteuid() == 0,
"This test can't be run reliably as root (issue #1076467).")
def test_on_error(self): def test_on_error(self):
self.errorState = 0 self.errorState = 0
os.mkdir(TESTFN) os.mkdir(TESTFN)
...@@ -308,8 +309,8 @@ class TestShutil(unittest.TestCase): ...@@ -308,8 +309,8 @@ class TestShutil(unittest.TestCase):
finally: finally:
shutil.rmtree(TESTFN, ignore_errors=True) shutil.rmtree(TESTFN, ignore_errors=True)
if hasattr(os, "mkfifo"):
# Issue #3002: copyfile and copytree block indefinitely on named pipes # Issue #3002: copyfile and copytree block indefinitely on named pipes
@unittest.skipUnless(hasattr(os, "mkfifo"), 'requires os.mkfifo()')
def test_copyfile_named_pipe(self): def test_copyfile_named_pipe(self):
os.mkfifo(TESTFN) os.mkfifo(TESTFN)
try: try:
...@@ -320,6 +321,7 @@ class TestShutil(unittest.TestCase): ...@@ -320,6 +321,7 @@ class TestShutil(unittest.TestCase):
finally: finally:
os.remove(TESTFN) os.remove(TESTFN)
@unittest.skipUnless(hasattr(os, "mkfifo"), 'requires os.mkfifo()')
def test_copytree_named_pipe(self): def test_copytree_named_pipe(self):
os.mkdir(TESTFN) os.mkdir(TESTFN)
try: try:
......
...@@ -343,9 +343,10 @@ class GeneralModuleTests(unittest.TestCase): ...@@ -343,9 +343,10 @@ class GeneralModuleTests(unittest.TestCase):
if not fqhn in all_host_names: if not fqhn in all_host_names:
self.fail("Error testing host resolution mechanisms. (fqdn: %s, all: %s)" % (fqhn, repr(all_host_names))) self.fail("Error testing host resolution mechanisms. (fqdn: %s, all: %s)" % (fqhn, repr(all_host_names)))
@unittest.skipUnless(hasattr(sys, 'getrefcount'),
'test needs sys.getrefcount()')
def testRefCountGetNameInfo(self): def testRefCountGetNameInfo(self):
# Testing reference count for getnameinfo # Testing reference count for getnameinfo
if hasattr(sys, "getrefcount"):
try: try:
# On some versions, this loses a reference # On some versions, this loses a reference
orig = sys.getrefcount(__name__) orig = sys.getrefcount(__name__)
...@@ -459,17 +460,17 @@ class GeneralModuleTests(unittest.TestCase): ...@@ -459,17 +460,17 @@ class GeneralModuleTests(unittest.TestCase):
# Check that setting it to an invalid type raises TypeError # Check that setting it to an invalid type raises TypeError
self.assertRaises(TypeError, socket.setdefaulttimeout, "spam") self.assertRaises(TypeError, socket.setdefaulttimeout, "spam")
@unittest.skipUnless(hasattr(socket, 'inet_aton'),
'test needs socket.inet_aton()')
def testIPv4_inet_aton_fourbytes(self): def testIPv4_inet_aton_fourbytes(self):
if not hasattr(socket, 'inet_aton'):
return # No inet_aton, nothing to check
# Test that issue1008086 and issue767150 are fixed. # Test that issue1008086 and issue767150 are fixed.
# It must return 4 bytes. # It must return 4 bytes.
self.assertEqual('\x00'*4, socket.inet_aton('0.0.0.0')) self.assertEqual('\x00'*4, socket.inet_aton('0.0.0.0'))
self.assertEqual('\xff'*4, socket.inet_aton('255.255.255.255')) self.assertEqual('\xff'*4, socket.inet_aton('255.255.255.255'))
@unittest.skipUnless(hasattr(socket, 'inet_pton'),
'test needs socket.inet_pton()')
def testIPv4toString(self): def testIPv4toString(self):
if not hasattr(socket, 'inet_pton'):
return # No inet_pton() on this platform
from socket import inet_aton as f, inet_pton, AF_INET from socket import inet_aton as f, inet_pton, AF_INET
g = lambda a: inet_pton(AF_INET, a) g = lambda a: inet_pton(AF_INET, a)
...@@ -484,9 +485,9 @@ class GeneralModuleTests(unittest.TestCase): ...@@ -484,9 +485,9 @@ class GeneralModuleTests(unittest.TestCase):
self.assertEqual('\xaa\xaa\xaa\xaa', g('170.170.170.170')) self.assertEqual('\xaa\xaa\xaa\xaa', g('170.170.170.170'))
self.assertEqual('\xff\xff\xff\xff', g('255.255.255.255')) self.assertEqual('\xff\xff\xff\xff', g('255.255.255.255'))
@unittest.skipUnless(hasattr(socket, 'inet_pton'),
'test needs socket.inet_pton()')
def testIPv6toString(self): def testIPv6toString(self):
if not hasattr(socket, 'inet_pton'):
return # No inet_pton() on this platform
try: try:
from socket import inet_pton, AF_INET6, has_ipv6 from socket import inet_pton, AF_INET6, has_ipv6
if not has_ipv6: if not has_ipv6:
...@@ -503,9 +504,9 @@ class GeneralModuleTests(unittest.TestCase): ...@@ -503,9 +504,9 @@ class GeneralModuleTests(unittest.TestCase):
f('45ef:76cb:1a:56ef:afeb:bac:1924:aeae') f('45ef:76cb:1a:56ef:afeb:bac:1924:aeae')
) )
@unittest.skipUnless(hasattr(socket, 'inet_ntop'),
'test needs socket.inet_ntop()')
def testStringToIPv4(self): def testStringToIPv4(self):
if not hasattr(socket, 'inet_ntop'):
return # No inet_ntop() on this platform
from socket import inet_ntoa as f, inet_ntop, AF_INET from socket import inet_ntoa as f, inet_ntop, AF_INET
g = lambda a: inet_ntop(AF_INET, a) g = lambda a: inet_ntop(AF_INET, a)
...@@ -518,9 +519,9 @@ class GeneralModuleTests(unittest.TestCase): ...@@ -518,9 +519,9 @@ class GeneralModuleTests(unittest.TestCase):
self.assertEqual('170.85.170.85', g('\xaa\x55\xaa\x55')) self.assertEqual('170.85.170.85', g('\xaa\x55\xaa\x55'))
self.assertEqual('255.255.255.255', g('\xff\xff\xff\xff')) self.assertEqual('255.255.255.255', g('\xff\xff\xff\xff'))
@unittest.skipUnless(hasattr(socket, 'inet_ntop'),
'test needs socket.inet_ntop()')
def testStringToIPv6(self): def testStringToIPv6(self):
if not hasattr(socket, 'inet_ntop'):
return # No inet_ntop() on this platform
try: try:
from socket import inet_ntop, AF_INET6, has_ipv6 from socket import inet_ntop, AF_INET6, has_ipv6
if not has_ipv6: if not has_ipv6:
...@@ -871,6 +872,8 @@ class TCPCloserTest(ThreadedTCPSocketTest): ...@@ -871,6 +872,8 @@ class TCPCloserTest(ThreadedTCPSocketTest):
self.cli.connect((HOST, self.port)) self.cli.connect((HOST, self.port))
time.sleep(1.0) time.sleep(1.0)
@unittest.skipUnless(hasattr(socket, 'socketpair'),
'test needs socket.socketpair()')
@unittest.skipUnless(thread, 'Threading required for this test.') @unittest.skipUnless(thread, 'Threading required for this test.')
class BasicSocketPairTest(SocketPairTest): class BasicSocketPairTest(SocketPairTest):
...@@ -1456,12 +1459,12 @@ class TCPTimeoutTest(SocketTCPTest): ...@@ -1456,12 +1459,12 @@ class TCPTimeoutTest(SocketTCPTest):
if not ok: if not ok:
self.fail("accept() returned success when we did not expect it") self.fail("accept() returned success when we did not expect it")
@unittest.skipUnless(hasattr(signal, 'alarm'),
'test needs signal.alarm()')
def testInterruptedTimeout(self): def testInterruptedTimeout(self):
# XXX I don't know how to do this test on MSWindows or any other # XXX I don't know how to do this test on MSWindows or any other
# plaform that doesn't support signal.alarm() or os.kill(), though # plaform that doesn't support signal.alarm() or os.kill(), though
# the bug should have existed on all platforms. # the bug should have existed on all platforms.
if not hasattr(signal, "alarm"):
return # can only test on *nix
self.serv.settimeout(5.0) # must be longer than alarm self.serv.settimeout(5.0) # must be longer than alarm
class Alarm(Exception): class Alarm(Exception):
pass pass
...@@ -1521,6 +1524,7 @@ class TestExceptions(unittest.TestCase): ...@@ -1521,6 +1524,7 @@ class TestExceptions(unittest.TestCase):
self.assertTrue(issubclass(socket.gaierror, socket.error)) self.assertTrue(issubclass(socket.gaierror, socket.error))
self.assertTrue(issubclass(socket.timeout, socket.error)) self.assertTrue(issubclass(socket.timeout, socket.error))
@unittest.skipUnless(sys.platform == 'linux', 'Linux specific test')
class TestLinuxAbstractNamespace(unittest.TestCase): class TestLinuxAbstractNamespace(unittest.TestCase):
UNIX_PATH_MAX = 108 UNIX_PATH_MAX = 108
...@@ -1635,11 +1639,11 @@ def isTipcAvailable(): ...@@ -1635,11 +1639,11 @@ def isTipcAvailable():
for line in f: for line in f:
if line.startswith("tipc "): if line.startswith("tipc "):
return True return True
if test_support.verbose:
print "TIPC module is not loaded, please 'sudo modprobe tipc'"
return False return False
class TIPCTest (unittest.TestCase): @unittest.skipUnless(isTipcAvailable(),
"TIPC module is not loaded, please 'sudo modprobe tipc'")
class TIPCTest(unittest.TestCase):
def testRDM(self): def testRDM(self):
srv = socket.socket(socket.AF_TIPC, socket.SOCK_RDM) srv = socket.socket(socket.AF_TIPC, socket.SOCK_RDM)
cli = socket.socket(socket.AF_TIPC, socket.SOCK_RDM) cli = socket.socket(socket.AF_TIPC, socket.SOCK_RDM)
...@@ -1659,7 +1663,9 @@ class TIPCTest (unittest.TestCase): ...@@ -1659,7 +1663,9 @@ class TIPCTest (unittest.TestCase):
self.assertEqual(msg, MSG) self.assertEqual(msg, MSG)
class TIPCThreadableTest (unittest.TestCase, ThreadableTest): @unittest.skipUnless(isTipcAvailable(),
"TIPC module is not loaded, please 'sudo modprobe tipc'")
class TIPCThreadableTest(unittest.TestCase, ThreadableTest):
def __init__(self, methodName = 'runTest'): def __init__(self, methodName = 'runTest'):
unittest.TestCase.__init__(self, methodName = methodName) unittest.TestCase.__init__(self, methodName = methodName)
ThreadableTest.__init__(self) ThreadableTest.__init__(self)
...@@ -1712,13 +1718,9 @@ def test_main(): ...@@ -1712,13 +1718,9 @@ def test_main():
NetworkConnectionAttributesTest, NetworkConnectionAttributesTest,
NetworkConnectionBehaviourTest, NetworkConnectionBehaviourTest,
]) ])
if hasattr(socket, "socketpair"):
tests.append(BasicSocketPairTest) tests.append(BasicSocketPairTest)
if sys.platform == 'linux2':
tests.append(TestLinuxAbstractNamespace) tests.append(TestLinuxAbstractNamespace)
if isTipcAvailable(): tests.extend([TIPCTest, TIPCThreadableTest])
tests.append(TIPCTest)
tests.append(TIPCThreadableTest)
thread_info = test_support.threading_setup() thread_info = test_support.threading_setup()
test_support.run_unittest(*tests) test_support.run_unittest(*tests)
......
...@@ -27,7 +27,10 @@ TEST_STR = "hello world\n" ...@@ -27,7 +27,10 @@ TEST_STR = "hello world\n"
HOST = test.test_support.HOST HOST = test.test_support.HOST
HAVE_UNIX_SOCKETS = hasattr(socket, "AF_UNIX") HAVE_UNIX_SOCKETS = hasattr(socket, "AF_UNIX")
requires_unix_sockets = unittest.skipUnless(HAVE_UNIX_SOCKETS,
'requires Unix sockets')
HAVE_FORKING = hasattr(os, "fork") and os.name != "os2" HAVE_FORKING = hasattr(os, "fork") and os.name != "os2"
requires_forking = unittest.skipUnless(HAVE_FORKING, 'requires forking')
def signal_alarm(n): def signal_alarm(n):
"""Call signal.alarm when it exists (i.e. not on Windows).""" """Call signal.alarm when it exists (i.e. not on Windows)."""
...@@ -188,25 +191,27 @@ class SocketServerTest(unittest.TestCase): ...@@ -188,25 +191,27 @@ class SocketServerTest(unittest.TestCase):
SocketServer.StreamRequestHandler, SocketServer.StreamRequestHandler,
self.stream_examine) self.stream_examine)
if HAVE_FORKING: @requires_forking
def test_ForkingTCPServer(self): def test_ForkingTCPServer(self):
with simple_subprocess(self): with simple_subprocess(self):
self.run_server(SocketServer.ForkingTCPServer, self.run_server(SocketServer.ForkingTCPServer,
SocketServer.StreamRequestHandler, SocketServer.StreamRequestHandler,
self.stream_examine) self.stream_examine)
if HAVE_UNIX_SOCKETS: @requires_unix_sockets
def test_UnixStreamServer(self): def test_UnixStreamServer(self):
self.run_server(SocketServer.UnixStreamServer, self.run_server(SocketServer.UnixStreamServer,
SocketServer.StreamRequestHandler, SocketServer.StreamRequestHandler,
self.stream_examine) self.stream_examine)
@requires_unix_sockets
def test_ThreadingUnixStreamServer(self): def test_ThreadingUnixStreamServer(self):
self.run_server(SocketServer.ThreadingUnixStreamServer, self.run_server(SocketServer.ThreadingUnixStreamServer,
SocketServer.StreamRequestHandler, SocketServer.StreamRequestHandler,
self.stream_examine) self.stream_examine)
if HAVE_FORKING: @requires_unix_sockets
@requires_forking
def test_ForkingUnixStreamServer(self): def test_ForkingUnixStreamServer(self):
with simple_subprocess(self): with simple_subprocess(self):
self.run_server(ForkingUnixStreamServer, self.run_server(ForkingUnixStreamServer,
...@@ -223,7 +228,7 @@ class SocketServerTest(unittest.TestCase): ...@@ -223,7 +228,7 @@ class SocketServerTest(unittest.TestCase):
SocketServer.DatagramRequestHandler, SocketServer.DatagramRequestHandler,
self.dgram_examine) self.dgram_examine)
if HAVE_FORKING: @requires_forking
def test_ForkingUDPServer(self): def test_ForkingUDPServer(self):
with simple_subprocess(self): with simple_subprocess(self):
self.run_server(SocketServer.ForkingUDPServer, self.run_server(SocketServer.ForkingUDPServer,
...@@ -265,18 +270,20 @@ class SocketServerTest(unittest.TestCase): ...@@ -265,18 +270,20 @@ class SocketServerTest(unittest.TestCase):
# Alas, on Linux (at least) recvfrom() doesn't return a meaningful # Alas, on Linux (at least) recvfrom() doesn't return a meaningful
# client address so this cannot work: # client address so this cannot work:
# if HAVE_UNIX_SOCKETS: # @requires_unix_sockets
# def test_UnixDatagramServer(self): # def test_UnixDatagramServer(self):
# self.run_server(SocketServer.UnixDatagramServer, # self.run_server(SocketServer.UnixDatagramServer,
# SocketServer.DatagramRequestHandler, # SocketServer.DatagramRequestHandler,
# self.dgram_examine) # self.dgram_examine)
# #
# @requires_unix_sockets
# def test_ThreadingUnixDatagramServer(self): # def test_ThreadingUnixDatagramServer(self):
# self.run_server(SocketServer.ThreadingUnixDatagramServer, # self.run_server(SocketServer.ThreadingUnixDatagramServer,
# SocketServer.DatagramRequestHandler, # SocketServer.DatagramRequestHandler,
# self.dgram_examine) # self.dgram_examine)
# #
# if HAVE_FORKING: # @requires_unix_sockets
# @requires_forking
# def test_ForkingUnixDatagramServer(self): # def test_ForkingUnixDatagramServer(self):
# self.run_server(SocketServer.ForkingUnixDatagramServer, # self.run_server(SocketServer.ForkingUnixDatagramServer,
# SocketServer.DatagramRequestHandler, # SocketServer.DatagramRequestHandler,
......
...@@ -266,8 +266,9 @@ class SysModuleTest(unittest.TestCase): ...@@ -266,8 +266,9 @@ class SysModuleTest(unittest.TestCase):
# still has 5 elements # still has 5 elements
maj, min, buildno, plat, csd = sys.getwindowsversion() maj, min, buildno, plat, csd = sys.getwindowsversion()
@unittest.skipUnless(hasattr(sys, "setdlopenflags"),
'test needs sys.setdlopenflags()')
def test_dlopenflags(self): def test_dlopenflags(self):
if hasattr(sys, "setdlopenflags"):
self.assertTrue(hasattr(sys, "getdlopenflags")) self.assertTrue(hasattr(sys, "getdlopenflags"))
self.assertRaises(TypeError, sys.getdlopenflags, 42) self.assertRaises(TypeError, sys.getdlopenflags, 42)
oldflags = sys.getdlopenflags() oldflags = sys.getdlopenflags()
......
...@@ -259,11 +259,10 @@ class WarnTests(unittest.TestCase): ...@@ -259,11 +259,10 @@ class WarnTests(unittest.TestCase):
finally: finally:
warning_tests.__file__ = filename warning_tests.__file__ = filename
@unittest.skipUnless(hasattr(sys, 'argv'), 'test needs sys.argv')
def test_missing_filename_main_with_argv(self): def test_missing_filename_main_with_argv(self):
# If __file__ is not specified and the caller is __main__ and sys.argv # If __file__ is not specified and the caller is __main__ and sys.argv
# exists, then use sys.argv[0] as the file. # exists, then use sys.argv[0] as the file.
if not hasattr(sys, 'argv'):
return
filename = warning_tests.__file__ filename = warning_tests.__file__
module_name = warning_tests.__name__ module_name = warning_tests.__name__
try: try:
......
...@@ -12,6 +12,13 @@ except ImportError: ...@@ -12,6 +12,13 @@ except ImportError:
zlib = import_module('zlib') zlib = import_module('zlib')
requires_Compress_copy = unittest.skipUnless(
hasattr(zlib.compressobj(), "copy"),
'requires Compress.copy()')
requires_Decompress_copy = unittest.skipUnless(
hasattr(zlib.decompressobj(), "copy"),
'requires Decompress.copy()')
class ChecksumTestCase(unittest.TestCase): class ChecksumTestCase(unittest.TestCase):
# checksum test cases # checksum test cases
...@@ -339,11 +346,11 @@ class CompressObjectTestCase(BaseCompressTestCase, unittest.TestCase): ...@@ -339,11 +346,11 @@ class CompressObjectTestCase(BaseCompressTestCase, unittest.TestCase):
"mode=%i, level=%i") % (sync, level)) "mode=%i, level=%i") % (sync, level))
del obj del obj
@unittest.skipUnless(hasattr(zlib, 'Z_SYNC_FLUSH'),
'requires zlib.Z_SYNC_FLUSH')
def test_odd_flush(self): def test_odd_flush(self):
# Test for odd flushing bugs noted in 2.0, and hopefully fixed in 2.1 # Test for odd flushing bugs noted in 2.0, and hopefully fixed in 2.1
import random import random
if hasattr(zlib, 'Z_SYNC_FLUSH'):
# Testing on 17K of "random" data # Testing on 17K of "random" data
# Create compressor and decompressor objects # Create compressor and decompressor objects
...@@ -408,7 +415,7 @@ class CompressObjectTestCase(BaseCompressTestCase, unittest.TestCase): ...@@ -408,7 +415,7 @@ class CompressObjectTestCase(BaseCompressTestCase, unittest.TestCase):
data = zlib.compress(input2) data = zlib.compress(input2)
self.assertEqual(dco.flush(), input1[1:]) self.assertEqual(dco.flush(), input1[1:])
if hasattr(zlib.compressobj(), "copy"): @requires_Compress_copy
def test_compresscopy(self): def test_compresscopy(self):
# Test copying a compression object # Test copying a compression object
data0 = HAMLET_SCENE data0 = HAMLET_SCENE
...@@ -431,6 +438,7 @@ class CompressObjectTestCase(BaseCompressTestCase, unittest.TestCase): ...@@ -431,6 +438,7 @@ class CompressObjectTestCase(BaseCompressTestCase, unittest.TestCase):
self.assertEqual(zlib.decompress(s0),data0+data0) self.assertEqual(zlib.decompress(s0),data0+data0)
self.assertEqual(zlib.decompress(s1),data0+data1) self.assertEqual(zlib.decompress(s1),data0+data1)
@requires_Compress_copy
def test_badcompresscopy(self): def test_badcompresscopy(self):
# Test copying a compression object in an inconsistent state # Test copying a compression object in an inconsistent state
c = zlib.compressobj() c = zlib.compressobj()
...@@ -463,7 +471,7 @@ class CompressObjectTestCase(BaseCompressTestCase, unittest.TestCase): ...@@ -463,7 +471,7 @@ class CompressObjectTestCase(BaseCompressTestCase, unittest.TestCase):
self.assertEqual(dco.unconsumed_tail, b'') self.assertEqual(dco.unconsumed_tail, b'')
self.assertEqual(dco.unused_data, remainder) self.assertEqual(dco.unused_data, remainder)
if hasattr(zlib.decompressobj(), "copy"): @requires_Decompress_copy
def test_decompresscopy(self): def test_decompresscopy(self):
# Test copying a decompression object # Test copying a decompression object
data = HAMLET_SCENE data = HAMLET_SCENE
...@@ -485,6 +493,7 @@ class CompressObjectTestCase(BaseCompressTestCase, unittest.TestCase): ...@@ -485,6 +493,7 @@ class CompressObjectTestCase(BaseCompressTestCase, unittest.TestCase):
self.assertEqual(s0,s1) self.assertEqual(s0,s1)
self.assertEqual(s0,data) self.assertEqual(s0,data)
@requires_Decompress_copy
def test_baddecompresscopy(self): def test_baddecompresscopy(self):
# Test copying a compression object in an inconsistent state # Test copying a compression object in an inconsistent state
data = zlib.compress(HAMLET_SCENE) data = zlib.compress(HAMLET_SCENE)
......
...@@ -23,6 +23,8 @@ Library ...@@ -23,6 +23,8 @@ Library
Tests Tests
----- -----
- Issue #18702: All skipped tests now reported as skipped.
- Issue #19085: Added basic tests for all tkinter widget options. - Issue #19085: Added basic tests for all tkinter widget options.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment