diff options
author | R. David Murray <rdmurray@bitdance.com> | 2010-02-24 01:46:21 (GMT) |
---|---|---|
committer | R. David Murray <rdmurray@bitdance.com> | 2010-02-24 01:46:21 (GMT) |
commit | 378c0cf5abb4c49c1a95597d3c5284dc93dd7822 (patch) | |
tree | 0a7c9a724887dff98a5abefd9b09da0de6889731 /Lib | |
parent | 72aee3dcabf98a0b8a7a60cccab4fbd1ef63fbd2 (diff) | |
download | cpython-378c0cf5abb4c49c1a95597d3c5284dc93dd7822.zip cpython-378c0cf5abb4c49c1a95597d3c5284dc93dd7822.tar.gz cpython-378c0cf5abb4c49c1a95597d3c5284dc93dd7822.tar.bz2 |
Merged revisions 78351 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r78351 | r.david.murray | 2010-02-22 19:24:49 -0500 (Mon, 22 Feb 2010) | 5 lines
Issue 6292: for the moment at least, the test suite passes if run
with -OO. Tests requiring docstrings are skipped. Patch by
Brian Curtin, thanks to Matias Torchinsky for helping review and
improve the patch.
........
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/distutils/tests/test_build_py.py | 13 | ||||
-rwxr-xr-x | Lib/distutils/tests/test_extension.py | 17 | ||||
-rw-r--r-- | Lib/distutils/tests/test_install_lib.py | 17 | ||||
-rw-r--r-- | Lib/doctest.py | 22 | ||||
-rw-r--r-- | Lib/lib2to3/tests/test_refactor.py | 3 | ||||
-rw-r--r-- | Lib/test/test_collections.py | 8 | ||||
-rw-r--r-- | Lib/test/test_contextlib.py | 12 | ||||
-rw-r--r-- | Lib/test/test_descr.py | 4 | ||||
-rw-r--r-- | Lib/test/test_doctest2.py | 4 | ||||
-rw-r--r-- | Lib/test/test_docxmlrpc.py | 29 | ||||
-rw-r--r-- | Lib/test/test_functools.py | 28 | ||||
-rw-r--r-- | Lib/test/test_inspect.py | 2 | ||||
-rw-r--r-- | Lib/test/test_pkg.py | 17 | ||||
-rw-r--r-- | Lib/test/test_property.py | 41 | ||||
-rw-r--r-- | Lib/test/test_pydoc.py | 4 | ||||
-rw-r--r-- | Lib/test/test_unittest.py | 8 | ||||
-rw-r--r-- | Lib/test/test_xmlrpc.py | 19 |
17 files changed, 207 insertions, 41 deletions
diff --git a/Lib/distutils/tests/test_build_py.py b/Lib/distutils/tests/test_build_py.py index 3e45f6e..61e213a 100644 --- a/Lib/distutils/tests/test_build_py.py +++ b/Lib/distutils/tests/test_build_py.py @@ -16,7 +16,7 @@ class BuildPyTestCase(support.TempdirManager, support.LoggingSilencer, unittest.TestCase): - def test_package_data(self): + def _setup_package_data(self): sources = self.mkdtemp() f = open(os.path.join(sources, "__init__.py"), "w") f.write("# Pretend this is a package.") @@ -52,10 +52,19 @@ class BuildPyTestCase(support.TempdirManager, self.assertEqual(len(cmd.get_outputs()), 3) pkgdest = os.path.join(destination, "pkg") files = os.listdir(pkgdest) + return files + + def test_package_data(self): + files = self._setup_package_data() self.assertTrue("__init__.py" in files) - self.assertTrue("__init__.pyc" in files) self.assertTrue("README.txt" in files) + @unittest.skipIf(sys.flags.optimize >= 2, + "pyc files are not written with -O2 and above") + def test_package_data_pyc(self): + files = self._setup_package_data() + self.assertTrue("__init__.pyc" in files) + def test_empty_package_dir (self): # See SF 1668596/1720897. cwd = os.getcwd() diff --git a/Lib/distutils/tests/test_extension.py b/Lib/distutils/tests/test_extension.py index 9d3cfe6..857284d 100755 --- a/Lib/distutils/tests/test_extension.py +++ b/Lib/distutils/tests/test_extension.py @@ -1,6 +1,7 @@ """Tests for distutils.extension.""" -import unittest import os +import sys +import unittest import warnings from test.support import check_warnings @@ -32,16 +33,22 @@ class ExtensionTestCase(unittest.TestCase): self.assertEquals(names, wanted) - def test_extension_init(self): - # the first argument, which is the name, must be a string + @unittest.skipIf(sys.flags.optimize >= 2, + "Assertions are omitted with -O2 and above") + def test_extension_init_assertions(self): + # The first argument, which is the name, must be a string. self.assertRaises(AssertionError, Extension, 1, []) - ext = Extension('name', []) - self.assertEquals(ext.name, 'name') # the second argument, which is the list of files, must # be a list of strings self.assertRaises(AssertionError, Extension, 'name', 'file') self.assertRaises(AssertionError, Extension, 'name', ['file', 1]) + + def test_extension_init(self): + ext = Extension('name', []) + self.assertEquals(ext.name, 'name') + + ext = Extension('name', ['file1', 'file2']) self.assertEquals(ext.sources, ['file1', 'file2']) diff --git a/Lib/distutils/tests/test_install_lib.py b/Lib/distutils/tests/test_install_lib.py index 99a6d90..13d27ab 100644 --- a/Lib/distutils/tests/test_install_lib.py +++ b/Lib/distutils/tests/test_install_lib.py @@ -1,6 +1,6 @@ """Tests for distutils.command.install_data.""" -import sys import os +import sys import unittest from distutils.command.install_lib import install_lib @@ -31,9 +31,7 @@ class InstallLibTestCase(support.TempdirManager, cmd.finalize_options() self.assertEquals(cmd.optimize, 2) - @unittest.skipUnless(not sys.dont_write_bytecode, - 'byte-compile not supported') - def test_byte_compile(self): + def _setup_byte_compile(self): pkg_dir, dist = self.create_dist() cmd = install_lib(dist) cmd.compile = cmd.optimize = 1 @@ -41,8 +39,15 @@ class InstallLibTestCase(support.TempdirManager, f = os.path.join(pkg_dir, 'foo.py') self.write_file(f, '# python file') cmd.byte_compile([f]) - self.assertTrue(os.path.exists(os.path.join(pkg_dir, 'foo.pyc'))) - self.assertTrue(os.path.exists(os.path.join(pkg_dir, 'foo.pyo'))) + return pkg_dir + + @unittest.skipIf(sys.dont_write_bytecode, 'byte-compile not enabled') + def test_byte_compile(self): + pkg_dir = self._setup_byte_compile() + if sys.flags.optimize < 1: + self.assertTrue(os.path.exists(os.path.join(pkg_dir, 'foo.pyc'))) + else: + self.assertTrue(os.path.exists(os.path.join(pkg_dir, 'foo.pyo'))) def test_get_outputs(self): pkg_dir, dist = self.create_dist() diff --git a/Lib/doctest.py b/Lib/doctest.py index d6fb504..eac4378 100644 --- a/Lib/doctest.py +++ b/Lib/doctest.py @@ -2192,6 +2192,19 @@ class DocTestCase(unittest.TestCase): def shortDescription(self): return "Doctest: " + self._dt_test.name +class SkipDocTestCase(DocTestCase): + def __init__(self): + DocTestCase.__init__(self, None) + + def setUp(self): + self.skipTest("DocTestSuite will not work with -O2 and above") + + def test_skip(self): + pass + + def shortDescription(self): + return "Skipping tests from %s" % module.__name__ + def DocTestSuite(module=None, globs=None, extraglobs=None, test_finder=None, **options): """ @@ -2234,13 +2247,20 @@ def DocTestSuite(module=None, globs=None, extraglobs=None, test_finder=None, module = _normalize_module(module) tests = test_finder.find(module, globs=globs, extraglobs=extraglobs) - if not tests: + + if not tests and sys.flags.optimize >=2: + # Skip doctests when running with -O2 + suite = unittest.TestSuite() + suite.addTest(SkipDocTestCase()) + return suite + elif not tests: # Why do we want to do this? Because it reveals a bug that might # otherwise be hidden. raise ValueError(module, "has no tests") tests.sort() suite = unittest.TestSuite() + for test in tests: if len(test.examples) == 0: continue diff --git a/Lib/lib2to3/tests/test_refactor.py b/Lib/lib2to3/tests/test_refactor.py index 2263f50..7ed85df 100644 --- a/Lib/lib2to3/tests/test_refactor.py +++ b/Lib/lib2to3/tests/test_refactor.py @@ -239,6 +239,9 @@ from __future__ import print_function""" finally: os.linesep = old_sep + + @unittest.skipIf(sys.flags.optimize >= 2, + "Docstrings are omitted with -O2 and above") def test_refactor_docstring(self): rt = self.rt() diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py index 2dc7157..467ddef 100644 --- a/Lib/test/test_collections.py +++ b/Lib/test/test_collections.py @@ -10,6 +10,7 @@ from random import randrange, shuffle import operator import keyword import re +import sys from collections import Hashable, Iterable, Iterator from collections import Sized, Container, Callable from collections import Set, MutableSet @@ -24,7 +25,6 @@ class TestNamedTuple(unittest.TestCase): def test_factory(self): Point = namedtuple('Point', 'x y') self.assertEqual(Point.__name__, 'Point') - self.assertEqual(Point.__doc__, 'Point(x, y)') self.assertEqual(Point.__slots__, ()) self.assertEqual(Point.__module__, __name__) self.assertEqual(Point.__getitem__, tuple.__getitem__) @@ -51,6 +51,12 @@ class TestNamedTuple(unittest.TestCase): self.assertRaises(TypeError, Point._make, [11]) # catch too few args self.assertRaises(TypeError, Point._make, [11, 22, 33]) # catch too many args + @unittest.skipIf(sys.flags.optimize >= 2, + "Docstrings are omitted with -O2 and above") + def test_factory_doc_attr(self): + Point = namedtuple('Point', 'x y') + self.assertEqual(Point.__doc__, 'Point(x, y)') + def test_name_fixer(self): for spec, renamed in [ [('efg', 'g%hi'), ('efg', '_1')], # field with non-alpha char diff --git a/Lib/test/test_contextlib.py b/Lib/test/test_contextlib.py index f000f76..ae18085 100644 --- a/Lib/test/test_contextlib.py +++ b/Lib/test/test_contextlib.py @@ -4,6 +4,7 @@ import sys import os import decimal +import sys import tempfile import unittest import threading @@ -85,7 +86,7 @@ class ContextManagerTestCase(unittest.TestCase): raise ZeroDivisionError(999) self.assertEqual(state, [1, 42, 999]) - def test_contextmanager_attribs(self): + def _create_contextmanager_attribs(self): def attribs(**kw): def decorate(func): for k,v in kw.items(): @@ -96,8 +97,17 @@ class ContextManagerTestCase(unittest.TestCase): @attribs(foo='bar') def baz(spam): """Whee!""" + return baz + + def test_contextmanager_attribs(self): + baz = self._create_contextmanager_attribs() self.assertEqual(baz.__name__,'baz') self.assertEqual(baz.foo, 'bar') + + @unittest.skipIf(sys.flags.optimize >= 2, + "Docstrings are omitted with -O2 and above") + def test_contextmanager_doc_attrib(self): + baz = self._create_contextmanager_attribs() self.assertEqual(baz.__doc__, "Whee!") class ClosingTestCase(unittest.TestCase): diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py index 93c4a19..95a68c0 100644 --- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -1817,6 +1817,9 @@ order (MRO) for bases """ else: self.fail("expected ZeroDivisionError from bad property") + @unittest.skipIf(sys.flags.optimize >= 2, + "Docstrings are omitted with -O2 and above") + def test_properties_doc_attrib(self): class E(object): def getter(self): "getter method" @@ -1829,6 +1832,7 @@ order (MRO) for bases """ prop2 = property(fset=setter) self.assertEqual(prop2.__doc__, None) + def test_testcapi_no_segfault(self): # this segfaulted in 2.5b2 try: import _testcapi diff --git a/Lib/test/test_doctest2.py b/Lib/test/test_doctest2.py index 86334d7..8500ed5 100644 --- a/Lib/test/test_doctest2.py +++ b/Lib/test/test_doctest2.py @@ -12,7 +12,11 @@ the example. It should be ignored: """ +import sys +import unittest from test import support +if sys.flags.optimize >= 2: + raise unittest.SkipTest("Cannot test docstrings with -O2") class C(object): """Class C. diff --git a/Lib/test/test_docxmlrpc.py b/Lib/test/test_docxmlrpc.py index d0b604c..5306c31 100644 --- a/Lib/test/test_docxmlrpc.py +++ b/Lib/test/test_docxmlrpc.py @@ -1,5 +1,6 @@ from xmlrpc.server import DocXMLRPCServer import http.client +import sys from test import support import threading import time @@ -7,6 +8,20 @@ import unittest PORT = None +def make_request_and_skipIf(condition, reason): + # If we skip the test, we have to make a request because the + # the server created in setUp blocks expecting one to come in. + if not condition: + return lambda func: func + def decorator(func): + def make_request_and_skip(self): + self.client.request("GET", "/") + self.client.getresponse() + raise unittest.SkipTest(reason) + return make_request_and_skip + return decorator + + def server(evt, numrequests): serv = DocXMLRPCServer(("localhost", 0), logRequests=False) @@ -110,10 +125,12 @@ class DocXMLRPCHTTPGETServer(unittest.TestCase): b'<lambda></strong></a>(x, y)</dt></dl>'), response.read()) + @make_request_and_skipIf(sys.flags.optimize >= 2, + "Docstrings are omitted with -O2 and above") def test_autolinking(self): - """Test that the server correctly automatically wraps references to PEPS - and RFCs with links, and that it linkifies text starting with http or - ftp protocol prefixes. + """Test that the server correctly automatically wraps references to + PEPS and RFCs with links, and that it linkifies text starting with + http or ftp protocol prefixes. The documentation for the "add" method contains the test material. """ @@ -132,11 +149,13 @@ class DocXMLRPCHTTPGETServer(unittest.TestCase): b'auto-linked, too:<br>\n<a href="http://google.com">' b'http://google.com</a>.</tt></dd></dl>'), response) + @make_request_and_skipIf(sys.flags.optimize >= 2, + "Docstrings are omitted with -O2 and above") def test_system_methods(self): """Test the precense of three consecutive system.* methods. - This also tests their use of parameter type recognition and the systems - related to that process. + This also tests their use of parameter type recognition and the + systems related to that process. """ self.client.request("GET", "/") response = self.client.getresponse().read() diff --git a/Lib/test/test_functools.py b/Lib/test/test_functools.py index eff31e0..df335e8 100644 --- a/Lib/test/test_functools.py +++ b/Lib/test/test_functools.py @@ -1,4 +1,5 @@ import functools +import sys import unittest from test import support from weakref import proxy @@ -180,7 +181,7 @@ class TestUpdateWrapper(unittest.TestCase): for key in wrapped_attr: self.assertTrue(wrapped_attr[key] is wrapper_attr[key]) - def test_default_update(self): + def _default_update(self): def f(): """This is a test""" pass @@ -188,11 +189,20 @@ class TestUpdateWrapper(unittest.TestCase): def wrapper(): pass functools.update_wrapper(wrapper, f) + return wrapper, f + + def test_default_update(self): + wrapper, f = self._default_update() self.check_wrapper(wrapper, f) self.assertEqual(wrapper.__name__, 'f') - self.assertEqual(wrapper.__doc__, 'This is a test') self.assertEqual(wrapper.attr, 'This is also a test') + @unittest.skipIf(sys.flags.optimize >= 2, + "Docstrings are omitted with -O2 and above") + def test_default_update_doc(self): + wrapper, f = self._default_update() + self.assertEqual(wrapper.__doc__, 'This is a test') + def test_no_update(self): def f(): """This is a test""" @@ -233,7 +243,7 @@ class TestUpdateWrapper(unittest.TestCase): class TestWraps(TestUpdateWrapper): - def test_default_update(self): + def _default_update(self): def f(): """This is a test""" pass @@ -242,10 +252,19 @@ class TestWraps(TestUpdateWrapper): def wrapper(): pass self.check_wrapper(wrapper, f) + return wrapper + + def test_default_update(self): + wrapper = self._default_update() self.assertEqual(wrapper.__name__, 'f') - self.assertEqual(wrapper.__doc__, 'This is a test') self.assertEqual(wrapper.attr, 'This is also a test') + @unittest.skipIf(not sys.flags.optimize <= 1, + "Docstrings are omitted with -O2 and above") + def test_default_update_doc(self): + wrapper = self._default_update() + self.assertEqual(wrapper.__doc__, 'This is a test') + def test_no_update(self): def f(): """This is a test""" @@ -350,7 +369,6 @@ class TestReduce(unittest.TestCase): def test_main(verbose=None): - import sys test_classes = ( TestPartial, TestPartialSubclass, diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py index 67d76be..ede793a 100644 --- a/Lib/test/test_inspect.py +++ b/Lib/test/test_inspect.py @@ -236,6 +236,8 @@ class TestRetrievingSourceCode(GetSourceBase): self.assertEqual(functions, [('eggs', mod.eggs), ('spam', mod.spam)]) + @unittest.skipIf(sys.flags.optimize >= 2, + "Docstrings are omitted with -O2 and above") def test_getdoc(self): self.assertEqual(inspect.getdoc(mod), 'A module docstring.') self.assertEqual(inspect.getdoc(mod.StupidGit), diff --git a/Lib/test/test_pkg.py b/Lib/test/test_pkg.py index 2e293f4..2c19589 100644 --- a/Lib/test/test_pkg.py +++ b/Lib/test/test_pkg.py @@ -53,7 +53,8 @@ class TestPkg(unittest.TestCase): def tearDown(self): sys.path[:] = self.syspath support.modules_cleanup(*self.modules_before) - cleanout(self.root) + if self.root: # Only clean if the test was actually run + cleanout(self.root) # delete all modules concerning the tested hiearchy if self.pkgname: @@ -103,9 +104,6 @@ class TestPkg(unittest.TestCase): ] self.mkhier(hier) - import t2 - self.assertEqual(t2.__doc__, "doc for t2") - import t2.sub import t2.sub.subsub self.assertEqual(t2.__name__, "t2") @@ -276,6 +274,17 @@ class TestPkg(unittest.TestCase): self.assertFalse(sub) self.assertFalse(subsub) + @unittest.skipIf(sys.flags.optimize >= 2, + "Docstrings are omitted with -O2 and above") + def test_8(self): + hier = [ + ("t8", None), + ("t8 __init__"+os.extsep+"py", "'doc for t8'"), + ] + self.mkhier(hier) + + import t8 + self.assertEqual(t8.__doc__, "doc for t8") def test_main(): support.run_unittest(__name__) diff --git a/Lib/test/test_property.py b/Lib/test/test_property.py index d9469d9..5d44fb0 100644 --- a/Lib/test/test_property.py +++ b/Lib/test/test_property.py @@ -1,6 +1,7 @@ # Test case for property # more tests are in test_descr +import sys import unittest from test.support import run_unittest @@ -91,7 +92,6 @@ class PropertyTests(unittest.TestCase): base.spam = 20 self.assertEqual(base.spam, 20) self.assertEqual(base._spam, 20) - self.assertEqual(base.__class__.spam.__doc__, "BaseClass.getter") def test_property_decorator_subclass(self): # see #1620 @@ -99,14 +99,27 @@ class PropertyTests(unittest.TestCase): self.assertRaises(PropertyGet, getattr, sub, "spam") self.assertRaises(PropertySet, setattr, sub, "spam", None) self.assertRaises(PropertyDel, delattr, sub, "spam") + + @unittest.skipIf(sys.flags.optimize >= 2, + "Docstrings are omitted with -O2 and above") + def test_property_decorator_subclass_doc(self): + sub = SubClass() self.assertEqual(sub.__class__.spam.__doc__, "SubClass.getter") + @unittest.skipIf(sys.flags.optimize >= 2, + "Docstrings are omitted with -O2 and above") + def test_property_decorator_baseclass_doc(self): + base = BaseClass() + self.assertEqual(base.__class__.spam.__doc__, "BaseClass.getter") + def test_property_decorator_doc(self): base = PropertyDocBase() sub = PropertyDocSub() self.assertEqual(base.__class__.spam.__doc__, "spam spam spam") self.assertEqual(sub.__class__.spam.__doc__, "spam spam spam") + @unittest.skipIf(sys.flags.optimize >= 1, + "Docstrings are omitted with -O2 and above") def test_property_getter_doc_override(self): newgettersub = PropertySubNewGetter() self.assertEqual(newgettersub.spam, 5) @@ -126,16 +139,6 @@ class PropertySubSlots(property): class PropertySubclassTests(unittest.TestCase): - def test_docstring_copy(self): - class Foo(object): - @PropertySub - def spam(self): - """spam wrapped in property subclass""" - return 1 - self.assertEqual( - Foo.spam.__doc__, - "spam wrapped in property subclass") - def test_slots_docstring_copy_exception(self): try: class Foo(object): @@ -148,6 +151,20 @@ class PropertySubclassTests(unittest.TestCase): else: raise Exception("AttributeError not raised") + @unittest.skipIf(sys.flags.optimize >= 2, + "Docstrings are omitted with -O2 and above") + def test_docstring_copy(self): + class Foo(object): + @PropertySub + def spam(self): + """spam wrapped in property subclass""" + return 1 + self.assertEqual( + Foo.spam.__doc__, + "spam wrapped in property subclass") + + @unittest.skipIf(sys.flags.optimize <= 2, + "Docstrings are omitted with -O2 and above") def test_property_setter_copies_getter_docstring(self): class Foo(object): def __init__(self): self._spam = 1 @@ -179,6 +196,8 @@ class PropertySubclassTests(unittest.TestCase): FooSub.spam.__doc__, "spam wrapped in property subclass") + @unittest.skipIf(sys.flags.optimize <= 2, + "Docstrings are omitted with -O2 and above") def test_property_new_getter_new_docstring(self): class Foo(object): diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py index 5d99e43..bfa99e7 100644 --- a/Lib/test/test_pydoc.py +++ b/Lib/test/test_pydoc.py @@ -236,6 +236,8 @@ def print_diffs(text1, text2): class PyDocDocTest(unittest.TestCase): + @unittest.skipIf(sys.flags.optimize >= 2, + "Docstrings are omitted with -O2 and above") def test_html_doc(self): result, doc_loc = get_pydoc_html(pydoc_mod) mod_file = inspect.getabsfile(pydoc_mod) @@ -249,6 +251,8 @@ class PyDocDocTest(unittest.TestCase): print_diffs(expected_html, result) self.fail("outputs are not equal, see diff above") + @unittest.skipIf(sys.flags.optimize >= 2, + "Docstrings are omitted with -O2 and above") def test_text_doc(self): result, doc_loc = get_pydoc_text(pydoc_mod) expected_text = expected_text_pattern % \ diff --git a/Lib/test/test_unittest.py b/Lib/test/test_unittest.py index 8627312..75b9d0c 100644 --- a/Lib/test/test_unittest.py +++ b/Lib/test/test_unittest.py @@ -2051,6 +2051,8 @@ class Test_TestResult(TestCase): 'testGetDescriptionWithoutDocstring (' + __name__ + '.Test_TestResult)') + @unittest.skipIf(sys.flags.optimize >= 2, + "Docstrings are omitted with -O2 and above") def testGetDescriptionWithOneLineDocstring(self): """Tests getDescription() for a method with a docstring.""" result = unittest.TextTestResult(None, True, 1) @@ -2060,6 +2062,8 @@ class Test_TestResult(TestCase): '(' + __name__ + '.Test_TestResult)\n' 'Tests getDescription() for a method with a docstring.')) + @unittest.skipIf(sys.flags.optimize >= 2, + "Docstrings are omitted with -O2 and above") def testGetDescriptionWithMultiLineDocstring(self): """Tests getDescription() for a method with a longer docstring. The second line of the docstring. @@ -2489,12 +2493,16 @@ class Test_TestCase(TestCase, TestEquality, TestHashing): def testShortDescriptionWithoutDocstring(self): self.assertIsNone(self.shortDescription()) + @unittest.skipIf(sys.flags.optimize >= 2, + "Docstrings are omitted with -O2 and above") def testShortDescriptionWithOneLineDocstring(self): """Tests shortDescription() for a method with a docstring.""" self.assertEqual( self.shortDescription(), 'Tests shortDescription() for a method with a docstring.') + @unittest.skipIf(sys.flags.optimize >= 2, + "Docstrings are omitted with -O2 and above") def testShortDescriptionWithMultiLineDocstring(self): """Tests shortDescription() for a method with a longer docstring. diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py index 2ae4396..3bc88eb 100644 --- a/Lib/test/test_xmlrpc.py +++ b/Lib/test/test_xmlrpc.py @@ -383,6 +383,22 @@ def is_unavailable_exception(e): if exc_mess and 'temporarily unavailable' in exc_mess.lower(): return True +def make_request_and_skipIf(condition, reason): + # If we skip the test, we have to make a request because the + # the server created in setUp blocks expecting one to come in. + if not condition: + return lambda func: func + def decorator(func): + def make_request_and_skip(self): + try: + xmlrpclib.ServerProxy(URL).my_function() + except (xmlrpclib.ProtocolError, socket.error) as e: + if not is_unavailable_exception(e): + raise + raise unittest.SkipTest(reason) + return make_request_and_skip + return decorator + class BaseServerTestCase(unittest.TestCase): requestHandler = None request_count = 1 @@ -403,6 +419,7 @@ class BaseServerTestCase(unittest.TestCase): def tearDown(self): # wait on the server thread to terminate self.evt.wait(4.0) + # XXX this code does not work, and in fact stop_serving doesn't exist. if not self.evt.is_set(): self.evt.set() stop_serving() @@ -474,6 +491,8 @@ class SimpleServerTestCase(BaseServerTestCase): # protocol error; provide additional information in test output self.fail("%s\n%s" % (e, getattr(e, "headers", ""))) + @make_request_and_skipIf(sys.flags.optimize >= 2, + "Docstrings are omitted with -O2 and above") def test_introspection3(self): try: # test native doc |