mirror of https://github.com/home-assistant/core
53 lines
1.4 KiB
Python
53 lines
1.4 KiB
Python
"""Test enum helpers."""
|
|
|
|
from enum import Enum, IntEnum, IntFlag, StrEnum
|
|
from typing import Any
|
|
|
|
import pytest
|
|
|
|
from homeassistant.util.enum import try_parse_enum
|
|
|
|
|
|
class _AStrEnum(StrEnum):
|
|
VALUE = "value"
|
|
|
|
|
|
class _AnIntEnum(IntEnum):
|
|
VALUE = 1
|
|
|
|
|
|
class _AnIntFlag(IntFlag):
|
|
VALUE = 1
|
|
SECOND = 2
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("enum_type", "value", "expected"),
|
|
[
|
|
# StrEnum valid checks
|
|
(_AStrEnum, _AStrEnum.VALUE, _AStrEnum.VALUE),
|
|
(_AStrEnum, "value", _AStrEnum.VALUE),
|
|
# StrEnum invalid checks
|
|
(_AStrEnum, "invalid", None),
|
|
(_AStrEnum, 1, None),
|
|
(_AStrEnum, None, None),
|
|
# IntEnum valid checks
|
|
(_AnIntEnum, _AnIntEnum.VALUE, _AnIntEnum.VALUE),
|
|
(_AnIntEnum, 1, _AnIntEnum.VALUE),
|
|
# IntEnum invalid checks
|
|
(_AnIntEnum, "value", None),
|
|
(_AnIntEnum, 2, None),
|
|
(_AnIntEnum, None, None),
|
|
# IntFlag valid checks
|
|
(_AnIntFlag, _AnIntFlag.VALUE, _AnIntFlag.VALUE),
|
|
(_AnIntFlag, 1, _AnIntFlag.VALUE),
|
|
(_AnIntFlag, 2, _AnIntFlag(2)),
|
|
# IntFlag invalid checks
|
|
(_AnIntFlag, "value", None),
|
|
(_AnIntFlag, None, None),
|
|
],
|
|
)
|
|
def test_try_parse(enum_type: type[Enum], value: Any, expected: Enum | None) -> None:
|
|
"""Test parsing of values into an Enum."""
|
|
assert try_parse_enum(enum_type, value) is expected
|