Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- Manifest: python/mach/mach/test/python.toml
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
import sys
import types
from pathlib import Path
from unittest.mock import patch
from mozunit import main
from mach.base import MachError
from mach.test.conftest import TestBase
class Entry:
"""Stub replacement for pkg_resources.EntryPoint"""
def __init__(self, providers):
self.providers = providers
def load(self):
def _providers():
return self.providers
return _providers
class TestEntryPoints(TestBase):
"""Test integrating with setuptools entry points"""
provider_dir = Path(__file__).parent.resolve() / "providers"
def _run_help(self):
return self._run_mach(["help"], entry_point="mach.providers")
@patch("pkg_resources.iter_entry_points")
def test_load_entry_point_from_directory(self, mock):
# Ensure parent module is present otherwise we'll (likely) get
# an error due to unknown parent.
if "mach.commands" not in sys.modules:
mod = types.ModuleType("mach.commands")
sys.modules["mach.commands"] = mod
mock.return_value = [Entry([self.provider_dir])]
# Mach error raised due to conditions_invalid.py
with self.assertRaises(MachError):
self._run_help()
@patch("pkg_resources.iter_entry_points")
def test_load_entry_point_from_file(self, mock):
mock.return_value = [Entry([self.provider_dir / "basic.py"])]
result, stdout, stderr = self._run_help()
self.assertIsNone(result)
self.assertIn("cmd_foo", stdout)
if __name__ == "__main__":
main()