core/tests/util/test_enum.py

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