[py-svn] r51438 - in py/branch/event/py/test2: rsession rsession/testing terminal testing
hpk at codespeak.net
hpk at codespeak.net
Wed Feb 13 15:40:21 CET 2008
Author: hpk
Date: Wed Feb 13 15:40:19 2008
New Revision: 51438
Added:
py/branch/event/py/test2/testing/suptest.py
py/branch/event/py/test2/testing/test_session_xxx.py
- copied, changed from r51396, py/branch/event/py/test2/testing/test_session2.py
Removed:
py/branch/event/py/test2/testing/test_session2.py
Modified:
py/branch/event/py/test2/rsession/hostmanage.py
py/branch/event/py/test2/rsession/slave.py
py/branch/event/py/test2/rsession/testing/test_rsession.py
py/branch/event/py/test2/terminal/remote.py
py/branch/event/py/test2/testing/setupdata.py
py/branch/event/py/test2/testing/test_collect.py
py/branch/event/py/test2/testing/test_config.py
py/branch/event/py/test2/testing/test_remote.py
py/branch/event/py/test2/testing/test_session.py
Log:
* separated out event/test support code into suptest.py
* refactoring and streamlining many tests all around
* re-enabling and fixing some tests that didn't actually run
session and its tests start to look more uniform
still this is all intermediate
Modified: py/branch/event/py/test2/rsession/hostmanage.py
==============================================================================
--- py/branch/event/py/test2/rsession/hostmanage.py (original)
+++ py/branch/event/py/test2/rsession/hostmanage.py Wed Feb 13 15:40:19 2008
@@ -181,7 +181,7 @@
def trysendtest(self, item):
for host in self.hosts:
node = getattr(host, 'node', None)
- if node and len(node.pending) < 15: # XXX
+ if node and len(node.pending) < 15: # XXX use config
node.send(item)
return True
Modified: py/branch/event/py/test2/rsession/slave.py
==============================================================================
--- py/branch/event/py/test2/rsession/slave.py (original)
+++ py/branch/event/py/test2/rsession/slave.py Wed Feb 13 15:40:19 2008
@@ -50,17 +50,12 @@
node = getnode(nextitem)
res = node.run(nextitem)
except Skipped, s:
- send(SerializableOutcome(skipped=str(s)).make_repr())
- except:
+ res = SerializableOutcome(skipped=str(s)).make_repr()
+ except: # XXX consider bare except here
excinfo = py.code.ExceptionInfo()
- send(SerializableOutcome(excinfo=excinfo, is_critical=True).make_repr())
- else:
- send(res)
- if not res[0] and not res[3] and config.option.exitfirst:
- break
- # we're finished, but we should eat what we can
- while nextitem is not None:
- nextitem = receive()
+ res = SerializableOutcome(excinfo=excinfo, is_critical=True).make_repr()
+ send(res)
+
def setup():
# our current dir is the topdir
@@ -79,7 +74,16 @@
if not config.option.nomagic:
py.magic.invoke(assertion=1)
from py.__.test2.rsession.slave import slave_main
- slave_main(channel.receive, channel.send, basedir, config)
+
+ #debug = open("/tmp/debug-slave.log", 'wa')
+ def send(msg):
+ #print >>debug, "sending", msg
+ channel.send(msg)
+ def receive():
+ msg = channel.receive()
+ #print >>debug, "reveived", msg
+ return msg
+ slave_main(receive, send, basedir, config)
if not config.option.nomagic:
py.magic.revoke(assertion=1)
channel.close()
Modified: py/branch/event/py/test2/rsession/testing/test_rsession.py
==============================================================================
--- py/branch/event/py/test2/rsession/testing/test_rsession.py (original)
+++ py/branch/event/py/test2/rsession/testing/test_rsession.py Wed Feb 13 15:40:19 2008
@@ -9,10 +9,9 @@
from py.__.test2.rsession.testing.basetest import BasicRsessionTest
from py.__.test2.rsession.testing.test_hostmanage import DirSetup
-from py.__.test2.testing.test_session import getevents_runmain
+from py.__.test2.testing import suptest
def setup_module(mod):
- mod.pkgdir = py.path.local(py.__file__).dirpath()
if py.std.sys.platform == "win32":
py.test.skip("rsession tests disabled for win32")
@@ -31,16 +30,27 @@
def test_2():
assert 0
def test_3():
- raise ValueError(23)
- def test_4(someargs):
- pass
+ import time
+ time.sleep(0.5)
+ def test_4():
+ assert 0
"""))
- config = py.test2.config._reparse([self.source.join("sub"), '-x'])
+ config = py.test2.config._reparse([self.source.join("sub"), '-x', '--dist'])
+ #config = py.test2.config._reparse([self.source.join("sub"), '--dist'])
rsession = RSession(config)
- allevents = getevents_runmain(rsession)
- testevents = [x for x in allevents
- if isinstance(x, repevent.ItemTestReport)]
- assert len(testevents) == 3
+ sorter = suptest.events_from_session(rsession)
+ testevents = sorter.get(repevent.ItemTestReport)
+
+ py.test.skip("XXX need for different way to test -x --dist")
+ assert len([x for x in testevents if x.passed]) == 2
+ assert len([x for x in testevents if x.failed]) == 1
+ assert len([x for x in testevents if x.skipped]) == 1
+
+ #passed, skipped, failed = sorter.listoutcomes()
+ #assert len(passed) == 1
+ #assert len(skipped) == 1
+ #assert len(failed) == 1
+ #assert failed[0].item.name == "test_2"
def test_distribution_rsync_roots_example(self):
destdir = py.test2.ensuretemp("example_dist_destdir")
@@ -71,17 +81,11 @@
assert config.topdir == tmpdir
assert not tmpdir.join("__init__.py").check()
rsession = RSession(config)
- allevents = getevents_runmain(rsession)
- testevents = [x for x in allevents
- if isinstance(x, repevent.ItemTestReport)]
- assert len(testevents)
- print testevents
- passevents = [i for i in testevents if i.passed]
- failevents = [i for i in testevents if i.failed]
- skippedevents = [i for i in testevents if i.skipped]
- assert len(testevents) == 5
- assert len(passevents) == 2
- assert len(failevents) == 3
+ sorter = suptest.events_from_session(rsession)
+ testevents = sorter.get(repevent.ItemTestReport)
+ assert len([x for x in testevents if x.passed]) == 2
+ assert len([x for x in testevents if x.failed]) == 3
+ assert len([x for x in testevents if x.skipped]) == 0
def test_setup_teardown_run_ssh(self):
hosts = [HostInfo('localhost:%s' % self.dest)]
@@ -135,9 +139,8 @@
config = py.test2.config._reparse([tmpdir])
rsession = RSession(config)
- allevents = getevents_runmain(rsession)
- testevents = [x for x in allevents
- if isinstance(x, repevent.ItemTestReport)]
+ sorter = suptest.events_from_session(rsession)
+ testevents = sorter.get(repevent.ItemTestReport)
passevents = [x for x in testevents if x.passed]
assert len(passevents) == 1
Modified: py/branch/event/py/test2/terminal/remote.py
==============================================================================
--- py/branch/event/py/test2/terminal/remote.py (original)
+++ py/branch/event/py/test2/terminal/remote.py Wed Feb 13 15:40:19 2008
@@ -136,5 +136,5 @@
session.shouldclose = channel.isclosed
print "SLAVE: starting session.main()"
failures = session.main()
- failures = [config.get_collector_trail(item) for item,_ in failures]
+ failures = [config.get_collector_trail(ev.item) for ev in failures]
channel.send(failures)
Modified: py/branch/event/py/test2/testing/setupdata.py
==============================================================================
--- py/branch/event/py/test2/testing/setupdata.py (original)
+++ py/branch/event/py/test2/testing/setupdata.py Wed Feb 13 15:40:19 2008
@@ -11,10 +11,11 @@
# return datadir
def getexamplefile(basename):
- datadir = py.test2.ensuretemp("datadir")
+ datadir = py.test2.ensuretemp("example")
path = datadir.join(basename)
if not path.check():
path.write(namecontent[basename])
+ print "creating testfile", path
return path
namecontent = {
@@ -86,7 +87,7 @@
'''),
- 'testmore.py': py.code.Source('''
+ 'test_threepass.py': py.code.Source('''
def test_one():
assert 1
@@ -159,3 +160,56 @@
"""),
}
+
+def setup_customconfigtest(tmpdir):
+ o = tmpdir.ensure('customconfigtest', dir=1)
+ o.ensure('conftest.py').write("""if 1:
+ import py
+ class MyFunction(py.test2.collect.Function):
+ pass
+ class Directory(py.test2.collect.Directory):
+ def filefilter(self, fspath):
+ return fspath.check(basestarts='check_', ext='.py')
+ class myfuncmixin:
+ Function = MyFunction
+ def funcnamefilter(self, name):
+ return name.startswith('check_')
+
+ class Module(myfuncmixin, py.test2.collect.Module):
+ def classnamefilter(self, name):
+ return name.startswith('CustomTestClass')
+ class Instance(myfuncmixin, py.test2.collect.Instance):
+ pass
+ """)
+ checkfile = o.ensure('somedir', 'check_something.py')
+ checkfile.write("""if 1:
+ def check_func():
+ assert 42 == 42
+ class CustomTestClass:
+ def check_method(self):
+ assert 23 == 23
+ """)
+ return checkfile
+
+def setup_non_python_dir(tmpdir):
+ o = tmpdir.ensure('customconfigtest_nonpython', dir=1)
+ o.ensure('conftest.py').write("""if 1:
+ import py
+ class CustomItem(py.test2.collect.Item):
+ def run(self):
+ pass
+
+ class Directory(py.test2.collect.Directory):
+ def filefilter(self, fspath):
+ return fspath.check(basestarts='check_', ext='.txt')
+ def join(self, name):
+ if not name.endswith('.txt'):
+ return super(Directory, self).join(name)
+ p = self.fspath.join(name)
+ if p.check(file=1):
+ return CustomItem(p, parent=self)
+ """)
+ checkfile = o.ensure('somedir', 'moredir', 'check_something.txt')
+ return checkfile
+
+
Added: py/branch/event/py/test2/testing/suptest.py
==============================================================================
--- (empty file)
+++ py/branch/event/py/test2/testing/suptest.py Wed Feb 13 15:40:19 2008
@@ -0,0 +1,83 @@
+
+import py
+from py.__.test2 import repevent
+
+def eventappender(config):
+ l = []
+ def app(ev):
+ print ev
+ l.append(ev)
+ config.hub.append(app)
+ return l
+
+def initsorter_from_cmdline(args=None):
+ if args is None:
+ args = []
+ config = py.test2.config._reparse(args)
+ session = config.initsession()
+ sorter = EventSorter(config, session)
+ return sorter
+
+def events_from_cmdline(args=None):
+ sorter = initsorter_from_cmdline(args)
+ sorter.session.main()
+ return sorter
+
+def events_from_session(session):
+ sorter = EventSorter(session.config, session)
+ session.main()
+ return sorter
+
+def events_run_example(examplename, *args):
+ from setupdata import getexamplefile
+ p = getexamplefile(examplename)
+ return events_from_cmdline([p] + list(args))
+
+class EventSorter(object):
+ def __init__(self, config, session=None):
+ self.session = session
+ self.cls2events = d = {}
+ def app(event):
+ print "[event]", event
+ for cls in py.std.inspect.getmro(event.__class__):
+ if cls is not object:
+ d.setdefault(cls, []).append(event)
+ config.hub.append(app)
+
+ def get(self, cls):
+ return self.cls2events.get(cls, [])
+
+ def listoutcomes(self):
+ passed = []
+ skipped = []
+ failed = []
+ for ev in self.get(repevent.ItemFinish):
+ if ev.passed:
+ passed.append(ev)
+ elif ev.skipped:
+ skipped.append(ev)
+ else:
+ failed.append(ev)
+ return passed, skipped, failed
+
+ def countoutcomes(self):
+ return map(len, self.listoutcomes())
+
+ def getfailedcollections(self):
+ l = []
+ for ev in self.get(repevent.CollectionFinish):
+ if ev.excinfo:
+ l.append(ev)
+ return l
+
+
+counter = py.std.itertools.count().next
+def makeuniquepyfile(source):
+ dirname = "test_%d" %(counter(),)
+ tmpdir = py.test.ensuretemp(dirname)
+ p = tmpdir.join(dirname + ".py")
+ assert not p.check()
+ p.write(py.code.Source(source))
+ print "created test file", p
+ p.dirpath("__init__.py").ensure()
+ return p
Modified: py/branch/event/py/test2/testing/test_collect.py
==============================================================================
--- py/branch/event/py/test2/testing/test_collect.py (original)
+++ py/branch/event/py/test2/testing/test_collect.py Wed Feb 13 15:40:19 2008
@@ -1,43 +1,21 @@
from __future__ import generators
import py
-from py.__.test2 import outcome
-from test_session import getevents_runmain
-from py.__.test2 import repevent
+from py.__.test2 import repevent, outcome
from py.__.test2.genitem import genitems
from py.__.test2.doctest import DoctestText
-from setupdata import getexamplefile
-
-def getpassed(session):
- hub = session.config.hub
- all = []
- hub.append(all.append)
- try:
- session.main()
- print all
- passed = [i.passed for i in all if isinstance(i, repevent.ItemFinish)]
- return passed
- finally:
- hub.pop()
-
-def eventappender(config):
- l = []
- def app(ev):
- print ev
- l.append(ev)
- config.hub.append(app)
- return l
+import setupdata, suptest
def setup_module(mod):
mod.tmpdir = py.test2.ensuretemp(mod.__name__)
def test_failing_import_execfile():
- dest = getexamplefile('failingimport.py')
+ dest = setupdata.getexamplefile('failingimport.py')
col = py.test2.collect.Module(dest)
py.test2.raises(ImportError, col.run)
py.test2.raises(ImportError, col.run)
def test_collect_listnames_and_back():
- path = getexamplefile("filetest.py")
+ path = setupdata.getexamplefile("filetest.py")
col1 = py.test2.collect.Directory(path.dirpath().dirpath())
col2 = col1.join(path.dirpath().basename)
col3 = col2.join(path.basename)
@@ -51,7 +29,7 @@
assert len(l2) == 3
def test_finds_tests():
- fn = getexamplefile('filetest.py')
+ fn = setupdata.getexamplefile('filetest.py')
col = py.test2.collect.Module(fn)
l = col.run()
assert len(l) == 2
@@ -89,7 +67,7 @@
class MyDirectory(py.test2.collect.Directory):
def filefilter(self, p):
return p.check(fnmatch='testspecial*.py')
- filetest = getexamplefile("testspecial_importerror.py")
+ filetest = setupdata.getexamplefile("testspecial_importerror.py")
mydir = MyDirectory(filetest.dirpath())
l = mydir.run()
assert len(l) == 1
@@ -103,12 +81,12 @@
py.test2.raises(py.error.ENOENT, col.run)
def test_syntax_error_in_module():
- modpath = getexamplefile("syntax_error.py")
+ modpath = setupdata.getexamplefile("syntax_error.py")
col = py.test2.collect.Module(modpath)
py.test2.raises(SyntaxError, col.run)
def test_disabled_class():
- col = py.test2.collect.Module(getexamplefile('disabled.py'))
+ col = py.test2.collect.Module(setupdata.getexamplefile('disabled.py'))
l = col.run()
assert len(l) == 1
colitem = col.join(l[0])
@@ -116,13 +94,13 @@
assert not colitem.run()
def test_disabled_module():
- p = getexamplefile("disabled_module.py")
+ p = setupdata.getexamplefile("disabled_module.py")
col = py.test2.collect.Module(p)
l = col.run()
assert len(l) == 0
def test_generative_simple():
- tfile = getexamplefile('test_generative.py')
+ tfile = setupdata.getexamplefile('test_generative.py')
col = py.test2.collect.Module(tfile)
l = col.run()
assert len(l) == 2
@@ -155,112 +133,60 @@
assert l2[1].name == '[1]'
-def setup_customconfigtest(tmpdir):
- o = tmpdir.ensure('customconfigtest', dir=1)
- o.ensure('conftest.py').write("""if 1:
- import py
- class MyFunction(py.test2.collect.Function):
- pass
- class Directory(py.test2.collect.Directory):
- def filefilter(self, fspath):
- return fspath.check(basestarts='check_', ext='.py')
- class myfuncmixin:
- Function = MyFunction
- def funcnamefilter(self, name):
- return name.startswith('check_')
-
- class Module(myfuncmixin, py.test2.collect.Module):
- def classnamefilter(self, name):
- return name.startswith('CustomTestClass')
- class Instance(myfuncmixin, py.test2.collect.Instance):
- pass
- """)
- checkfile = o.ensure('somedir', 'check_something.py')
- checkfile.write("""if 1:
- def check_func():
- assert 42 == 42
- class CustomTestClass:
- def check_method(self):
- assert 23 == 23
- """)
- return checkfile
-
-def setup_non_python_dir(tmpdir):
- o = tmpdir.ensure('customconfigtest_nonpython', dir=1)
- o.ensure('conftest.py').write("""if 1:
- import py
- class CustomItem(py.test2.collect.Item):
- def run(self):
- pass
-
- class Directory(py.test2.collect.Directory):
- def filefilter(self, fspath):
- return fspath.check(basestarts='check_', ext='.txt')
- def join(self, name):
- if not name.endswith('.txt'):
- return super(Directory, self).join(name)
- p = self.fspath.join(name)
- if p.check(file=1):
- return CustomItem(p, parent=self)
- """)
- checkfile = o.ensure('somedir', 'moredir', 'check_something.txt')
- return checkfile
-
-
def test_order_of_execution_generator_same_codeline():
o = tmpdir.ensure('genorder1', dir=1)
o.join("test_order1.py").write(py.code.Source("""
- def test_generative_order_of_execution():
- test_list = []
- expected_list = range(6)
-
- def list_append(item):
- test_list.append(item)
+ def test_generative_order_of_execution():
+ test_list = []
+ expected_list = range(6)
+
+ def list_append(item):
+ test_list.append(item)
+
+ def assert_order_of_execution():
+ print 'expected order', expected_list
+ print 'but got ', test_list
+ assert test_list == expected_list
- def assert_order_of_execution():
- print 'expected order', expected_list
- print 'but got ', test_list
- assert test_list == expected_list
-
- for i in expected_list:
- yield list_append, i
- yield assert_order_of_execution
+ for i in expected_list:
+ yield list_append, i
+ yield assert_order_of_execution
"""))
- config = py.test2.config._reparse([o])
- session = config.initsession()
- l = getpassed(session)
- assert len(l) == 7
+ sorter = suptest.events_from_cmdline([o])
+ passed, skipped, failed = sorter.countoutcomes()
+ assert passed == 7
+ assert not skipped and not failed
def test_order_of_execution_generator_different_codeline():
o = tmpdir.ensure('genorder2', dir=2)
o.join("test_genorder2.py").write(py.code.Source("""
- def test_generative_tests_different_codeline():
- test_list = []
- expected_list = range(3)
-
- def list_append_2():
- test_list.append(2)
-
- def list_append_1():
- test_list.append(1)
-
- def list_append_0():
- test_list.append(0)
-
- def assert_order_of_execution():
- print 'expected order', expected_list
- print 'but got ', test_list
- assert test_list == expected_list
-
- yield list_append_0
- yield list_append_1
- yield list_append_2
- yield assert_order_of_execution
+ def test_generative_tests_different_codeline():
+ test_list = []
+ expected_list = range(3)
+
+ def list_append_2():
+ test_list.append(2)
+
+ def list_append_1():
+ test_list.append(1)
+
+ def list_append_0():
+ test_list.append(0)
+
+ def assert_order_of_execution():
+ print 'expected order', expected_list
+ print 'but got ', test_list
+ assert test_list == expected_list
+
+ yield list_append_0
+ yield list_append_1
+ yield list_append_2
+ yield assert_order_of_execution
"""))
- config = py.test2.config._reparse([o])
- session = config.initsession()
- l = getpassed(session)
- assert len(l) == 4
+ sorter = suptest.events_from_cmdline([o])
+ passed, skipped, failed = sorter.countoutcomes()
+ assert passed == 4
+ assert not skipped and not failed
def test_check_generator_collect_problems():
tmp = py.test2.ensuretemp("gener_coll")
@@ -327,7 +253,7 @@
conf.option.forcegen = old
def test_check_random_inequality():
- path = getexamplefile("funcexamples.py")
+ path = setupdata.getexamplefile("funcexamples.py")
col = py.test2.collect.Module(path)
fn = col.join("funcpass")
assert fn != 3
@@ -348,7 +274,7 @@
tmp = self.tmp
print "using tempdir", tmp
config = py.test2.config._reparse([tmp])
- l = eventappender(config)
+ l = suptest.eventappender(config)
items = list(genitems(config, config.getcolitems()))
return items, l
@@ -442,7 +368,7 @@
assert items[2].name == 'test_method_one'
def test_custom_python_collection_from_conftest(self):
- checkfile = setup_customconfigtest(self.tmp)
+ checkfile = setupdata.setup_customconfigtest(self.tmp)
for x in (self.tmp, checkfile, checkfile.dirpath()):
items, events = self._genitems(x)
assert len(items) == 2
@@ -452,22 +378,21 @@
# test that running a session works from the directories
old = o.chdir()
try:
- config = py.test2.config._reparse([])
- session = config._getsessionclass()(config)
- l = getpassed(session)
- assert len(l) == 2
+ sorter = suptest.events_from_cmdline([])
+ passed, skipped, failed = sorter.countoutcomes()
+ assert passed == 2
+ assert skipped == failed == 0
finally:
old.chdir()
# test that running the file directly works
- config = py.test2.config._reparse([str(checkfile)])
- session = config._getsessionclass()(config)
- l = getpassed(session)
- assert len(l) == 2
-
+ sorter = suptest.events_from_cmdline([str(checkfile)])
+ passed, skipped, failed = sorter.countoutcomes()
+ assert passed == 2
+ assert skipped == failed == 0
def test_custom_NONpython_collection_from_conftest(self):
- checkfile = setup_non_python_dir(self.tmp)
+ checkfile = setupdata.setup_non_python_dir(self.tmp)
for x in (self.tmp, checkfile, checkfile.dirpath()):
print "checking that %s returns custom items" % (x,)
@@ -480,16 +405,18 @@
# test that running a session works from the directories
old = self.tmp.chdir()
try:
- l = getpassed(config.initsession())
- assert len(l) == 1
+ sorter = suptest.events_from_cmdline([])
+ passed, skipped, failed = sorter.countoutcomes()
+ assert passed == 1
+ assert skipped == failed == 0
finally:
old.chdir()
# test that running the file directly works
- config = py.test2.config._reparse([str(checkfile)])
- session = config._getsessionclass()(config)
- l = getpassed(session)
- assert len(l) == 1
+ sorter = suptest.events_from_cmdline([str(checkfile)])
+ passed, skipped, failed = sorter.countoutcomes()
+ assert passed == 1
+ assert skipped == failed == 0
def test_collect_doctest_files_with_test_prefix(self):
self.tmp.ensure("whatever.txt")
Modified: py/branch/event/py/test2/testing/test_config.py
==============================================================================
--- py/branch/event/py/test2/testing/test_config.py (original)
+++ py/branch/event/py/test2/testing/test_config.py Wed Feb 13 15:40:19 2008
@@ -2,6 +2,7 @@
import py
from py.__.test2.config import gettopdir
+import suptest, setupdata
def test_tmpdir():
d1 = py.test2.ensuretemp('hello')
@@ -316,6 +317,56 @@
config._finishcapture(dummy)
assert dummy._captured_out.strip() == "42"
+ def test_conflict_options(self):
+ def check_conflict_option(opts):
+ print "testing if options conflict:", " ".join(opts)
+ path = setupdata.getexamplefile("filetest.py")
+ config = py.test2.config._reparse(opts + [path])
+ py.test2.raises((ValueError, SystemExit), """
+ config.initsession()
+ """)
+ conflict_options = (
+ '--looponfailing --pdb',
+ '--dist --pdb',
+ '--exec=%s --pdb' % (py.std.sys.executable,),
+ )
+ for spec in conflict_options:
+ opts = spec.split()
+ yield check_conflict_option, opts
+
+ def test_implied_options(self):
+ def check_implied_option(opts, expr):
+ path = setupdata.getexamplefile("filetest.py")
+ config = py.test2.config._reparse(opts + [path])
+ session = config.initsession()
+ assert eval(expr, session.config.option.__dict__)
+
+ implied_options = {
+ '-v': 'verbose',
+ '-l': 'showlocals',
+ #'--runbrowser': 'startserver and runbrowser', XXX starts browser
+ }
+ for key, expr in implied_options.items():
+ yield check_implied_option, [key], expr
+
+ def test_default_session_options(self):
+ def runfiletest(opts):
+ sorter = suptest.events_from_cmdline(opts)
+ passed, skipped, failed = sorter.countoutcomes()
+ assert failed == 2
+ assert skipped == passed == 0
+ path = setupdata.getexamplefile("filetest.py")
+ for opts in ([], ['-l'], ['-s'], ['--tb=no'], ['--tb=short'],
+ ['--tb=long'], ['--fulltrace'], ['--nomagic'],
+ ['--traceconfig'], ['-v'], ['-v', '-v']):
+ yield runfiletest, opts + [path]
+
+ def test_is_not_boxed_by_default(self):
+ path = setupdata.getexamplefile("filetest.py")
+ config = py.test2.config._reparse([path])
+ assert not config.option.boxed
+
+
class TestConfigColitems:
def setup_class(cls):
cls.tmproot = py.test2.ensuretemp(cls.__name__)
Modified: py/branch/event/py/test2/testing/test_remote.py
==============================================================================
--- py/branch/event/py/test2/testing/test_remote.py (original)
+++ py/branch/event/py/test2/testing/test_remote.py Wed Feb 13 15:40:19 2008
@@ -1,5 +1,4 @@
import py
-from test_session import getevents_runmain
def setup_module(mod):
mod.tmpdir = py.test.ensuretemp(mod.__name__)
Modified: py/branch/event/py/test2/testing/test_session.py
==============================================================================
--- py/branch/event/py/test2/testing/test_session.py (original)
+++ py/branch/event/py/test2/testing/test_session.py Wed Feb 13 15:40:19 2008
@@ -1,98 +1,20 @@
import py
-from setupdata import getexamplefile
-from py.__.test2.outcome import Skipped, Failed, Passed, Outcome
-from py.__.test2.terminal.out import getout
from py.__.test2 import repevent
-
-from test_session2 import getevents_runmain
+import suptest
def setup_module(mod):
mod.tmpdir = py.test.ensuretemp(mod.__name__)
-implied_options = {
- '-v': 'verbose',
- '-l': 'showlocals',
- #'--runbrowser': 'startserver and runbrowser', XXX starts browser
-}
-
-conflict_options = ('--looponfailing --pdb',
- '--dist --pdb',
- '--exec=%s --pdb' % py.std.sys.executable,
- )
-
-def getoutcomes(all):
- return [i for i in all if isinstance(i, repevent.ItemFinish)]
-
-
-def getpassed(all):
- return [i for i in getoutcomes(all) if i.passed]
-
-def getskipped(all):
- return [i for i in getoutcomes(all) if i.skipped] + \
- [i for i in all if isinstance(i, repevent.DeselectedTest)]
-
-def getfailed(all):
- return [i for i in getoutcomes(all) if i.failed]
-
-def getfailedcollections(all):
- return [i for i in all
- if isinstance(i, repevent.CollectionFinish) and
- i.excinfo]
-
-def test_conflict_options():
- for spec in conflict_options:
- opts = spec.split()
- yield check_conflict_option, opts
-
-def check_conflict_option(opts):
- print "testing if options conflict:", " ".join(opts)
- path = getexamplefile("filetest.py")
- config = py.test2.config._reparse(opts + [path])
- py.test2.raises((ValueError, SystemExit), """
- config.initsession()
- """)
-
-def test_implied_options():
- for key, expr in implied_options.items():
- yield check_implied_option, [key], expr
-
-def check_implied_option(opts, expr):
- path = getexamplefile("filetest.py")
- config = py.test2.config._reparse(opts + [path])
- session = config.initsession()
- assert eval(expr, session.config.option.__dict__)
-
-def test_default_session_options():
- path = getexamplefile("filetest.py")
- for opts in ([], ['-l'], ['-s'], ['--tb=no'], ['--tb=short'],
- ['--tb=long'], ['--fulltrace'], ['--nomagic'],
- ['--traceconfig'], ['-v'], ['-v', '-v']):
- yield runfiletest, opts + [path]
-
-def runfiletest(opts):
- config = py.test2.config._reparse(opts)
- session = config.initsession()
- all = getevents_runmain(session)
- assert len(getfailed(all)) == 2
- assert not getskipped(all)
-
-def test_is_not_boxed_by_default():
- path = getexamplefile("filetest.py")
- config = py.test2.config._reparse([path])
- assert not config.option.boxed
-
class TestKeywordSelection:
def test_select_simple(self):
def check(keyword, name):
- p = getexamplefile("filetest.py")
- config = py.test2.config._reparse([p, '-s', '-k', keyword])
- session = config._getsessionclass()(config)
- all = getevents_runmain(session)
- outcomes = [i for i in all if isinstance(i, repevent.ItemFinish)]
- assert len(getfailed(all)) == 1
- assert outcomes[0].item.name == name
- l = getskipped(all)
- assert len(l) == 1
+ sorter = suptest.events_run_example("filetest.py",
+ '-s', '-k', keyword)
+ passed, skipped, failed = sorter.listoutcomes()
+ assert len(failed) == 1
+ assert failed[0].item.name == name
+ des = sorter.get(repevent.DeselectedTest)
+ assert len(des) == 1
for keyword in ['test_one', 'est_on']:
check(keyword, 'test_one')
@@ -115,74 +37,60 @@
"""))
for keyword in ('xxx', 'xxx test_2', 'TestClass', 'xxx -test_1',
'TestClass test_2', 'xxx TestClass test_2',):
- config = py.test2.config._reparse([o, '-s', '-k', keyword])
- session = config._getsessionclass()(config)
- all = getevents_runmain(session)
+ sorter = suptest.events_from_cmdline([o, '-s', '-k', keyword])
print "keyword", repr(keyword)
- l = getpassed(all)
- outcomes = [i for i in all if isinstance(i, repevent.ItemFinish)]
- assert len(l) == 1
- assert outcomes[0].item.name == 'test_2'
- l = getskipped(all)
- assert l[0].item.name == 'test_1'
+ passed, skipped, failed = sorter.listoutcomes()
+ assert len(passed) == 1
+ assert passed[0].item.name == 'test_2'
+ assert not skipped
+ deslist = sorter.get(repevent.DeselectedTest)
+ assert len(deslist) == 1
+ assert deslist[0].item.name == 'test_1'
def test_select_starton(self):
- p = getexamplefile("testmore.py")
- config = py.test2.config._reparse([p, '-j', '-k', "test_two"])
- session = config._getsessionclass()(config)
- all = getevents_runmain(session)
- assert len(getpassed(all)) == 2
- assert len(getskipped(all)) == 1
-
+ sorter = suptest.events_run_example("test_threepass.py",
+ '-j', '-k', "test_two")
+ passed, skipped, failed = sorter.countoutcomes()
+ assert passed == 2
+ assert skipped == failed == 0
+ deslist = sorter.get(repevent.DeselectedTest)
+ assert len(deslist) == 1
+ assert deslist[0].item.name == "test_one"
-class TestTerminalSession:
- def mainsession(self, *args):
- from py.__.test2.session import Session
- from py.__.test2.terminal.out import getout
- config = py.test2.config._reparse(list(args))
- session = Session(config)
- all = getevents_runmain(session)
- return session, all
-
+class TestSession:
def test_terminal(self):
- p = getexamplefile("filetest.py")
- session, all = self.mainsession(p)
- outcomes = getoutcomes(all)
- assert len(getfailed(all)) == 2
+ sorter = suptest.events_run_example("filetest.py")
+ passed, skipped, failed = sorter.countoutcomes()
+ assert failed == 2
+ assert passed == skipped == 0
def test_syntax_error_module(self):
- p = getexamplefile("syntax_error.py")
- session, all = self.mainsession(p)
- l = getfailedcollections(all)
+ sorter = suptest.events_run_example("syntax_error.py")
+ l = sorter.getfailedcollections()
assert len(l) == 1
out = l[0].excinfo.exconly()
assert out.find(str('syntax_error.py')) != -1
assert out.find(str('not python')) != -1
def test_exit_first_problem(self):
- p = getexamplefile("filetest.py")
- session, all = self.mainsession("--exitfirst", p)
- assert session.config.option.exitfirst
- assert len(getfailed(all)) == 1
- assert not getpassed(all)
+ sorter = suptest.events_run_example('filetest.py', '--exitfirst')
+ passed, skipped, failed = sorter.countoutcomes()
+ assert failed == 1
+ assert passed == skipped == 0
def test_generator_yields_None(self):
- o = tmpdir.ensure('generatornonetest', dir=1)
- tfile = o.join('test_generatornone.py')
- tfile.write(py.code.Source("""
+ p = suptest.makeuniquepyfile("""
def test_1():
yield None
- """))
- session, all = self.mainsession(o)
- #print out
- failures = getfailedcollections(all)
+ """)
+ sorter = suptest.events_from_cmdline([p])
+ failures = sorter.getfailedcollections()
out = failures[0].excinfo.exconly()
i = out.find('TypeError')
assert i != -1
- def test_capturing_hooks_simple(self):
- o = tmpdir.ensure('capturing', dir=1)
- tfile = o.join('test_capturing.py').write(py.code.Source("""
+ def test_conftest_Function_capturing_hooks(self):
+ tfile = suptest.makeuniquepyfile("""
import py
print "module level output"
def test_capturing():
@@ -192,8 +100,8 @@
print 1
print >>py.std.sys.stderr, 2
raise ValueError
- """))
- conftest = o.join('conftest.py').write(py.code.Source("""
+ """)
+ conftest = tfile.dirpath('conftest.py').write(py.code.Source("""
import py
class Function(py.test2.collect.Function):
def startcapture(self):
@@ -202,36 +110,32 @@
def finishcapture(self):
self._testmycapture = None
"""))
- session, all = self.mainsession(o)
- l = getpassed(all)
- outcomes = getoutcomes(all)
- assert len(l) == 1
- item = all[3].item # item is not attached to outcome, but it's the
- # started before
- assert hasattr(item, '_testmycapture')
- print item._testmycapture
-
- assert isinstance(item.parent, py.test2.collect.Module)
+ sorter = suptest.events_from_cmdline([tfile.dirpath()])
+ passed, skipped, failed = sorter.listoutcomes()
+ assert len(passed) == 1
+ assert len(failed) == 1
+
+ assert hasattr(passed[0].item, '_mycapture')
+ assert hasattr(passed[0].item, '_testmycapture')
+ assert hasattr(failed[0].item, '_mycapture')
+ assert hasattr(failed[0].item, '_testmycapture')
def test_raises_output(self):
- o = tmpdir.ensure('raisestest', dir=1)
- tfile = o.join('test_raisesoutput.py')
- tfile.write(py.code.Source("""
+ p = suptest.makeuniquepyfile('''
import py
def test_raises_doesnt():
py.test2.raises(ValueError, int, "3")
- """))
- session, all = self.mainsession(o)
- outcomes = getoutcomes(all)
- out = outcomes[0].excinfo.exconly()
+ ''')
+ sorter = suptest.events_from_cmdline([p])
+ passed, skipped, failed = sorter.listoutcomes()
+ assert len(failed) == 1
+ out = failed[0].excinfo.exconly()
if not out.find("DID NOT RAISE") != -1:
print out
py.test2.fail("incorrect raises() output")
def test_order_of_execution(self):
- o = tmpdir.ensure('ordertest', dir=1)
- tfile = o.join('test_orderofexecution.py')
- tfile.write(py.code.Source("""
+ tfile = suptest.makeuniquepyfile("""
l = []
def test_1():
l.append(1)
@@ -249,76 +153,121 @@
self.reslist.append(3)
def test_4(self):
assert self.reslist == [1,2,1,2,3]
- """))
-
- session, all = self.mainsession(o)
- assert len(getfailed(all)) == 0
- assert len(getpassed(all)) == 7
+ """)
+ sorter = suptest.events_from_cmdline([tfile])
+ passed, skipped, failed = sorter.countoutcomes()
+ assert failed == skipped == 0
+ assert passed == 7
# also test listnames() here ...
def test_nested_import_error(self):
- o = tmpdir.ensure('Ians_importfailure', dir=1)
- tfile = o.join('test_import_fail.py')
- tfile.write(py.code.Source("""
+ tfile = suptest.makeuniquepyfile("""
import import_fails
def test_this():
assert import_fails.a == 1
- """))
- o.join('import_fails.py').write(py.code.Source("""
+ """)
+ tfile.dirpath('import_fails.py').write(py.code.Source("""
import does_not_work
a = 1
"""))
- session, all = self.mainsession(o)
- l = getfailedcollections(all)
+ sorter = suptest.events_from_cmdline([tfile])
+ l = sorter.getfailedcollections()
assert len(l) == 1
out = l[0].excinfo.exconly()
assert out.find('does_not_work') != -1
def test_safe_repr(self):
- p = getexamplefile("brokenrepr.py")
- session, all = self.mainsession(p)
- l = getfailed(all)
- assert len(l) == 2
- out = l[0].excinfo.exconly()
+ sorter = suptest.events_run_example("brokenrepr.py")
+ passed, skipped, failed = sorter.listoutcomes()
+ assert len(failed) == 2
+ out = failed[0].excinfo.exconly()
assert out.find("""[Exception("Ha Ha fooled you, I'm a broken repr().") raised in repr()]""") != -1 #'
- out = l[1].excinfo.exconly()
+ out = failed[1].excinfo.exconly()
assert out.find("[unknown exception raised in repr()]") != -1
-
-class TestCollectonly:
- def setup_class(cls):
- tmp = py.test2.ensuretemp('itemgentest')
- tmp.ensure("__init__.py")
- tmp.ensure("test_one.py").write(py.code.Source("""
- def test_one():
- pass
- class TestX:
- def test_method_one(self):
+ def test_collect_only_with_various_situations(self):
+ p = suptest.makeuniquepyfile("""
+ def test_one():
pass
- class TestY(TestX):
- pass
- """))
- tmp.ensure("test_two.py").write(py.code.Source("""
- import py
- py.test.skip('xxx')
+ class TestX:
+ def test_method_one(self):
+ pass
+
+ class TestY(TestX):
+ pass
+ """)
+ p.dirpath("test_two.py").write(py.code.Source("""
+ import py
+ py.test.skip('xxx')
"""))
- tmp.ensure("test_three.py").write("xxxdsadsadsadsa")
- cls.tmp = tmp
+ p.dirpath("test_three.py").write("xxxdsadsadsadsa")
- def test_collectonly(self):
- config = py.test2.config._reparse([self.tmp, '--collectonly'])
- session = config.initsession()
- # test it all in once
- allevents = getevents_runmain(session)
- started = finished = 0
- for event in allevents:
- assert not isinstance(event, repevent.ItemFinish)
- if isinstance(event, repevent.CollectionStart):
- started += 1
- elif isinstance(event, repevent.CollectionFinish):
- finished += 1
+ sorter = suptest.events_from_cmdline([p.dirpath(), '--collectonly'])
+
+ assert not sorter.get(repevent.ItemStart)
+ assert not sorter.get(repevent.ItemFinish)
+ started = sorter.get(repevent.CollectionStart)
+ finished = sorter.get(repevent.CollectionFinish)
+ assert len(started) == len(finished)
+ failedcollections = sorter.getfailedcollections()
+ assert len(failedcollections) == 2
+
+ def test_pdb_run(self):
+ tfile = suptest.makeuniquepyfile("""
+ def test_1():
+ assert 0
+ """)
+ l = []
+ def mypdb(*args):
+ l.append(args)
+ py.magic.patch(py.__.test2.custompdb, 'post_mortem', mypdb)
+ try:
+ sorter = suptest.initsorter_from_cmdline([tfile, '--pdb'])
+ py.test.raises(SystemExit, sorter.session.main)
+ passed, skipped, failed = sorter.countoutcomes()
+ assert passed == skipped == 0
+ assert len(l) == 1
+ # XXX assert failed == 1
+ py.test.skip("XXX streamline event generation with --pdb")
+ # XXX add some more checks?
+ finally:
+ py.magic.revert(py.__.test2.custompdb, 'post_mortem')
+
+ def test_basic_testitem_events(self):
+ tfile = suptest.makeuniquepyfile("""
+ def test_one():
+ pass
+ def test_one_one():
+ assert 0
+ def test_other():
+ raise ValueError(23)
+ def test_two(someargs):
+ pass
+ """)
+ sorter = suptest.events_from_cmdline([tfile])
+ passed, skipped, failed = sorter.listoutcomes()
+ assert len(skipped) == 0
+ assert len(passed) == 1
+ assert len(failed) == 3
+ assert failed[0].item.name == "test_one_one"
+ assert failed[1].item.name == "test_other"
+ assert failed[2].item.name == "test_two"
- print started
- assert started == finished
+ def test_capture_info_on_event(self):
+ tfile = suptest.makeuniquepyfile("""
+ def test_one():
+ print 1
+ print 2
+ print 3
+ """)
+ sorter = suptest.events_from_cmdline([tfile])
+ passed, skipped, failed = sorter.listoutcomes()
+ assert len(skipped) == len(failed) == 0
+ assert len(passed) == 1
+ ev = passed[0]
+ py.test.skip("XXX get more info (e.g. capturing) available from events")
+ assert ev.outcome.passed
+ assert ev.outcome.stderr == ""
+ assert ev.outcome.stdout == "1\n2\n3\n"
Deleted: /py/branch/event/py/test2/testing/test_session2.py
==============================================================================
--- /py/branch/event/py/test2/testing/test_session2.py Wed Feb 13 15:40:19 2008
+++ (empty file)
@@ -1,293 +0,0 @@
-
-""" test of local version of py.test2 distributed
-"""
-
-import py
-from py.__.test2 import repevent
-#from py.__.test2.rsession.local import box_runner, plain_runner, apigen_runner
-import py.__.test2.custompdb
-from py.__.test2.session import Session
-
-def getevents_runmain(session):
- hub = session.config.hub
- allevents = []
- def appendevent(event):
- allevents.append(event)
- print event
- hub.append(appendevent)
- try:
- session.main()
- return allevents
- finally:
- hub.remove(appendevent)
-
-
-def setup_module(mod):
- mod.tmp = py.test2.ensuretemp("lsession_module")
-
-class TestSession(object):
- # XXX: Some tests of that should be run as well on RSession, while
- # some not at all
- def example_distribution(self, boxed=False):
- # 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))]
- if boxed:
- args.append('--boxed')
- config = py.test2.config._reparse(args)
- lsession = Session(config)
- allevents = getevents_runmain(lsession)
- testevents = [x for x in allevents
- if isinstance(x, repevent.ItemFinish)]
- assert len(testevents)
- passevents = [i for i in testevents if i.passed]
- failevents = [i for i in testevents if i.failed]
- skippedevents = [i for i in testevents if i.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
-
- return
- # XXX
- 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_boxed(self):
- if not hasattr(py.std.os, 'fork'):
- py.test.skip('operating system not supported')
- self.example_distribution(True)
-
- def test_box_exploding(self):
- if not hasattr(py.std.os, 'fork'):
- py.test.skip('operating system not supported')
- tmpdir = tmp
- dirname = "boxtest"
- tmpdir.ensure(dirname, "__init__.py")
- tmpdir.ensure(dirname, "test_one.py").write(py.code.Source("""
- def test_5():
- import os
- os.kill(os.getpid(), 11)
- """))
- args = [str(tmpdir.join(dirname))]
- args.append('--boxed')
- config = py.test2.config._reparse(args)
- lsession = Session(config)
- allevents = getevents_runmain(lsession)
- testevents = [x for x in allevents
- if isinstance(x, repevent.ItemFinish)]
- assert len(testevents)
- #assert testevents[0].outcome.signal
-
- def test_plain(self):
- self.example_distribution(False)
-
- 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
- """))
- l = []
- def some_fun(*args):
- l.append(args)
-
- try:
- post_mortem = py.__.test2.custompdb.post_mortem
- py.__.test2.custompdb.post_mortem = some_fun
- args = [str(tmpdir.join(subdir)), '--pdb']
- config = py.test2.config._reparse(args)
- lsession = Session(config)
- #try:
- allevents = getevents_runmain(lsession)
- #except SystemExit:
- # pass
- #else:
- # py.test2.fail("Didn't raise system exit")
- failure_events = [event for event in allevents if isinstance(event,
- repevent.ImmediateFailure)]
- assert len(failure_events) == 1
- assert len(l) == 1
- finally:
- py.__.test2.custompdb.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.test2.config._reparse(args)
- assert config.option.exitfirst
- lsession = Session(config)
- allevents = getevents_runmain(lsession)
- testevents = [x for x in allevents
- if isinstance(x, repevent.ItemFinish)]
- 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.test2.config._reparse(args)
- lsession = Session(config)
-
- allevents = getevents_runmain(lsession)
- testevents = [x for x in allevents
- if isinstance(x, repevent.ItemFinish)]
- 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.test2.config._reparse(args)
- lsession = Session(config)
- allruns = []
- allevents = getevents_runmain(lsession)
- testevents = [x for x in allevents
- if isinstance(x, repevent.ItemFinish)]
- 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.test2.config._reparse(args)
- lsession = Session(config)
- allevents = getevents_runmain(lsession)
- testevents = [x for x in allevents
- if isinstance(x, repevent.ItemFinish)]
- assert len(testevents) == 0
- failedtryiter = [x for x in allevents
- if isinstance(x, repevent.FailedTryiter)]
- assert len(failedtryiter) == 1
- skippedtryiter = [x for x in allevents
- if isinstance(x, repevent.DeselectedTest)]
- 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.test2.config._reparse(args)
- lsession = Session(config)
- allevents = getevents_runmain(lsession)
- testevents = [x for x in allevents
- if isinstance(x, repevent.ItemFinish)]
- 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.test2.config._reparse(args)
- lsession = Session(config)
- allevents = getevents_runmain(lsession.main)
- testevents = [x for x in allevents
- if isinstance(x, repevent.ItemFinish)]
- assert len(testevents) == 1
- assert testevents[0].outcome.passed
- assert testevents[0].outcome.stderr == ""
- assert testevents[0].outcome.stdout == "1\n2\n3\n"
Copied: py/branch/event/py/test2/testing/test_session_xxx.py (from r51396, py/branch/event/py/test2/testing/test_session2.py)
==============================================================================
--- py/branch/event/py/test2/testing/test_session2.py (original)
+++ py/branch/event/py/test2/testing/test_session_xxx.py Wed Feb 13 15:40:19 2008
@@ -4,36 +4,23 @@
import py
from py.__.test2 import repevent
-#from py.__.test2.rsession.local import box_runner, plain_runner, apigen_runner
+import suptest
import py.__.test2.custompdb
from py.__.test2.session import Session
-def getevents_runmain(session):
- hub = session.config.hub
- allevents = []
- def appendevent(event):
- allevents.append(event)
- print event
- hub.append(appendevent)
- try:
- session.main()
- return allevents
- finally:
- hub.remove(appendevent)
-
+def check_has_fork():
+ if not hasattr(py.std.os, 'fork'):
+ py.test.skip('platform does not support os.fork')
def setup_module(mod):
- mod.tmp = py.test2.ensuretemp("lsession_module")
+ mod.tmp = py.test2.ensuretemp(mod.__name__)
-class TestSession(object):
+class TestExampleDistribution(object):
# XXX: Some tests of that should be run as well on RSession, while
# some not at all
def example_distribution(self, boxed=False):
# 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("""
+ tfile = suptest.makeuniquepyfile("""
def test_1():
pass
def test_2():
@@ -45,25 +32,17 @@
#def test_5():
# import os
# os.kill(os.getpid(), 11)
- """))
- args = [str(tmpdir.join(dirname))]
+ """)
+ args = [tfile]
if boxed:
+ check_has_fork()
args.append('--boxed')
- config = py.test2.config._reparse(args)
- lsession = Session(config)
- allevents = getevents_runmain(lsession)
- testevents = [x for x in allevents
- if isinstance(x, repevent.ItemFinish)]
- assert len(testevents)
- passevents = [i for i in testevents if i.passed]
- failevents = [i for i in testevents if i.failed]
- skippedevents = [i for i in testevents if i.skipped]
- #signalevents = [i for i in testevents if i.outcome.signal]
- assert len(passevents) == 1
- assert len(failevents) == 3
- assert len(skippedevents) == 0
+ sorter = suptest.events_from_cmdline(args)
+ passed, skipped, failed = sorter.listoutcomes()
+ assert len(passed) == 1
+ assert len(skipped) == 0
+ assert len(failed) == 3
#assert len(signalevents) == 1
-
return
# XXX
tb = failevents[0].outcome.excinfo.traceback
@@ -81,213 +60,25 @@
assert str(tb[0].source).find("execute") != -1
def test_boxed(self):
- if not hasattr(py.std.os, 'fork'):
- py.test.skip('operating system not supported')
+ check_has_fork()
self.example_distribution(True)
+ def test_plain(self):
+ self.example_distribution(False)
+
def test_box_exploding(self):
- if not hasattr(py.std.os, 'fork'):
- py.test.skip('operating system not supported')
- tmpdir = tmp
- dirname = "boxtest"
- tmpdir.ensure(dirname, "__init__.py")
- tmpdir.ensure(dirname, "test_one.py").write(py.code.Source("""
+ check_has_fork()
+ tfile = suptest.makeuniquepyfile("""
def test_5():
import os
os.kill(os.getpid(), 11)
- """))
- args = [str(tmpdir.join(dirname))]
- args.append('--boxed')
- config = py.test2.config._reparse(args)
- lsession = Session(config)
- allevents = getevents_runmain(lsession)
- testevents = [x for x in allevents
- if isinstance(x, repevent.ItemFinish)]
- assert len(testevents)
+ """)
+ sorter = suptest.events_from_cmdline([tfile, '--boxed'])
+ passed, skipped, failed = sorter.listoutcomes()
+ py.test.skip("FIX BOXING event generation")
+ assert len(passed) == len(skipped) == 0
+ assert len(failed) == 1
+ py.test.skip("implement checking for signal outcomes")
#assert testevents[0].outcome.signal
- def test_plain(self):
- self.example_distribution(False)
-
- 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
- """))
- l = []
- def some_fun(*args):
- l.append(args)
-
- try:
- post_mortem = py.__.test2.custompdb.post_mortem
- py.__.test2.custompdb.post_mortem = some_fun
- args = [str(tmpdir.join(subdir)), '--pdb']
- config = py.test2.config._reparse(args)
- lsession = Session(config)
- #try:
- allevents = getevents_runmain(lsession)
- #except SystemExit:
- # pass
- #else:
- # py.test2.fail("Didn't raise system exit")
- failure_events = [event for event in allevents if isinstance(event,
- repevent.ImmediateFailure)]
- assert len(failure_events) == 1
- assert len(l) == 1
- finally:
- py.__.test2.custompdb.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.test2.config._reparse(args)
- assert config.option.exitfirst
- lsession = Session(config)
- allevents = getevents_runmain(lsession)
- testevents = [x for x in allevents
- if isinstance(x, repevent.ItemFinish)]
- 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.test2.config._reparse(args)
- lsession = Session(config)
-
- allevents = getevents_runmain(lsession)
- testevents = [x for x in allevents
- if isinstance(x, repevent.ItemFinish)]
- 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.test2.config._reparse(args)
- lsession = Session(config)
- allruns = []
- allevents = getevents_runmain(lsession)
- testevents = [x for x in allevents
- if isinstance(x, repevent.ItemFinish)]
- 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.test2.config._reparse(args)
- lsession = Session(config)
- allevents = getevents_runmain(lsession)
- testevents = [x for x in allevents
- if isinstance(x, repevent.ItemFinish)]
- assert len(testevents) == 0
- failedtryiter = [x for x in allevents
- if isinstance(x, repevent.FailedTryiter)]
- assert len(failedtryiter) == 1
- skippedtryiter = [x for x in allevents
- if isinstance(x, repevent.DeselectedTest)]
- 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.test2.config._reparse(args)
- lsession = Session(config)
- allevents = getevents_runmain(lsession)
- testevents = [x for x in allevents
- if isinstance(x, repevent.ItemFinish)]
- 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.test2.config._reparse(args)
- lsession = Session(config)
- allevents = getevents_runmain(lsession.main)
- testevents = [x for x in allevents
- if isinstance(x, repevent.ItemFinish)]
- assert len(testevents) == 1
- assert testevents[0].outcome.passed
- assert testevents[0].outcome.stderr == ""
- assert testevents[0].outcome.stdout == "1\n2\n3\n"
More information about the py-svn
mailing list