def test_reset_removed_button_and_analog_handlers_and_clears_stored_data( self): mock = Mock() rc = RemoteController() rc.tick(RemoteControllerCommand(buttons=[False] * 32, analog=[])) rc.on_analog_values([2, 4], mock) rc.on_analog_values([3], mock) rc.on_button_pressed(5, mock) rc.tick( RemoteControllerCommand( buttons=[True] * 32, analog=[255, 254, 253, 123, 43, 65, 45, 42])) self.assertEqual(3, mock.call_count) self.assertEqual(254, rc.analog_value(1)) self.assertTrue(rc.is_button_pressed(1)) mock.reset_mock() rc.reset() self.assertEqual(0, rc.analog_value(1)) self.assertFalse(rc.is_button_pressed(1)) rc.tick( RemoteControllerCommand( buttons=[True] * 32, analog=[255, 254, 253, 123, 43, 65, 45, 42])) self.assertEqual(0, mock.call_count)
def test_last_button_pressed_state_can_be_read(self): rc = RemoteController() rc.tick(RemoteControllerCommand(buttons=[False] * 32, analog=[0] * 10)) for i in range(32): buttons = [False] * 32 # ith button is pressed buttons[i] = True rc.tick(RemoteControllerCommand(buttons=buttons, analog=[0] * 10)) for j in range(32): self.assertEqual(buttons[i], rc.is_button_pressed(i))
def simple_control_callback(self, data): analog_values = data[1:11] button_values = bits_to_bool_list(data[11:15]) message_handler = self._message_handler if message_handler: message_handler( RemoteControllerCommand(analog=analog_values, buttons=button_values)) return True
def simple_control_callback(self, data): # print(repr(data)) # counter = data[0] analog_values = data[1:11] button_values = self.extract_button_states(data[11:15]) self._message_handler( RemoteControllerCommand(analog=analog_values, buttons=button_values)) return True
def test_remote_controller_buttons_need_initial_zero_state(self): mock = Mock() rc = RemoteController() rc.on_button_pressed(5, mock) rc.tick(RemoteControllerCommand(buttons=[True] * 32, analog=[])) self.assertEqual(0, mock.call_count) self.assertFalse(rc.is_button_pressed(1)) rc.tick(RemoteControllerCommand(buttons=[False] * 32, analog=[])) rc.tick(RemoteControllerCommand(buttons=[True] * 32, analog=[])) self.assertEqual(1, mock.call_count) self.assertTrue(rc.is_button_pressed(1)) rc.tick(RemoteControllerCommand(buttons=[False] * 32, analog=[])) mock.reset_mock() rc.reset() rc.tick(RemoteControllerCommand(buttons=[True] * 32, analog=[])) rc.tick(RemoteControllerCommand(buttons=[True] * 32, analog=[])) self.assertEqual(0, mock.call_count) self.assertFalse(rc.is_button_pressed(1))
def test_last_analog_channel_state_can_be_read(self): rc = RemoteController() for i in range(10): analog = [0] * 10 # ith button is pressed analog[i] = 255 rc.tick( RemoteControllerCommand(buttons=[False] * 32, analog=analog)) for j in range(10): self.assertEqual(analog[i], rc.analog_value(i))
def test_buttons_are_edge_triggered(self): rc = RemoteController() mocks = [] for i in range(32): mock = Mock() rc.on_button_pressed(i, mock) mocks.append(mock) for i in range(32): buttons = [False] * 32 rc.tick(RemoteControllerCommand(buttons=buttons, analog=[0] * 10)) # ith button is pressed buttons[i] = True rc.tick(RemoteControllerCommand(buttons=buttons, analog=[0] * 10)) # button is kept pressed rc.tick(RemoteControllerCommand(buttons=buttons, analog=[0] * 10)) for j in range(32): self.assertEqual(mocks[j].call_count, 1 if i == j else 0) mocks[j].reset_mock()
def test_requested_channels_are_passed_to_analog_handlers(self): rc = RemoteController() mock24 = Mock() mock3 = Mock() mock_invalid = Mock() rc.on_analog_values([2, 4], mock24) rc.on_analog_values([3], mock3) rc.on_analog_values([3, 11], mock_invalid) rc.tick(RemoteControllerCommand(buttons=[False] * 32, analog=[255, 254, 253, 123, 43, 65, 45, 42])) self.assertEqual(mock24.call_count, 1) self.assertEqual(mock3.call_count, 1) # invalid channels are silently ignored self.assertEqual(mock_invalid.call_count, 0) self.assertEqual(mock24.call_args[0][0], [253, 43]) self.assertEqual(mock3.call_args[0][0], [123])