summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2023-12-23 11:50:01 (GMT)
committerGitHub <noreply@github.com>2023-12-23 11:50:01 (GMT)
commitfc4d2c3dc66d34eddadd1208984a38a46757d6da (patch)
treeadd33c148a7a277d33079ccd20f96bb87c44bd3b
parentfee2bc15f9a22016dce5d8248caf320cfb48e9b6 (diff)
downloadcpython-fc4d2c3dc66d34eddadd1208984a38a46757d6da.zip
cpython-fc4d2c3dc66d34eddadd1208984a38a46757d6da.tar.gz
cpython-fc4d2c3dc66d34eddadd1208984a38a46757d6da.tar.bz2
[3.12] gh-81682: Fix test failures when CPython is built without docstrings (GH-113410) (GH-113429)
(cherry picked from commit 4e5b27e6a3be85853bd04d45128dd7cc706bb1c8)
-rw-r--r--Lib/idlelib/idle_test/test_calltip.py6
-rw-r--r--Lib/test/test_capi/test_misc.py2
-rw-r--r--Lib/test/test_coroutines.py11
-rw-r--r--Lib/test/test_curses.py4
-rw-r--r--Lib/test/test_functools.py2
-rw-r--r--Lib/test/test_importlib/extension/test_loader.py4
-rw-r--r--Lib/test/test_inspect/test_inspect.py5
-rw-r--r--Lib/test/test_module/__init__.py2
-rw-r--r--Lib/test/test_pydoc.py11
-rw-r--r--Lib/test/test_rlcompleter.py5
-rw-r--r--Lib/test/test_types.py4
-rw-r--r--Lib/test/test_zoneinfo/test_zoneinfo.py3
12 files changed, 43 insertions, 16 deletions
diff --git a/Lib/idlelib/idle_test/test_calltip.py b/Lib/idlelib/idle_test/test_calltip.py
index 1ccb63b..15e1ff3 100644
--- a/Lib/idlelib/idle_test/test_calltip.py
+++ b/Lib/idlelib/idle_test/test_calltip.py
@@ -7,6 +7,7 @@ import textwrap
import types
import re
from idlelib.idle_test.mock_tk import Text
+from test.support import MISSING_C_DOCSTRINGS
# Test Class TC is used in multiple get_argspec test methods
@@ -50,6 +51,8 @@ class Get_argspecTest(unittest.TestCase):
# but a red buildbot is better than a user crash (as has happened).
# For a simple mismatch, change the expected output to the actual.
+ @unittest.skipIf(MISSING_C_DOCSTRINGS,
+ "Signature information for builtins requires docstrings")
def test_builtins(self):
def tiptest(obj, out):
@@ -143,6 +146,8 @@ you\'ll probably have to override _wrap_chunks().''')
f.__doc__ = 'a'*300
self.assertEqual(get_spec(f), f"()\n{'a'*(calltip._MAX_COLS-3) + '...'}")
+ @unittest.skipIf(MISSING_C_DOCSTRINGS,
+ "Signature information for builtins requires docstrings")
def test_multiline_docstring(self):
# Test fewer lines than max.
self.assertEqual(get_spec(range),
@@ -157,6 +162,7 @@ bytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer
bytes(int) -> bytes object of size given by the parameter initialized with null bytes
bytes() -> empty bytes object''')
+ def test_multiline_docstring_2(self):
# Test more than max lines
def f(): pass
f.__doc__ = 'a\n' * 15
diff --git a/Lib/test/test_capi/test_misc.py b/Lib/test/test_capi/test_misc.py
index 5d0e036..403c4e9 100644
--- a/Lib/test/test_capi/test_misc.py
+++ b/Lib/test/test_capi/test_misc.py
@@ -462,6 +462,8 @@ class CAPITest(unittest.TestCase):
del L
self.assertEqual(PyList.num, 0)
+ @unittest.skipIf(MISSING_C_DOCSTRINGS,
+ "Signature information for builtins requires docstrings")
def test_heap_ctype_doc_and_text_signature(self):
self.assertEqual(_testcapi.HeapDocCType.__doc__, "somedoc")
self.assertEqual(_testcapi.HeapDocCType.__text_signature__, "(arg1, arg2)")
diff --git a/Lib/test/test_coroutines.py b/Lib/test/test_coroutines.py
index 25c981d..d848bfb 100644
--- a/Lib/test/test_coroutines.py
+++ b/Lib/test/test_coroutines.py
@@ -953,11 +953,12 @@ class CoroutineTest(unittest.TestCase):
def test_corotype_1(self):
ct = types.CoroutineType
- self.assertIn('into coroutine', ct.send.__doc__)
- self.assertIn('inside coroutine', ct.close.__doc__)
- self.assertIn('in coroutine', ct.throw.__doc__)
- self.assertIn('of the coroutine', ct.__dict__['__name__'].__doc__)
- self.assertIn('of the coroutine', ct.__dict__['__qualname__'].__doc__)
+ if not support.MISSING_C_DOCSTRINGS:
+ self.assertIn('into coroutine', ct.send.__doc__)
+ self.assertIn('inside coroutine', ct.close.__doc__)
+ self.assertIn('in coroutine', ct.throw.__doc__)
+ self.assertIn('of the coroutine', ct.__dict__['__name__'].__doc__)
+ self.assertIn('of the coroutine', ct.__dict__['__qualname__'].__doc__)
self.assertEqual(ct.__name__, 'coroutine')
async def f(): pass
diff --git a/Lib/test/test_curses.py b/Lib/test/test_curses.py
index 31bc108..83d10dd 100644
--- a/Lib/test/test_curses.py
+++ b/Lib/test/test_curses.py
@@ -8,7 +8,7 @@ import unittest
from unittest.mock import MagicMock
from test.support import (requires, verbose, SaveSignals, cpython_only,
- check_disallow_instantiation)
+ check_disallow_instantiation, MISSING_C_DOCSTRINGS)
from test.support.import_helper import import_module
# Optionally test curses module. This currently requires that the
@@ -1142,6 +1142,8 @@ class TestCurses(unittest.TestCase):
with self.assertRaises(TypeError):
del stdscr.encoding
+ @unittest.skipIf(MISSING_C_DOCSTRINGS,
+ "Signature information for builtins requires docstrings")
def test_issue21088(self):
stdscr = self.stdscr
#
diff --git a/Lib/test/test_functools.py b/Lib/test/test_functools.py
index ce2bdeb..80d0176 100644
--- a/Lib/test/test_functools.py
+++ b/Lib/test/test_functools.py
@@ -939,6 +939,8 @@ class TestCmpToKey:
self.assertRaises(TypeError, hash, k)
self.assertNotIsInstance(k, collections.abc.Hashable)
+ @unittest.skipIf(support.MISSING_C_DOCSTRINGS,
+ "Signature information for builtins requires docstrings")
def test_cmp_to_signature(self):
self.assertEqual(str(Signature.from_callable(self.cmp_to_key)),
'(mycmp)')
diff --git a/Lib/test/test_importlib/extension/test_loader.py b/Lib/test/test_importlib/extension/test_loader.py
index a7c6245..1b5a8ba 100644
--- a/Lib/test/test_importlib/extension/test_loader.py
+++ b/Lib/test/test_importlib/extension/test_loader.py
@@ -10,6 +10,7 @@ import unittest
import warnings
import importlib.util
import importlib
+from test.support import MISSING_C_DOCSTRINGS
from test.support.script_helper import assert_python_failure
@@ -375,7 +376,8 @@ class MultiPhaseExtensionModuleTests(abc.LoaderTests):
with self.subTest(name):
module = self.load_module_by_name(name)
self.assertEqual(module.__name__, name)
- self.assertEqual(module.__doc__, "Module named in %s" % lang)
+ if not MISSING_C_DOCSTRINGS:
+ self.assertEqual(module.__doc__, "Module named in %s" % lang)
(Frozen_MultiPhaseExtensionModuleTests,
diff --git a/Lib/test/test_inspect/test_inspect.py b/Lib/test/test_inspect/test_inspect.py
index a8671f9..ec50ace 100644
--- a/Lib/test/test_inspect/test_inspect.py
+++ b/Lib/test/test_inspect/test_inspect.py
@@ -3722,6 +3722,8 @@ class TestSignatureObject(unittest.TestCase):
foo_sig = MySignature.from_callable(foo)
self.assertIsInstance(foo_sig, MySignature)
+ @unittest.skipIf(MISSING_C_DOCSTRINGS,
+ "Signature information for builtins requires docstrings")
def test_signature_from_callable_class(self):
# A regression test for a class inheriting its signature from `object`.
class MySignature(inspect.Signature): pass
@@ -3812,7 +3814,8 @@ class TestSignatureObject(unittest.TestCase):
par('c', PORK, annotation="'MyClass'"),
)))
- self.assertEqual(signature_func(isa.UnannotatedClass), sig())
+ if not MISSING_C_DOCSTRINGS:
+ self.assertEqual(signature_func(isa.UnannotatedClass), sig())
self.assertEqual(signature_func(isa.unannotated_function),
sig(
parameters=(
diff --git a/Lib/test/test_module/__init__.py b/Lib/test/test_module/__init__.py
index d49c44d..98d1cbe 100644
--- a/Lib/test/test_module/__init__.py
+++ b/Lib/test/test_module/__init__.py
@@ -30,7 +30,7 @@ class ModuleTests(unittest.TestCase):
self.fail("__name__ = %s" % repr(s))
except AttributeError:
pass
- self.assertEqual(foo.__doc__, ModuleType.__doc__)
+ self.assertEqual(foo.__doc__, ModuleType.__doc__ or '')
def test_uninitialized_missing_getattr(self):
# Issue 8297
diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py
index e70a80f..dbd86a6 100644
--- a/Lib/test/test_pydoc.py
+++ b/Lib/test/test_pydoc.py
@@ -29,7 +29,7 @@ from test.support.script_helper import (assert_python_ok,
from test.support import threading_helper
from test.support import (reap_children, captured_output, captured_stdout,
captured_stderr, is_emscripten, is_wasi,
- requires_docstrings)
+ requires_docstrings, MISSING_C_DOCSTRINGS)
from test.support.os_helper import (TESTFN, rmtree, unlink)
from test import pydoc_mod
@@ -1062,13 +1062,15 @@ class TestDescriptions(unittest.TestCase):
doc = pydoc.render_doc(typing.List[int], renderer=pydoc.plaintext)
self.assertIn('_GenericAlias in module typing', doc)
self.assertIn('List = class list(object)', doc)
- self.assertIn(list.__doc__.strip().splitlines()[0], doc)
+ if not MISSING_C_DOCSTRINGS:
+ self.assertIn(list.__doc__.strip().splitlines()[0], doc)
self.assertEqual(pydoc.describe(list[int]), 'GenericAlias')
doc = pydoc.render_doc(list[int], renderer=pydoc.plaintext)
self.assertIn('GenericAlias in module builtins', doc)
self.assertIn('\nclass list(object)', doc)
- self.assertIn(list.__doc__.strip().splitlines()[0], doc)
+ if not MISSING_C_DOCSTRINGS:
+ self.assertIn(list.__doc__.strip().splitlines()[0], doc)
def test_union_type(self):
self.assertEqual(pydoc.describe(typing.Union[int, str]), '_UnionGenericAlias')
@@ -1082,7 +1084,8 @@ class TestDescriptions(unittest.TestCase):
doc = pydoc.render_doc(int | str, renderer=pydoc.plaintext)
self.assertIn('UnionType in module types object', doc)
self.assertIn('\nclass UnionType(builtins.object)', doc)
- self.assertIn(types.UnionType.__doc__.strip().splitlines()[0], doc)
+ if not MISSING_C_DOCSTRINGS:
+ self.assertIn(types.UnionType.__doc__.strip().splitlines()[0], doc)
def test_special_form(self):
self.assertEqual(pydoc.describe(typing.NoReturn), '_SpecialForm')
diff --git a/Lib/test/test_rlcompleter.py b/Lib/test/test_rlcompleter.py
index 6b5fc9a..07ec9e4 100644
--- a/Lib/test/test_rlcompleter.py
+++ b/Lib/test/test_rlcompleter.py
@@ -2,6 +2,7 @@ import unittest
from unittest.mock import patch
import builtins
import rlcompleter
+from test.support import MISSING_C_DOCSTRINGS
class CompleteMe:
""" Trivial class used in testing rlcompleter.Completer. """
@@ -40,12 +41,12 @@ class TestRlcompleter(unittest.TestCase):
# test with a customized namespace
self.assertEqual(self.completer.global_matches('CompleteM'),
- ['CompleteMe()'])
+ ['CompleteMe(' if MISSING_C_DOCSTRINGS else 'CompleteMe()'])
self.assertEqual(self.completer.global_matches('eg'),
['egg('])
# XXX: see issue5256
self.assertEqual(self.completer.global_matches('CompleteM'),
- ['CompleteMe()'])
+ ['CompleteMe(' if MISSING_C_DOCSTRINGS else 'CompleteMe()'])
def test_attr_matches(self):
# test with builtins namespace
diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py
index f2efee9..b86392f4 100644
--- a/Lib/test/test_types.py
+++ b/Lib/test/test_types.py
@@ -1,6 +1,6 @@
# Python test set -- part 6, built-in types
-from test.support import run_with_locale, cpython_only
+from test.support import run_with_locale, cpython_only, MISSING_C_DOCSTRINGS
import collections.abc
from collections import namedtuple
import copy
@@ -597,6 +597,8 @@ class TypesTests(unittest.TestCase):
self.assertIsInstance(object.__lt__, types.WrapperDescriptorType)
self.assertIsInstance(int.__lt__, types.WrapperDescriptorType)
+ @unittest.skipIf(MISSING_C_DOCSTRINGS,
+ "Signature information for builtins requires docstrings")
def test_dunder_get_signature(self):
sig = inspect.signature(object.__init__.__get__)
self.assertEqual(list(sig.parameters), ["instance", "owner"])
diff --git a/Lib/test/test_zoneinfo/test_zoneinfo.py b/Lib/test/test_zoneinfo/test_zoneinfo.py
index 3766cea..7b6b69d 100644
--- a/Lib/test/test_zoneinfo/test_zoneinfo.py
+++ b/Lib/test/test_zoneinfo/test_zoneinfo.py
@@ -17,6 +17,7 @@ import unittest
from datetime import date, datetime, time, timedelta, timezone
from functools import cached_property
+from test.support import MISSING_C_DOCSTRINGS
from test.test_zoneinfo import _support as test_support
from test.test_zoneinfo._support import OS_ENV_LOCK, TZPATH_TEST_LOCK, ZoneInfoTestBase
from test.support.import_helper import import_module
@@ -404,6 +405,8 @@ class ZoneInfoTest(TzPathUserMixin, ZoneInfoTestBase):
class CZoneInfoTest(ZoneInfoTest):
module = c_zoneinfo
+ @unittest.skipIf(MISSING_C_DOCSTRINGS,
+ "Signature information for builtins requires docstrings")
def test_signatures(self):
"""Ensure that C module has valid method signatures."""
import inspect