mirror of
https://github.com/python/cpython.git
synced 2025-08-02 16:13:13 +00:00
Issue #15836: assertRaises(), assertRaisesRegex(), assertWarns() and
assertWarnsRegex() assertments now check the type of the first argument to prevent possible user error. Based on patch by Daniel Wagner-Hall.
This commit is contained in:
parent
ff54223606
commit
041dd8eef1
5 changed files with 74 additions and 1 deletions
|
@ -1185,6 +1185,18 @@ test case
|
|||
with self.assertRaises(ExceptionMock):
|
||||
self.assertRaises(ValueError, Stub)
|
||||
|
||||
def testAssertRaisesNoExceptionType(self):
|
||||
with self.assertRaises(TypeError):
|
||||
self.assertRaises()
|
||||
with self.assertRaises(TypeError):
|
||||
self.assertRaises(1)
|
||||
with self.assertRaises(TypeError):
|
||||
self.assertRaises(object)
|
||||
with self.assertRaises(TypeError):
|
||||
self.assertRaises((ValueError, 1))
|
||||
with self.assertRaises(TypeError):
|
||||
self.assertRaises((ValueError, object))
|
||||
|
||||
def testAssertRaisesRegex(self):
|
||||
class ExceptionMock(Exception):
|
||||
pass
|
||||
|
@ -1258,6 +1270,20 @@ test case
|
|||
self.assertIsInstance(e, ExceptionMock)
|
||||
self.assertEqual(e.args[0], v)
|
||||
|
||||
def testAssertRaisesRegexNoExceptionType(self):
|
||||
with self.assertRaises(TypeError):
|
||||
self.assertRaisesRegex()
|
||||
with self.assertRaises(TypeError):
|
||||
self.assertRaisesRegex(ValueError)
|
||||
with self.assertRaises(TypeError):
|
||||
self.assertRaisesRegex(1, 'expect')
|
||||
with self.assertRaises(TypeError):
|
||||
self.assertRaisesRegex(object, 'expect')
|
||||
with self.assertRaises(TypeError):
|
||||
self.assertRaisesRegex((ValueError, 1), 'expect')
|
||||
with self.assertRaises(TypeError):
|
||||
self.assertRaisesRegex((ValueError, object), 'expect')
|
||||
|
||||
def testAssertWarnsCallable(self):
|
||||
def _runtime_warn():
|
||||
warnings.warn("foo", RuntimeWarning)
|
||||
|
@ -1336,6 +1362,20 @@ test case
|
|||
with self.assertWarns(DeprecationWarning):
|
||||
_runtime_warn()
|
||||
|
||||
def testAssertWarnsNoExceptionType(self):
|
||||
with self.assertRaises(TypeError):
|
||||
self.assertWarns()
|
||||
with self.assertRaises(TypeError):
|
||||
self.assertWarns(1)
|
||||
with self.assertRaises(TypeError):
|
||||
self.assertWarns(object)
|
||||
with self.assertRaises(TypeError):
|
||||
self.assertWarns((UserWarning, 1))
|
||||
with self.assertRaises(TypeError):
|
||||
self.assertWarns((UserWarning, object))
|
||||
with self.assertRaises(TypeError):
|
||||
self.assertWarns((UserWarning, Exception))
|
||||
|
||||
def testAssertWarnsRegexCallable(self):
|
||||
def _runtime_warn(msg):
|
||||
warnings.warn(msg, RuntimeWarning)
|
||||
|
@ -1414,6 +1454,22 @@ test case
|
|||
with self.assertWarnsRegex(RuntimeWarning, "o+"):
|
||||
_runtime_warn("barz")
|
||||
|
||||
def testAssertWarnsRegexNoExceptionType(self):
|
||||
with self.assertRaises(TypeError):
|
||||
self.assertWarnsRegex()
|
||||
with self.assertRaises(TypeError):
|
||||
self.assertWarnsRegex(UserWarning)
|
||||
with self.assertRaises(TypeError):
|
||||
self.assertWarnsRegex(1, 'expect')
|
||||
with self.assertRaises(TypeError):
|
||||
self.assertWarnsRegex(object, 'expect')
|
||||
with self.assertRaises(TypeError):
|
||||
self.assertWarnsRegex((UserWarning, 1), 'expect')
|
||||
with self.assertRaises(TypeError):
|
||||
self.assertWarnsRegex((UserWarning, object), 'expect')
|
||||
with self.assertRaises(TypeError):
|
||||
self.assertWarnsRegex((UserWarning, Exception), 'expect')
|
||||
|
||||
@contextlib.contextmanager
|
||||
def assertNoStderr(self):
|
||||
with captured_stderr() as buf:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue