fixing and cleaning up some tests

--HG--
branch : trunk
This commit is contained in:
holger krekel 2009-12-25 00:24:58 +01:00
parent 6d46efa87a
commit 88e61467f1
5 changed files with 40 additions and 87 deletions

View File

@ -13,9 +13,10 @@ def bincall(*args):
args[0] = os.path.join(BIN, args[0]) args[0] = os.path.join(BIN, args[0])
call(*args) call(*args)
call("virtualenv", BUILDNAME, '--no-site-packages') call("virtualenv", os.path.abspath(BUILDNAME), '--no-site-packages')
bincall("python", "setup.py", "develop", "-q") bincall("python", "setup.py", "develop", "-q")
bincall("pip", "install", "-r", "testing/pip-reqs1.txt", bincall("pip", "install", "-r", "testing/pip-reqs1.txt",
"-q", "--download-cache=download") "-q", "--download-cache=download")
bincall("py.test", "-p", "xmlresult", "--xmlresult=junit.xml", bincall("py.test", "--ignore", BUILDNAME,
"--report=skipped", "--runslowtest") "-p", "xmlresult", "--xmlresult=junit.xml",
"--report=skipped", "--runslowtest", *sys.argv[1:])

View File

@ -2,6 +2,4 @@
import py import py
#py.test.importorskip("pygments") #py.test.importorskip("pygments")
pytest_plugins = ['pytest_restdoc'] pytest_plugins = ['pytest_restdoc']
rsyncdirs = ['.']
collect_ignore = ['test/attic.txt'] collect_ignore = ['test/attic.txt']

View File

@ -4,6 +4,7 @@ funcargs and support code for testing py.test's own functionality.
import py import py
import sys, os import sys, os
import re
import inspect import inspect
from py.impl.test.config import Config as pytestConfig from py.impl.test.config import Config as pytestConfig
from py.plugin import hookspec from py.plugin import hookspec
@ -26,6 +27,7 @@ def pytest_funcarg__reportrecorder(request):
request.addfinalizer(lambda: reprec.comregistry.unregister(reprec)) request.addfinalizer(lambda: reprec.comregistry.unregister(reprec))
return reprec return reprec
rex_outcome = re.compile("(\d+) (\w+)")
class RunResult: class RunResult:
def __init__(self, ret, outlines, errlines): def __init__(self, ret, outlines, errlines):
self.ret = ret self.ret = ret
@ -33,6 +35,15 @@ class RunResult:
self.errlines = errlines self.errlines = errlines
self.stdout = LineMatcher(outlines) self.stdout = LineMatcher(outlines)
self.stderr = LineMatcher(errlines) self.stderr = LineMatcher(errlines)
def parseoutcomes(self):
for line in reversed(self.outlines):
if 'seconds' in line:
outcomes = rex_outcome.findall(line)
if outcomes:
d = {}
for num, cat in outcomes:
d[cat] = int(num)
return d
class TmpTestdir: class TmpTestdir:
def __init__(self, request): def __init__(self, request):
@ -245,17 +256,6 @@ class TmpTestdir:
return self.config.getfsnode(path) return self.config.getfsnode(path)
def prepare(self):
p = self.tmpdir.join("conftest.py")
if not p.check():
plugins = [x for x in self.plugins if isinstance(x, str)]
if not plugins:
return
p.write("import py ; pytest_plugins = %r" % plugins)
else:
if self.plugins:
print ("warning, ignoring reusing existing %s" % p)
def popen(self, cmdargs, stdout, stderr, **kw): def popen(self, cmdargs, stdout, stderr, **kw):
if not hasattr(py.std, 'subprocess'): if not hasattr(py.std, 'subprocess'):
py.test.skip("no subprocess module") py.test.skip("no subprocess module")
@ -267,7 +267,6 @@ class TmpTestdir:
return py.std.subprocess.Popen(cmdargs, stdout=stdout, stderr=stderr, **kw) return py.std.subprocess.Popen(cmdargs, stdout=stdout, stderr=stderr, **kw)
def run(self, *cmdargs): def run(self, *cmdargs):
self.prepare()
old = self.tmpdir.chdir() old = self.tmpdir.chdir()
#print "chdir", self.tmpdir #print "chdir", self.tmpdir
try: try:
@ -316,6 +315,9 @@ class TmpTestdir:
p = py.path.local.make_numbered_dir(prefix="runpytest-", p = py.path.local.make_numbered_dir(prefix="runpytest-",
keep=None, rootdir=self.tmpdir) keep=None, rootdir=self.tmpdir)
args = ('--basetemp=%s' % p, ) + args args = ('--basetemp=%s' % p, ) + args
plugins = [x for x in self.plugins if isinstance(x, str)]
if plugins:
args = ('-p', plugins[0]) + args
return self.runpybin("py.test", *args) return self.runpybin("py.test", *args)
def spawn_pytest(self, string, expect_timeout=10.0): def spawn_pytest(self, string, expect_timeout=10.0):

View File

@ -1,3 +1,4 @@
docutils docutils
pexpect pexpect
figleaf
hg+http://bitbucket.org/hpk42/execnet#egg=execnet hg+http://bitbucket.org/hpk42/execnet#egg=execnet

View File

@ -8,53 +8,16 @@ def test_deindent():
assert deindent(' foo\n bar\n') == 'foo\n bar\n' assert deindent(' foo\n bar\n') == 'foo\n bar\n'
assert deindent(' foo\n bar\n') == ' foo\nbar\n' assert deindent(' foo\n bar\n') == ' foo\nbar\n'
class TestApigenLinkRole:
disabled = True
# these tests are moved here from the former py/doc/conftest.py
def test_resolve_linkrole(self):
from py.impl.doc.conftest import get_apigen_relpath
apigen_relpath = get_apigen_relpath()
assert resolve_linkrole('api', 'py.foo.bar', False) == (
'py.foo.bar', apigen_relpath + 'api/foo.bar.html')
assert resolve_linkrole('api', 'py.foo.bar()', False) == (
'py.foo.bar()', apigen_relpath + 'api/foo.bar.html')
assert resolve_linkrole('api', 'py', False) == (
'py', apigen_relpath + 'api/index.html')
py.test.raises(AssertionError, 'resolve_linkrole("api", "foo.bar")')
assert resolve_linkrole('source', 'py/foo/bar.py', False) == (
'py/foo/bar.py', apigen_relpath + 'source/foo/bar.py.html')
assert resolve_linkrole('source', 'py/foo/', False) == (
'py/foo/', apigen_relpath + 'source/foo/index.html')
assert resolve_linkrole('source', 'py/', False) == (
'py/', apigen_relpath + 'source/index.html')
py.test.raises(AssertionError, 'resolve_linkrole("source", "/foo/bar/")')
def test_resolve_linkrole_check_api(self):
assert resolve_linkrole('api', 'py.test.ensuretemp')
py.test.raises(AssertionError, "resolve_linkrole('api', 'py.foo.baz')")
def test_resolve_linkrole_check_source(self):
assert resolve_linkrole('source', 'py/path/common.py')
py.test.raises(AssertionError,
"resolve_linkrole('source', 'py/foo/bar.py')")
class TestDoctest: class TestDoctest:
def pytest_funcarg__testdir(self, request): def pytest_funcarg__testdir(self, request):
testdir = request.getfuncargvalue("testdir") testdir = request.getfuncargvalue("testdir")
testdir.plugins.append("restdoc")
assert request.module.__name__ == __name__ assert request.module.__name__ == __name__
testdir.makepyfile(confrest= testdir.makepyfile(confrest=
"from py.plugin.pytest_restdoc import Project") "from py.plugin.pytest_restdoc import Project")
# we scope our confrest file so that it doesn't # we scope our confrest file so that it doesn't
# conflict with another global confrest.py # conflict with another global confrest.py
testdir.makepyfile(__init__="") testdir.makepyfile(__init__="")
for p in testdir.plugins:
if p == globals():
break
else:
testdir.plugins.append(globals())
return testdir return testdir
def test_doctest_extra_exec(self, testdir): def test_doctest_extra_exec(self, testdir):
@ -63,9 +26,8 @@ class TestDoctest:
.. >>> raise ValueError .. >>> raise ValueError
>>> None >>> None
""") """)
reprec = testdir.inline_run(xtxt) result = testdir.runpytest(xtxt)
passed, skipped, failed = reprec.countoutcomes() result.stdout.fnmatch_lines(['*1 fail*'])
assert failed == 1
def test_doctest_basic(self, testdir): def test_doctest_basic(self, testdir):
xtxt = testdir.maketxtfile(x=""" xtxt = testdir.maketxtfile(x="""
@ -86,25 +48,21 @@ class TestDoctest:
end end
""") """)
reprec = testdir.inline_run(xtxt) result = testdir.runpytest(xtxt)
passed, skipped, failed = reprec.countoutcomes() result.stdout.fnmatch_lines([
assert failed == 0 "*2 passed*"
assert passed + skipped == 2 ])
def test_doctest_eol(self, testdir): def test_doctest_eol(self, testdir):
ytxt = testdir.maketxtfile(y=".. >>> 1 + 1\r\n 2\r\n\r\n") ytxt = testdir.maketxtfile(y=".. >>> 1 + 1\r\n 2\r\n\r\n")
reprec = testdir.inline_run(ytxt) result = testdir.runpytest(ytxt)
passed, skipped, failed = reprec.countoutcomes() result.stdout.fnmatch_lines(["*2 passed*"])
assert failed == 0
assert passed + skipped == 2
def test_doctest_indentation(self, testdir): def test_doctest_indentation(self, testdir):
footxt = testdir.maketxtfile(foo= footxt = testdir.maketxtfile(foo=
'..\n >>> print ("foo\\n bar")\n foo\n bar\n') '..\n >>> print ("foo\\n bar")\n foo\n bar\n')
reprec = testdir.inline_run(footxt) result = testdir.runpytest(footxt)
passed, skipped, failed = reprec.countoutcomes() result.stdout.fnmatch_lines(["*2 passed*"])
assert failed == 0
assert skipped + passed == 2
def test_js_ignore(self, testdir): def test_js_ignore(self, testdir):
xtxt = testdir.maketxtfile(xtxt=""" xtxt = testdir.maketxtfile(xtxt="""
@ -112,20 +70,14 @@ class TestDoctest:
.. _`blah`: javascript:some_function() .. _`blah`: javascript:some_function()
""") """)
reprec = testdir.inline_run(xtxt) result = testdir.runpytest(xtxt)
passed, skipped, failed = reprec.countoutcomes() result.stdout.fnmatch_lines(["*3 passed*"])
assert failed == 0
assert skipped + passed == 3
def test_pytest_doctest_prepare_content(self, testdir): def test_pytest_doctest_prepare_content(self, testdir):
l = [] testdir.makeconftest("""
class MyPlugin: def pytest_doctest_prepare_content(content):
def pytest_doctest_prepare_content(self, content):
l.append(content)
return content.replace("False", "True") return content.replace("False", "True")
""")
testdir.plugins.append(MyPlugin())
xtxt = testdir.maketxtfile(x=""" xtxt = testdir.maketxtfile(x="""
hello: hello:
@ -133,9 +85,8 @@ class TestDoctest:
False False
""") """)
reprec = testdir.inline_run(xtxt) result = testdir.runpytest(xtxt)
assert len(l) == 1 outcomes = result.parseoutcomes()
passed, skipped, failed = reprec.countoutcomes() assert outcomes['passed'] >= 1
assert passed >= 1 assert 'failed' not in outcomes
assert not failed assert 'skipped' not in outcomes
assert skipped <= 1