Better assertion message formatter

This commit is contained in:
Takafumi Arakaki
2013-03-12 07:58:40 +01:00
parent 71bb93224d
commit 13b48632e5

View File

@@ -9,16 +9,28 @@ import jedi
from jedi._compatibility import literal_eval
def assert_case_equal(case, actual, desired):
"""
Assert ``actual == desired`` with formatted message.
This is not needed for typical py.test use case, but as we need
``--assert=plain`` (see ../pytest.ini) to workaround some issue
due to py.test magic, let's format the message by hand.
"""
assert actual == desired, """
Test %r failed.
actual = %s
desired = %s
""" % (case, actual, desired)
def run_completion_test(case):
(script, correct, line_nr) = (case.script(), case.correct, case.line_nr)
completions = script.complete()
#import cProfile; cProfile.run('script.complete()')
comp_str = set([c.word for c in completions])
if comp_str != set(literal_eval(correct)):
raise AssertionError(
'Solution @%s not right, received %s, wanted %s'\
% (line_nr - 1, comp_str, correct))
assert_case_equal(case, comp_str, set(literal_eval(correct)))
def run_definition_test(case):
@@ -53,19 +65,14 @@ def run_definition_test(case):
should_str = definition(correct, start, script.source_path)
result = script.definition()
is_str = set(r.desc_with_module for r in result)
if is_str != should_str:
raise AssertionError(
'Solution @%s not right, received %s, wanted %s'
% (line_nr - 1, is_str, should_str))
assert_case_equal(case, is_str, should_str)
def run_goto_test(case):
(script, correct, line_nr) = (case.script(), case.correct, case.line_nr)
result = script.goto()
comp_str = str(sorted(str(r.description) for r in result))
if comp_str != correct:
raise AssertionError('Solution @%s not right, received %s, wanted %s'
% (line_nr - 1, comp_str, correct))
assert_case_equal(case, comp_str, correct)
def run_related_name_test(case):
@@ -86,10 +93,7 @@ def run_related_name_test(case):
else:
wanted.append(('renaming', line_nr + pos_tup[0], pos_tup[1]))
wanted = sorted(wanted)
if compare != wanted:
raise AssertionError('Solution @%s not right, received %s, wanted %s'
% (line_nr - 1, compare, wanted))
assert_case_equal(case, compare, sorted(wanted))
def test_integration(case, monkeypatch, pytestconfig):
@@ -111,5 +115,5 @@ def test_refactor(refactor_case):
:type refactor_case: :class:`.refactor.RefactoringCase`
"""
refactor_case.run()
result, desired = refactor_case.result, refactor_case.desired
assert result == desired, "Refactoring test %r fails" % refactor_case
assert_case_equal(refactor_case,
refactor_case.result, refactor_case.desired)