import ctypes import ctypes.util import importlib import os import types import unittest.mock import pytest import dlinfo # pylint: disable=redefined-outer-name @pytest.fixture def dlinfo_module_mac() -> types.ModuleType: with unittest.mock.patch('sys.platform', 'darwin'): dlinfo_module = importlib.reload(dlinfo) assert dlinfo_module.DLInfo.__module__ == 'dlinfo._macosx' return dlinfo_module @pytest.mark.parametrize('lib_name', [ 'SegFault', 'c', 'dl', 'python_grasp', ]) def test_dlinfo_path(dlinfo_module_mac, lib_name): lib_filename = ctypes.util.find_library(lib_name) if not lib_filename: pytest.xfail('lib{} not found'.format(lib_name)) lib = ctypes.cdll.LoadLibrary(lib_filename) lib_info = dlinfo_module_mac.DLInfo(lib) if os.path.exists(lib_info.path): # mac assert os.path.isabs(lib_info.path) assert lib_filename == os.path.basename(lib_info.path) else: # dyld_find mock assert lib_info.path == '/usr/lib/lib{}.dylib'.format(lib_name)