class MotorControllerTest(unittest.TestCase):
    
    def setUp(self):
        p = MockPwm()
        
        self.p_output = MockPidOutput()
        p_controller = MockPid(self.p_output)
        
        q = MockQep()
        
        self.m = MotorController(p, p_controller, self.p_output, q)
        self.m_pid_disabled = MotorController(p, p_controller, self.p_output, q, False)
        pass
    
    def test_motor_controller_init(self):
        
        self.assertTrue(isinstance(self.m, Thread))
        self.assertTrue(isinstance(self.m.pwm, MockPwm))
        self.assertTrue(isinstance(self.m.qep, MockQep))
        self.assertTrue(isinstance(self.m.pid, MockPid))

        # Test default values
        self.assertEqual(self.m.pid_enabled, True)
        
    def test_motor_controlling(self):
        
        self.m.set_speed(1.0)
        
        self.assertEqual(1.0, self.m.pid.set_point)
        
        time.sleep(0.1)
        
        self.assertEqual(self.p_output.value, 1.0)
        
        self.m_pid_disabled.set_speed(1.0)
        
        time.sleep(0.1)
        
        self.assertEqual(1.0, self.m_pid_disabled.speed_to_command)