diff options
author | Takeshi KOMIYA <i.tkomiya@gmail.com> | 2019-02-11 01:38:26 +0900 |
---|---|---|
committer | Takeshi KOMIYA <i.tkomiya@gmail.com> | 2019-02-11 01:38:26 +0900 |
commit | 453ed5e29a23ca906f1560fefea9d798f06ae04e (patch) | |
tree | 15465be1631d93531ac058029458b948ae61809c /tests/test_ext_autodoc_importer.py | |
parent | 4d94c3c97b39c7566d6d2eb5dafc58b67f09febc (diff) | |
parent | 3a237f7f4df083ffec8aabb7b8aa848afd63390b (diff) | |
download | sphinx-git-453ed5e29a23ca906f1560fefea9d798f06ae04e.tar.gz |
Merge branch 'master' into 5394_meaningful_annotations_for_mock
Diffstat (limited to 'tests/test_ext_autodoc_importer.py')
-rw-r--r-- | tests/test_ext_autodoc_importer.py | 78 |
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) |