[py-svn] r37774 - py/trunk/py/doc
guido at codespeak.net
guido at codespeak.net
Thu Feb 1 23:30:53 CET 2007
Author: guido
Date: Thu Feb 1 23:30:51 2007
New Revision: 37774
Modified:
py/trunk/py/doc/conftest.py
py/trunk/py/doc/test_conftest.py
Log:
Adding support for checking generated API links (for link roles).
Modified: py/trunk/py/doc/conftest.py
==============================================================================
--- py/trunk/py/doc/conftest.py (original)
+++ py/trunk/py/doc/conftest.py Thu Feb 1 23:30:51 2007
@@ -15,7 +15,7 @@
)
_initialized = False
-def checkdocutils():
+def checkdocutils(path):
global _initialized
try:
import docutils
@@ -23,8 +23,8 @@
py.test.skip("docutils not importable")
if not _initialized:
from py.__.rest import directive
- directive.register_linkrole('api', resolve_linkrole)
- directive.register_linkrole('source', resolve_linkrole)
+ directive.register_linkrole('api', get_resolve_linkrole(path))
+ directive.register_linkrole('source', get_resolve_linkrole(path))
_initialized = True
def restcheck(path):
@@ -32,7 +32,7 @@
if hasattr(path, 'localpath'):
localpath = path.localpath
_checkskip(localpath)
- checkdocutils()
+ checkdocutils(localpath)
import docutils.utils
try:
@@ -234,24 +234,34 @@
return self.ReSTChecker(p, parent=self)
Directory = DocDirectory
-def resolve_linkrole(name, text):
- if name == 'api':
- if text == 'py':
- return 'py', '../../apigen/api/index.html'
- assert text.startswith('py.'), (
- 'api link "%s" does not point to the py package') % (text,)
- dotted_name = text
- if dotted_name.find('(') > -1:
- dotted_name = dotted_name[:text.find('(')]
- dotted_name = '.'.join(dotted_name.split('.')[1:]) # remove pkg root
- return text, '../../apigen/api/%s.html' % (dotted_name,)
- elif name == 'source':
- assert text.startswith('py/'), ('source link "%s" does not point '
- 'to the py package') % (text,)
- relpath = '/'.join(text.split('/')[1:])
- if relpath.endswith('/') or not relpath:
- relpath += 'index.html'
- else:
- relpath += '.html'
- return text, '../../apigen/source/%s' % (relpath,)
-
+def get_resolve_linkrole(checkpath=None):
+ # XXX yuck...
+ def resolve_linkrole(name, text):
+ if name == 'api':
+ if text == 'py':
+ ret = ('py', '../../apigen/api/index.html')
+ else:
+ assert text.startswith('py.'), (
+ 'api link "%s" does not point to the py package') % (text,)
+ dotted_name = text
+ if dotted_name.find('(') > -1:
+ dotted_name = dotted_name[:text.find('(')]
+ # remove pkg root
+ dotted_name = '.'.join(dotted_name.split('.')[1:])
+ ret = (text, '../../apigen/api/%s.html' % (dotted_name,))
+ elif name == 'source':
+ assert text.startswith('py/'), ('source link "%s" does not point '
+ 'to the py package') % (text,)
+ relpath = '/'.join(text.split('/')[1:])
+ if relpath.endswith('/') or not relpath:
+ relpath += 'index.html'
+ else:
+ relpath += '.html'
+ ret = (text, '../../apigen/source/%s' % (relpath,))
+ if checkpath:
+ if not py.path.local(checkpath).join(ret[1]).check():
+ raise AssertionError(
+ '%s linkrole: %s points to non-existant path %s' % (
+ name, ret[0], ret[1]))
+ return ret
+ return resolve_linkrole
Modified: py/trunk/py/doc/test_conftest.py
==============================================================================
--- py/trunk/py/doc/test_conftest.py (original)
+++ py/trunk/py/doc/test_conftest.py Thu Feb 1 23:30:51 2007
@@ -70,7 +70,8 @@
assert len(l+l2) == 3
def test_resolve_linkrole():
- from py.__.doc.conftest import resolve_linkrole
+ from py.__.doc.conftest import get_resolve_linkrole
+ resolve_linkrole = get_resolve_linkrole(None)
assert resolve_linkrole('api', 'py.foo.bar') == (
'py.foo.bar', '../../apigen/api/foo.bar.html')
assert resolve_linkrole('api', 'py.foo.bar()') == (
@@ -86,3 +87,14 @@
'py/', '../../apigen/source/index.html')
py.test.raises(AssertionError, 'resolve_linkrole("source", "/foo/bar/")')
+def test_resolve_linkrole_relpath():
+ from py.__.doc.conftest import get_resolve_linkrole
+ pypath = tmpdir.join('py')
+ docpath = pypath.join('doc')
+ apipath = tmpdir.join('apigen/api')
+ apipath.ensure('foo.bar.html')
+ resolve_linkrole = get_resolve_linkrole(docpath)
+
+ assert resolve_linkrole('api', 'py.foo.bar')
+ py.test.raises(AssertionError, "resolve_linkrole('api', 'py.foo.baz')")
+
More information about the py-svn
mailing list