52 lines
1.4 KiB
Python
52 lines
1.4 KiB
Python
|
"""Test enum helpers."""
|
||
|
from enum import Enum, IntEnum, IntFlag
|
||
|
from typing import Any
|
||
|
|
||
|
import pytest
|
||
|
|
||
|
from homeassistant.backports.enum import StrEnum
|
||
|
from homeassistant.util.enum import try_parse_enum
|
||
|
|
||
|
|
||
|
class _AStrEnum(StrEnum):
|
||
|
VALUE = "value"
|
||
|
|
||
|
|
||
|
class _AnIntEnum(IntEnum):
|
||
|
VALUE = 1
|
||
|
|
||
|
|
||
|
class _AnIntFlag(IntFlag):
|
||
|
VALUE = 1
|
||
|
|
||
|
|
||
|
@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
|