mirror of
https://github.com/home-assistant/core.git
synced 2025-07-29 18:28:14 +02:00
Add enum util (#87082)
* Add enum helper * docstring * Move to util * Add use case
This commit is contained in:
51
tests/util/test_enum.py
Normal file
51
tests/util/test_enum.py
Normal file
@ -0,0 +1,51 @@
|
||||
"""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
|
Reference in New Issue
Block a user