From 561eb5cbe4179c39d72855b4c91171be94787380 Mon Sep 17 00:00:00 2001 From: Nick Coghlan Date: Sat, 26 Oct 2013 22:20:43 +1000 Subject: [PATCH] Issue #19330: Handle the no-docstrings case in tests --- Lib/test/support/__init__.py | 10 +++++++--- Lib/test/test_contextlib.py | 28 ++++++++++++---------------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py index d4f756681a4..1b20fa7aabe 100644 --- a/Lib/test/support/__init__.py +++ b/Lib/test/support/__init__.py @@ -1697,9 +1697,13 @@ def run_unittest(*classes): #======================================================================= # Check for the presence of docstrings. -HAVE_DOCSTRINGS = (check_impl_detail(cpython=False) or - sys.platform == 'win32' or - sysconfig.get_config_var('WITH_DOC_STRINGS')) +# Rather than trying to enumerate all the cases where docstrings may be +# disabled, we just check for that directly + +def _check_docstrings(): + """Just used to check if docstrings are enabled""" + +HAVE_DOCSTRINGS = (_check_docstrings.__doc__ is not None) requires_docstrings = unittest.skipUnless(HAVE_DOCSTRINGS, "test requires docstrings") diff --git a/Lib/test/test_contextlib.py b/Lib/test/test_contextlib.py index 6362a9700db..916ac806927 100644 --- a/Lib/test/test_contextlib.py +++ b/Lib/test/test_contextlib.py @@ -14,20 +14,6 @@ except ImportError: class ContextManagerTestCase(unittest.TestCase): - def test_instance_docstring_given_function_docstring(self): - # Issue 19330: ensure context manager instances have good docstrings - # See http://bugs.python.org/issue19404 for why this doesn't currently - # affect help() output :( - def gen_with_docstring(): - """This has a docstring""" - yield - gen_docstring = gen_with_docstring.__doc__ - cm_with_docstring = contextmanager(gen_with_docstring) - self.assertEqual(cm_with_docstring.__doc__, gen_docstring) - obj = cm_with_docstring() - self.assertEqual(obj.__doc__, gen_docstring) - self.assertNotEqual(obj.__doc__, type(obj).__doc__) - def test_contextmanager_plain(self): state = [] @contextmanager @@ -115,14 +101,20 @@ class ContextManagerTestCase(unittest.TestCase): self.assertEqual(baz.__name__,'baz') self.assertEqual(baz.foo, 'bar') - @unittest.skipIf(sys.flags.optimize >= 2, - "Docstrings are omitted with -O2 and above") + @support.requires_docstrings def test_contextmanager_doc_attrib(self): baz = self._create_contextmanager_attribs() self.assertEqual(baz.__doc__, "Whee!") + @support.requires_docstrings + def test_instance_docstring_given_cm_docstring(self): + baz = self._create_contextmanager_attribs()(None) + self.assertEqual(baz.__doc__, "Whee!") + + class ClosingTestCase(unittest.TestCase): + @support.requires_docstrings def test_instance_docs(self): # Issue 19330: ensure context manager instances have good docstrings cm_docstring = closing.__doc__ @@ -239,6 +231,7 @@ class mycontext(ContextDecorator): class TestContextDecorator(unittest.TestCase): + @support.requires_docstrings def test_instance_docs(self): # Issue 19330: ensure context manager instances have good docstrings cm_docstring = mycontext.__doc__ @@ -398,6 +391,7 @@ class TestContextDecorator(unittest.TestCase): class TestExitStack(unittest.TestCase): + @support.requires_docstrings def test_instance_docs(self): # Issue 19330: ensure context manager instances have good docstrings cm_docstring = ExitStack.__doc__ @@ -665,6 +659,7 @@ class TestExitStack(unittest.TestCase): class TestRedirectStdout(unittest.TestCase): + @support.requires_docstrings def test_instance_docs(self): # Issue 19330: ensure context manager instances have good docstrings cm_docstring = redirect_stdout.__doc__ @@ -708,6 +703,7 @@ class TestRedirectStdout(unittest.TestCase): class TestSuppress(unittest.TestCase): + @support.requires_docstrings def test_instance_docs(self): # Issue 19330: ensure context manager instances have good docstrings cm_docstring = suppress.__doc__