Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

# 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
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
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()