|
|
|
import io
|
|
|
|
import json
|
|
|
|
import os
|
|
|
|
import sys
|
|
|
|
import shutil
|
|
|
|
import unittest
|
|
|
|
from contextlib import contextmanager
|
|
|
|
|
|
|
|
from mock import patch
|
|
|
|
import pytest
|
|
|
|
|
|
|
|
import sphinx
|
|
|
|
from sphinx.application import Sphinx
|
|
|
|
|
|
|
|
|
|
|
|
@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):
|
|
|
|
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(
|
|
|
|
"jsexample",
|
|
|
|
"_build/text/autoapi/Circle/index.txt",
|
|
|
|
"Creates an instance of Circle",
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
class GoTests(LanguageIntegrationTests):
|
|
|
|
def _go_read(self, path, **kwargs):
|
|
|
|
return json.load(open("../fixtures/go.json"))
|
|
|
|
|
|
|
|
@patch("autoapi.mappers.go.GoSphinxMapper.read_file", _go_read)
|
|
|
|
def test_integration(self):
|
|
|
|
self._run_test(
|
|
|
|
"goexample",
|
|
|
|
"_build/text/autoapi/main/index.txt",
|
|
|
|
"CopyFuncs produces a json-annotated array of Func objects",
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def _dotnet_finished(app, exception):
|
|
|
|
pass
|
|
|
|
|
|
|
|
@patch("autoapi.mappers.dotnet.DotNetSphinxMapper.load", _dotnet_load)
|
|
|
|
@patch("autoapi.mappers.dotnet.DotNetSphinxMapper.read_file", _dotnet_read)
|
|
|
|
@patch("autoapi.mappers.dotnet.DotNetSphinxMapper.build_finished", _dotnet_finished)
|
|
|
|
def test_integration(self):
|
|
|
|
self._run_test(
|
|
|
|
"dotnetexample",
|
|
|
|
"_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(
|
|
|
|
"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", "API Reference")
|
|
|
|
|
|
|
|
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")
|