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

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

Initial patch by Kamilla Holanda.
This commit is contained in:
R David Murray 2014-03-23 15:08:43 -04:00
parent 91e7f04fc5
commit e1b6f97dae
5 changed files with 23 additions and 1 deletions

View file

@ -192,3 +192,9 @@ that may require changes to your code.
if it represented midnight in UTC. This behavior was considered obscure and if it represented midnight in UTC. This behavior was considered obscure and
error-prone and has been removed in Python 3.5. See :issue:`13936` for full error-prone and has been removed in Python 3.5. See :issue:`13936` for full
details. details.
* :meth:`unittest.TestCase.assertRaisesRegex` and
:meth:`~unittest.TestCase.assertWarnsRegex` now raise a :exc:`TypeError` if
the second argument is not a string or a compiled :mod:`regex`. You may have
tests with an invalid second argument that have until 3.5 been falsely
passing which will now raise TypeErrors (:issue:`20145`).

View file

@ -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

View file

@ -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')

View file

@ -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

View file

@ -23,6 +23,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 #20633: Replace relative import by absolute import. - Issue #20633: Replace relative import by absolute import.
- Issue #20980: Stop wrapping exception when using ThreadPool. - Issue #20980: Stop wrapping exception when using ThreadPool.