mirror of
https://github.com/esphome/esphome.git
synced 2026-08-22 22:26:21 +00:00
58 lines
1.7 KiB
Python
58 lines
1.7 KiB
Python
import pytest
|
|
|
|
from esphome.components.esp32_rmt_led_strip.light import (
|
|
CONF_IS_WRGB,
|
|
CONF_RGBW_ORDER,
|
|
_split_rgbw_order,
|
|
_validate_rgbw_order,
|
|
_validate_rgbw_order_exclusivity,
|
|
)
|
|
import esphome.config_validation as cv
|
|
from esphome.const import CONF_IS_RGBW
|
|
|
|
|
|
def test_validate_rgbw_order() -> None:
|
|
assert _validate_rgbw_order("rwgb") == "RWGB"
|
|
|
|
|
|
@pytest.mark.parametrize("rgbw_order", ["RGB", "RRGB", "RGBWW"])
|
|
def test_validate_rgbw_order_rejects_invalid_order(rgbw_order: str) -> None:
|
|
with pytest.raises(cv.Invalid, match="permutation of RGBW"):
|
|
_validate_rgbw_order(rgbw_order)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("rgbw_order", "expected"),
|
|
[
|
|
("WRGB", ("RGB", 0)),
|
|
("RWGB", ("RGB", 1)),
|
|
("GWRB", ("GRB", 1)),
|
|
("RGBW", ("RGB", 3)),
|
|
],
|
|
)
|
|
def test_split_rgbw_order(rgbw_order: str, expected: tuple[str, int]) -> None:
|
|
assert _split_rgbw_order(rgbw_order) == expected
|
|
|
|
|
|
@pytest.mark.parametrize("conflict", [CONF_IS_RGBW, CONF_IS_WRGB])
|
|
def test_rgbw_order_is_mutually_exclusive(conflict: str) -> None:
|
|
with pytest.raises(cv.Invalid, match="cannot be used with"):
|
|
_validate_rgbw_order_exclusivity(
|
|
{
|
|
CONF_RGBW_ORDER: "RGBW",
|
|
CONF_IS_RGBW: conflict == CONF_IS_RGBW,
|
|
CONF_IS_WRGB: conflict == CONF_IS_WRGB,
|
|
}
|
|
)
|
|
|
|
|
|
@pytest.mark.parametrize("legacy_option", [CONF_IS_RGBW, CONF_IS_WRGB])
|
|
def test_rgbw_order_allows_disabled_legacy_options(legacy_option: str) -> None:
|
|
config = {
|
|
CONF_RGBW_ORDER: "RGBW",
|
|
CONF_IS_RGBW: False,
|
|
CONF_IS_WRGB: False,
|
|
}
|
|
config[legacy_option] = False
|
|
assert _validate_rgbw_order_exclusivity(config) is config
|