mirror of https://github.com/home-assistant/core
141 lines
4.8 KiB
Python
141 lines
4.8 KiB
Python
"""Configuration for pylint tests."""
|
|
|
|
from importlib.util import module_from_spec, spec_from_file_location
|
|
from pathlib import Path
|
|
import sys
|
|
from types import ModuleType
|
|
|
|
from pylint.checkers import BaseChecker
|
|
from pylint.testutils.unittest_linter import UnittestLinter
|
|
import pytest
|
|
|
|
BASE_PATH = Path(__file__).parents[2]
|
|
|
|
|
|
def _load_plugin_from_file(module_name: str, file: str) -> ModuleType:
|
|
"""Load plugin from file path."""
|
|
spec = spec_from_file_location(
|
|
module_name,
|
|
str(BASE_PATH.joinpath(file)),
|
|
)
|
|
assert spec and spec.loader
|
|
|
|
module = module_from_spec(spec)
|
|
sys.modules[module_name] = module
|
|
spec.loader.exec_module(module)
|
|
return module
|
|
|
|
|
|
@pytest.fixture(name="hass_enforce_type_hints", scope="package")
|
|
def hass_enforce_type_hints_fixture() -> ModuleType:
|
|
"""Fixture to provide a requests mocker."""
|
|
return _load_plugin_from_file(
|
|
"hass_enforce_type_hints",
|
|
"pylint/plugins/hass_enforce_type_hints.py",
|
|
)
|
|
|
|
|
|
@pytest.fixture(name="linter")
|
|
def linter_fixture() -> UnittestLinter:
|
|
"""Fixture to provide a requests mocker."""
|
|
return UnittestLinter()
|
|
|
|
|
|
@pytest.fixture(name="type_hint_checker")
|
|
def type_hint_checker_fixture(hass_enforce_type_hints, linter) -> BaseChecker:
|
|
"""Fixture to provide a requests mocker."""
|
|
type_hint_checker = hass_enforce_type_hints.HassTypeHintChecker(linter)
|
|
type_hint_checker.module = "homeassistant.components.pylint_test"
|
|
return type_hint_checker
|
|
|
|
|
|
@pytest.fixture(name="hass_imports", scope="package")
|
|
def hass_imports_fixture() -> ModuleType:
|
|
"""Fixture to provide a requests mocker."""
|
|
return _load_plugin_from_file(
|
|
"hass_imports",
|
|
"pylint/plugins/hass_imports.py",
|
|
)
|
|
|
|
|
|
@pytest.fixture(name="imports_checker")
|
|
def imports_checker_fixture(hass_imports, linter) -> BaseChecker:
|
|
"""Fixture to provide a requests mocker."""
|
|
type_hint_checker = hass_imports.HassImportsFormatChecker(linter)
|
|
type_hint_checker.module = "homeassistant.components.pylint_test"
|
|
return type_hint_checker
|
|
|
|
|
|
@pytest.fixture(name="hass_enforce_super_call", scope="package")
|
|
def hass_enforce_super_call_fixture() -> ModuleType:
|
|
"""Fixture to provide a requests mocker."""
|
|
return _load_plugin_from_file(
|
|
"hass_enforce_super_call",
|
|
"pylint/plugins/hass_enforce_super_call.py",
|
|
)
|
|
|
|
|
|
@pytest.fixture(name="super_call_checker")
|
|
def super_call_checker_fixture(hass_enforce_super_call, linter) -> BaseChecker:
|
|
"""Fixture to provide a requests mocker."""
|
|
super_call_checker = hass_enforce_super_call.HassEnforceSuperCallChecker(linter)
|
|
super_call_checker.module = "homeassistant.components.pylint_test"
|
|
return super_call_checker
|
|
|
|
|
|
@pytest.fixture(name="hass_enforce_sorted_platforms", scope="package")
|
|
def hass_enforce_sorted_platforms_fixture() -> ModuleType:
|
|
"""Fixture to the content for the hass_enforce_sorted_platforms check."""
|
|
return _load_plugin_from_file(
|
|
"hass_enforce_sorted_platforms",
|
|
"pylint/plugins/hass_enforce_sorted_platforms.py",
|
|
)
|
|
|
|
|
|
@pytest.fixture(name="enforce_sorted_platforms_checker")
|
|
def enforce_sorted_platforms_checker_fixture(
|
|
hass_enforce_sorted_platforms, linter
|
|
) -> BaseChecker:
|
|
"""Fixture to provide a hass_enforce_sorted_platforms checker."""
|
|
enforce_sorted_platforms_checker = (
|
|
hass_enforce_sorted_platforms.HassEnforceSortedPlatformsChecker(linter)
|
|
)
|
|
enforce_sorted_platforms_checker.module = "homeassistant.components.pylint_test"
|
|
return enforce_sorted_platforms_checker
|
|
|
|
|
|
@pytest.fixture(name="hass_enforce_class_module", scope="package")
|
|
def hass_enforce_class_module_fixture() -> ModuleType:
|
|
"""Fixture to the content for the hass_enforce_class_module check."""
|
|
return _load_plugin_from_file(
|
|
"hass_enforce_class_module",
|
|
"pylint/plugins/hass_enforce_class_module.py",
|
|
)
|
|
|
|
|
|
@pytest.fixture(name="enforce_class_module_checker")
|
|
def enforce_class_module_fixture(hass_enforce_class_module, linter) -> BaseChecker:
|
|
"""Fixture to provide a hass_enforce_class_module checker."""
|
|
enforce_class_module_checker = hass_enforce_class_module.HassEnforceClassModule(
|
|
linter
|
|
)
|
|
enforce_class_module_checker.module = "homeassistant.components.pylint_test"
|
|
return enforce_class_module_checker
|
|
|
|
|
|
@pytest.fixture(name="hass_decorator", scope="package")
|
|
def hass_decorator_fixture() -> ModuleType:
|
|
"""Fixture to provide a pylint plugin."""
|
|
return _load_plugin_from_file(
|
|
"hass_imports",
|
|
"pylint/plugins/hass_decorator.py",
|
|
)
|
|
|
|
|
|
@pytest.fixture(name="decorator_checker")
|
|
def decorator_checker_fixture(hass_decorator, linter) -> BaseChecker:
|
|
"""Fixture to provide a pylint checker."""
|
|
type_hint_checker = hass_decorator.HassDecoratorChecker(linter)
|
|
type_hint_checker.module = "homeassistant.components.pylint_test"
|
|
return type_hint_checker
|