mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
sphinx/tests/test_quickstart.py:221: DeprecationWarning: invalid escape sequence '\*' content = filename.bytes().decode('unicode-escape') sphinx/tests/test_quickstart.py:221: DeprecationWarning: invalid escape sequence '\`' content = filename.bytes().decode('unicode-escape')
289 lines
8.3 KiB
Python
289 lines
8.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
test_quickstart
|
|
~~~~~~~~~~~~~~~
|
|
|
|
Test the sphinx.quickstart module.
|
|
|
|
:copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS.
|
|
:license: BSD, see LICENSE for details.
|
|
"""
|
|
|
|
import sys
|
|
import time
|
|
|
|
import pytest
|
|
from six import PY2, text_type, StringIO
|
|
from six.moves import input
|
|
|
|
from sphinx import application
|
|
from sphinx.cmd import quickstart as qs
|
|
from sphinx.util.console import nocolor, coloron
|
|
from sphinx.util.pycompat import execfile_
|
|
|
|
|
|
warnfile = StringIO()
|
|
|
|
|
|
def setup_module():
|
|
nocolor()
|
|
|
|
|
|
def mock_input(answers, needanswer=False):
|
|
called = set()
|
|
|
|
def input_(prompt):
|
|
if prompt in called:
|
|
raise AssertionError('answer for %r missing and no default '
|
|
'present' % prompt)
|
|
called.add(prompt)
|
|
if PY2:
|
|
prompt = str(prompt) # Python2.x raw_input emulation
|
|
# `raw_input` encode `prompt` by default encoding to print.
|
|
else:
|
|
prompt = text_type(prompt) # Python3.x input emulation
|
|
# `input` decode prompt by default encoding before print.
|
|
for question in answers:
|
|
if prompt.startswith(qs.PROMPT_PREFIX + question):
|
|
return answers[question]
|
|
if needanswer:
|
|
raise AssertionError('answer for %r missing' % prompt)
|
|
return ''
|
|
return input_
|
|
|
|
|
|
real_input = input
|
|
|
|
|
|
def teardown_module():
|
|
qs.term_input = real_input
|
|
qs.TERM_ENCODING = getattr(sys.stdin, 'encoding', None)
|
|
coloron()
|
|
|
|
|
|
def test_do_prompt():
|
|
answers = {
|
|
'Q2': 'v2',
|
|
'Q3': 'v3',
|
|
'Q4': 'yes',
|
|
'Q5': 'no',
|
|
'Q6': 'foo',
|
|
}
|
|
qs.term_input = mock_input(answers)
|
|
|
|
assert qs.do_prompt('Q1', default='v1') == 'v1'
|
|
assert qs.do_prompt('Q3', default='v3_default') == 'v3'
|
|
assert qs.do_prompt('Q2') == 'v2'
|
|
assert qs.do_prompt('Q4', validator=qs.boolean) is True
|
|
assert qs.do_prompt('Q5', validator=qs.boolean) is False
|
|
with pytest.raises(AssertionError):
|
|
qs.do_prompt('Q6', validator=qs.boolean)
|
|
|
|
|
|
def test_do_prompt_inputstrip():
|
|
answers = {
|
|
'Q1': 'Y',
|
|
'Q2': ' Yes ',
|
|
'Q3': 'N',
|
|
'Q4': 'N ',
|
|
}
|
|
qs.term_input = mock_input(answers)
|
|
|
|
assert qs.do_prompt('Q1') == 'Y'
|
|
assert qs.do_prompt('Q2') == 'Yes'
|
|
assert qs.do_prompt('Q3') == 'N'
|
|
assert qs.do_prompt('Q4') == 'N'
|
|
|
|
|
|
def test_do_prompt_with_nonascii():
|
|
answers = {
|
|
'Q1': u'\u30c9\u30a4\u30c4',
|
|
}
|
|
qs.term_input = mock_input(answers)
|
|
try:
|
|
result = qs.do_prompt('Q1', default=u'\u65e5\u672c')
|
|
except UnicodeEncodeError:
|
|
raise pytest.skip.Exception(
|
|
'non-ASCII console input not supported on this encoding: %s',
|
|
qs.TERM_ENCODING)
|
|
assert result == u'\u30c9\u30a4\u30c4'
|
|
|
|
|
|
def test_quickstart_defaults(tempdir):
|
|
answers = {
|
|
'Root path': tempdir,
|
|
'Project name': 'Sphinx Test',
|
|
'Author name': 'Georg Brandl',
|
|
'Project version': '0.1',
|
|
}
|
|
qs.term_input = mock_input(answers)
|
|
d = {}
|
|
qs.ask_user(d)
|
|
qs.generate(d)
|
|
|
|
conffile = tempdir / 'conf.py'
|
|
assert conffile.isfile()
|
|
ns = {}
|
|
execfile_(conffile, ns)
|
|
assert ns['extensions'] == []
|
|
assert ns['templates_path'] == ['_templates']
|
|
assert ns['source_suffix'] == '.rst'
|
|
assert ns['master_doc'] == 'index'
|
|
assert ns['project'] == 'Sphinx Test'
|
|
assert ns['copyright'] == '%s, Georg Brandl' % time.strftime('%Y')
|
|
assert ns['version'] == '0.1'
|
|
assert ns['release'] == '0.1'
|
|
assert ns['html_static_path'] == ['_static']
|
|
assert ns['latex_documents'] == [
|
|
('index', 'SphinxTest.tex', 'Sphinx Test Documentation',
|
|
'Georg Brandl', 'manual')]
|
|
|
|
assert (tempdir / '_static').isdir()
|
|
assert (tempdir / '_templates').isdir()
|
|
assert (tempdir / 'index.rst').isfile()
|
|
assert (tempdir / 'Makefile').isfile()
|
|
assert (tempdir / 'make.bat').isfile()
|
|
|
|
|
|
def test_quickstart_all_answers(tempdir):
|
|
answers = {
|
|
'Root path': tempdir,
|
|
'Separate source and build': 'y',
|
|
'Name prefix for templates': '.',
|
|
'Project name': u'STASI™'.encode('utf-8'),
|
|
'Author name': u'Wolfgang Schäuble & G\'Beckstein'.encode('utf-8'),
|
|
'Project version': '2.0',
|
|
'Project release': '2.0.1',
|
|
'Project language': 'de',
|
|
'Source file suffix': '.txt',
|
|
'Name of your master document': 'contents',
|
|
'autodoc': 'y',
|
|
'doctest': 'yes',
|
|
'intersphinx': 'no',
|
|
'todo': 'y',
|
|
'coverage': 'no',
|
|
'imgmath': 'N',
|
|
'mathjax': 'no',
|
|
'ifconfig': 'no',
|
|
'viewcode': 'no',
|
|
'githubpages': 'no',
|
|
'Create Makefile': 'no',
|
|
'Create Windows command file': 'no',
|
|
'Do you want to use the epub builder': 'yes',
|
|
}
|
|
qs.term_input = mock_input(answers, needanswer=True)
|
|
qs.TERM_ENCODING = 'utf-8'
|
|
d = {}
|
|
qs.ask_user(d)
|
|
qs.generate(d)
|
|
|
|
conffile = tempdir / 'source' / 'conf.py'
|
|
assert conffile.isfile()
|
|
ns = {}
|
|
execfile_(conffile, ns)
|
|
assert ns['extensions'] == [
|
|
'sphinx.ext.autodoc', 'sphinx.ext.doctest', 'sphinx.ext.todo'
|
|
]
|
|
assert ns['templates_path'] == ['.templates']
|
|
assert ns['source_suffix'] == '.txt'
|
|
assert ns['master_doc'] == 'contents'
|
|
assert ns['project'] == u'STASI™'
|
|
assert ns['copyright'] == u'%s, Wolfgang Schäuble & G\'Beckstein' % \
|
|
time.strftime('%Y')
|
|
assert ns['version'] == '2.0'
|
|
assert ns['release'] == '2.0.1'
|
|
assert ns['todo_include_todos'] is True
|
|
assert ns['html_static_path'] == ['.static']
|
|
assert ns['latex_documents'] == [
|
|
('contents', 'STASI.tex', u'STASI™ Documentation',
|
|
u'Wolfgang Schäuble \\& G\'Beckstein', 'manual')]
|
|
assert ns['man_pages'] == [
|
|
('contents', 'stasi', u'STASI™ Documentation',
|
|
[u'Wolfgang Schäuble & G\'Beckstein'], 1)]
|
|
assert ns['texinfo_documents'] == [
|
|
('contents', 'STASI', u'STASI™ Documentation',
|
|
u'Wolfgang Schäuble & G\'Beckstein', 'STASI',
|
|
'One line description of project.', 'Miscellaneous')]
|
|
|
|
assert (tempdir / 'build').isdir()
|
|
assert (tempdir / 'source' / '.static').isdir()
|
|
assert (tempdir / 'source' / '.templates').isdir()
|
|
assert (tempdir / 'source' / 'contents.txt').isfile()
|
|
|
|
|
|
def test_generated_files_eol(tempdir):
|
|
answers = {
|
|
'Root path': tempdir,
|
|
'Project name': 'Sphinx Test',
|
|
'Author name': 'Georg Brandl',
|
|
'Project version': '0.1',
|
|
}
|
|
qs.term_input = mock_input(answers)
|
|
d = {}
|
|
qs.ask_user(d)
|
|
qs.generate(d)
|
|
|
|
def assert_eol(filename, eol):
|
|
content = filename.bytes().decode()
|
|
assert all([l[-len(eol):] == eol for l in content.splitlines(True)])
|
|
|
|
assert_eol(tempdir / 'make.bat', '\r\n')
|
|
assert_eol(tempdir / 'Makefile', '\n')
|
|
|
|
|
|
def test_quickstart_and_build(tempdir):
|
|
answers = {
|
|
'Root path': tempdir,
|
|
'Project name': u'Fullwidth characters: \u30c9\u30a4\u30c4',
|
|
'Author name': 'Georg Brandl',
|
|
'Project version': '0.1',
|
|
}
|
|
qs.term_input = mock_input(answers)
|
|
d = {}
|
|
qs.ask_user(d)
|
|
qs.generate(d)
|
|
|
|
app = application.Sphinx(
|
|
tempdir, # srcdir
|
|
tempdir, # confdir
|
|
(tempdir / '_build' / 'html'), # outdir
|
|
(tempdir / '_build' / '.doctree'), # doctreedir
|
|
'html', # buildername
|
|
status=StringIO(),
|
|
warning=warnfile)
|
|
app.builder.build_all()
|
|
warnings = warnfile.getvalue()
|
|
assert not warnings
|
|
|
|
|
|
def test_default_filename(tempdir):
|
|
answers = {
|
|
'Root path': tempdir,
|
|
'Project name': u'\u30c9\u30a4\u30c4', # Fullwidth characters only
|
|
'Author name': 'Georg Brandl',
|
|
'Project version': '0.1',
|
|
}
|
|
qs.term_input = mock_input(answers)
|
|
d = {}
|
|
qs.ask_user(d)
|
|
qs.generate(d)
|
|
|
|
conffile = tempdir / 'conf.py'
|
|
assert conffile.isfile()
|
|
ns = {}
|
|
execfile_(conffile, ns)
|
|
assert ns['latex_documents'][0][1] == 'sphinx.tex'
|
|
assert ns['man_pages'][0][1] == 'sphinx'
|
|
assert ns['texinfo_documents'][0][1] == 'sphinx'
|
|
|
|
|
|
def test_extensions(tempdir):
|
|
qs.main(['-q', '-p', 'project_name', '-a', 'author',
|
|
'--extensions', 'foo,bar,baz', tempdir])
|
|
|
|
conffile = tempdir / 'conf.py'
|
|
assert conffile.isfile()
|
|
ns = {}
|
|
execfile_(conffile, ns)
|
|
assert ns['extensions'] == ['foo', 'bar', 'baz']
|