mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Merged revisions 65138,65145-65146,65268-65273 via svnmerge from
svn+ssh://pythondev@svn.python.org/doctools/branches/0.4.x ........ r65138 | georg.brandl | 2008-07-19 15:42:35 +0200 (Sat, 19 Jul 2008) | 2 lines #3416: fix missing parameter. ........ r65145 | georg.brandl | 2008-07-19 20:01:25 +0200 (Sat, 19 Jul 2008) | 2 lines Now that we don't ship Jinja anymore by default the comment can go. ........ r65146 | georg.brandl | 2008-07-19 20:01:51 +0200 (Sat, 19 Jul 2008) | 2 lines Reread documents with globbed toctrees when files are removed/added. ........ r65268 | georg.brandl | 2008-07-29 10:21:33 +0200 (Tue, 29 Jul 2008) | 2 lines Fix by Markus Gritsch to place correct links to headings. ........ r65269 | georg.brandl | 2008-07-29 10:21:59 +0200 (Tue, 29 Jul 2008) | 2 lines Make the writer's settings public. ........ r65270 | georg.brandl | 2008-07-29 10:22:28 +0200 (Tue, 29 Jul 2008) | 2 lines Export test_root. ........ r65271 | georg.brandl | 2008-07-29 10:22:47 +0200 (Tue, 29 Jul 2008) | 2 lines Add a markup test. ........ r65272 | georg.brandl | 2008-07-29 10:27:19 +0200 (Tue, 29 Jul 2008) | 2 lines Bump version number. ........ r65273 | georg.brandl | 2008-07-29 11:05:37 +0200 (Tue, 29 Jul 2008) | 2 lines Correct rendering of ``samp``. ........
This commit is contained in:
@@ -43,6 +43,7 @@ def test_core_config():
|
||||
# "contains" gives True both for set and unset values
|
||||
assert 'project' in cfg
|
||||
assert 'html_title' in cfg
|
||||
assert 'nonexisting_value' not in cfg
|
||||
|
||||
# invalid values
|
||||
raises(AttributeError, getattr, cfg, '_value')
|
||||
|
||||
91
tests/test_markup.py
Normal file
91
tests/test_markup.py
Normal file
@@ -0,0 +1,91 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
test_markup
|
||||
~~~~~~~~~~~
|
||||
|
||||
Test various Sphinx-specific markup extensions.
|
||||
|
||||
:copyright: 2008 by Georg Brandl.
|
||||
:license: BSD.
|
||||
"""
|
||||
|
||||
from util import *
|
||||
|
||||
from docutils import frontend, utils, nodes
|
||||
from docutils.parsers import rst
|
||||
|
||||
from sphinx import addnodes
|
||||
from sphinx.htmlwriter import HTMLWriter, SmartyPantsHTMLTranslator
|
||||
from sphinx.latexwriter import LaTeXWriter, LaTeXTranslator
|
||||
|
||||
app = TestApp()
|
||||
optparser = frontend.OptionParser(components=(rst.Parser, HTMLWriter, LaTeXWriter))
|
||||
settings = optparser.get_default_values()
|
||||
settings.env = app.builder.env
|
||||
parser = rst.Parser()
|
||||
|
||||
# since we're not resolving the markup afterwards, these nodes may remain
|
||||
class ForgivingTranslator:
|
||||
def visit_pending_xref(self, node):
|
||||
pass
|
||||
def depart_pending_xref(self, node):
|
||||
pass
|
||||
|
||||
class ForgivingHTMLTranslator(SmartyPantsHTMLTranslator, ForgivingTranslator):
|
||||
pass
|
||||
|
||||
class ForgivingLaTeXTranslator(LaTeXTranslator, ForgivingTranslator):
|
||||
pass
|
||||
|
||||
|
||||
def verify(rst, html_expected, latex_expected):
|
||||
document = utils.new_document('test data', settings)
|
||||
parser.parse(rst, document)
|
||||
for msg in document.traverse(nodes.system_message):
|
||||
if msg['level'] == 1:
|
||||
msg.replace_self([])
|
||||
|
||||
if html_expected:
|
||||
html_translator = ForgivingHTMLTranslator(app.builder, document)
|
||||
document.walkabout(html_translator)
|
||||
html_translated = ''.join(html_translator.fragment).strip()
|
||||
assert html_translated == html_expected, 'from ' + rst
|
||||
|
||||
if latex_expected:
|
||||
latex_translator = ForgivingLaTeXTranslator(document, app.builder)
|
||||
latex_translator.first_document = -1 # don't write \begin{document}
|
||||
document.walkabout(latex_translator)
|
||||
latex_translated = ''.join(latex_translator.body).strip()
|
||||
assert latex_translated == latex_expected, 'from ' + rst
|
||||
|
||||
|
||||
def test_inline():
|
||||
# correct interpretation of code with whitespace
|
||||
_html = ('<p><tt class="docutils literal"><span class="pre">'
|
||||
'code</span> <span class="pre">sample</span></tt></p>')
|
||||
verify('``code sample``', _html, '\\code{code sample}')
|
||||
verify(':samp:`code sample`', _html, '\\samp{code sample}')
|
||||
|
||||
# interpolation of braces in samp and file roles (HTML only)
|
||||
verify(':samp:`a{b}c`',
|
||||
'<p><tt class="docutils literal"><span class="pre">a</span>'
|
||||
'<em><span class="pre">b</span></em><span class="pre">c</span></tt></p>',
|
||||
'\\samp{abc}')
|
||||
|
||||
# interpolation of arrows in menuselection
|
||||
verify(':menuselection:`a --> b`',
|
||||
u'<p><em>a \N{TRIANGULAR BULLET} b</em></p>',
|
||||
'\\emph{a $\\rightarrow$ b}')
|
||||
|
||||
# non-interpolation of dashes in option role
|
||||
verify(':option:`--with-option`',
|
||||
'<p><em>--with-option</em></p>',
|
||||
r'\emph{\texttt{--with-option}}')
|
||||
|
||||
# verify smarty-pants quotes
|
||||
verify('"John"', '<p>“John”</p>', "``John''")
|
||||
# ... but not in literal text
|
||||
verify('``"John"``',
|
||||
'<p><tt class="docutils literal"><span class="pre">'
|
||||
'"John"</span></tt></p>',
|
||||
'\\code{"John"}')
|
||||
@@ -17,12 +17,16 @@ from path import path
|
||||
|
||||
|
||||
__all__ = [
|
||||
'test_root',
|
||||
'raises', 'raises_msg',
|
||||
'ErrorOutput', 'TestApp',
|
||||
'path', 'with_tempdir', 'write_file',
|
||||
]
|
||||
|
||||
|
||||
test_root = path(__file__).parent.joinpath('root').abspath()
|
||||
|
||||
|
||||
def _excstr(exc):
|
||||
if type(exc) is tuple:
|
||||
return str(tuple(map(_excstr, exc)))
|
||||
@@ -79,7 +83,7 @@ class TestApp(application.Sphinx):
|
||||
application.CONFIG_FILENAME = confname
|
||||
|
||||
if srcdir is None:
|
||||
srcdir = path(__file__).parent.joinpath('root').abspath()
|
||||
srcdir = test_root
|
||||
else:
|
||||
srcdir = path(srcdir)
|
||||
if confdir is None:
|
||||
|
||||
Reference in New Issue
Block a user