[py-svn] r57762 - in py/trunk/py/test: . report report/testing testing
hpk at codespeak.net
hpk at codespeak.net
Tue Sep 2 16:31:43 CEST 2008
Author: hpk
Date: Tue Sep 2 16:31:42 2008
New Revision: 57762
Removed:
py/trunk/py/test/testing/setupdata.py
py/trunk/py/test/testing/test_repevent.py
Modified:
py/trunk/py/test/pycollect.py
py/trunk/py/test/report/base.py
py/trunk/py/test/report/terminal.py
py/trunk/py/test/report/testing/test_basereporter.py
py/trunk/py/test/testing/suptest.py
py/trunk/py/test/testing/test_collect.py
py/trunk/py/test/testing/test_config.py
py/trunk/py/test/testing/test_event.py
py/trunk/py/test/testing/test_session.py
Log:
* settle on using suptest for supporting test runs
* fix a bug in getmodpath
* remove redundant functions/files
Modified: py/trunk/py/test/pycollect.py
==============================================================================
--- py/trunk/py/test/pycollect.py (original)
+++ py/trunk/py/test/pycollect.py Tue Sep 2 16:31:42 2008
@@ -43,9 +43,13 @@
for node in chain:
if isinstance(node, Instance):
continue
- if stopatmodule and isinstance(node, Module):
- break
- parts.append(node.name)
+ name = node.name
+ if isinstance(node, Module):
+ if stopatmodule:
+ break
+ assert name.endswith(".py")
+ name = name[:-3]
+ parts.append(name)
parts.reverse()
s = ".".join(parts)
return s.replace(".[", "[")
Modified: py/trunk/py/test/report/base.py
==============================================================================
--- py/trunk/py/test/report/base.py (original)
+++ py/trunk/py/test/report/base.py Tue Sep 2 16:31:42 2008
@@ -64,22 +64,6 @@
l.append((len(events),) + key)
return l
-
-def getmodpath(pycolitem):
- """ return dotted module path for the given colitem. """
- colitems = pycolitem.listchain()
- while colitems:
- colitem = colitems.pop(0)
- if isinstance(colitem, colitem.Module):
- parts = [colitem.obj.__name__]
- for colitem in colitems:
- if colitem.name[0] in '([':
- parts[-1] += colitem.name
- else:
- parts.append(colitem.name)
- return ".".join(parts)
- return colitem.name
-
def repr_pythonversion(v=None):
if v is None:
v = sys.version_info
Modified: py/trunk/py/test/report/terminal.py
==============================================================================
--- py/trunk/py/test/report/terminal.py (original)
+++ py/trunk/py/test/report/terminal.py Tue Sep 2 16:31:42 2008
@@ -2,7 +2,7 @@
import sys
from py.__.test import event
from py.__.test.report.base import BaseReporter
-from py.__.test.report.base import getrelpath, repr_pythonversion, getmodpath
+from py.__.test.report.base import getrelpath, repr_pythonversion
class TerminalReporter(BaseReporter):
def __init__(self, config, file=None, bus=None):
Modified: py/trunk/py/test/report/testing/test_basereporter.py
==============================================================================
--- py/trunk/py/test/report/testing/test_basereporter.py (original)
+++ py/trunk/py/test/report/testing/test_basereporter.py Tue Sep 2 16:31:42 2008
@@ -3,8 +3,7 @@
from py.__.test.event import EventBus
from py.__.test import event
from py.__.test.runner import OutcomeRepr
-from py.__.test.report.base import getrelpath, getmodpath, repr_pythonversion
-from py.__.test.testing import setupdata
+from py.__.test.report.base import getrelpath, repr_pythonversion
import sys
class TestBaseReporter:
@@ -73,29 +72,6 @@
assert lineno == longrepr.lineno
assert reason == longrepr.message
-def test_getmodpath_cases():
- tmpdir = py.test.ensuretemp("test_getmodpath_cases")
- pkgdir = tmpdir.join("test_getmodpath")
- pkgdir.ensure("__init__.py")
- nopkgdir = tmpdir.ensure("nopkg", dir=1)
- def checkpkg(names, expected):
- fcol = setupdata.getexamplecollector(names, tmpdir=pkgdir)
- assert getmodpath(fcol) == pkgdir.basename + "." + expected
- def checknopkg(names, expected):
- fcol = setupdata.getexamplecollector(names, tmpdir=nopkgdir)
- assert getmodpath(fcol) == expected
-
- for names in (
- 'test_mod.py test_f1 test_mod.test_f1',
- 'test_mod.py TestA () test_m1 test_mod.TestA().test_m1',
- 'test_mod.py test_g1 test_mod.test_g1',
- 'test_mod.py test_g1 [0] test_mod.test_g1[0]',
- ):
- names = names.split()
- expected = names.pop()
- yield checkpkg, names, expected
- yield checknopkg, names, expected
-
def test_repr_python_version():
py.magic.patch(sys, 'version_info', (2, 5, 1, 'final', 0))
try:
Deleted: /py/trunk/py/test/testing/setupdata.py
==============================================================================
--- /py/trunk/py/test/testing/setupdata.py Tue Sep 2 16:31:42 2008
+++ (empty file)
@@ -1,173 +0,0 @@
-import py
-
-#def setup_module(mod):
-# mod.datadir = setupdatadir()
-# mod.tmpdir = py.test.ensuretemp(mod.__name__)
-
-#def setupdatadir():
-# datadir = py.test.ensuretemp("datadir")
-# for name in namecontent:
-# getexamplefile(name)
-# return datadir
-
-def getexamplefile(basename, tmpdir=None):
- if tmpdir is None:
- tmpdir = py.test.ensuretemp("example")
- tmpdir.ensure("__init__.py")
- path = tmpdir.join(basename)
- if not path.check():
- path.write(py.code.Source(namecontent[basename]))
- print "creating testfile", path
- return path
-
-def getexamplecollector(names, tmpdir=None):
- fn = getexamplefile(names[0], tmpdir=tmpdir)
- config = py.test.config._reparse([fn.dirpath()])
- col = config.getfsnode(fn)
- return col._getitembynames(names[1:])
-
-namecontent = {
- 'syntax_error.py': "this is really not python\n",
-
- 'disabled_module.py': '''
- disabled = True
-
- def setup_module(mod):
- raise ValueError
-
- class TestClassOne:
- def test_func(self):
- raise ValueError
-
- class TestClassTwo:
- def setup_class(cls):
- raise ValueError
- def test_func(self):
- raise ValueError
- ''',
-
- 'brokenrepr.py': '''
- import py
-
- class BrokenRepr1:
- """A broken class with lots of broken methods. Let's try to make the test framework
- immune to these."""
- foo=0
- def __repr__(self):
- raise Exception("Ha Ha fooled you, I'm a broken repr().")
-
- class BrokenRepr2:
- """A broken class with lots of broken methods. Let's try to make the test framework
- immune to these."""
- foo=0
- def __repr__(self):
- raise "Ha Ha fooled you, I'm a broken repr()."
-
-
- class TestBrokenClass:
-
- def test_explicit_bad_repr(self):
- t = BrokenRepr1()
- py.test.raises(Exception, 'repr(t)')
-
- def test_implicit_bad_repr1(self):
- t = BrokenRepr1()
- assert t.foo == 1
-
- def test_implicit_bad_repr2(self):
- t = BrokenRepr2()
- assert t.foo == 1
- ''',
-
- 'failingimport.py': "import gruetzelmuetzel\n",
-
- 'test_mod.py': """
- class TestA:
- def test_m1(self):
- pass
- def test_f1():
- pass
- def test_g1():
- yield lambda x: None, 42
- """,
-
- 'file_test.py': """
- def test_one():
- assert 42 == 43
-
- class TestClass(object):
- def test_method_one(self):
- assert 42 == 43
-
- """,
-
- 'test_threepass.py': """
- def test_one():
- assert 1
-
- def test_two():
- assert 1
-
- def test_three():
- assert 1
- """,
-
- 'testspecial_importerror.py': """
-
- import asdasd
-
- """,
-
- 'disabled.py': """
- class TestDisabled:
- disabled = True
- def test_method(self):
- pass
- """,
-
- 'test_funcexamples.py': """
- import py
- import time
- def test_funcpassed():
- pass
-
- def test_funcfailed():
- raise AssertionError("hello world")
-
- def test_funcskipped():
- py.test.skip("skipped")
-
- def test_funcprint():
- print "samfing"
-
- def test_funcprinterr():
- print >>py.std.sys.stderr, "samfing"
-
- def test_funcprintfail():
- print "samfing elz"
- asddsa
-
- def test_funcexplicitfail():
- py.test.fail("3")
-
- def test_funcraisesfails():
- py.test.raises(ValueError, lambda: 123)
-
- def test_funcoptioncustom():
- assert py.test.config.getvalue("custom")
-
- def test_funchang():
- import time
- time.sleep(1000)
-
- def test_funckill15():
- import os
- os.kill(os.getpid(), 15)
- """,
-
- 'docexample.txt': """
- Aha!!!!!!
- =========
- """,
-
-}
Modified: py/trunk/py/test/testing/suptest.py
==============================================================================
--- py/trunk/py/test/testing/suptest.py (original)
+++ py/trunk/py/test/testing/suptest.py Tue Sep 2 16:31:42 2008
@@ -6,8 +6,6 @@
for analyzing events an EventSorter instance is returned for both of:
* events_from_cmdline(args): inprocess-run of cmdline invocation
* events_from_session(session): inprocess-run of given session
- * events_run_example(examplename, *args):in-process-run of
- given example test file
eventappender(config): for getting all events in a list:
"""
@@ -49,11 +47,6 @@
session.main(getcolitems(session.config))
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.config = config
@@ -217,6 +210,13 @@
runner = self.getrunner()
return runner(item, **runnerargs)
+class InlineSession(InlineCollection):
+ def parse_and_run(self, *args):
+ config = self.parseconfig(*args)
+ session = config.initsession()
+ sorter = EventSorter(config, session)
+ session.main()
+ return sorter
def popvalue(stringio):
value = stringio.getvalue().rstrip()
Modified: py/trunk/py/test/testing/test_collect.py
==============================================================================
--- py/trunk/py/test/testing/test_collect.py (original)
+++ py/trunk/py/test/testing/test_collect.py Tue Sep 2 16:31:42 2008
@@ -1,7 +1,7 @@
from __future__ import generators
import py
from py.__.test import event, outcome
-import setupdata, suptest
+from py.__.test.testing import suptest
from py.__.test.conftesthandle import Conftest
from py.__.test.collect import SetupState
from test_config import getcolitems
@@ -376,7 +376,6 @@
assert f1 == f1_b
assert not f1 != f1_b
-
class Testgenitems:
def setup_class(cls):
cls.classtemp = py.test.ensuretemp(cls.__name__)
@@ -462,6 +461,15 @@
assert items[1].name == 'test_method_one'
assert items[2].name == 'test_method_one'
+ # let's also test getmodpath here
+ assert items[0].getmodpath() == "test_one"
+ assert items[1].getmodpath() == "TestX.test_method_one"
+ assert items[2].getmodpath() == "TestY.test_method_one"
+
+ s = items[0].getmodpath(stopatmodule=False)
+ assert s == "test_example_items1.test_example.test_one"
+ print s
+
def test_collect_doctest_files_with_test_prefix(self):
self.tmp.ensure("whatever.txt")
checkfile = self.tmp.ensure("test_something.txt")
Modified: py/trunk/py/test/testing/test_config.py
==============================================================================
--- py/trunk/py/test/testing/test_config.py (original)
+++ py/trunk/py/test/testing/test_config.py Tue Sep 2 16:31:42 2008
@@ -2,7 +2,7 @@
import py
from py.__.test.config import gettopdir
-import suptest, setupdata
+from py.__.test.testing import suptest
from py.__.test import event
def getcolitems(config):
@@ -38,6 +38,8 @@
def test_config_cmdline_options_only_lowercase():
o = py.test.ensuretemp('test_config_cmdline_options_only_lowercase')
+ o = o.mkdir("onemore") # neccessary because collection of o.dirpath()
+ # could see our conftest.py
o.ensure("conftest.py").write(py.code.Source("""
import py
Option = py.test.config.Option
@@ -159,12 +161,16 @@
assert config.option.gdest == 11
assert option.gdest == 11
-class TestSessionAndOptions:
- def setup_class(cls):
- cls.tmproot = py.test.ensuretemp(cls.__name__)
-
- def setup_method(self, method):
- self.tmpdir = self.tmproot.ensure(method.__name__, dir=1)
+class TestSessionAndOptions(suptest.FileCreation):
+ def exampletestfile(self):
+ return self.makepyfile(file_test="""
+ def test_one():
+ assert 42 == 43
+
+ class TestClass(object):
+ def test_method_one(self):
+ assert 42 == 43
+ """)
def test_session_eventlog(self):
eventlog = self.tmpdir.join("test_session_eventlog")
@@ -312,7 +318,7 @@
def test_conflict_options(self):
def check_conflict_option(opts):
print "testing if options conflict:", " ".join(opts)
- path = setupdata.getexamplefile("file_test.py")
+ path = self.exampletestfile()
config = py.test.config._reparse(opts + [path])
py.test.raises((ValueError, SystemExit), """
config.initsession()
@@ -329,7 +335,7 @@
def test_implied_options(self):
def check_implied_option(opts, expr):
- path = setupdata.getexamplefile("file_test.py")
+ path = self.exampletestfile()
config = py.test.config._reparse(opts + [path])
session = config.initsession()
assert eval(expr, session.config.option.__dict__)
@@ -348,19 +354,19 @@
passed, skipped, failed = sorter.countoutcomes()
assert failed == 2
assert skipped == passed == 0
- path = setupdata.getexamplefile("file_test.py")
+ path = self.exampletestfile()
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("file_test.py")
+ path = self.exampletestfile()
config = py.test.config._reparse([path])
assert not config.option.boxed
-class TestConfigColitems:
+class TestConfigColitems(suptest.FileCreation):
def setup_class(cls):
cls.tmproot = py.test.ensuretemp(cls.__name__)
Modified: py/trunk/py/test/testing/test_event.py
==============================================================================
--- py/trunk/py/test/testing/test_event.py (original)
+++ py/trunk/py/test/testing/test_event.py Tue Sep 2 16:31:42 2008
@@ -36,9 +36,12 @@
assert l == [1]
-class TestItemTestReport(object):
+class TestItemTestReport(suptest.InlineCollection):
def test_toterminal(self):
- sorter = suptest.events_run_example("file_test.py")
+ sorter = suptest.events_from_runsource("""
+ def test_one():
+ assert 42 == 43
+ """)
reports = sorter.get(event.ItemTestReport)
ev = reports[0]
assert ev.failed
@@ -54,5 +57,5 @@
##assert ev.repr_run.find("AssertionError") != -1
filepath = ev.colitem.fspath
#filepath , modpath = ev.itemrepr_path
- assert str(filepath).endswith("file_test.py")
+ assert str(filepath).endswith(".py")
#assert modpath.endswith("file_test.test_one")
Deleted: /py/trunk/py/test/testing/test_repevent.py
==============================================================================
--- /py/trunk/py/test/testing/test_repevent.py Tue Sep 2 16:31:42 2008
+++ (empty file)
@@ -1,30 +0,0 @@
-
-from py.__.test import event
-import setupdata, suptest
-from py.__.code.testing.test_excinfo import TWMock
-
-
-
-class TestItemTestReport(object):
-
- def test_toterminal(self):
- sorter = suptest.events_run_example("file_test.py")
- reports = sorter.get(event.ItemTestReport)
- ev = reports[0]
- assert ev.failed
- twmock = TWMock()
- ev.toterminal(twmock)
- assert twmock.lines
- twmock = TWMock()
- ev.outcome.longrepr = "hello"
- ev.toterminal(twmock)
- assert twmock.lines[0] == "hello"
- assert not twmock.lines[1:]
-
- ##assert ev.repr_run.find("AssertionError") != -1
- filepath = ev.colitem.fspath
- #filepath , modpath = ev.itemrepr_path
- assert str(filepath).endswith("file_test.py")
- #assert modpath.endswith("file_test.test_one")
-
-
Modified: py/trunk/py/test/testing/test_session.py
==============================================================================
--- py/trunk/py/test/testing/test_session.py (original)
+++ py/trunk/py/test/testing/test_session.py Tue Sep 2 16:31:42 2008
@@ -1,15 +1,20 @@
import py
from py.__.test import event
-import suptest, setupdata
+from py.__.test.testing import suptest
def setup_module(mod):
mod.tmpdir = py.test.ensuretemp(mod.__name__)
-class TestKeywordSelection:
+class TestKeywordSelection(suptest.InlineSession):
def test_select_simple(self):
+ file_test = self.makepyfile(file_test="""
+ def test_one(): assert 0
+ class TestClass(object):
+ def test_method_one(self):
+ assert 42 == 43
+ """)
def check(keyword, name):
- sorter = suptest.events_run_example("file_test.py",
- '-s', '-k', keyword)
+ sorter = self.parse_and_run("-s", "-k", keyword, file_test)
passed, skipped, failed = sorter.listoutcomes()
assert len(failed) == 1
assert failed[0].colitem.name == name
@@ -20,7 +25,7 @@
yield check, 'TestClass.test', 'test_method_one'
def test_select_extra_keywords(self):
- o = tmpdir.ensure('test_select_extra_keywords', dir=1)
+ o = self.tmpdir
tfile = o.join('test_select.py').write(py.code.Source("""
def test_1():
pass
@@ -46,8 +51,12 @@
assert dlist[0].items[0].name == 'test_1'
def test_select_starton(self):
- sorter = suptest.events_run_example("test_threepass.py",
- '-k', "test_two:")
+ threepass = self.makepyfile(test_threepass="""
+ def test_one(): assert 1
+ def test_two(): assert 1
+ def test_three(): assert 1
+ """)
+ sorter = self.parse_and_run("-k", "test_two:", threepass)
passed, skipped, failed = sorter.listoutcomes()
assert len(passed) == 2
assert not failed
More information about the pytest-commit
mailing list