Merged revisions 74865,75175,75180 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r74865 | georg.brandl | 2009-09-17 02:49:37 -0500 (Thu, 17 Sep 2009) | 1 line
#6912: add "with" block support to pindent.
........
r75175 | georg.brandl | 2009-10-01 15:11:14 -0500 (Thu, 01 Oct 2009) | 1 line
Fix some weird whitespace and two other overlong lines.
........
r75180 | georg.brandl | 2009-10-01 15:59:31 -0500 (Thu, 01 Oct 2009) | 1 line
#7031: Add TestCase.assertIsInstance and negated method.
........
diff --git a/Doc/library/unittest.rst b/Doc/library/unittest.rst
index 494c2d7..aa76308 100644
--- a/Doc/library/unittest.rst
+++ b/Doc/library/unittest.rst
@@ -952,6 +952,22 @@
.. versionadded:: 3.1
+ .. method:: assertIsInstance(obj, cls[, msg])
+
+ This signals a test failure if *obj* is not an instance of *cls* (which
+ can be a class or a tuple of classes, as supported by :func:`isinstance`).
+
+ .. versionadded:: 3.2
+
+
+ .. method:: assertNotIsInstance(obj, cls[, msg])
+
+ The inverse of the :meth:`assertIsInstance` method. This signals a test
+ failure if *obj* is an instance of *cls*.
+
+ .. versionadded:: 3.2
+
+
.. method:: assertFalse(expr, msg=None)
failIf(expr, msg=None)
diff --git a/Lib/test/test_unittest.py b/Lib/test/test_unittest.py
index 108802d..120a90d 100644
--- a/Lib/test/test_unittest.py
+++ b/Lib/test/test_unittest.py
@@ -2510,6 +2510,18 @@
self.assertIsNot(thing, object())
self.assertRaises(self.failureException, self.assertIsNot, thing, thing)
+ def testAssertIsInstance(self):
+ thing = []
+ self.assertIsInstance(thing, list)
+ self.assertRaises(self.failureException, self.assertIsInstance,
+ thing, dict)
+
+ def testAssertNotIsInstance(self):
+ thing = []
+ self.assertNotIsInstance(thing, dict)
+ self.assertRaises(self.failureException, self.assertNotIsInstance,
+ thing, list)
+
def testAssertIn(self):
animals = {'monkey': 'banana', 'cow': 'grass', 'seal': 'fish'}
diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py
index 660ddeb..88254be 100644
--- a/Lib/unittest/case.py
+++ b/Lib/unittest/case.py
@@ -620,8 +620,9 @@
except (TypeError, IndexError, NotImplementedError):
differing += ('Unable to index element %d '
'of second %s\n' % (len1, seq_type_name))
- standardMsg = differing + '\n' + '\n'.join(difflib.ndiff(pprint.pformat(seq1).splitlines(),
- pprint.pformat(seq2).splitlines()))
+ standardMsg = differing + '\n' + '\n'.join(
+ difflib.ndiff(pprint.pformat(seq1).splitlines(),
+ pprint.pformat(seq2).splitlines()))
msg = self._formatMessage(msg, standardMsg)
self.fail(msg)
@@ -734,7 +735,8 @@
if key not in actual:
missing.append(key)
elif value != actual[key]:
- mismatched.append('%s, expected: %s, actual: %s' % (key, value, actual[key]))
+ mismatched.append('%s, expected: %s, actual: %s' %
+ (key, value, actual[key]))
if not (missing or mismatched):
return
@@ -793,7 +795,8 @@
'Second argument is not a string'))
if first != second:
- standardMsg = '\n' + ''.join(difflib.ndiff(first.splitlines(True), second.splitlines(True)))
+ standardMsg = '\n' + ''.join(difflib.ndiff(first.splitlines(True),
+ second.splitlines(True)))
self.fail(self._formatMessage(msg, standardMsg))
def assertLess(self, a, b, msg=None):
@@ -832,6 +835,19 @@
standardMsg = 'unexpectedly None'
self.fail(self._formatMessage(msg, standardMsg))
+ def assertIsInstance(self, obj, cls, msg=None):
+ """Same as self.assertTrue(isinstance(obj, cls)), with a nicer
+ default message."""
+ if not isinstance(obj, cls):
+ standardMsg = '%r is not an instance of %r' % (obj, cls)
+ self.fail(self._formatMessage(msg, standardMsg))
+
+ def assertNotIsInstance(self, obj, cls, msg=None):
+ """Included for symmetry with assertIsInstance."""
+ if isinstance(obj, cls):
+ standardMsg = '%r is an instance of %r' % (obj, cls)
+ self.fail(self._formatMessage(msg, standardMsg))
+
def assertRaisesRegexp(self, expected_exception, expected_regexp,
callable_obj=None, *args, **kwargs):
"""Asserts that the message in a raised exception matches a regexp.
diff --git a/Tools/scripts/pindent.py b/Tools/scripts/pindent.py
index 3f3000d..f80a8b7 100755
--- a/Tools/scripts/pindent.py
+++ b/Tools/scripts/pindent.py
@@ -88,10 +88,10 @@
next['if'] = next['elif'] = 'elif', 'else', 'end'
next['while'] = next['for'] = 'else', 'end'
next['try'] = 'except', 'finally'
-next['except'] = 'except', 'else', 'end'
+next['except'] = 'except', 'else', 'finally', 'end'
next['else'] = next['finally'] = next['def'] = next['class'] = 'end'
next['end'] = ()
-start = 'if', 'while', 'for', 'try', 'def', 'class'
+start = 'if', 'while', 'for', 'try', 'with', 'def', 'class'
class PythonIndenter: