Files
sphinx/tests/test_quickstart.py
T

254 lines
6.8 KiB
Python
Raw Normal View History

"""
test_quickstart
~~~~~~~~~~~~~~~
Test the sphinx.quickstart module.
2021-01-01 02:00:29 +09:00
:copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
:license: BSD, see LICENSE for details.
"""
import time
from io import StringIO
2018-02-19 22:39:14 +09:00
import pytest
from sphinx import application
from sphinx.cmd import quickstart as qs
2020-11-11 12:00:27 +01:00
from sphinx.util.console import coloron, nocolor
2013-02-10 15:25:45 +09:00
from sphinx.util.pycompat import execfile_
2014-04-30 21:30:46 +09:00
warnfile = StringIO()
def setup_module():
nocolor()
2014-09-21 17:17:02 +02:00
def mock_input(answers, needanswer=False):
called = set()
2014-09-21 17:17:02 +02:00
2014-04-30 21:30:46 +09:00
def input_(prompt):
if prompt in called:
raise AssertionError('answer for %r missing and no default '
'present' % prompt)
called.add(prompt)
for question in answers:
if prompt.startswith(qs.PROMPT_PREFIX + question):
return answers[question]
if needanswer:
raise AssertionError('answer for %r missing' % prompt)
return ''
2014-04-30 21:30:46 +09:00
return input_
2014-09-21 17:17:02 +02:00
2014-04-30 21:30:46 +09:00
real_input = input
2014-09-21 17:17:02 +02:00
def teardown_module():
qs.term_input = real_input
coloron()
def test_do_prompt():
answers = {
'Q2': 'v2',
'Q3': 'v3',
'Q4': 'yes',
'Q5': 'no',
'Q6': 'foo',
}
qs.term_input = mock_input(answers)
2017-10-12 14:36:19 +01:00
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):
2017-10-12 14:36:19 +01:00
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'
2009-01-04 22:33:00 +01:00
def test_do_prompt_with_nonascii():
answers = {
2018-12-15 23:02:28 +09:00
'Q1': '\u30c9\u30a4\u30c4',
}
qs.term_input = mock_input(answers)
result = qs.do_prompt('Q1', default='\u65e5\u672c')
2018-12-15 23:02:28 +09:00
assert result == '\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 = {}
2013-02-10 15:25:45 +09:00
execfile_(conffile, ns)
assert ns['extensions'] == []
2009-01-04 22:33:00 +01:00
assert ns['templates_path'] == ['_templates']
assert ns['project'] == 'Sphinx Test'
assert ns['copyright'] == '%s, Georg Brandl' % time.strftime('%Y')
assert ns['version'] == '0.1'
assert ns['release'] == '0.1'
2009-01-04 22:33:00 +01:00
assert ns['html_static_path'] == ['_static']
2009-01-04 22:33:00 +01:00
assert (tempdir / '_static').isdir()
assert (tempdir / '_templates').isdir()
assert (tempdir / 'index.rst').isfile()
assert (tempdir / 'Makefile').isfile()
2009-01-04 22:33:00 +01:00
assert (tempdir / 'make.bat').isfile()
def test_quickstart_all_answers(tempdir):
answers = {
'Root path': tempdir,
'Separate source and build': 'y',
2009-01-04 22:33:00 +01:00
'Name prefix for templates': '.',
'Project name': 'STASI™',
'Author name': 'Wolfgang Schäuble & G\'Beckstein',
'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',
2008-08-04 19:39:05 +00:00
'intersphinx': 'no',
'todo': 'y',
'coverage': 'no',
2015-12-23 19:08:30 -08:00
'imgmath': 'N',
'mathjax': 'no',
2009-02-20 10:45:24 +01:00
'ifconfig': 'no',
2010-01-17 17:02:46 +01:00
'viewcode': 'no',
'githubpages': 'no',
'Create Makefile': 'no',
2009-01-04 22:33:00 +01:00
'Create Windows command file': 'no',
2010-02-21 11:50:08 +01:00
'Do you want to use the epub builder': 'yes',
}
qs.term_input = mock_input(answers, needanswer=True)
d = {}
qs.ask_user(d)
qs.generate(d)
conffile = tempdir / 'source' / 'conf.py'
assert conffile.isfile()
ns = {}
2013-02-10 15:25:45 +09:00
execfile_(conffile, ns)
assert ns['extensions'] == [
'sphinx.ext.autodoc', 'sphinx.ext.doctest', 'sphinx.ext.todo'
]
2009-01-04 22:33:00 +01:00
assert ns['templates_path'] == ['.templates']
2015-03-16 00:27:12 +09:00
assert ns['source_suffix'] == '.txt'
assert ns['master_doc'] == 'contents'
2018-12-15 23:02:28 +09:00
assert ns['project'] == 'STASI™'
assert ns['copyright'] == '%s, Wolfgang Schäuble & G\'Beckstein' % \
2014-09-21 17:17:02 +02:00
time.strftime('%Y')
assert ns['version'] == '2.0'
assert ns['release'] == '2.0.1'
assert ns['todo_include_todos'] is True
2009-01-04 22:33:00 +01:00
assert ns['html_static_path'] == ['.static']
assert (tempdir / 'build').isdir()
2009-01-04 22:33:00 +01:00
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):
2020-02-01 11:58:51 +09:00
content = filename.read_bytes().decode()
2014-09-21 17:17:02 +02:00
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,
2018-12-15 23:02:28 +09:00
'Project name': '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(
2014-09-21 17:17:02 +02:00
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,
2018-12-15 23:02:28 +09:00
'Project name': '\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)
def test_extensions(tempdir):
2017-05-11 12:53:15 -05:00
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']