297 lines
11 KiB
Python
297 lines
11 KiB
Python
|
|
""" test of local version of py.test distributed
|
|
"""
|
|
|
|
import py
|
|
from py.__.test.rsession.rsession import LSession
|
|
from py.__.test.rsession import report
|
|
from py.__.test.rsession.local import box_runner, plain_runner, apigen_runner
|
|
|
|
def setup_module(mod):
|
|
mod.tmp = py.test.ensuretemp("lsession_module")
|
|
|
|
class TestLSession(object):
|
|
# XXX: Some tests of that should be run as well on RSession, while
|
|
# some not at all
|
|
def example_distribution(self, runner):
|
|
# XXX find a better way for the below
|
|
tmpdir = tmp
|
|
dirname = "sub_lsession"+runner.func_name
|
|
tmpdir.ensure(dirname, "__init__.py")
|
|
tmpdir.ensure(dirname, "test_one.py").write(py.code.Source("""
|
|
def test_1():
|
|
pass
|
|
def test_2():
|
|
assert 0
|
|
def test_3():
|
|
raise ValueError(23)
|
|
def test_4(someargs):
|
|
pass
|
|
#def test_5():
|
|
# import os
|
|
# os.kill(os.getpid(), 11)
|
|
"""))
|
|
args = [str(tmpdir.join(dirname))]
|
|
config = py.test.config._reparse(args)
|
|
lsession = LSession(config)
|
|
allevents = []
|
|
lsession.main(reporter=allevents.append, runner=runner)
|
|
testevents = [x for x in allevents
|
|
if isinstance(x, report.ReceivedItemOutcome)]
|
|
assert len(testevents)
|
|
passevents = [i for i in testevents if i.outcome.passed]
|
|
failevents = [i for i in testevents if i.outcome.excinfo]
|
|
skippedevents = [i for i in testevents if i.outcome.skipped]
|
|
signalevents = [i for i in testevents if i.outcome.signal]
|
|
assert len(passevents) == 1
|
|
assert len(failevents) == 3
|
|
assert len(skippedevents) == 0
|
|
#assert len(signalevents) == 1
|
|
tb = failevents[0].outcome.excinfo.traceback
|
|
assert str(tb[0].path).find("test_one") != -1
|
|
assert str(tb[0].source).find("test_2") != -1
|
|
assert failevents[0].outcome.excinfo.typename == 'AssertionError'
|
|
tb = failevents[1].outcome.excinfo.traceback
|
|
assert str(tb[0].path).find("test_one") != -1
|
|
assert str(tb[0].source).find("test_3") != -1
|
|
assert failevents[1].outcome.excinfo.typename == 'ValueError'
|
|
assert str(failevents[1].outcome.excinfo.value) == '23'
|
|
tb = failevents[2].outcome.excinfo.traceback
|
|
assert failevents[2].outcome.excinfo.typename == 'TypeError'
|
|
assert str(tb[0].path).find("executor") != -1
|
|
assert str(tb[0].source).find("execute") != -1
|
|
|
|
def test_normal(self):
|
|
if not hasattr(py.std.os, 'fork'):
|
|
py.test.skip('operating system not supported')
|
|
self.example_distribution(box_runner)
|
|
|
|
def test_plain(self):
|
|
self.example_distribution(plain_runner)
|
|
|
|
def test_pdb_run(self):
|
|
# we make sure that pdb is engaged
|
|
tmpdir = tmp
|
|
subdir = "sub_pdb_run"
|
|
tmpdir.ensure(subdir, "__init__.py")
|
|
tmpdir.ensure(subdir, "test_one.py").write(py.code.Source("""
|
|
def test_1():
|
|
assert 0
|
|
"""))
|
|
import pdb
|
|
l = []
|
|
def some_fun(*args):
|
|
l.append(args)
|
|
|
|
try:
|
|
post_mortem = pdb.post_mortem
|
|
pdb.post_mortem = some_fun
|
|
args = [str(tmpdir.join(subdir)), '--pdb']
|
|
config = py.test.config._reparse(args)
|
|
lsession = LSession(config)
|
|
allevents = []
|
|
try:
|
|
lsession.main(reporter=allevents.append, runner=plain_runner)
|
|
except SystemExit:
|
|
pass
|
|
else:
|
|
py.test.fail("Didn't raise system exit")
|
|
failure_events = [event for event in allevents if isinstance(event,
|
|
report.ImmediateFailure)]
|
|
assert len(failure_events) == 1
|
|
assert len(l) == 1
|
|
finally:
|
|
pdb.post_mortem = post_mortem
|
|
|
|
def test_minus_x(self):
|
|
if not hasattr(py.std.os, 'fork'):
|
|
py.test.skip('operating system not supported')
|
|
tmpdir = tmp
|
|
subdir = "sub_lsession_minus_x"
|
|
tmpdir.ensure(subdir, "__init__.py")
|
|
tmpdir.ensure(subdir, "test_one.py").write(py.code.Source("""
|
|
def test_1():
|
|
pass
|
|
def test_2():
|
|
assert 0
|
|
def test_3():
|
|
raise ValueError(23)
|
|
def test_4(someargs):
|
|
pass
|
|
"""))
|
|
args = [str(tmpdir.join(subdir)), '-x']
|
|
config = py.test.config._reparse(args)
|
|
assert config.option.exitfirst
|
|
lsession = LSession(config)
|
|
allevents = []
|
|
|
|
lsession.main(reporter=allevents.append, runner=box_runner)
|
|
testevents = [x for x in allevents
|
|
if isinstance(x, report.ReceivedItemOutcome)]
|
|
assert len(testevents)
|
|
passevents = [i for i in testevents if i.outcome.passed]
|
|
failevents = [i for i in testevents if i.outcome.excinfo]
|
|
assert len(passevents) == 1
|
|
assert len(failevents) == 1
|
|
|
|
def test_minus_k(self):
|
|
if not hasattr(py.std.os, 'fork'):
|
|
py.test.skip('operating system not supported')
|
|
tmpdir = tmp
|
|
tmpdir.ensure("sub3", "__init__.py")
|
|
tmpdir.ensure("sub3", "test_some.py").write(py.code.Source("""
|
|
def test_one():
|
|
pass
|
|
def test_one_one():
|
|
assert 0
|
|
def test_other():
|
|
raise ValueError(23)
|
|
def test_two(someargs):
|
|
pass
|
|
"""))
|
|
args = [str(tmpdir.join("sub3")), '-k', 'test_one']
|
|
config = py.test.config._reparse(args)
|
|
lsession = LSession(config)
|
|
allevents = []
|
|
|
|
lsession.main(reporter=allevents.append, runner=box_runner)
|
|
testevents = [x for x in allevents
|
|
if isinstance(x, report.ReceivedItemOutcome)]
|
|
assert len(testevents)
|
|
passevents = [i for i in testevents if i.outcome.passed]
|
|
failevents = [i for i in testevents if i.outcome.excinfo]
|
|
assert len(passevents) == 1
|
|
assert len(failevents) == 1
|
|
|
|
def test_lsession(self):
|
|
tmpdir = tmp
|
|
tmpdir.ensure("sub4", "__init__.py")
|
|
tmpdir.ensure("sub4", "test_some.py").write(py.code.Source("""
|
|
def test_one():
|
|
pass
|
|
def test_one_one():
|
|
assert 0
|
|
def test_other():
|
|
raise ValueError(23)
|
|
def test_two(someargs):
|
|
pass
|
|
"""))
|
|
|
|
args = [str(tmpdir.join("sub4"))]
|
|
config = py.test.config._reparse(args)
|
|
lsession = LSession(config)
|
|
allevents = []
|
|
allruns = []
|
|
def dummy_runner(item, config, reporter):
|
|
allruns.append(item)
|
|
item.passed = True
|
|
return item
|
|
lsession.main(reporter=allevents.append, runner=dummy_runner)
|
|
|
|
assert len(allruns) == 4
|
|
testevents = [x for x in allevents
|
|
if isinstance(x, report.ReceivedItemOutcome)]
|
|
assert len(testevents) == 4
|
|
lst = ['test_one', 'test_one_one', 'test_other', 'test_two']
|
|
for num, i in enumerate(testevents):
|
|
assert i.item == i.outcome
|
|
assert i.item.name == lst[num]
|
|
|
|
def test_module_raising(self):
|
|
tmpdir = tmp
|
|
tmpdir.ensure("sub5", "__init__.py")
|
|
tmpdir.ensure("sub5", "test_some.py").write(py.code.Source("""
|
|
1/0
|
|
"""))
|
|
tmpdir.ensure("sub5", "test_other.py").write(py.code.Source("""
|
|
import py
|
|
py.test.skip("reason")
|
|
"""))
|
|
|
|
args = [str(tmpdir.join("sub5"))]
|
|
config = py.test.config._reparse(args)
|
|
lsession = LSession(config)
|
|
allevents = []
|
|
lsession.main(reporter=allevents.append, runner=box_runner)
|
|
testevents = [x for x in allevents
|
|
if isinstance(x, report.ReceivedItemOutcome)]
|
|
assert len(testevents) == 0
|
|
failedtryiter = [x for x in allevents
|
|
if isinstance(x, report.FailedTryiter)]
|
|
assert len(failedtryiter) == 1
|
|
skippedtryiter = [x for x in allevents
|
|
if isinstance(x, report.SkippedTryiter)]
|
|
assert len(skippedtryiter) == 1
|
|
|
|
|
|
def test_assert_reinterpret(self):
|
|
if not hasattr(py.std.os, 'fork'):
|
|
py.test.skip('operating system not supported')
|
|
tmpdir = tmp
|
|
tmpdir.ensure("sub6", "__init__.py")
|
|
tmpdir.ensure("sub6", "test_some.py").write(py.code.Source("""
|
|
def test_one():
|
|
x = [1, 2]
|
|
assert [0] == x
|
|
"""))
|
|
args = [str(tmpdir.join("sub6"))]
|
|
config = py.test.config._reparse(args)
|
|
lsession = LSession(config)
|
|
allevents = []
|
|
lsession.main(reporter=allevents.append, runner=box_runner)
|
|
testevents = [x for x in allevents
|
|
if isinstance(x, report.ReceivedItemOutcome)]
|
|
failevents = [i for i in testevents if i.outcome.excinfo]
|
|
assert len(failevents) == 1
|
|
assert len(testevents) == 1
|
|
assert failevents[0].outcome.excinfo.value == 'assert [0] == [1, 2]'
|
|
|
|
def test_nocapture(self):
|
|
tmpdir = tmp
|
|
tmpdir.ensure("sub7", "__init__.py")
|
|
tmpdir.ensure("sub7", "test_nocap.py").write(py.code.Source("""
|
|
def test_one():
|
|
print 1
|
|
print 2
|
|
print 3
|
|
"""))
|
|
args = [str(tmpdir.join("sub7"))]
|
|
config = py.test.config._reparse(args)
|
|
lsession = LSession(config)
|
|
allevents = []
|
|
lsession.main(reporter=allevents.append, runner=plain_runner)
|
|
testevents = [x for x in allevents
|
|
if isinstance(x, report.ReceivedItemOutcome)]
|
|
assert len(testevents) == 1
|
|
assert testevents[0].outcome.passed
|
|
assert testevents[0].outcome.stderr == ""
|
|
assert testevents[0].outcome.stdout == "1\n2\n3\n"
|
|
|
|
def test_runner_selection(self):
|
|
tmpdir = py.test.ensuretemp("lsession_runner_selection")
|
|
tmpdir.ensure("apigen.py").write(py.code.Source("""
|
|
def get_documentable_items(*args):
|
|
return 'foo', {}
|
|
"""))
|
|
opt_mapping = {
|
|
'': plain_runner,
|
|
'--box': box_runner,
|
|
'--apigen=%s/apigen.py' % str(tmpdir): apigen_runner,
|
|
}
|
|
pkgdir = tmpdir.dirpath()
|
|
for opt in opt_mapping.keys():
|
|
if opt:
|
|
all = opt + " " + str(tmpdir)
|
|
else:
|
|
all = str(tmpdir)
|
|
config = py.test.config._reparse(all.split(" "))
|
|
lsession = LSession(config)
|
|
assert lsession.init_runner() is opt_mapping[opt]
|
|
#tmpdir.dirpath().ensure("conftest.py").write(py.code.Source("""
|
|
#dist_boxing=True
|
|
#"""))
|
|
#config = py.test.config._reparse([str(tmpdir)])
|
|
#lsession = LSession(config)
|
|
#assert lsession.init_runner(pkgdir) is box_runner
|
|
# XXX check why it fails
|