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])
call(*args)
call("virtualenv", BUILDNAME, '--no-site-packages')
call("virtualenv", os.path.abspath(BUILDNAME), '--no-site-packages')
bincall("python", "setup.py", "develop", "-q")
bincall("pip", "install", "-r", "testing/pip-reqs1.txt",
"-q", "--download-cache=download")
bincall("py.test", "-p", "xmlresult", "--xmlresult=junit.xml",
"--report=skipped", "--runslowtest")
bincall("py.test", "--ignore", BUILDNAME,
"-p", "xmlresult", "--xmlresult=junit.xml",
"--report=skipped", "--runslowtest", *sys.argv[1:])

View File

@ -2,6 +2,4 @@
import py
#py.test.importorskip("pygments")
pytest_plugins = ['pytest_restdoc']
rsyncdirs = ['.']
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 sys, os
import re
import inspect
from py.impl.test.config import Config as pytestConfig
from py.plugin import hookspec
@ -26,6 +27,7 @@ def pytest_funcarg__reportrecorder(request):
request.addfinalizer(lambda: reprec.comregistry.unregister(reprec))
return reprec
rex_outcome = re.compile("(\d+) (\w+)")
class RunResult:
def __init__(self, ret, outlines, errlines):
self.ret = ret
@ -33,6 +35,15 @@ class RunResult:
self.errlines = errlines
self.stdout = LineMatcher(outlines)
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:
def __init__(self, request):
@ -245,17 +256,6 @@ class TmpTestdir:
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):
if not hasattr(py.std, 'subprocess'):
py.test.skip("no subprocess module")
@ -267,7 +267,6 @@ class TmpTestdir:
return py.std.subprocess.Popen(cmdargs, stdout=stdout, stderr=stderr, **kw)
def run(self, *cmdargs):
self.prepare()
old = self.tmpdir.chdir()
#print "chdir", self.tmpdir
try:
@ -316,6 +315,9 @@ class TmpTestdir:
p = py.path.local.make_numbered_dir(prefix="runpytest-",
keep=None, rootdir=self.tmpdir)
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)
def spawn_pytest(self, string, expect_timeout=10.0):

View File

@ -1,3 +1,4 @@
docutils
pexpect
figleaf
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\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:
def pytest_funcarg__testdir(self, request):
testdir = request.getfuncargvalue("testdir")
testdir.plugins.append("restdoc")
assert request.module.__name__ == __name__
testdir.makepyfile(confrest=
"from py.plugin.pytest_restdoc import Project")
# we scope our confrest file so that it doesn't
# conflict with another global confrest.py
testdir.makepyfile(__init__="")
for p in testdir.plugins:
if p == globals():
break
else:
testdir.plugins.append(globals())
return testdir
def test_doctest_extra_exec(self, testdir):
@ -63,9 +26,8 @@ class TestDoctest:
.. >>> raise ValueError
>>> None
""")
reprec = testdir.inline_run(xtxt)
passed, skipped, failed = reprec.countoutcomes()
assert failed == 1
result = testdir.runpytest(xtxt)
result.stdout.fnmatch_lines(['*1 fail*'])
def test_doctest_basic(self, testdir):
xtxt = testdir.maketxtfile(x="""
@ -86,25 +48,21 @@ class TestDoctest:
end
""")
reprec = testdir.inline_run(xtxt)
passed, skipped, failed = reprec.countoutcomes()
assert failed == 0
assert passed + skipped == 2
result = testdir.runpytest(xtxt)
result.stdout.fnmatch_lines([
"*2 passed*"
])
def test_doctest_eol(self, testdir):
ytxt = testdir.maketxtfile(y=".. >>> 1 + 1\r\n 2\r\n\r\n")
reprec = testdir.inline_run(ytxt)
passed, skipped, failed = reprec.countoutcomes()
assert failed == 0
assert passed + skipped == 2
result = testdir.runpytest(ytxt)
result.stdout.fnmatch_lines(["*2 passed*"])
def test_doctest_indentation(self, testdir):
footxt = testdir.maketxtfile(foo=
'..\n >>> print ("foo\\n bar")\n foo\n bar\n')
reprec = testdir.inline_run(footxt)
passed, skipped, failed = reprec.countoutcomes()
assert failed == 0
assert skipped + passed == 2
result = testdir.runpytest(footxt)
result.stdout.fnmatch_lines(["*2 passed*"])
def test_js_ignore(self, testdir):
xtxt = testdir.maketxtfile(xtxt="""
@ -112,20 +70,14 @@ class TestDoctest:
.. _`blah`: javascript:some_function()
""")
reprec = testdir.inline_run(xtxt)
passed, skipped, failed = reprec.countoutcomes()
assert failed == 0
assert skipped + passed == 3
result = testdir.runpytest(xtxt)
result.stdout.fnmatch_lines(["*3 passed*"])
def test_pytest_doctest_prepare_content(self, testdir):
l = []
class MyPlugin:
def pytest_doctest_prepare_content(self, content):
l.append(content)
testdir.makeconftest("""
def pytest_doctest_prepare_content(content):
return content.replace("False", "True")
testdir.plugins.append(MyPlugin())
""")
xtxt = testdir.maketxtfile(x="""
hello:
@ -133,9 +85,8 @@ class TestDoctest:
False
""")
reprec = testdir.inline_run(xtxt)
assert len(l) == 1
passed, skipped, failed = reprec.countoutcomes()
assert passed >= 1
assert not failed
assert skipped <= 1
result = testdir.runpytest(xtxt)
outcomes = result.parseoutcomes()
assert outcomes['passed'] >= 1
assert 'failed' not in outcomes
assert 'skipped' not in outcomes