import math import sys from importlib import metadata import pytest @pytest.fixture(autouse=True) def cleanup(): modules = dict(sys.modules) meta_path = list(sys.meta_path) try: yield finally: sys.modules.clear() sys.modules.update(modules) sys.meta_path[:] = meta_path class FakeDistribution(metadata.Distribution): def __init__(self, name, *entry_points): self._name = name self._entry_points = metadata.EntryPoints(entry_points) @property def name(self): return self._name @property def entry_points(self): return self._entry_points def read_text(self, filename): raise NotImplementedError def locate_file(self, path): raise NotImplementedError class FakeDistributionFinder(metadata.DistributionFinder): def __init__(self, **kwargs): self.distributions = [ FakeDistribution(name, *entry_points) for name, entry_points in kwargs.items() ] def find_distributions(self, ctx): return self.distributions def setup(self): sys.meta_path.append(self) def test_entrypoints(): FakeDistributionFinder(test=[metadata.EntryPoint('test-math', 'math', 'testgroup')]).setup() entry_point, = metadata.entry_points(group='testgroup') assert entry_point.name == 'test-math' assert entry_point.load() is math