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