summaryrefslogtreecommitdiff
path: root/tests/test_ext_autodoc_importer.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_ext_autodoc_importer.py')
-rw-r--r--tests/test_ext_autodoc_importer.py78
1 files changed, 64 insertions, 14 deletions
diff --git a/tests/test_ext_autodoc_importer.py b/tests/test_ext_autodoc_importer.py
index 108d06d7c..08920cc7e 100644
--- a/tests/test_ext_autodoc_importer.py
+++ b/tests/test_ext_autodoc_importer.py
@@ -1,15 +1,34 @@
-# -*- coding: utf-8 -*-
"""
test_ext_autodoc_importer
~~~~~~~~~~~~~~~~~~~~~~~~~
Test the autodoc extension.
- :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS.
+ :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
:license: BSD, see LICENSE for details.
"""
-from sphinx.ext.autodoc.importer import _MockObject, _MockModule
+import abc
+import sys
+
+import pytest
+
+from sphinx.ext.autodoc.importer import _MockModule, _MockObject, mock
+
+
+def test_MockModule():
+ mock = _MockModule('mocked_module', None)
+ 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)
+
+ assert repr(mock.some_attr) == 'mocked_module.some_attr'
+ assert repr(mock.some_method) == 'mocked_module.some_method'
+ assert repr(mock.attr1.attr2) == 'mocked_module.attr1.attr2'
+ assert repr(mock.attr1.attr2.meth) == 'mocked_module.attr1.attr2.meth'
+
+ assert repr(mock) == 'mocked_module'
def test_MockObject():
@@ -32,16 +51,47 @@ def test_MockObject():
assert isinstance(obj.other_method(), SubClass)
-def test_MockModule():
- mock = _MockModule('mocked_module', None)
- 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)
+def test_mock():
+ modname = 'sphinx.unknown'
+ submodule = modname + '.submodule'
+ assert modname not in sys.modules
+ with pytest.raises(ImportError):
+ __import__(modname)
- assert repr(mock.some_attr) == 'mocked_module.some_attr'
- assert repr(mock.some_method) == 'mocked_module.some_method'
- assert repr(mock.attr1.attr2) == 'mocked_module.attr1.attr2'
- assert repr(mock.attr1.attr2.meth) == 'mocked_module.attr1.attr2.meth'
+ with mock([modname]):
+ __import__(modname)
+ assert modname in sys.modules
+ assert isinstance(sys.modules[modname], _MockModule)
- assert repr(mock) == 'mocked_module'
+ # 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')
+
+
+@pytest.mark.skipif(sys.version_info < (3, 7), reason='Only for py37 or above')
+def test_abc_MockObject():
+ mock = _MockObject()
+
+ class Base:
+ @abc.abstractmethod
+ def __init__(self):
+ pass
+
+ class Derived(Base, mock.SubClass):
+ pass
+
+ obj = Derived()
+ assert isinstance(obj, Base)
+ assert isinstance(obj, _MockObject)
+ assert isinstance(obj.some_method(), Derived)