116 lines
4.0 KiB
Python
116 lines
4.0 KiB
Python
|
|
import py
|
|
from py.__.test import event
|
|
from py.__.test.testing import suptest
|
|
from py.__.doc import conftest as doc_conftest
|
|
|
|
|
|
class TestDoctest(suptest.InlineCollection):
|
|
def setup_method(self, method):
|
|
super(TestDoctest, self).setup_method(method)
|
|
p = py.path.local(doc_conftest.__file__)
|
|
if p.ext == ".pyc":
|
|
p = p.new(ext=".py")
|
|
p.copy(self.tmpdir.join("conftest.py"))
|
|
|
|
def test_doctest_extra_exec(self):
|
|
xtxt = self.maketxtfile(x="""
|
|
hello::
|
|
.. >>> raise ValueError
|
|
>>> None
|
|
""")
|
|
sorter = suptest.events_from_cmdline([xtxt])
|
|
passed, skipped, failed = sorter.countoutcomes()
|
|
assert failed == 1
|
|
|
|
def test_doctest_basic(self):
|
|
xtxt = self.maketxtfile(x="""
|
|
..
|
|
>>> from os.path import abspath
|
|
|
|
hello world
|
|
|
|
>>> assert abspath
|
|
>>> i=3
|
|
>>> print i
|
|
3
|
|
|
|
yes yes
|
|
|
|
>>> i
|
|
3
|
|
|
|
end
|
|
""")
|
|
sorter = suptest.events_from_cmdline([xtxt])
|
|
passed, skipped, failed = sorter.countoutcomes()
|
|
assert failed == 0
|
|
assert passed + skipped == 2
|
|
|
|
def test_doctest_eol(self):
|
|
ytxt = self.maketxtfile(y=".. >>> 1 + 1\r\n 2\r\n\r\n")
|
|
sorter = suptest.events_from_cmdline([ytxt])
|
|
passed, skipped, failed = sorter.countoutcomes()
|
|
assert failed == 0
|
|
assert passed + skipped == 2
|
|
|
|
def test_doctest_indentation(self):
|
|
footxt = self.maketxtfile(foo=
|
|
'..\n >>> print "foo\\n bar"\n foo\n bar\n')
|
|
sorter = suptest.events_from_cmdline([footxt])
|
|
passed, skipped, failed = sorter.countoutcomes()
|
|
assert failed == 0
|
|
assert skipped + passed == 2
|
|
|
|
def test_js_ignore(self):
|
|
xtxt = self.maketxtfile(xtxt="""
|
|
`blah`_
|
|
|
|
.. _`blah`: javascript:some_function()
|
|
""")
|
|
sorter = suptest.events_from_cmdline([xtxt])
|
|
passed, skipped, failed = sorter.countoutcomes()
|
|
assert failed == 0
|
|
assert skipped + passed == 3
|
|
|
|
def test_deindent():
|
|
deindent = doc_conftest.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_resolve_linkrole():
|
|
from py.__.doc.conftest import get_apigen_relpath
|
|
apigen_relpath = get_apigen_relpath()
|
|
from py.__.doc.conftest import resolve_linkrole
|
|
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():
|
|
from py.__.doc.conftest import resolve_linkrole
|
|
assert resolve_linkrole('api', 'py.test.ensuretemp')
|
|
py.test.raises(AssertionError, "resolve_linkrole('api', 'py.foo.baz')")
|
|
|
|
def test_resolve_linkrole_check_source():
|
|
from py.__.doc.conftest import resolve_linkrole
|
|
assert resolve_linkrole('source', 'py/path/common.py')
|
|
py.test.raises(AssertionError,
|
|
"resolve_linkrole('source', 'py/foo/bar.py')")
|
|
|