|
| 1 | +import builtins |
1 | 2 | import ctypes |
2 | 3 | import ctypes.util |
3 | 4 | import os |
|
6 | 7 |
|
7 | 8 | import pytest |
8 | 9 |
|
| 10 | +BUILTIN_IMPORT = builtins.__import__ |
| 11 | + |
9 | 12 |
|
10 | 13 | def dyld_find_mock(name): |
11 | 14 | # https://github.com/python/cpython/blob/master/Lib/ctypes/macholib/dyld.py#L116 |
12 | 15 | return os.path.join(os.sep, 'lib', name) |
13 | 16 |
|
14 | 17 |
|
| 18 | +def import_mock(name, *args): |
| 19 | + if name == 'ctypes.macholib.dyld': |
| 20 | + dyld_module = unittest.mock.MagicMock() |
| 21 | + dyld_module.dyld_find = dyld_find_mock |
| 22 | + return dyld_module |
| 23 | + return BUILTIN_IMPORT(name, *args) |
| 24 | + |
| 25 | + |
15 | 26 | @pytest.fixture |
16 | 27 | def dlinfo_module_mac() -> types.ModuleType: |
17 | 28 | with unittest.mock.patch('sys.platform', 'darwin'): |
18 | | - dyld_module = unittest.mock.MagicMock() |
19 | | - dyld_module.dyld_find = dyld_find_mock |
20 | | - with unittest.mock.patch.dict('sys.modules', |
21 | | - {'ctypes': unittest.mock.MagicMock(), |
22 | | - 'ctypes.macholib': unittest.mock.MagicMock(), |
23 | | - 'ctypes.macholib.dyld': dyld_module}): |
| 29 | + with unittest.mock.patch('builtins.__import__', import_mock): |
24 | 30 | dlinfo_module = __import__('dlinfo') |
25 | | - assert dlinfo_module.DLInfo.__module__ == 'dlinfo._macosx' |
26 | | - return dlinfo_module |
| 31 | + assert dlinfo_module.DLInfo.__module__ == 'dlinfo._macosx' |
| 32 | + return dlinfo_module |
27 | 33 |
|
28 | 34 |
|
29 | 35 | @pytest.mark.parametrize('lib_name', [ |
|
0 commit comments