"""Tests for emulated_roku library bindings.""" from unittest.mock import Mock, patch from homeassistant.components.emulated_roku.binding import EmulatedRoku, \ EVENT_ROKU_COMMAND, \ ATTR_SOURCE_NAME, ATTR_COMMAND_TYPE, ATTR_KEY, ATTR_APP_ID, \ ROKU_COMMAND_KEYPRESS, ROKU_COMMAND_KEYDOWN, \ ROKU_COMMAND_KEYUP, ROKU_COMMAND_LAUNCH from tests.common import mock_coro_func async def test_events_fired_properly(hass): """Test that events are fired correctly.""" binding = EmulatedRoku(hass, 'Test Emulated Roku', '1.2.3.4', 8060, None, None, None) events = [] roku_event_handler = None def instantiate(loop, handler, roku_usn, host_ip, listen_port, advertise_ip=None, advertise_port=None, bind_multicast=None): nonlocal roku_event_handler roku_event_handler = handler return Mock(start=mock_coro_func(), close=mock_coro_func()) def listener(event): events.append(event) with patch('emulated_roku.EmulatedRokuServer', instantiate): hass.bus.async_listen(EVENT_ROKU_COMMAND, listener) assert await binding.setup() is True assert roku_event_handler is not None roku_event_handler.on_keydown('Test Emulated Roku', 'A') roku_event_handler.on_keyup('Test Emulated Roku', 'A') roku_event_handler.on_keypress('Test Emulated Roku', 'C') roku_event_handler.launch('Test Emulated Roku', '1') await hass.async_block_till_done() assert len(events) == 4 assert events[0].event_type == EVENT_ROKU_COMMAND assert events[0].data[ATTR_COMMAND_TYPE] == ROKU_COMMAND_KEYDOWN assert events[0].data[ATTR_SOURCE_NAME] == 'Test Emulated Roku' assert events[0].data[ATTR_KEY] == 'A' assert events[1].event_type == EVENT_ROKU_COMMAND assert events[1].data[ATTR_COMMAND_TYPE] == ROKU_COMMAND_KEYUP assert events[1].data[ATTR_SOURCE_NAME] == 'Test Emulated Roku' assert events[1].data[ATTR_KEY] == 'A' assert events[2].event_type == EVENT_ROKU_COMMAND assert events[2].data[ATTR_COMMAND_TYPE] == ROKU_COMMAND_KEYPRESS assert events[2].data[ATTR_SOURCE_NAME] == 'Test Emulated Roku' assert events[2].data[ATTR_KEY] == 'C' assert events[3].event_type == EVENT_ROKU_COMMAND assert events[3].data[ATTR_COMMAND_TYPE] == ROKU_COMMAND_LAUNCH assert events[3].data[ATTR_SOURCE_NAME] == 'Test Emulated Roku' assert events[3].data[ATTR_APP_ID] == '1'