[Python-checkins] cpython: #20145: assert[Raises|Warns]Regex now raise TypeError on bad regex.
r.david.murray
python-checkins at python.org
Sun Mar 23 20:47:28 CET 2014
http://hg.python.org/cpython/rev/ec556e45641a
changeset: 89936:ec556e45641a
user: R David Murray <rdmurray at bitdance.com>
date: Sun Mar 23 15:08:43 2014 -0400
summary:
#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.
files:
Doc/whatsnew/3.5.rst | 6 ++++++
Lib/unittest/case.py | 2 +-
Lib/unittest/test/test_case.py | 12 ++++++++++++
Misc/ACKS | 1 +
Misc/NEWS | 3 +++
5 files changed, 23 insertions(+), 1 deletions(-)
diff --git a/Doc/whatsnew/3.5.rst b/Doc/whatsnew/3.5.rst
--- a/Doc/whatsnew/3.5.rst
+++ b/Doc/whatsnew/3.5.rst
@@ -192,3 +192,9 @@
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
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`).
diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py
--- a/Lib/unittest/case.py
+++ b/Lib/unittest/case.py
@@ -143,7 +143,7 @@
self.obj_name = str(callable_obj)
else:
self.obj_name = None
- if isinstance(expected_regex, (bytes, str)):
+ if expected_regex is not None:
expected_regex = re.compile(expected_regex)
self.expected_regex = expected_regex
self.msg = None
diff --git a/Lib/unittest/test/test_case.py b/Lib/unittest/test/test_case.py
--- a/Lib/unittest/test/test_case.py
+++ b/Lib/unittest/test/test_case.py
@@ -1126,6 +1126,18 @@
self.assertRaisesRegex, Exception, 'x',
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 Stub():
raise Exception('Unexpected')
diff --git a/Misc/ACKS b/Misc/ACKS
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -546,6 +546,7 @@
Albert Hofkamp
Tomas Hoger
Jonathan Hogg
+Kamilla Holanda
Steve Holden
Akintayo Holder
Thomas Holenstein
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -23,6 +23,9 @@
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 #20980: Stop wrapping exception when using ThreadPool.
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list