From f2762d088001408a706e88e0fe6f46181c01fc3f Mon Sep 17 00:00:00 2001 From: Douglas Bagnall Date: Fri, 5 Jan 2018 16:45:37 +1300 Subject: [PATCH] python tests: assert string equality, with diff In the success case this works just like self.assertEqual(), but when things fail you get a better representation of where it went wrong (a unified diff). Signed-off-by: Douglas Bagnall Reviewed-by: Andrew Bartlett --- python/samba/tests/__init__.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/python/samba/tests/__init__.py b/python/samba/tests/__init__.py index d634acab236..c4d24fa913f 100644 --- a/python/samba/tests/__init__.py +++ b/python/samba/tests/__init__.py @@ -216,6 +216,29 @@ class TestCase(unittest.TestCase): finally: result.stopTest(self) + def assertStringsEqual(self, a, b, msg=None, strip=False): + """Assert equality between two strings and highlight any differences. + If strip is true, leading and trailing whitespace is ignored.""" + if strip: + a = a.strip() + b = b.strip() + + if a != b: + sys.stderr.write("The strings differ %s(lengths %d vs %d); " + "a diff follows\n" + % ('when stripped ' if strip else '', + len(a), len(b), + )) + + from difflib import unified_diff + diff = unified_diff(a.splitlines(True), + b.splitlines(True), + 'a', 'b') + for line in diff: + sys.stderr.write(line) + + self.fail(msg) + class LdbTestCase(TestCase): """Trivial test case for running tests against a LDB.""" -- 2.34.1