Skip to content

Commit ccb7ca7

Browse files
tekknolagiDinoV
authored andcommitted
bpo-36929: Modify io/re tests to allow for missing mod name (#13392)
* bpo-36929: Modify io/re tests to allow for missing mod name For a vanishingly small number of internal types, CPython sets the tp_name slot to mod_name.type_name, either in the PyTypeObject or the PyType_Spec. There are a few minor places where this surfaces: * Custom repr functions for those types (some of which ignore the tp_name in favor of using a string literal, such as _io.TextIOWrapper) * Pickling error messages The test suite only tests the former. This commit modifies the test suite to allow Python implementations to omit the module prefix. https://bugs.python.org/issue36929
1 parent ad098b6 commit ccb7ca7

File tree

3 files changed

+34
-29
lines changed

3 files changed

+34
-29
lines changed

Lib/test/test_io.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1119,12 +1119,12 @@ def f():
11191119
def test_repr(self):
11201120
raw = self.MockRawIO()
11211121
b = self.tp(raw)
1122-
clsname = "%s.%s" % (self.tp.__module__, self.tp.__qualname__)
1123-
self.assertEqual(repr(b), "<%s>" % clsname)
1122+
clsname = r"(%s\.)?%s" % (self.tp.__module__, self.tp.__qualname__)
1123+
self.assertRegex(repr(b), "<%s>" % clsname)
11241124
raw.name = "dummy"
1125-
self.assertEqual(repr(b), "<%s name='dummy'>" % clsname)
1125+
self.assertRegex(repr(b), "<%s name='dummy'>" % clsname)
11261126
raw.name = b"dummy"
1127-
self.assertEqual(repr(b), "<%s name=b'dummy'>" % clsname)
1127+
self.assertRegex(repr(b), "<%s name=b'dummy'>" % clsname)
11281128

11291129
def test_recursive_repr(self):
11301130
# Issue #25455
@@ -2598,17 +2598,17 @@ def test_repr(self):
25982598
b = self.BufferedReader(raw)
25992599
t = self.TextIOWrapper(b, encoding="utf-8")
26002600
modname = self.TextIOWrapper.__module__
2601-
self.assertEqual(repr(t),
2602-
"<%s.TextIOWrapper encoding='utf-8'>" % modname)
2601+
self.assertRegex(repr(t),
2602+
r"<(%s\.)?TextIOWrapper encoding='utf-8'>" % modname)
26032603
raw.name = "dummy"
2604-
self.assertEqual(repr(t),
2605-
"<%s.TextIOWrapper name='dummy' encoding='utf-8'>" % modname)
2604+
self.assertRegex(repr(t),
2605+
r"<(%s\.)?TextIOWrapper name='dummy' encoding='utf-8'>" % modname)
26062606
t.mode = "r"
2607-
self.assertEqual(repr(t),
2608-
"<%s.TextIOWrapper name='dummy' mode='r' encoding='utf-8'>" % modname)
2607+
self.assertRegex(repr(t),
2608+
r"<(%s\.)?TextIOWrapper name='dummy' mode='r' encoding='utf-8'>" % modname)
26092609
raw.name = b"dummy"
2610-
self.assertEqual(repr(t),
2611-
"<%s.TextIOWrapper name=b'dummy' mode='r' encoding='utf-8'>" % modname)
2610+
self.assertRegex(repr(t),
2611+
r"<(%s\.)?TextIOWrapper name=b'dummy' mode='r' encoding='utf-8'>" % modname)
26122612

26132613
t.buffer.detach()
26142614
repr(t) # Should not raise an exception
@@ -4174,11 +4174,11 @@ def run():
41744174
err = res.err.decode()
41754175
if res.rc != 0:
41764176
# Failure: should be a fatal error
4177-
self.assertIn("Fatal Python error: could not acquire lock "
4178-
"for <_io.BufferedWriter name='<{stream_name}>'> "
4179-
"at interpreter shutdown, possibly due to "
4180-
"daemon threads".format_map(locals()),
4181-
err)
4177+
pattern = (r"Fatal Python error: could not acquire lock "
4178+
r"for <(_io\.)?BufferedWriter name='<{stream_name}>'> "
4179+
r"at interpreter shutdown, possibly due to "
4180+
r"daemon threads".format_map(locals()))
4181+
self.assertRegex(err, pattern)
41824182
else:
41834183
self.assertFalse(err.strip('.!'))
41844184

Lib/test/test_re.py

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1761,24 +1761,28 @@ def test_issue17998(self):
17611761
def test_match_repr(self):
17621762
for string in '[abracadabra]', S('[abracadabra]'):
17631763
m = re.search(r'(.+)(.*?)\1', string)
1764-
self.assertEqual(repr(m), "<%s.%s object; "
1765-
"span=(1, 12), match='abracadabra'>" %
1766-
(type(m).__module__, type(m).__qualname__))
1764+
pattern = r"<(%s\.)?%s object; span=\(1, 12\), match='abracadabra'>" % (
1765+
type(m).__module__, type(m).__qualname__
1766+
)
1767+
self.assertRegex(repr(m), pattern)
17671768
for string in (b'[abracadabra]', B(b'[abracadabra]'),
17681769
bytearray(b'[abracadabra]'),
17691770
memoryview(b'[abracadabra]')):
17701771
m = re.search(br'(.+)(.*?)\1', string)
1771-
self.assertEqual(repr(m), "<%s.%s object; "
1772-
"span=(1, 12), match=b'abracadabra'>" %
1773-
(type(m).__module__, type(m).__qualname__))
1772+
pattern = r"<(%s\.)?%s object; span=\(1, 12\), match=b'abracadabra'>" % (
1773+
type(m).__module__, type(m).__qualname__
1774+
)
1775+
self.assertRegex(repr(m), pattern)
17741776

17751777
first, second = list(re.finditer("(aa)|(bb)", "aa bb"))
1776-
self.assertEqual(repr(first), "<%s.%s object; "
1777-
"span=(0, 2), match='aa'>" %
1778-
(type(second).__module__, type(first).__qualname__))
1779-
self.assertEqual(repr(second), "<%s.%s object; "
1780-
"span=(3, 5), match='bb'>" %
1781-
(type(second).__module__, type(second).__qualname__))
1778+
pattern = r"<(%s\.)?%s object; span=\(0, 2\), match='aa'>" % (
1779+
type(second).__module__, type(second).__qualname__
1780+
)
1781+
self.assertRegex(repr(first), pattern)
1782+
pattern = r"<(%s\.)?%s object; span=\(3, 5\), match='bb'>" % (
1783+
type(second).__module__, type(second).__qualname__
1784+
)
1785+
self.assertRegex(repr(second), pattern)
17821786

17831787
def test_zerowidth(self):
17841788
# Issues 852532, 1647489, 3262, 25054.

Misc/ACKS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ Michel Van den Bergh
143143
Julian Berman
144144
Brice Berna
145145
Olivier Bernard
146+
Maxwell Bernstein
146147
Eric Beser
147148
Steven Bethard
148149
Stephen Bevan

0 commit comments

Comments
 (0)