Skip to content

Commit af92ca7

Browse files
committed
BuiltIn: Fix multiline error message with custom messages.
Fixes #4116.
1 parent dc96999 commit af92ca7

File tree

5 files changed

+42
-6
lines changed

5 files changed

+42
-6
lines changed

atest/robot/standard_libraries/builtin/should_be_equal.robot

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ Multiline comparison uses diff
3939
${tc} = Check test case ${TESTNAME}
4040
Check Log Message ${tc.kws[0].msgs[1]} foo\nbar\ndar\n\n!=\n\nfoo\nbar\ngar\n\ndar
4141

42+
Multiline comparison with custom message
43+
${tc} = Check test case ${TESTNAME}
44+
Check Log Message ${tc.kws[0].msgs[1]} foo\nbar\ndar\n\n!=\n\nfoo\nbar\ngar\n\ndar
45+
4246
Multiline comparison requires both multiline
4347
Check test case ${TESTNAME}
4448

atest/robot/standard_libraries/builtin/should_be_equal_as_xxx.robot

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ Should Be Equal As Strings repr
6262
Should Be Equal As Strings multiline
6363
Check test case ${TESTNAME}
6464

65+
Should Be Equal As Strings multiline with custom message
66+
Check test case ${TESTNAME}
67+
6568
Should Be Equal As Strings repr multiline
6669
Check test case ${TESTNAME}
6770

atest/testdata/standard_libraries/builtin/should_be_equal.robot

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,20 @@ Multiline comparison uses diff
9494
... +
9595
foo\nbar\ndar\n foo\nbar\ngar\n\ndar\n\n
9696

97+
Multiline comparison with custom message
98+
[Documentation] FAIL
99+
... Custom message of mine: Multiline strings are different:
100+
... --- first
101+
... +++ second
102+
... @@ -1,3 +1,6 @@
103+
... \ foo
104+
... \ bar
105+
... +gar
106+
... +
107+
... \ dar
108+
... +
109+
foo\nbar\ndar\n foo\nbar\ngar\n\ndar\n\n msg=Custom message of mine
110+
97111
Multiline comparison requires both multiline
98112
[Documentation] FAIL foo\nbar\ndar != foobar
99113
foo\nbar\ndar foobar

atest/testdata/standard_libraries/builtin/should_be_equal_as_xxx.robot

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,20 @@ Should Be Equal As Strings multiline
153153
... \ dar
154154
Should Be Equal As Strings foo\nbar\r\ndar foo\nbar\ngar\ndar
155155

156+
Should Be Equal As Strings multiline with custom message
157+
[Documentation] FAIL
158+
... Custom message of mine: Multiline strings are different:
159+
... --- first
160+
... +++ second
161+
... @@ -1,3 +1,4 @@
162+
... \ foo
163+
... -bar
164+
... +bar
165+
... +gar
166+
... \ dar
167+
Should Be Equal As Strings foo\nbar\r\ndar foo\nbar\ngar\ndar
168+
... msg=Custom message of mine
169+
156170
Should Be Equal As Strings repr multiline
157171
[Documentation] FAIL
158172
... Multiline strings are different:

src/robot/libraries/BuiltIn.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -657,14 +657,14 @@ def _should_be_equal(self, first, second, msg, values, formatter='str'):
657657
if first == second:
658658
return
659659
if include_values and is_string(first) and is_string(second):
660-
self._raise_multi_diff(first, second, formatter)
660+
self._raise_multi_diff(first, second, msg, formatter)
661661
assert_equal(first, second, msg, include_values, formatter)
662662

663663
def _log_types_at_info_if_different(self, first, second):
664664
level = 'DEBUG' if type(first) == type(second) else 'INFO'
665665
self._log_types_at_level(level, first, second)
666666

667-
def _raise_multi_diff(self, first, second, formatter):
667+
def _raise_multi_diff(self, first, second, msg, formatter):
668668
first_lines = first.splitlines(True) # keepends
669669
second_lines = second.splitlines(True)
670670
if len(first_lines) < 3 or len(second_lines) < 3:
@@ -673,10 +673,11 @@ def _raise_multi_diff(self, first, second, formatter):
673673
diffs = list(difflib.unified_diff(first_lines, second_lines,
674674
fromfile='first', tofile='second',
675675
lineterm=''))
676-
diffs[3:] = [item[0] + formatter(item[1:]).rstrip()
677-
for item in diffs[3:]]
678-
raise AssertionError('Multiline strings are different:\n' +
679-
'\n'.join(diffs))
676+
diffs[3:] = [item[0] + formatter(item[1:]).rstrip() for item in diffs[3:]]
677+
prefix = 'Multiline strings are different:'
678+
if msg:
679+
prefix = '%s: %s' % (msg, prefix)
680+
raise AssertionError('\n'.join([prefix] + diffs))
680681

681682
def _include_values(self, values):
682683
return is_truthy(values) and str(values).upper() != 'NO VALUES'

0 commit comments

Comments
 (0)