def check(got, expected, expected_builtin=None): if got is None: # Absence of comment is equivalent to empty comment. got = "" if got != expected: import re p = re.compile(r"^[+-]([^+-].*\S)?(\s+)$", re.M) def make_trailing_spaces_visible(str): def replace_trailing_spaces(match): res = match.group(0) spaces = match.group(2) if spaces is not None: res = res + "{+%d trailing spaces}" % len(spaces) return res return re.sub(p, replace_trailing_spaces, str) from difflib import unified_diff diff = unified_diff(expected.splitlines(True), got.splitlines(True), "expected", "got") lines = [] for line in diff: line = make_trailing_spaces_visible(line.strip("\r\n")) lines.append(line + "\n") raise RuntimeError("Comments don't match:\n" + "".join(lines))