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_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))