dlinfo_macosx_mock_test.py 1012 B

1234567891011121314151617181920212223242526272829303132333435
  1. import ctypes
  2. import ctypes.util
  3. import os
  4. import sys
  5. import unittest.mock
  6. import pytest
  7. def dyld_find_mock(name):
  8. # https://github.com/python/cpython/blob/master/Lib/ctypes/macholib/dyld.py#L116
  9. return os.path.join(os.sep, 'lib', name)
  10. @pytest.fixture
  11. def dlinfo_module_mac():
  12. with unittest.mock.patch('sys.platform', 'darwin'):
  13. sys.modules['ctypes.macholib.dylib'] = unittest.mock.Mock()
  14. sys.modules['ctypes.macholib.dylib'].dyld_find = dyld_find_mock
  15. return __import__('dlinfo')
  16. @pytest.mark.parametrize('lib_name', [
  17. 'c',
  18. 'dl',
  19. 'python_grasp',
  20. ])
  21. def test_dlinfo_path(dlinfo_module_mac, lib_name):
  22. lib_filename = ctypes.util.find_library(lib_name)
  23. if not lib_filename:
  24. pytest.xfail('lib{} not found'.format(lib_name))
  25. lib = ctypes.cdll.LoadLibrary(lib_filename)
  26. dlinfo = dlinfo_module_mac.DLInfo(lib)
  27. assert lib_filename == os.path.basename(dlinfo.path)
  28. assert os.path.join(os.sep, 'lib') == os.path.dirname(dlinfo.path)