Commit c3b9dea6 authored by R David Murray's avatar R David Murray

backport: #20145: assert[Raises|Warns]Regex now raise TypeError on bad regex.

Previously a non-string, non-regex second argument and missing callable
argument could cause the test to appear to always pass.

Initial patch by Kamilla Holanda.
parent 3647af89
...@@ -143,7 +143,7 @@ class _AssertRaisesBaseContext(_BaseTestCaseContext): ...@@ -143,7 +143,7 @@ class _AssertRaisesBaseContext(_BaseTestCaseContext):
self.obj_name = str(callable_obj) self.obj_name = str(callable_obj)
else: else:
self.obj_name = None self.obj_name = None
if isinstance(expected_regex, (bytes, str)): if expected_regex is not None:
expected_regex = re.compile(expected_regex) expected_regex = re.compile(expected_regex)
self.expected_regex = expected_regex self.expected_regex = expected_regex
self.msg = None self.msg = None
......
...@@ -1126,6 +1126,18 @@ test case ...@@ -1126,6 +1126,18 @@ test case
self.assertRaisesRegex, Exception, 'x', self.assertRaisesRegex, Exception, 'x',
lambda: None) lambda: None)
def testAssertRaisesRegexInvalidRegex(self):
# Issue 20145.
class MyExc(Exception):
pass
self.assertRaises(TypeError, self.assertRaisesRegex, MyExc, lambda: True)
def testAssertWarnsRegexInvalidRegex(self):
# Issue 20145.
class MyWarn(Warning):
pass
self.assertRaises(TypeError, self.assertWarnsRegex, MyWarn, lambda: True)
def testAssertRaisesRegexMismatch(self): def testAssertRaisesRegexMismatch(self):
def Stub(): def Stub():
raise Exception('Unexpected') raise Exception('Unexpected')
......
...@@ -546,6 +546,7 @@ Stefan Hoffmeister ...@@ -546,6 +546,7 @@ Stefan Hoffmeister
Albert Hofkamp Albert Hofkamp
Tomas Hoger Tomas Hoger
Jonathan Hogg Jonathan Hogg
Kamilla Holanda
Steve Holden Steve Holden
Akintayo Holder Akintayo Holder
Thomas Holenstein Thomas Holenstein
......
...@@ -24,6 +24,9 @@ Core and Builtins ...@@ -24,6 +24,9 @@ Core and Builtins
Library Library
------- -------
- Issue #20145: `assertRaisesRegex` and `assertWarnsRegex` now raise a
TypeError if the second argument is not a string or compiled regex.
- Issue #21058: Fix a leak of file descriptor in - Issue #21058: Fix a leak of file descriptor in
:func:`tempfile.NamedTemporaryFile`, close the file descriptor if :func:`tempfile.NamedTemporaryFile`, close the file descriptor if
:func:`io.open` fails :func:`io.open` fails
......
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