| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- # Mixins for testing lights
- from homeassistant.components.light import ColorMode
- from ..helpers import assert_device_properties_set
- class BasicLightTests:
- def setUpBasicLight(self, dps, subject, testdata=(True, False)):
- self.basicLight = subject
- self.basicLightDps = dps
- self.basicLightOn = testdata[0]
- self.basicLightOff = testdata[1]
- def test_basic_light_supported_features(self):
- self.assertEqual(self.basicLight.supported_features, 0)
- def test_basic_light_supported_color_modes(self):
- self.assertCountEqual(
- self.basicLight.supported_color_modes,
- [ColorMode.ONOFF],
- )
- def test_basic_light_color_mode(self):
- self.assertEqual(self.basicLight.color_mode, ColorMode.ONOFF)
- def test_basic_light_has_no_brightness(self):
- self.assertIsNone(self.basicLight.brightness)
- def test_basic_light_has_no_effects(self):
- self.assertIsNone(self.basicLight.effect_list)
- self.assertIsNone(self.basicLight.effect)
- def test_basic_light_is_on(self):
- self.dps[self.basicLightDps] = self.basicLightOn
- self.assertTrue(self.basicLight.is_on)
- self.dps[self.basicLightDps] = self.basicLightOff
- self.assertFalse(self.basicLight.is_on)
- async def test_basic_light_turn_on(self):
- self.dps[self.basicLightDps] = self.basicLightOff
- async with assert_device_properties_set(
- self.basicLight._device, {self.basicLightDps: self.basicLightOn}
- ):
- await self.basicLight.async_turn_on()
- async def test_basic_light_turn_off(self):
- self.dps[self.basicLightDps] = self.basicLightOn
- async with assert_device_properties_set(
- self.basicLight._device, {self.basicLightDps: self.basicLightOff}
- ):
- await self.basicLight.async_turn_off()
- async def test_basic_light_toggle_turns_on_when_it_was_off(self):
- self.dps[self.basicLightDps] = self.basicLightOff
- async with assert_device_properties_set(
- self.basicLight._device,
- {self.basicLightDps: self.basicLightOn},
- ):
- await self.basicLight.async_toggle()
- async def test_basic_light_toggle_turns_off_when_it_was_on(self):
- self.dps[self.basicLightDps] = self.basicLightOn
- async with assert_device_properties_set(
- self.basicLight._device,
- {self.basicLightDps: self.basicLightOff},
- ):
- await self.basicLight.async_toggle()
- def test_basic_light_state_attributes(self):
- self.assertEqual(self.basicLight.extra_state_attributes, {})
- class MultiLightTests:
- def setUpMultiLights(self, lights):
- self.multiLight = {}
- self.multiLightDps = {}
- self.multiLightOn = {}
- self.multiLightOff = {}
- for light in lights:
- name = light["name"]
- subject = self.entities.get(name)
- testdata = light.get("testdata", (True, False))
- if subject is None:
- raise AttributeError(f"No light for {name} found.")
- self.multiLight[name] = subject
- self.multiLightDps[name] = light.get("dps")
- self.multiLightOn[name] = testdata[0]
- self.multiLightOff[name] = testdata[1]
- def test_multi_light_supported_features(self):
- for light in self.multiLight.values():
- self.assertEqual(light.supported_features, 0)
- def test_multi_light_supported_color_modes(self):
- for light in self.multiLight.values():
- self.assertCountEqual(
- light.supported_color_modes,
- [ColorMode.ONOFF],
- )
- def test_multi_light_color_mode(self):
- for light in self.multiLight.values():
- self.assertEqual(light.color_mode, ColorMode.ONOFF)
- def test_multi_lights_have_no_brightness(self):
- for light in self.multiLight.values():
- self.assertIsNone(light.brightness)
- def test_multi_lights_have_no_effects(self):
- for light in self.multiLight.values():
- self.assertIsNone(light.effect_list)
- self.assertIsNone(light.effect)
- def test_multi_light_is_on(self):
- for key, light in self.multiLight.items():
- dp_id = self.multiLightDps[key]
- self.dps[dp_id] = self.multiLightOn[key]
- self.assertTrue(light.is_on, f"{key} fails when ON")
- self.dps[dp_id] = self.multiLightOff[key]
- self.assertFalse(light.is_on, f"{key} fails when OFF")
- async def test_multi_light_turn_on(self):
- for key, light in self.multiLight.items():
- self.dps[self.multiLightDps[key]] = self.multiLightOff[key]
- async with assert_device_properties_set(
- light._device,
- {self.multiLightDps[key]: self.multiLightOn[key]},
- f"{key} failed to turn on",
- ):
- await light.async_turn_on()
- async def test_multi_light_turn_off(self):
- for key, light in self.multiLight.items():
- async with assert_device_properties_set(
- light._device,
- {self.multiLightDps[key]: self.multiLightOff[key]},
- f"{key} failed to turn off",
- ):
- await light.async_turn_off()
- async def test_multi_light_toggle_turns_on_when_it_was_off(self):
- for key, light in self.multiLight.items():
- self.dps[self.multiLightDps[key]] = self.multiLightOff[key]
- async with assert_device_properties_set(
- light._device,
- {self.multiLightDps[key]: self.multiLightOn[key]},
- f"{key} failed to toggle",
- ):
- await light.async_toggle()
- async def test_multi_light_toggle_turns_off_when_it_was_on(self):
- for key, light in self.multiLight.items():
- self.dps[self.multiLightDps[key]] = self.multiLightOn[key]
- async with assert_device_properties_set(
- light._device,
- {self.multiLightDps[key]: self.multiLightOff[key]},
- f"{key} failed to toggle",
- ):
- await light.async_toggle()
- def test_multi_light_state_attributes(self):
- for key, light in self.multiLight.items():
- self.assertEqual(
- light.extra_state_attributes,
- {},
- f"{key} extra_state_attributes mismatch",
- )
- class DimmableLightTests:
- def setUpDimmableLight(
- self,
- dps,
- subject,
- offval=0,
- tests=[(100, 100)],
- no_off=False,
- ):
- self.dimmableLight = subject
- self.dimmableLightDps = dps
- self.dimmableLightOff = offval
- self.dimmableLightTest = tests
- self.dimmableLightNoOff = no_off
- def test_dimmable_light_brightness(self):
- self.dps[self.dimmableLightDps] = self.dimmableLightOff
- if not self.dimmableLightNoOff:
- self.assertEqual(self.dimmableLight.brightness, 0)
- for dps, val in self.dimmableLightTest:
- self.dps[self.dimmableLightDps] = dps
- self.assertEqual(self.dimmableLight.brightness, val)
- def test_dimmable_light_state_attributes(self):
- self.assertEqual(self.dimmableLight.extra_state_attributes, {})
- async def test_dimmable_light_turn_off(self):
- if not self.dimmableLightNoOff:
- async with assert_device_properties_set(
- self.dimmableLight._device,
- {self.dimmableLightDps: self.dimmableLightOff},
- ):
- await self.dimmableLight.async_turn_off()
- async def test_dimmable_light_set_brightness(self):
- for dps, val in self.dimmableLightTest:
- async with assert_device_properties_set(
- self.dimmableLight._device,
- {self.dimmableLightDps: dps},
- ):
- await self.dimmableLight.async_turn_on(brightness=val)
- async def test_dimmable_light_set_brightness_to_off(self):
- if not self.dimmableLightNoOff:
- async with assert_device_properties_set(
- self.dimmableLight._device,
- {self.dimmableLightDps: self.dimmableLightOff},
- ):
- await self.dimmableLight.async_turn_on(brightness=0)
- async def test_dimmable_light_toggle_turns_off_when_it_was_on(self):
- if not self.dimmableLightNoOff:
- self.dps[self.dimmableLightDps] = self.dimmableLightTest[0][0]
- async with assert_device_properties_set(
- self.dimmableLight._device,
- {self.dimmableLightDps: self.dimmableLightOff},
- ):
- await self.dimmableLight.async_toggle()
|