shift reporting info generation away from terminal reporting time, simplify code.

also get rid of redundant 'shortrepr' on collect/test reports
and rename reportinfo to "location" in some places

--HG--
branch : trunk
This commit is contained in:
holger krekel
2010-09-26 16:23:44 +02:00
parent 7d1585215d
commit 1c020c3d32
21 changed files with 255 additions and 308 deletions

View File

@@ -8,5 +8,5 @@ def test_functional(testdir):
testdir.runpytest("--hooklog=hook.log")
s = testdir.tmpdir.join("hook.log").read()
assert s.find("pytest_sessionstart") != -1
assert s.find("ItemTestReport") != -1
assert s.find("TestReport") != -1
assert s.find("sessionfinish") != -1

View File

@@ -64,7 +64,7 @@ class TestKeywordSelection:
reprec = testdir.inline_run("-s", "-k", keyword, file_test)
passed, skipped, failed = reprec.listoutcomes()
assert len(failed) == 1
assert failed[0].item.name == name
assert failed[0].nodeid.split("::")[-1] == name
assert len(reprec.getcalls('pytest_deselected')) == 1
for keyword in ['test_one', 'est_on']:
@@ -92,7 +92,7 @@ class TestKeywordSelection:
py.builtin.print_("keyword", repr(keyword))
passed, skipped, failed = reprec.listoutcomes()
assert len(passed) == 1
assert passed[0].item.name == "test_2"
assert passed[0].nodeid.endswith("test_2")
dlist = reprec.getcalls("pytest_deselected")
assert len(dlist) == 1
assert dlist[0].items[0].name == 'test_1'

View File

@@ -53,8 +53,8 @@ class BaseFunctionalTests:
rep = reports[1]
assert rep.passed
assert not rep.failed
assert rep.shortrepr == "."
assert not hasattr(rep, 'longrepr')
assert rep.outcome == "passed"
assert not rep.longrepr
def test_failfunction(self, testdir):
reports = testdir.runitem("""
@@ -66,23 +66,8 @@ class BaseFunctionalTests:
assert not rep.skipped
assert rep.failed
assert rep.when == "call"
assert isinstance(rep.longrepr, ReprExceptionInfo)
assert str(rep.shortrepr) == "F"
def test_failfunction_customized_report(self, testdir, LineMatcher):
reports = testdir.runitem("""
def test_func():
assert 0
""")
rep = reports[1]
rep.headerlines += ["hello world"]
tr = py.io.TerminalWriter(stringio=True)
rep.toterminal(tr)
val = tr.stringio.getvalue()
LineMatcher(val.split("\n")).fnmatch_lines([
"*hello world",
"*def test_func():*"
])
assert rep.outcome == "failed"
#assert isinstance(rep.longrepr, ReprExceptionInfo)
def test_skipfunction(self, testdir):
reports = testdir.runitem("""
@@ -94,6 +79,7 @@ class BaseFunctionalTests:
assert not rep.failed
assert not rep.passed
assert rep.skipped
assert rep.outcome == "skipped"
#assert rep.skipped.when == "call"
#assert rep.skipped.when == "call"
#assert rep.skipped == "%sreason == "hello"
@@ -150,8 +136,8 @@ class BaseFunctionalTests:
assert not rep.passed
assert rep.failed
assert rep.when == "teardown"
assert rep.longrepr.reprcrash.lineno == 3
assert rep.longrepr.reprtraceback.reprentries
#assert rep.longrepr.reprcrash.lineno == 3
#assert rep.longrepr.reprtraceback.reprentries
def test_custom_failure_repr(self, testdir):
testdir.makepyfile(conftest="""
@@ -270,6 +256,10 @@ class TestCollectionReports:
assert not rep.failed
assert not rep.skipped
assert rep.passed
locinfo = rep.location
assert locinfo[0] == col.fspath
assert not locinfo[1]
assert locinfo[2] == col.fspath
res = rep.result
assert len(res) == 2
assert res[0].name == "test_func1"
@@ -299,7 +289,7 @@ def test_callinfo():
assert "exc" in repr(ci)
# design question: do we want general hooks in python files?
# following passes if withpy defaults to True in pycoll.PyObjMix._getplugins()
# then something like the following functional tests makes sense
@py.test.mark.xfail
def test_runtest_in_module_ordering(testdir):
p1 = testdir.makepyfile("""

View File

@@ -183,8 +183,10 @@ class TestXFail:
""")
result = testdir.runpytest(p, '--report=xfailed', )
result.stdout.fnmatch_lines([
"*test_one*test_this*NOTRUN*noway",
"*test_one*test_this_true*NOTRUN*condition:*True*",
"*test_one*test_this*",
"*NOTRUN*noway",
"*test_one*test_this_true*",
"*NOTRUN*condition:*True*",
"*1 passed*",
])
@@ -199,7 +201,8 @@ class TestXFail:
""")
result = testdir.runpytest(p, '--report=xfailed', )
result.stdout.fnmatch_lines([
"*test_one*test_this*NOTRUN*hello",
"*test_one*test_this*",
"*NOTRUN*hello",
"*1 xfailed*",
])
@@ -229,7 +232,8 @@ class TestXFail:
])
result = testdir.runpytest(p, "-rx")
result.stdout.fnmatch_lines([
"*XFAIL*test_this*reason:*hello*",
"*XFAIL*test_this*",
"*reason:*hello*",
])
result = testdir.runpytest(p, "--runxfail")
result.stdout.fnmatch_lines([
@@ -252,7 +256,8 @@ class TestXFail:
])
result = testdir.runpytest(p, "-rx")
result.stdout.fnmatch_lines([
"*XFAIL*test_this*reason:*hello*",
"*XFAIL*test_this*",
"*reason:*hello*",
])
result = testdir.runpytest(p, "--runxfail")
result.stdout.fnmatch_lines([
@@ -286,7 +291,8 @@ class TestXFail:
""")
result = testdir.runpytest(p, '-rxX')
result.stdout.fnmatch_lines([
"*XFAIL*test_this*NOTRUN*",
"*XFAIL*test_this*",
"*NOTRUN*",
])
def test_dynamic_xfail_set_during_funcarg_setup(self, testdir):
@@ -360,7 +366,6 @@ def test_skipif_class(testdir):
def test_skip_reasons_folding():
from py._plugin import pytest_runner as runner
from py._plugin.pytest_skipping import folded_skips
class longrepr:
class reprcrash:
@@ -368,12 +373,15 @@ def test_skip_reasons_folding():
lineno = 3
message = "justso"
ev1 = runner.CollectReport(None, None)
class X:
pass
ev1 = X()
ev1.when = "execute"
ev1.skipped = True
ev1.longrepr = longrepr
ev2 = runner.ItemTestReport(None, excinfo=longrepr)
ev2 = X()
ev2.longrepr = longrepr
ev2.skipped = True
l = folded_skips([ev1, ev2])

View File

@@ -89,22 +89,7 @@ class TestTerminal:
assert lines[1].endswith("xy.py .")
assert lines[2] == "hello world"
def test_testid(self, testdir, linecomp):
func,method = testdir.getitems("""
def test_func():
pass
class TestClass:
def test_method(self):
pass
""")
tr = TerminalReporter(func.config, file=linecomp.stringio)
id = tr.gettestid(func)
assert id.endswith("test_testid.py::test_func")
fspath = py.path.local(id.split("::")[0])
assert fspath.check()
id = tr.gettestid(method)
assert id.endswith("test_testid.py::TestClass::test_method")
@py.test.mark.xfail(reason="re-implement ItemStart events")
def test_show_path_before_running_test(self, testdir, linecomp):
item = testdir.getitem("def test_func(): pass")
tr = TerminalReporter(item.config, file=linecomp.stringio)
@@ -114,6 +99,7 @@ class TestTerminal:
"*test_show_path_before_running_test.py*"
])
@py.test.mark.xfail(reason="re-implement ItemStart events")
def test_itemreport_reportinfo(self, testdir, linecomp):
testdir.makeconftest("""
import py
@@ -130,6 +116,7 @@ class TestTerminal:
"*ABCDE:43: custom*"
])
@py.test.mark.xfail(reason="re-implement ItemStart events")
def test_itemreport_pytest_report_iteminfo(self, testdir, linecomp):
item = testdir.getitem("def test_func(): pass")
class Plugin:
@@ -144,6 +131,7 @@ class TestTerminal:
"*FGHJ:43: custom*"
])
@py.test.mark.xfail(reason="re-implement subclassing precision reporting")
def test_itemreport_subclasses_show_subclassed_file(self, testdir):
p1 = testdir.makepyfile(test_p1="""
class BaseTests:
@@ -210,8 +198,8 @@ class TestCollectonly:
linecomp.assert_contains_lines([
" <Function 'test_func'>",
])
rep.config.hook.pytest_collectreport(
report=runner.CollectReport(modcol, [], excinfo=None))
report = rep.config.hook.pytest_make_collect_report(collector=modcol)
rep.config.hook.pytest_collectreport(report=report)
assert rep.indent == indent
def test_collectonly_skipped_module(self, testdir, linecomp):