blob: c165b2d335f40c32f402ea2daad9be0435d7fa88 [file] [log] [blame]
# -*- coding: utf-8 -*-
"""
test_setup_command
~~~~~~~~~~~~~~~~~~~
Test setup_command for distutils.
:copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
:license: BSD, see LICENSE for details.
"""
import os
import sys
import subprocess
from functools import wraps
import tempfile
import sphinx
from util import with_tempdir, test_roots, SkipTest
from path import path
from textwrap import dedent
root = test_roots / 'test-setup'
def with_setup_command(root, *args, **kwds):
"""
Run `setup.py build_sphinx` with args and kwargs,
pass it to the test and clean up properly.
"""
def generator(func):
@wraps(func)
def deco(*args2, **kwargs2):
tempdir = path(tempfile.mkdtemp())
pkgrootdir = (tempdir / 'root')
root.copytree(pkgrootdir)
cwd = os.getcwd()
os.chdir(pkgrootdir)
pythonpath = os.path.dirname(os.path.dirname(sphinx.__file__))
if os.getenv('PYTHONPATH'):
pythonpath = os.getenv('PYTHONPATH') + os.pathsep + pythonpath
command = [sys.executable, 'setup.py', 'build_sphinx']
command.extend(args)
try:
proc = subprocess.Popen(
command,
env=dict(os.environ, PYTHONPATH=pythonpath),
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
func(pkgrootdir, proc)
finally:
tempdir.rmtree(ignore_errors=True)
os.chdir(cwd)
return deco
return generator
@with_setup_command(root)
def test_build_sphinx(pkgroot, proc):
out, err = proc.communicate()
print(out)
print(err)
assert proc.returncode == 0
@with_setup_command(root)
def test_build_sphinx_with_nonascii_path(pkgroot, proc):
mb_name = u'\u65e5\u672c\u8a9e'
srcdir = (pkgroot / 'doc')
try:
(srcdir / mb_name).makedirs()
except UnicodeEncodeError:
from path import FILESYSTEMENCODING
raise SkipTest(
'non-ASCII filename not supported on this filesystem encoding: '
'%s', FILESYSTEMENCODING)
(srcdir / mb_name / (mb_name + '.txt')).write_text(dedent("""
multi byte file name page
==========================
"""))
master_doc = srcdir / 'contents.txt'
master_doc.write_bytes((master_doc.text() + dedent("""
.. toctree::
%(mb_name)s/%(mb_name)s
""" % locals())
).encode('utf-8'))
out, err = proc.communicate()
print(out)
print(err)
assert proc.returncode == 0
@with_setup_command(root, '-b', 'linkcheck')
def test_build_sphinx_return_nonzero_status(pkgroot, proc):
srcdir = (pkgroot / 'doc')
(srcdir / 'contents.txt').write_text(
'http://localhost.unexistentdomain/index.html')
out, err = proc.communicate()
print(out)
print(err)
assert proc.returncode != 0, 'expect non-zero status for setup.py'