2018-05-20 09:55:36 -05:00
|
|
|
"""
|
|
|
|
test_ext_autodoc_importer
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
Test the autodoc extension.
|
|
|
|
|
2019-01-02 01:00:30 -06:00
|
|
|
:copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
|
2018-05-20 09:55:36 -05:00
|
|
|
:license: BSD, see LICENSE for details.
|
|
|
|
"""
|
|
|
|
|
2018-12-04 07:49:53 -06:00
|
|
|
import sys
|
|
|
|
|
|
|
|
import pytest
|
|
|
|
|
|
|
|
from sphinx.ext.autodoc.importer import _MockModule, _MockObject, mock
|
2018-05-20 09:55:36 -05:00
|
|
|
|
|
|
|
|
|
|
|
def test_MockObject():
|
|
|
|
mock = _MockObject()
|
|
|
|
assert isinstance(mock.some_attr, _MockObject)
|
|
|
|
assert isinstance(mock.some_method, _MockObject)
|
|
|
|
assert isinstance(mock.attr1.attr2, _MockObject)
|
|
|
|
assert isinstance(mock.attr1.attr2.meth(), _MockObject)
|
|
|
|
|
|
|
|
class SubClass(mock.SomeClass):
|
|
|
|
"""docstring of SubClass"""
|
|
|
|
def method(self):
|
|
|
|
return "string"
|
|
|
|
|
|
|
|
obj = SubClass()
|
|
|
|
assert SubClass.__doc__ == "docstring of SubClass"
|
|
|
|
assert isinstance(obj, SubClass)
|
|
|
|
assert obj.method() == "string"
|
|
|
|
assert isinstance(obj.other_method(), SubClass)
|
2018-12-04 07:49:53 -06:00
|
|
|
|
|
|
|
|
|
|
|
def test_mock():
|
|
|
|
modname = 'sphinx.unknown'
|
|
|
|
submodule = modname + '.submodule'
|
|
|
|
assert modname not in sys.modules
|
|
|
|
with pytest.raises(ImportError):
|
|
|
|
__import__(modname)
|
|
|
|
|
|
|
|
with mock([modname]):
|
|
|
|
__import__(modname)
|
|
|
|
assert modname in sys.modules
|
|
|
|
assert isinstance(sys.modules[modname], _MockModule)
|
|
|
|
|
|
|
|
# submodules are also mocked
|
|
|
|
__import__(submodule)
|
|
|
|
assert submodule in sys.modules
|
|
|
|
assert isinstance(sys.modules[submodule], _MockModule)
|
|
|
|
|
|
|
|
assert modname not in sys.modules
|
|
|
|
with pytest.raises(ImportError):
|
|
|
|
__import__(modname)
|
|
|
|
|
|
|
|
|
|
|
|
def test_mock_does_not_follow_upper_modules():
|
|
|
|
with mock(['sphinx.unknown.module']):
|
|
|
|
with pytest.raises(ImportError):
|
|
|
|
__import__('sphinx.unknown')
|