mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Split viewcode and linkcode tests out of main test root.
This commit is contained in:
@@ -5,8 +5,7 @@ import sys, os
|
|||||||
sys.path.append(os.path.abspath('.'))
|
sys.path.append(os.path.abspath('.'))
|
||||||
|
|
||||||
extensions = ['sphinx.ext.autodoc', 'sphinx.ext.jsmath', 'sphinx.ext.todo',
|
extensions = ['sphinx.ext.autodoc', 'sphinx.ext.jsmath', 'sphinx.ext.todo',
|
||||||
'sphinx.ext.coverage', 'sphinx.ext.doctest', 'sphinx.ext.extlinks',
|
'sphinx.ext.coverage', 'sphinx.ext.extlinks', 'ext']
|
||||||
'sphinx.ext.viewcode', 'ext']
|
|
||||||
|
|
||||||
jsmath_path = 'dummy.js'
|
jsmath_path = 'dummy.js'
|
||||||
|
|
||||||
@@ -43,15 +42,15 @@ html_context = {'hckey': 'hcval', 'hckey_co': 'wrong_hcval_co'}
|
|||||||
htmlhelp_basename = 'SphinxTestsdoc'
|
htmlhelp_basename = 'SphinxTestsdoc'
|
||||||
|
|
||||||
latex_documents = [
|
latex_documents = [
|
||||||
('contents', 'SphinxTests.tex', 'Sphinx Tests Documentation',
|
('contents', 'SphinxTests.tex', 'Sphinx Tests Documentation',
|
||||||
'Georg Brandl \\and someone else', 'manual'),
|
'Georg Brandl \\and someone else', 'manual'),
|
||||||
]
|
]
|
||||||
|
|
||||||
latex_additional_files = ['svgimg.svg']
|
latex_additional_files = ['svgimg.svg']
|
||||||
|
|
||||||
texinfo_documents = [
|
texinfo_documents = [
|
||||||
('contents', 'SphinxTests', 'Sphinx Tests',
|
('contents', 'SphinxTests', 'Sphinx Tests',
|
||||||
'Georg Brandl \\and someone else', 'Sphinx Testing', 'Miscellaneous'),
|
'Georg Brandl \\and someone else', 'Sphinx Testing', 'Miscellaneous'),
|
||||||
]
|
]
|
||||||
|
|
||||||
man_pages = [
|
man_pages = [
|
||||||
@@ -77,35 +76,13 @@ autodoc_mock_imports = [
|
|||||||
# modify tags from conf.py
|
# modify tags from conf.py
|
||||||
tags.add('confpytag')
|
tags.add('confpytag')
|
||||||
|
|
||||||
# -- linkcode
|
|
||||||
|
|
||||||
if 'test_linkcode' in tags:
|
|
||||||
import glob
|
|
||||||
|
|
||||||
extensions.remove('sphinx.ext.viewcode')
|
|
||||||
extensions.append('sphinx.ext.linkcode')
|
|
||||||
|
|
||||||
exclude_patterns.extend(glob.glob('*.txt') + glob.glob('*/*.txt'))
|
|
||||||
exclude_patterns.remove('contents.txt')
|
|
||||||
exclude_patterns.remove('objects.txt')
|
|
||||||
|
|
||||||
def linkcode_resolve(domain, info):
|
|
||||||
if domain == 'py':
|
|
||||||
fn = info['module'].replace('.', '/')
|
|
||||||
return "http://foobar/source/%s.py" % fn
|
|
||||||
elif domain == "js":
|
|
||||||
return "http://foobar/js/" + info['fullname']
|
|
||||||
elif domain in ("c", "cpp"):
|
|
||||||
return "http://foobar/%s/%s" % (domain, "".join(info['names']))
|
|
||||||
else:
|
|
||||||
raise AssertionError()
|
|
||||||
|
|
||||||
# -- extension API
|
# -- extension API
|
||||||
|
|
||||||
from docutils import nodes
|
from docutils import nodes
|
||||||
from sphinx import addnodes
|
from sphinx import addnodes
|
||||||
from sphinx.util.compat import Directive
|
from sphinx.util.compat import Directive
|
||||||
|
|
||||||
|
|
||||||
def userdesc_parse(env, sig, signode):
|
def userdesc_parse(env, sig, signode):
|
||||||
x, y = sig.split(':')
|
x, y = sig.split(':')
|
||||||
signode += addnodes.desc_name(x, x)
|
signode += addnodes.desc_name(x, x)
|
||||||
@@ -113,15 +90,19 @@ def userdesc_parse(env, sig, signode):
|
|||||||
signode[-1] += addnodes.desc_parameter(y, y)
|
signode[-1] += addnodes.desc_parameter(y, y)
|
||||||
return x
|
return x
|
||||||
|
|
||||||
|
|
||||||
def functional_directive(name, arguments, options, content, lineno,
|
def functional_directive(name, arguments, options, content, lineno,
|
||||||
content_offset, block_text, state, state_machine):
|
content_offset, block_text, state, state_machine):
|
||||||
return [nodes.strong(text='from function: %s' % options['opt'])]
|
return [nodes.strong(text='from function: %s' % options['opt'])]
|
||||||
|
|
||||||
|
|
||||||
class ClassDirective(Directive):
|
class ClassDirective(Directive):
|
||||||
option_spec = {'opt': lambda x: x}
|
option_spec = {'opt': lambda x: x}
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
return [nodes.strong(text='from class: %s' % self.options['opt'])]
|
return [nodes.strong(text='from class: %s' % self.options['opt'])]
|
||||||
|
|
||||||
|
|
||||||
def setup(app):
|
def setup(app):
|
||||||
app.add_config_value('value_from_conf_py', 42, False)
|
app.add_config_value('value_from_conf_py', 42, False)
|
||||||
app.add_directive('funcdir', functional_directive, opt=lambda x: x)
|
app.add_directive('funcdir', functional_directive, opt=lambda x: x)
|
||||||
|
@@ -1,8 +1,24 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
|
|
||||||
sys.path.insert(0, os.path.abspath('.'))
|
sys.path.insert(0, os.path.abspath('.'))
|
||||||
extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode']
|
extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode']
|
||||||
master_doc = 'index'
|
master_doc = 'index'
|
||||||
|
|
||||||
|
|
||||||
|
if 'test_linkcode' in tags:
|
||||||
|
extensions.remove('sphinx.ext.viewcode')
|
||||||
|
extensions.append('sphinx.ext.linkcode')
|
||||||
|
|
||||||
|
def linkcode_resolve(domain, info):
|
||||||
|
if domain == 'py':
|
||||||
|
fn = info['module'].replace('.', '/')
|
||||||
|
return "http://foobar/source/%s.py" % fn
|
||||||
|
elif domain == "js":
|
||||||
|
return "http://foobar/js/" + info['fullname']
|
||||||
|
elif domain in ("c", "cpp"):
|
||||||
|
return "http://foobar/%s/%s" % (domain, "".join(info['names']))
|
||||||
|
else:
|
||||||
|
raise AssertionError()
|
||||||
|
@@ -1,29 +1,34 @@
|
|||||||
viewcode
|
viewcode
|
||||||
========
|
========
|
||||||
|
|
||||||
.. py:module:: spam
|
.. py:module:: spam
|
||||||
|
|
||||||
.. autofunction:: func1
|
.. autofunction:: func1
|
||||||
|
|
||||||
.. autofunction:: func2
|
.. autofunction:: func2
|
||||||
|
|
||||||
.. autofunction:: spam.mod1.func1
|
.. autofunction:: spam.mod1.func1
|
||||||
|
|
||||||
.. autofunction:: spam.mod2.func2
|
.. autofunction:: spam.mod2.func2
|
||||||
|
|
||||||
.. autofunction:: Class1
|
.. autofunction:: Class1
|
||||||
|
|
||||||
.. autofunction:: Class2
|
.. autofunction:: Class2
|
||||||
|
|
||||||
.. autofunction:: spam.mod1.Class1
|
.. autofunction:: spam.mod1.Class1
|
||||||
|
|
||||||
.. autofunction:: spam.mod2.Class2
|
.. autofunction:: spam.mod2.Class2
|
||||||
|
|
||||||
|
|
||||||
.. literalinclude:: spam/__init__.py
|
.. literalinclude:: spam/__init__.py
|
||||||
:language: python
|
:language: python
|
||||||
:pyobject: func1
|
:pyobject: func1
|
||||||
|
|
||||||
.. literalinclude:: spam/mod1.py
|
.. literalinclude:: spam/mod1.py
|
||||||
:language: python
|
:language: python
|
||||||
:pyobject: func1
|
:pyobject: func1
|
||||||
|
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
|
||||||
|
objects
|
||||||
|
169
tests/roots/test-ext-viewcode/objects.rst
Normal file
169
tests/roots/test-ext-viewcode/objects.rst
Normal file
@@ -0,0 +1,169 @@
|
|||||||
|
Testing object descriptions
|
||||||
|
===========================
|
||||||
|
|
||||||
|
.. function:: func_without_module(a, b, *c[, d])
|
||||||
|
|
||||||
|
Does something.
|
||||||
|
|
||||||
|
.. function:: func_without_body()
|
||||||
|
|
||||||
|
.. function:: func_noindex
|
||||||
|
:noindex:
|
||||||
|
|
||||||
|
.. function:: func_with_module
|
||||||
|
:module: foolib
|
||||||
|
|
||||||
|
Referring to :func:`func with no index <func_noindex>`.
|
||||||
|
Referring to :func:`nothing <>`.
|
||||||
|
|
||||||
|
.. module:: mod
|
||||||
|
:synopsis: Module synopsis.
|
||||||
|
:platform: UNIX
|
||||||
|
|
||||||
|
.. function:: func_in_module
|
||||||
|
|
||||||
|
.. class:: Cls
|
||||||
|
|
||||||
|
.. method:: meth1
|
||||||
|
|
||||||
|
.. staticmethod:: meths
|
||||||
|
|
||||||
|
.. attribute:: attr
|
||||||
|
|
||||||
|
.. explicit class given
|
||||||
|
.. method:: Cls.meth2
|
||||||
|
|
||||||
|
.. explicit module given
|
||||||
|
.. exception:: Error(arg1, arg2)
|
||||||
|
:module: errmod
|
||||||
|
|
||||||
|
.. data:: var
|
||||||
|
|
||||||
|
|
||||||
|
.. currentmodule:: None
|
||||||
|
|
||||||
|
.. function:: func_without_module2() -> annotation
|
||||||
|
|
||||||
|
.. object:: long(parameter, \
|
||||||
|
list)
|
||||||
|
another one
|
||||||
|
|
||||||
|
.. class:: TimeInt
|
||||||
|
|
||||||
|
Has only one parameter (triggers special behavior...)
|
||||||
|
|
||||||
|
:param moo: |test|
|
||||||
|
:type moo: |test|
|
||||||
|
|
||||||
|
.. |test| replace:: Moo
|
||||||
|
|
||||||
|
.. class:: Time(hour, minute, isdst)
|
||||||
|
|
||||||
|
:param year: The year.
|
||||||
|
:type year: TimeInt
|
||||||
|
:param TimeInt minute: The minute.
|
||||||
|
:param isdst: whether it's DST
|
||||||
|
:type isdst: * some complex
|
||||||
|
* expression
|
||||||
|
:returns: a new :class:`Time` instance
|
||||||
|
:rtype: :class:`Time`
|
||||||
|
:raises ValueError: if the values are out of range
|
||||||
|
:ivar int hour: like *hour*
|
||||||
|
:ivar minute: like *minute*
|
||||||
|
:vartype minute: int
|
||||||
|
:param hour: Some parameter
|
||||||
|
:type hour: DuplicateType
|
||||||
|
:param hour: Duplicate param. Should not lead to crashes.
|
||||||
|
:type hour: DuplicateType
|
||||||
|
:param .Cls extcls: A class from another module.
|
||||||
|
|
||||||
|
|
||||||
|
C items
|
||||||
|
=======
|
||||||
|
|
||||||
|
.. c:function:: Sphinx_DoSomething()
|
||||||
|
|
||||||
|
.. c:member:: SphinxStruct.member
|
||||||
|
|
||||||
|
.. c:macro:: SPHINX_USE_PYTHON
|
||||||
|
|
||||||
|
.. c:type:: SphinxType
|
||||||
|
|
||||||
|
.. c:var:: sphinx_global
|
||||||
|
|
||||||
|
|
||||||
|
Javascript items
|
||||||
|
================
|
||||||
|
|
||||||
|
.. js:function:: foo()
|
||||||
|
|
||||||
|
.. js:data:: bar
|
||||||
|
|
||||||
|
.. documenting the method of any object
|
||||||
|
.. js:function:: bar.baz(href, callback[, errback])
|
||||||
|
|
||||||
|
:param string href: The location of the resource.
|
||||||
|
:param callback: Get's called with the data returned by the resource.
|
||||||
|
:throws InvalidHref: If the `href` is invalid.
|
||||||
|
:returns: `undefined`
|
||||||
|
|
||||||
|
.. js:attribute:: bar.spam
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
|
|
||||||
|
Referencing :class:`mod.Cls` or :Class:`mod.Cls` should be the same.
|
||||||
|
|
||||||
|
With target: :c:func:`Sphinx_DoSomething()` (parentheses are handled),
|
||||||
|
:c:member:`SphinxStruct.member`, :c:macro:`SPHINX_USE_PYTHON`,
|
||||||
|
:c:type:`SphinxType *` (pointer is handled), :c:data:`sphinx_global`.
|
||||||
|
|
||||||
|
Without target: :c:func:`CFunction`. :c:func:`!malloc`.
|
||||||
|
|
||||||
|
:js:func:`foo()`
|
||||||
|
:js:func:`foo`
|
||||||
|
|
||||||
|
:js:data:`bar`
|
||||||
|
:js:func:`bar.baz()`
|
||||||
|
:js:func:`bar.baz`
|
||||||
|
:js:func:`~bar.baz()`
|
||||||
|
|
||||||
|
:js:attr:`bar.baz`
|
||||||
|
|
||||||
|
|
||||||
|
Others
|
||||||
|
======
|
||||||
|
|
||||||
|
.. envvar:: HOME
|
||||||
|
|
||||||
|
.. program:: python
|
||||||
|
|
||||||
|
.. cmdoption:: -c command
|
||||||
|
|
||||||
|
.. program:: perl
|
||||||
|
|
||||||
|
.. cmdoption:: -c
|
||||||
|
|
||||||
|
.. option:: +p
|
||||||
|
|
||||||
|
Link to :option:`perl +p`.
|
||||||
|
|
||||||
|
|
||||||
|
User markup
|
||||||
|
===========
|
||||||
|
|
||||||
|
.. userdesc:: myobj:parameter
|
||||||
|
|
||||||
|
Description of userdesc.
|
||||||
|
|
||||||
|
|
||||||
|
Referencing :userdescrole:`myobj`.
|
||||||
|
|
||||||
|
|
||||||
|
CPP domain
|
||||||
|
==========
|
||||||
|
|
||||||
|
.. cpp:class:: n::Array<T,d>
|
||||||
|
|
||||||
|
.. cpp:function:: T& operator[]( unsigned j )
|
||||||
|
const T& operator[]( unsigned j ) const
|
@@ -8,13 +8,9 @@
|
|||||||
:copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
|
:copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
|
||||||
:license: BSD, see LICENSE for details.
|
:license: BSD, see LICENSE for details.
|
||||||
"""
|
"""
|
||||||
from __future__ import print_function
|
|
||||||
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from util import with_app
|
from util import with_app
|
||||||
|
|
||||||
|
|
||||||
cleanup_called = 0
|
cleanup_called = 0
|
||||||
|
|
||||||
|
|
||||||
|
@@ -1,24 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
"""
|
|
||||||
test_linkcode
|
|
||||||
~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Test the sphinx.ext.linkcode extension.
|
|
||||||
|
|
||||||
:copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
|
|
||||||
:license: BSD, see LICENSE for details.
|
|
||||||
"""
|
|
||||||
|
|
||||||
from util import with_app
|
|
||||||
|
|
||||||
|
|
||||||
@with_app('html', tags=['test_linkcode'])
|
|
||||||
def test_html(app, status, warning):
|
|
||||||
app.builder.build(['objects'])
|
|
||||||
|
|
||||||
stuff = (app.outdir / 'objects.html').text(encoding='utf-8')
|
|
||||||
|
|
||||||
assert 'http://foobar/source/foolib.py' in stuff
|
|
||||||
assert 'http://foobar/js/' in stuff
|
|
||||||
assert 'http://foobar/c/' in stuff
|
|
||||||
assert 'http://foobar/cpp/' in stuff
|
|
@@ -15,7 +15,7 @@ from util import with_app
|
|||||||
|
|
||||||
|
|
||||||
@with_app(testroot='ext-viewcode')
|
@with_app(testroot='ext-viewcode')
|
||||||
def test_simple(app, status, warning):
|
def test_viewcode(app, status, warning):
|
||||||
app.builder.build_all()
|
app.builder.build_all()
|
||||||
|
|
||||||
warnings = re.sub(r'\\+', '/', warning.getvalue())
|
warnings = re.sub(r'\\+', '/', warning.getvalue())
|
||||||
@@ -30,3 +30,15 @@ def test_simple(app, status, warning):
|
|||||||
assert result.count('href="_modules/spam/mod2.html#func2"') == 2
|
assert result.count('href="_modules/spam/mod2.html#func2"') == 2
|
||||||
assert result.count('href="_modules/spam/mod1.html#Class1"') == 2
|
assert result.count('href="_modules/spam/mod1.html#Class1"') == 2
|
||||||
assert result.count('href="_modules/spam/mod2.html#Class2"') == 2
|
assert result.count('href="_modules/spam/mod2.html#Class2"') == 2
|
||||||
|
|
||||||
|
|
||||||
|
@with_app(testroot='ext-viewcode', tags=['test_linkcode'])
|
||||||
|
def test_linkcode(app, status, warning):
|
||||||
|
app.builder.build(['objects'])
|
||||||
|
|
||||||
|
stuff = (app.outdir / 'objects.html').text(encoding='utf-8')
|
||||||
|
|
||||||
|
assert 'http://foobar/source/foolib.py' in stuff
|
||||||
|
assert 'http://foobar/js/' in stuff
|
||||||
|
assert 'http://foobar/c/' in stuff
|
||||||
|
assert 'http://foobar/cpp/' in stuff
|
||||||
|
Reference in New Issue
Block a user