Esempio n. 1
0
    def test_GIVEN_ioc_driver_with_engineering_correction_containing_a_mode_update_correction_WHEN_update_mode_THEN_correct_readback_updated_fired(self):
        mode1_mode1_offset = 11
        mode1_mode2_offset = 12
        mode2_mode1_offset = 210
        mode2_mode2_offset = 220

        mode1_mode_selection = ModeSelectCorrection(self.default_correction,
                             {self.mode1.name: (ConstantCorrection(mode1_mode1_offset)),
                              self.mode2.name: (ConstantCorrection(mode1_mode2_offset))})
        mode2_mode_selection = ModeSelectCorrection(self.default_correction,
                                                    {self.mode1.name: (ConstantCorrection(mode2_mode1_offset)),
                                                     self.mode2.name: (ConstantCorrection(mode2_mode2_offset))})
        mode_selection_correction = ModeSelectCorrection(self.default_correction,
                                                              {self.mode1.name: mode1_mode_selection,
                                                               self.mode2.name: mode2_mode_selection})
        mode_selection_correction.set_observe_mode_change_on(self.mock_beamline)
        mode_selection_correction.add_listener(CorrectionRecalculate, self.get_update)
        mode_selection_correction.add_listener(CorrectionUpdate, self.get_correction_update)

        mock_axis = create_mock_axis("mock", 0, 1)
        driver = IocDriver(Component("comp", PositionAndAngle(0, 0, 0)), ChangeAxis.POSITION, mock_axis, engineering_correction=mode_selection_correction)
        mock_axis.trigger_rbv_change()
        driver.set_observe_mode_change_on(self.mock_beamline)
        mock_listener = Mock()
        driver.add_listener(CorrectionUpdate, mock_listener)

        self.mock_beamline.trigger_listeners(ActiveModeUpdate(self.mode1))

        args = mock_listener.call_args[0]
        assert_that(args[0].correction, is_(mode1_mode1_offset))
Esempio n. 2
0
    def test_GIVEN_mode_selected_which_has_not_got_a_correction_WHEN_from_axis_THEN_correction_is_default_mode(self):
        self.mock_beamline.trigger_listeners(ActiveModeUpdate(BeamlineMode("another mode", [])))

        result = self.mode_selection_correction.from_axis(0, 0)

        assert_that(result, is_(-self.default_offset))
        assert_that(self.correction_update.correction, is_(self.default_offset))
        assert_that(self.correction_update.description, is_("Mode Selected: {}".format(self.default_correction.description)))
Esempio n. 3
0
    def test_GIVEN_ioc_driver_which_has_not_moved_with_engineering_correction_WHEN_update_mode_THEN_readback_not_fired(self):
        driver = IocDriver(Component("comp", PositionAndAngle(0, 0, 0)), ChangeAxis.POSITION, create_mock_axis("mock", 0, 1), engineering_correction=self.mode_selection_correction)
        driver.set_observe_mode_change_on(self.mock_beamline)
        mock_listener = Mock()
        driver.add_listener(CorrectionUpdate, mock_listener)

        self.mock_beamline.trigger_listeners(ActiveModeUpdate(self.mode1))

        mock_listener.assert_not_called()
Esempio n. 4
0
    def test_GIVEN_value_and_mode_WHEN_creating_mode_correction_with_helper_method_THEN_correction_in_mode_behaves_correctly(
            self):
        correction = 1
        mode_name = "nr"
        mock_beamline = MockBeamline()
        mode_correction = as_mode_correction(correction, [mode_name])
        mode_correction.set_observe_mode_change_on(mock_beamline)

        mock_beamline.trigger_listeners(
            ActiveModeUpdate(BeamlineMode(mode_name, [])))
        result = mode_correction.init_from_axis(0)

        assert_that(result, is_(correction * (-1)))  # correction is subtracted
Esempio n. 5
0
    def test_GIVEN_ioc_driver_with_engineering_correction_WHEN_update_mode_THEN_setpoint_updated_fired(self):
        mock_axis = create_mock_axis("mock", 0, 1)
        component = Component("comp", PositionAndAngle(0, 0, 0))
        driver = IocDriver(component, ChangeAxis.POSITION, mock_axis, engineering_correction=self.mode_selection_correction)
        component.beam_path_set_point.axis[ChangeAxis.POSITION].set_displacement(CorrectedReadbackUpdate(0, None, None))
        mock_axis.sp = self.default_offset
        driver.set_observe_mode_change_on(self.mock_beamline)
        assert_that(driver.at_target_setpoint(), is_(True), "Should be at the target setpoint before mode is changed")

        self.mock_beamline.trigger_listeners(ActiveModeUpdate(self.mode1))
        result = driver.at_target_setpoint()

        assert_that(result, is_(False), "Should NOT be at the target setpoint after mode is changed, because of new correction")
Esempio n. 6
0
    def test_GIVEN_mode_selected_WHEN_get_correction_THEN_correction_is_that_mode(self):
        self.mock_beamline.trigger_listeners(ActiveModeUpdate(self.mode2))

        result = self.mode_selection_correction.to_axis(0)

        assert_that(result, is_(self.mode2_offset))
Esempio n. 7
0
    def test_GIVEN_mode_selecting_correction_WHEN_changed_listener_triggered_THEN_correction_update_triggered(self):

        self.mock_beamline.trigger_listeners(ActiveModeUpdate(self.mode2))

        assert_that(self.update, is_not(None), "the correction has asked for a recalculate")