mirror of https://github.com/home-assistant/core
112 lines
2.9 KiB
Python
112 lines
2.9 KiB
Python
"""Tests for pylint hass_enforce_sorted_platforms plugin."""
|
|
from __future__ import annotations
|
|
|
|
import astroid
|
|
from pylint.checkers import BaseChecker
|
|
from pylint.interfaces import UNDEFINED
|
|
from pylint.testutils import MessageTest
|
|
from pylint.testutils.unittest_linter import UnittestLinter
|
|
from pylint.utils.ast_walker import ASTWalker
|
|
import pytest
|
|
|
|
from . import assert_adds_messages, assert_no_messages
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"code",
|
|
[
|
|
pytest.param(
|
|
"""
|
|
PLATFORMS = [Platform.SENSOR]
|
|
""",
|
|
id="one_platform",
|
|
),
|
|
pytest.param(
|
|
"""
|
|
PLATFORMS = [Platform.BINARY_SENSOR, Platform.BUTTON, Platform.SENSOR]
|
|
""",
|
|
id="multiple_platforms",
|
|
),
|
|
pytest.param(
|
|
"""
|
|
PLATFORMS: list[str] = [Platform.SENSOR]
|
|
""",
|
|
id="typed_on_platform",
|
|
),
|
|
pytest.param(
|
|
"""
|
|
PLATFORMS: list[str] = [Platform.BINARY_SENSOR, Platform.BUTTON, Platform.SENSOR]
|
|
""",
|
|
id="typed_multiple_platform",
|
|
),
|
|
],
|
|
)
|
|
def test_enforce_sorted_platforms(
|
|
linter: UnittestLinter,
|
|
enforce_sorted_platforms_checker: BaseChecker,
|
|
code: str,
|
|
) -> None:
|
|
"""Good test cases."""
|
|
root_node = astroid.parse(code, "homeassistant.components.pylint_test")
|
|
walker = ASTWalker(linter)
|
|
walker.add_checker(enforce_sorted_platforms_checker)
|
|
|
|
with assert_no_messages(linter):
|
|
walker.walk(root_node)
|
|
|
|
|
|
def test_enforce_sorted_platforms_bad(
|
|
linter: UnittestLinter,
|
|
enforce_sorted_platforms_checker: BaseChecker,
|
|
) -> None:
|
|
"""Bad test case."""
|
|
assign_node = astroid.extract_node(
|
|
"""
|
|
PLATFORMS = [Platform.SENSOR, Platform.BINARY_SENSOR, Platform.BUTTON]
|
|
""",
|
|
"homeassistant.components.pylint_test",
|
|
)
|
|
|
|
with assert_adds_messages(
|
|
linter,
|
|
MessageTest(
|
|
msg_id="hass-enforce-sorted-platforms",
|
|
line=2,
|
|
node=assign_node,
|
|
args=None,
|
|
confidence=UNDEFINED,
|
|
col_offset=0,
|
|
end_line=2,
|
|
end_col_offset=70,
|
|
),
|
|
):
|
|
enforce_sorted_platforms_checker.visit_assign(assign_node)
|
|
|
|
|
|
def test_enforce_sorted_platforms_bad_typed(
|
|
linter: UnittestLinter,
|
|
enforce_sorted_platforms_checker: BaseChecker,
|
|
) -> None:
|
|
"""Bad typed test case."""
|
|
assign_node = astroid.extract_node(
|
|
"""
|
|
PLATFORMS: list[str] = [Platform.SENSOR, Platform.BINARY_SENSOR, Platform.BUTTON]
|
|
""",
|
|
"homeassistant.components.pylint_test",
|
|
)
|
|
|
|
with assert_adds_messages(
|
|
linter,
|
|
MessageTest(
|
|
msg_id="hass-enforce-sorted-platforms",
|
|
line=2,
|
|
node=assign_node,
|
|
args=None,
|
|
confidence=UNDEFINED,
|
|
col_offset=0,
|
|
end_line=2,
|
|
end_col_offset=81,
|
|
),
|
|
):
|
|
enforce_sorted_platforms_checker.visit_annassign(assign_node)
|