Esempio n. 1
0
    def test__determine_pilot(self):
        determine_pilot = DeterminePilot()

        pitch_capt = Mock()
        pitch_fo = Mock()
        roll_capt = Mock()
        roll_fo = Mock()
        cc_capt = Mock()
        cc_fo = Mock()
        pitch_capt.array = Mock()
        pitch_fo.array = Mock()
        roll_capt.array = Mock()
        roll_fo.array = Mock()
        cc_capt.array = Mock()
        cc_fo.array = Mock()
        ap1 = Mock()
        ap2 = Mock()
        phase = Mock()

        determine_pilot._autopilot_engaged = Mock()
        determine_pilot._controls_in_use = Mock()
        determine_pilot._control_column_in_use = Mock()
        determine_pilot.set_flight_attr = Mock()

        def reset_all_mocks():
            determine_pilot._autopilot_engaged.reset_mock()
            determine_pilot._controls_in_use.reset_mock()
            determine_pilot._control_column_in_use.reset_mock()
            determine_pilot.set_flight_attr.reset_mock()

        # Controls in use, no phase.
        reset_all_mocks()
        pilot = determine_pilot._determine_pilot(
            None, pitch_capt, pitch_fo, roll_capt, roll_fo, cc_capt, cc_fo,
            None, None, None)
        self.assertFalse(determine_pilot._autopilot_engaged.called)
        self.assertFalse(determine_pilot._controls_in_use.called)
        self.assertEqual(pilot, None)
        # Controls in use with phase. Pilot cannot be discerned.
        reset_all_mocks()
        determine_pilot._controls_in_use.return_value = None
        determine_pilot._control_column_in_use.return_value = None
        pilot = determine_pilot._determine_pilot(
            None, pitch_capt, pitch_fo, roll_capt, roll_fo, cc_capt, cc_fo, 
            phase, None, None)
        self.assertFalse(determine_pilot._autopilot_engaged.called)
        determine_pilot._controls_in_use.assert_called_once_with(
            pitch_capt.array, pitch_fo.array, roll_capt.array, roll_fo.array,
            phase)
        determine_pilot._control_column_in_use.assert_called_once_with(
            cc_capt.array, cc_fo.array, phase)
        self.assertEqual(pilot, determine_pilot._controls_in_use.return_value)
        # Controls in use with phase. Pilot returned
        reset_all_mocks()
        determine_pilot._controls_in_use.return_value = 'Captain'
        pilot = determine_pilot._determine_pilot(
            None, pitch_capt, pitch_fo, roll_capt, roll_fo, cc_capt, cc_fo, phase,
            None, None)
        self.assertFalse(determine_pilot._autopilot_engaged.called)
        determine_pilot._controls_in_use.assert_called_once_with(pitch_capt.array, pitch_fo.array, roll_capt.array, roll_fo.array, phase)
        self.assertEqual(pilot, determine_pilot._controls_in_use.return_value)
        # Only Autopilot.
        reset_all_mocks()
        determine_pilot._autopilot_engaged.return_value = 'Captain'
        pilot = determine_pilot._determine_pilot(None, None, None, None, None, 
                                                 None, None, None, ap1, ap2)
        determine_pilot._autopilot_engaged.assert_called_once_with(ap1, ap2)
        self.assertFalse(determine_pilot._controls_in_use.called)
        self.assertEqual(pilot, determine_pilot._autopilot_engaged.return_value)
        # Controls in Use overrides Autopilot.
        reset_all_mocks()
        determine_pilot._controls_in_use.return_value = 'Captain'
        determine_pilot._autopilot_engaged.return_value = 'First Officer'
        pilot = determine_pilot._determine_pilot(
            None, pitch_capt, pitch_fo, roll_capt, roll_fo, cc_capt, cc_fo, 
            phase, ap1, ap2)
        self.assertFalse(determine_pilot._autopilot_engaged.called)
        determine_pilot._controls_in_use.assert_called_once_with(
            pitch_capt.array, pitch_fo.array, roll_capt.array, roll_fo.array, phase)
        self.assertEqual(pilot, determine_pilot._controls_in_use.return_value)
        # Autopilot is used when Controls in Use does not provide an answer.
        reset_all_mocks()
        determine_pilot._autopilot_engaged.return_value = 'First Officer'
        determine_pilot._controls_in_use.return_value = None
        determine_pilot._control_column_in_use.return_value = None
        pilot = determine_pilot._determine_pilot(
            None, pitch_capt, pitch_fo, roll_capt, roll_fo, cc_capt, cc_fo, phase,
            ap1, ap2)
        determine_pilot._autopilot_engaged.assert_called_once_with(ap1, ap2)
        determine_pilot._controls_in_use.assert_called_once_with(
            pitch_capt.array, pitch_fo.array, roll_capt.array, roll_fo.array,
            phase)
        self.assertEqual(pilot,
                         determine_pilot._autopilot_engaged.return_value)