1import os 2import pytest 3import pkg_resources 4 5 6# A mock setuptools dist object. 7class MockDist(): 8 def __init__(self, datafiles, module_name): 9 self.datafiles = datafiles 10 self.module_name = module_name 11 12 def get_resource_filename(self, *args, **kwargs): 13 return os.path.join(self.datafiles.dirname, 14 self.datafiles.basename, 15 self.module_name) 16 17 18# A mock setuptools entry object. 19class MockEntry(): 20 def __init__(self, datafiles, module_name): 21 self.dist = MockDist(datafiles, module_name) 22 self.module_name = module_name 23 24 25# Patch setuptools.get_entry_info 26# 27# Use result = entry_fixture(datafiles, entry_point, lookup_string) to 28# patch setuptools for external plugin loading. 29# 30@pytest.fixture() 31def entry_fixture(monkeypatch): 32 def patch(datafiles, entry_point, lookup_string): 33 dist, package = lookup_string.split(':') 34 35 def mock_entry(pdist, pentry_point, ppackage): 36 assert(pdist == dist) 37 assert(pentry_point == entry_point) 38 assert(ppackage == package) 39 40 return MockEntry(datafiles, package) 41 monkeypatch.setattr(pkg_resources, 'get_entry_info', mock_entry) 42 43 return patch 44