Add test for docutils.conf and prevent 'html4css1.css' missing warning.

Now --embed-stylesheet option default become false.
This commit is contained in:
Takayuki Shimizukawa 2013-07-27 14:13:15 +09:00
parent fa7fe88d74
commit 91ef671ea9
5 changed files with 129 additions and 0 deletions

View File

@ -12,6 +12,7 @@
import sys import sys
import posixpath import posixpath
import os import os
import copy
from docutils import nodes from docutils import nodes
from docutils.writers.html4css1 import Writer, HTMLTranslator as BaseTranslator from docutils.writers.html4css1 import Writer, HTMLTranslator as BaseTranslator
@ -32,6 +33,13 @@ except ImportError:
# http://www.arnebrodowski.de/blog/write-your-own-restructuredtext-writer.html # http://www.arnebrodowski.de/blog/write-your-own-restructuredtext-writer.html
class HTMLWriter(Writer): class HTMLWriter(Writer):
# override embed-stylesheet default value to 0.
settings_spec = copy.deepcopy(Writer.settings_spec)
for _setting in settings_spec[2]:
if '--embed-stylesheet' in _setting[1]:
_setting[2]['default'] = 0
def __init__(self, builder): def __init__(self, builder):
Writer.__init__(self) Writer.__init__(self)
self.builder = builder self.builder = builder

View File

@ -0,0 +1,5 @@
# -*- coding: utf-8 -*-
project = 'Sphinx docutils conf <Tests>'
source_suffix = '.txt'
keep_warnings = True

View File

@ -0,0 +1,15 @@
docutils conf
=============
field-name-limit
----------------
:short: desc
:long long long long: long title
option-limit
------------
--short short desc
--long-long-long-long long desc

101
tests/test_docutilsconf.py Normal file
View File

@ -0,0 +1,101 @@
# -*- coding: utf-8 -*-
"""
test_docutilsconf
~~~~~~~~~~~~~~~~~
Test docutils.conf support for several writers.
:copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS.
:license: BSD, see LICENSE for details.
"""
import os
import re
from StringIO import StringIO
from functools import wraps
from util import test_roots, TestApp
html_warnfile = StringIO()
root = test_roots / 'test-docutilsconf'
# need cleanenv to rebuild everytime.
# docutils.conf change did not effect to rebuild.
def with_conf_app(docutilsconf='', *args, **kwargs):
default_kw = {
'srcdir': root,
'cleanenv': True,
}
default_kw.update(kwargs)
def generator(func):
@wraps(func)
def deco(*args2, **kwargs2):
app = TestApp(*args, **default_kw)
(app.srcdir / 'docutils.conf').write_text(docutilsconf)
try:
cwd = os.getcwd()
os.chdir(app.srcdir)
func(app, *args2, **kwargs2)
finally:
os.chdir(cwd)
# don't execute cleanup if test failed
app.cleanup()
return deco
return generator
def regex_count(expr, result):
return len(re.findall(expr, result))
@with_conf_app(buildername='html')
def test_html_with_default_docutilsconf(app):
app.builder.build(['contents'])
result = (app.outdir / 'contents.html').text(encoding='utf-8')
assert regex_count(r'<th class="field-name">', result) == 1
assert regex_count(r'<th class="field-name" colspan="2">', result) == 1
assert regex_count(r'<td class="option-group">', result) == 1
assert regex_count(r'<td class="option-group" colspan="2">', result) == 1
@with_conf_app(buildername='html', docutilsconf=(
'\n[html4css1 writer]'
'\noption-limit:1'
'\nfield-name-limit:1'
'\n')
)
def test_html_with_docutilsconf(app):
app.builder.build(['contents'])
result = (app.outdir / 'contents.html').text(encoding='utf-8')
assert regex_count(r'<th class="field-name">', result) == 0
assert regex_count(r'<th class="field-name" colspan="2">', result) == 2
assert regex_count(r'<td class="option-group">', result) == 0
assert regex_count(r'<td class="option-group" colspan="2">', result) == 2
@with_conf_app(buildername='html', warning=html_warnfile)
def test_html(app):
app.builder.build(['contents'])
assert html_warnfile.getvalue() == ''
@with_conf_app(buildername='latex', warning=html_warnfile)
def test_latex(app):
app.builder.build(['contents'])
assert html_warnfile.getvalue() == ''
@with_conf_app(buildername='man', warning=html_warnfile)
def test_man(app):
app.builder.build(['contents'])
assert html_warnfile.getvalue() == ''
@with_conf_app(buildername='texinfo', warning=html_warnfile)
def test_texinfo(app):
app.builder.build(['contents'])
assert html_warnfile.getvalue() == ''