testtools: Import new upstream snapshot.
authorJelmer Vernooij <jelmer@samba.org>
Sun, 13 Nov 2011 16:18:10 +0000 (17:18 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Sun, 13 Nov 2011 17:06:06 +0000 (18:06 +0100)
lib/testtools/NEWS
lib/testtools/testtools/matchers.py
lib/testtools/testtools/testresult/real.py
lib/testtools/testtools/tests/test_matchers.py
lib/testtools/testtools/tests/test_testcase.py
lib/testtools/testtools/tests/test_testresult.py

index 5896b84c385965e984626c35b475167857dc1e86..c56bdf74708a51e72db7a8e3384d99795a583548 100644 (file)
@@ -6,6 +6,11 @@ Changes and improvements to testtools_, grouped by release.
 NEXT
 ~~~~
 
+Changes
+-------
+
+* Failed equality assertions now line up. (Jonathan Lange, #879339)
+
 
 0.9.12
 ~~~~~~
index 693a20befa5f3b5ee532f1aaffc0ffc96cae767a..4725265f9854eb181a724aa3fc1253326a22b0f6 100644 (file)
@@ -378,7 +378,7 @@ class _BinaryMismatch(Mismatch):
         left = repr(self.expected)
         right = repr(self.other)
         if len(left) + len(right) > 70:
-            return "%s:\nreference = %s\nactual = %s\n" % (
+            return "%s:\nreference = %s\nactual    = %s\n" % (
                 self._mismatch_string, self._format(self.expected),
                 self._format(self.other))
         else:
index eb548dfa2c8e2650339e2fc35eb256884384a537..aec6edb03209ba53a8abae23332e52d87a992045 100644 (file)
@@ -222,6 +222,10 @@ class MultiTestResult(TestResult):
         TestResult.__init__(self)
         self._results = list(map(ExtendedToOriginalDecorator, results))
 
+    def __repr__(self):
+        return '<%s (%s)>' % (
+            self.__class__.__name__, ', '.join(map(repr, self._results)))
+
     def _dispatch(self, message, *args, **kwargs):
         return tuple(
             getattr(result, message)(*args, **kwargs)
@@ -354,6 +358,9 @@ class ThreadsafeForwardingResult(TestResult):
         self.result = ExtendedToOriginalDecorator(target)
         self.semaphore = semaphore
 
+    def __repr__(self):
+        return '<%s %r>' % (self.__class__.__name__, self.result)
+
     def _add_result_with_semaphore(self, method, test, *args, **kwargs):
         self.semaphore.acquire()
         try:
@@ -433,6 +440,9 @@ class ExtendedToOriginalDecorator(object):
     def __init__(self, decorated):
         self.decorated = decorated
 
+    def __repr__(self):
+        return '<%s %r>' % (self.__class__.__name__, self.decorated)
+
     def __getattr__(self, name):
         return getattr(self.decorated, name)
 
index ebdd4a951025b9c4854fa6615bdd5ed2ea4eaec3..f327a34b057f711d5def00c8448d6cef9d40ba2d 100644 (file)
@@ -155,7 +155,7 @@ class Test_BinaryMismatch(TestCase):
         one_line_b = self._long_b.replace(_b("\n"), _b(" "))
         mismatch = _BinaryMismatch(one_line_b, "!~", self._long_b)
         self.assertEqual(mismatch.describe(),
-            "%s:\nreference = %s\nactual = %s\n" % ("!~",
+            "%s:\nreference = %s\nactual    = %s\n" % ("!~",
                 text_repr(one_line_b),
                 text_repr(self._long_b, multiline=True)))
 
@@ -163,14 +163,14 @@ class Test_BinaryMismatch(TestCase):
         one_line_u = self._long_u.replace("\n", " ")
         mismatch = _BinaryMismatch(one_line_u, "!~", self._long_u)
         self.assertEqual(mismatch.describe(),
-            "%s:\nreference = %s\nactual = %s\n" % ("!~",
+            "%s:\nreference = %s\nactual    = %s\n" % ("!~",
                 text_repr(one_line_u),
                 text_repr(self._long_u, multiline=True)))
 
     def test_long_mixed_strings(self):
         mismatch = _BinaryMismatch(self._long_b, "!~", self._long_u)
         self.assertEqual(mismatch.describe(),
-            "%s:\nreference = %s\nactual = %s\n" % ("!~",
+            "%s:\nreference = %s\nactual    = %s\n" % ("!~",
                 text_repr(self._long_b, multiline=True),
                 text_repr(self._long_u, multiline=True)))
 
@@ -178,7 +178,7 @@ class Test_BinaryMismatch(TestCase):
         obj = object()
         mismatch = _BinaryMismatch(self._long_b, "!~", obj)
         self.assertEqual(mismatch.describe(),
-            "%s:\nreference = %s\nactual = %s\n" % ("!~",
+            "%s:\nreference = %s\nactual    = %s\n" % ("!~",
                 text_repr(self._long_b, multiline=True),
                 repr(obj)))
 
@@ -186,7 +186,7 @@ class Test_BinaryMismatch(TestCase):
         obj = object()
         mismatch = _BinaryMismatch(self._long_u, "!~", obj)
         self.assertEqual(mismatch.describe(),
-            "%s:\nreference = %s\nactual = %s\n" % ("!~",
+            "%s:\nreference = %s\nactual    = %s\n" % ("!~",
                 text_repr(self._long_u, multiline=True),
                 repr(obj)))
 
index 52f93c3c52689903a87863ce58ab211ef6f52488..bb0aba6496172b1605cbcfa119817c802955e3bb 100644 (file)
@@ -550,7 +550,7 @@ class TestAssertions(TestCase):
         expected_error = '\n'.join([
             '!=:',
             'reference = %s' % pformat(a),
-            'actual = %s' % pformat(b),
+            'actual    = %s' % pformat(b),
             ': ' + message,
             ])
         self.assertFails(expected_error, self.assertEqual, a, b, message)
@@ -575,7 +575,7 @@ class TestAssertions(TestCase):
             'a',
             repr('\xa7')[1:-1],
             "'''",
-            'actual = %r' % (b,),
+            'actual    = %r' % (b,),
             ': ' + message,
             ])
         self.assertFails(expected_error, self.assertEqual, a, b, message)
index a241788bea8bbfee711e0bdec4d04b8e2a5da18f..69d2d6e2de9bed15eee47ba67b8cc4a533f0561f 100644 (file)
@@ -431,6 +431,13 @@ class TestMultiTestResult(TestCase):
         self.assertEqual(expectedEvents, self.result1._events)
         self.assertEqual(expectedEvents, self.result2._events)
 
+    def test_repr(self):
+        self.assertEqual(
+            '<MultiTestResult (%r, %r)>' % (
+                ExtendedToOriginalDecorator(self.result1),
+                ExtendedToOriginalDecorator(self.result2)),
+            repr(self.multiResult))
+
     def test_empty(self):
         # Initializing a `MultiTestResult` doesn't do anything to its
         # `TestResult`s.