[svn r38142] Fixed problem with indentation in the results of a doctest.
--HG-- branch : trunk
This commit is contained in:
parent
fd0cbdb95a
commit
5ea9a43dce
|
@ -14,6 +14,24 @@ option = py.test.config.addoptions("documentation check options",
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def deindent(s, sep='\n'):
|
||||||
|
leastspaces = -1
|
||||||
|
lines = s.split(sep)
|
||||||
|
for line in lines:
|
||||||
|
if not line.strip():
|
||||||
|
continue
|
||||||
|
spaces = len(line) - len(line.lstrip())
|
||||||
|
if leastspaces == -1 or spaces < leastspaces:
|
||||||
|
leastspaces = spaces
|
||||||
|
if leastspaces == -1:
|
||||||
|
return s
|
||||||
|
for i, line in py.builtin.enumerate(lines):
|
||||||
|
if not line.strip():
|
||||||
|
lines[i] = ''
|
||||||
|
else:
|
||||||
|
lines[i] = line[leastspaces:]
|
||||||
|
return sep.join(lines)
|
||||||
|
|
||||||
_initialized = False
|
_initialized = False
|
||||||
def checkdocutils():
|
def checkdocutils():
|
||||||
global _initialized
|
global _initialized
|
||||||
|
@ -73,10 +91,10 @@ class DoctestText(py.test.Item):
|
||||||
l = []
|
l = []
|
||||||
prefix = '.. >>> '
|
prefix = '.. >>> '
|
||||||
mod = py.std.types.ModuleType(self.fspath.purebasename)
|
mod = py.std.types.ModuleType(self.fspath.purebasename)
|
||||||
for line in s.split('\n'):
|
for line in deindent(s).split('\n'):
|
||||||
line = line.strip()
|
stripped = line.strip()
|
||||||
if line.startswith(prefix):
|
if stripped.startswith(prefix):
|
||||||
exec py.code.Source(line[len(prefix):]).compile() in \
|
exec py.code.Source(stripped[len(prefix):]).compile() in \
|
||||||
mod.__dict__
|
mod.__dict__
|
||||||
line = ""
|
line = ""
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -52,6 +52,15 @@ def test_doctest_basic():
|
||||||
l2 = session.getitemoutcomepairs(Skipped)
|
l2 = session.getitemoutcomepairs(Skipped)
|
||||||
assert len(l+l2) == 2
|
assert len(l+l2) == 2
|
||||||
|
|
||||||
|
def test_deindent():
|
||||||
|
from py.__.doc.conftest import deindent
|
||||||
|
assert deindent('foo') == 'foo'
|
||||||
|
assert deindent('foo\n bar') == 'foo\n bar'
|
||||||
|
assert deindent(' foo\n bar\n') == 'foo\nbar\n'
|
||||||
|
assert deindent(' foo\n\n bar\n') == 'foo\n\nbar\n'
|
||||||
|
assert deindent(' foo\n bar\n') == 'foo\n bar\n'
|
||||||
|
assert deindent(' foo\n bar\n') == ' foo\nbar\n'
|
||||||
|
|
||||||
def test_doctest_eol():
|
def test_doctest_eol():
|
||||||
# XXX get rid of the next line:
|
# XXX get rid of the next line:
|
||||||
py.magic.autopath().dirpath('conftest.py').copy(tmpdir.join('conftest.py'))
|
py.magic.autopath().dirpath('conftest.py').copy(tmpdir.join('conftest.py'))
|
||||||
|
@ -67,6 +76,21 @@ def test_doctest_eol():
|
||||||
l2 = session.getitemoutcomepairs(Skipped)
|
l2 = session.getitemoutcomepairs(Skipped)
|
||||||
assert len(l+l2) == 2
|
assert len(l+l2) == 2
|
||||||
|
|
||||||
|
def test_doctest_indentation():
|
||||||
|
# XXX get rid of the next line:
|
||||||
|
py.magic.autopath().dirpath('conftest.py').copy(tmpdir.join('conftest.py'))
|
||||||
|
|
||||||
|
txt = tmpdir.join('foo.txt')
|
||||||
|
txt.write('..\n >>> print "foo\\n bar"\n foo\n bar\n')
|
||||||
|
config = py.test.config._reparse([txt])
|
||||||
|
session = config.initsession()
|
||||||
|
session.main()
|
||||||
|
l = session.getitemoutcomepairs(Failed)
|
||||||
|
assert len(l) == 0
|
||||||
|
l = session.getitemoutcomepairs(Passed)
|
||||||
|
l2 = session.getitemoutcomepairs(Skipped)
|
||||||
|
assert len(l+l2) == 2
|
||||||
|
|
||||||
def test_js_ignore():
|
def test_js_ignore():
|
||||||
py.magic.autopath().dirpath('conftest.py').copy(tmpdir.join('conftest.py'))
|
py.magic.autopath().dirpath('conftest.py').copy(tmpdir.join('conftest.py'))
|
||||||
tmpdir.ensure('__init__.py')
|
tmpdir.ensure('__init__.py')
|
||||||
|
|
Loading…
Reference in New Issue