sphinx-autoapi/tests/test_integration.py

211 lines
6.0 KiB
Python
Raw Normal View History

2017-11-05 22:34:49 +00:00
import io
import json
import os
2015-08-03 22:18:49 +00:00
import sys
import shutil
import unittest
from contextlib import contextmanager
from mock import patch
import pytest
import sphinx
2015-06-23 02:22:27 +00:00
from sphinx.application import Sphinx
2015-06-06 20:20:11 +00:00
@contextmanager
def sphinx_build(test_dir, confoverrides=None):
os.chdir('tests/{0}'.format(test_dir))
try:
app = Sphinx(
srcdir='.',
confdir='.',
outdir='_build/text',
doctreedir='_build/.doctrees',
buildername='text',
confoverrides=confoverrides,
)
app.build(force_all=True)
yield
finally:
shutil.rmtree('_build')
os.chdir('../..')
class LanguageIntegrationTests(unittest.TestCase):
def _run_test(self, test_dir, test_file, test_string):
with sphinx_build(test_dir):
2017-11-05 22:34:49 +00:00
with io.open(test_file, encoding='utf8') as fin:
text = fin.read().strip()
self.assertIn(test_string, text)
class JavaScriptTests(LanguageIntegrationTests):
def _js_read(self, path):
return json.load(open('../fixtures/javascript.json'))
@patch('autoapi.mappers.javascript.JavaScriptSphinxMapper.read_file', _js_read)
def test_integration(self):
self._run_test(
2015-06-23 02:22:27 +00:00
'jsexample',
'_build/text/autoapi/Circle/index.txt',
'Creates an instance of Circle'
)
class GoTests(LanguageIntegrationTests):
def _go_read(self, path):
return json.load(open('../fixtures/go.json'))
@patch('autoapi.mappers.go.GoSphinxMapper.read_file', _go_read)
def test_integration(self):
self._run_test(
2015-06-23 02:22:27 +00:00
'goexample',
'_build/text/autoapi/main/index.txt',
'CopyFuncs produces a json-annotated array of Func objects'
)
class PythonTests(LanguageIntegrationTests):
def test_integration(self):
with sphinx_build('pyexample'):
2017-11-05 22:34:49 +00:00
example_path = '_build/text/autoapi/example/index.txt'
with io.open(example_path, encoding='utf8') as example_handle:
example_file = example_handle.read()
self.assertIn(
'class example.Foo',
example_file
)
self.assertIn(
2016-11-04 22:47:57 +00:00
'method_okay(foo=None, bar=None)',
example_file
)
self.assertIn(
2016-11-04 22:47:57 +00:00
'method_multiline(foo=None, bar=None, baz=None)',
example_file
)
self.assertIn(
2016-11-04 22:47:57 +00:00
'method_tricky(foo=None, bar=dict)',
example_file
)
self.assertFalse(
os.path.exists('_build/text/autoapi/method_multiline')
)
2017-11-05 22:34:49 +00:00
index_path = '_build/text/index.txt'
with io.open(index_path, encoding='utf8') as index_handle:
index_file = index_handle.read()
2017-08-28 21:01:14 +00:00
self.assertIn(
'Sphinx AutoAPI Index',
index_file
)
self.assertIn(
'Foo',
index_file
)
@pytest.mark.skipif(sphinx.version_info < (1, 4),
reason="Cannot override extensions in Sphinx 1.3")
def test_napoleon_integration(self):
with sphinx_build('pyexample'):
example_path = '_build/text/autoapi/example/index.txt'
with io.open(example_path, encoding='utf8') as example_handle:
example_file = example_handle.read()
# Check that docstrings are not transformed without napoleon loaded
self.assertIn(
'Args',
example_file
)
self.assertIn(
'Returns',
example_file
)
confoverrides={
'extensions': [
'autoapi.extension',
'sphinx.ext.autodoc',
'sphinx.ext.napoleon',
],
}
with sphinx_build('pyexample', confoverrides=confoverrides):
example_path = '_build/text/autoapi/example/index.txt'
with io.open(example_path, encoding='utf8') as example_handle:
example_file = example_handle.read()
self.assertIn(
'Parameters',
example_file
)
self.assertIn(
'Return type',
example_file
)
self.assertNotIn(
'Args',
example_file
)
class DotNetTests(LanguageIntegrationTests):
def _dotnet_read(self, path):
return json.load(open('../fixtures/dotnet.json'))
# Mock this because it's slow otherwise
def _dotnet_load(self, patterns, dirs, ignore=[]):
data = self.read_file(path='inmem')
self.paths['inmem'] = data
2015-08-03 18:49:18 +00:00
@staticmethod
def _dotnet_finished(app, exception):
pass
@patch('autoapi.mappers.dotnet.DotNetSphinxMapper.load', _dotnet_load)
@patch('autoapi.mappers.dotnet.DotNetSphinxMapper.read_file', _dotnet_read)
2015-08-03 18:49:18 +00:00
@patch('autoapi.mappers.dotnet.DotNetSphinxMapper.build_finished', _dotnet_finished)
def test_integration(self):
self._run_test(
2015-06-23 02:22:27 +00:00
'dotnetexample',
2016-03-26 01:17:05 +00:00
'_build/text/autoapi/Microsoft/AspNet/Identity/IUserStore-TUser/index.txt',
'Provides an abstraction for a store which manages user accounts.'
)
class IntegrationTests(LanguageIntegrationTests):
def test_template_overrides(self):
self._run_test(
2015-06-23 02:22:27 +00:00
'templateexample',
'_build/text/autoapi/example/index.txt',
'This is a fuction template override'
)
class TOCTreeTests(LanguageIntegrationTests):
def test_toctree_overrides(self):
self._run_test(
'toctreeexample',
'_build/text/index.txt',
'AutoAPI Index'
)
2016-11-04 02:52:54 +00:00
def test_toctree_domain_insertion(self):
"""
Test that the example_function gets added to the TOC Tree
"""
self._run_test(
'toctreeexample',
'_build/text/index.txt',
'* example_function'
)