Esempio n. 1
0
 def __init__(self, parent=None, *args, **kwargs):
     QWidget.__init__(self, parent, *args, **kwargs)
     load_ui(__file__, 'powder.ui', self)
     self.btnPowderCalculateProjection.clicked.connect(self._btn_clicked)
     self._presenter = PowderProjectionPresenter(
         self, MantidProjectionCalculator())
     self.cmbPowderU1.currentIndexChanged.connect(self._u1_changed)
     self.cmbPowderU2.currentIndexChanged.connect(self._u2_changed)
Esempio n. 2
0
 def test_notify_presenter_clears_error(self):
     presenter = PowderProjectionPresenter(self.powder_view, self.projection_calculator)
     presenter.register_master(self.main_presenter)
     # This unit test will verify that notifying cut presenter will cause the error to be cleared on the view.
     # The actual subsequent procedure will fail, however this irrelevant to this. Hence the try, except blocks
     for command in [x for x in dir(Command) if x[0] != "_"]:
         try:
             presenter.notify(command)
         except ValueError:
             pass
         self.powder_view.clear_displayed_error.assert_called()
         self.powder_view.reset_mock()
Esempio n. 3
0
 def test_axis_switching_2(self):
     powder_presenter = PowderProjectionPresenter(self.powder_view, self.projection_calculator)
     dropbox_contents = self.powder_view.populate_powder_u2.call_args[0][0]
     # Makes u2 == u1 == DeltaE
     self.powder_view.set_powder_u1.reset_mock()
     self.powder_view.set_powder_u2.reset_mock()
     self.powder_view.get_powder_u1 = mock.Mock(return_value=dropbox_contents[2])
     self.powder_view.get_powder_u2 = mock.Mock(return_value=dropbox_contents[2])
     # Now set u2 to change, and check that u2 is not subsequently affected, but u1 is called.
     powder_presenter.notify(Command.U2Changed)
     self.powder_view.set_powder_u2.assert_not_called()
     # Since we set u1==u2==DeltaE, u1 must now be the first non-DeltaE unit
     self.powder_view.set_powder_u1.assert_called_once_with(dropbox_contents[0])
Esempio n. 4
0
 def test_axis_switching_1(self):
     powder_presenter = PowderProjectionPresenter(self.powder_view, self.projection_calculator)
     dropbox_contents = self.powder_view.populate_powder_u1.call_args[0][0]
     # Makes u2 == u1
     self.powder_view.set_powder_u1.reset_mock()
     self.powder_view.set_powder_u2.reset_mock()
     self.powder_view.get_powder_u1 = mock.Mock(return_value=dropbox_contents[1])
     self.powder_view.get_powder_u2 = mock.Mock(return_value=dropbox_contents[1])
     # Now set u1 to change, and check that u1 is not subsequently affected, but u2 is called.
     powder_presenter.notify(Command.U1Changed)
     self.powder_view.set_powder_u1.assert_not_called()
     # Since we set u1 to be a non-DeltaE axis, u2 must be DeltaE
     self.powder_view.set_powder_u2.assert_called_with(dropbox_contents[-1])
Esempio n. 5
0
    def test_calculate_projection_equal_axis_error(self):
        selected_workspace = 'a'
        # Setting up main presenter to report that the current selected workspace is selected_workspace
        self.main_presenter.get_selected_workspaces = mock.Mock(return_value=[selected_workspace])
        self.powder_presenter = PowderProjectionPresenter(self.powder_view, self.projection_calculator)
        # Setup view to report DeltaE and |Q| as selected axis to project two
        u1 = 'DeltaE'
        u2 = 'DeltaE'
        self.powder_view.get_powder_u1 = mock.Mock(return_value=u1)
        self.powder_view.get_powder_u2 = mock.Mock(return_value=u2)
        self.powder_presenter.register_master(self.main_presenter)
        self.assertRaises(ValueError, self.powder_presenter.notify, Command.CalculatePowderProjection)
        self.main_presenter.get_selected_workspaces.assert_called_once_with()
        self.powder_view.get_powder_u1.assert_called_once_with()
        self.powder_view.get_powder_u2.assert_called_once_with()

        self.projection_calculator.calculate_projection.assert_not_called()
Esempio n. 6
0
    def test_calculate_projection_multiple_selection(self):
        selected_workspaces = []
        # Setting up main presenter to report that the current selected workspace is selected_workspace
        self.main_presenter.get_selected_workspaces = mock.Mock(return_value=selected_workspaces)
        self.powder_presenter = PowderProjectionPresenter(self.powder_view, self.projection_calculator)
        self.powder_presenter.register_master(self.main_presenter)
        # Setup view to report DeltaE and |Q| as selected axis to project two
        u1 = 'DeltaE'
        u2 = '|Q|'
        self.powder_view.get_powder_u1 = mock.Mock(return_value=u1)
        self.powder_view.get_powder_u2 = mock.Mock(return_value=u2)
        self.powder_view.display_message_box = mock.Mock()
        self.powder_presenter.notify(Command.CalculatePowderProjection)
        self.powder_view.display_message_box.assert_called_once_with("No workspace is selected")
        self.main_presenter.get_selected_workspaces.assert_called_once_with()
        self.powder_view.get_powder_u1.assert_called_once_with()
        self.powder_view.get_powder_u2.assert_called_once_with()

        self.projection_calculator.calculate_projection.assert_not_called()
Esempio n. 7
0
 def test_calculate_projection_success(self):
     selected_workspace = 'a'
     # Setting up main presenter to report that the current selected workspace is selected_workspace
     self.main_presenter.get_selected_workspaces = mock.Mock(return_value=[selected_workspace])
     self.powder_presenter = PowderProjectionPresenter(self.powder_view, self.projection_calculator)
     self.powder_presenter.register_master(self.main_presenter)
     # Setup view to report DeltaE and |Q| as selected axis to project two
     u1 = 'DeltaE'
     u2 = '|Q|'
     self.powder_view.get_powder_u1 = mock.Mock(return_value=u1)
     self.powder_view.get_powder_u2 = mock.Mock(return_value=u2)
     self.powder_presenter.notify(Command.CalculatePowderProjection)
     self.main_presenter.get_selected_workspaces.assert_called_once_with()
     self.powder_view.get_powder_u1.assert_called_once_with()
     self.powder_view.get_powder_u2.assert_called_once_with()
     # TODO edit after recieving binning specs (test binning recieved from user if appropriate)
     #TODO make test more strict after recieving binning specs
     #self.projection_calculator.calculate_projection.assert_called_once_with(input_workspace=selected_workspace,
     #                           output_workspace=output_workspace,qbinning=???,axis1=u1,axis2=u2)
     self.projection_calculator.calculate_projection.assert_called_once()
     self.main_presenter.update_displayed_workspaces.assert_called_once()
     self.main_presenter.set_selected_workspaces.assert_called_once()
Esempio n. 8
0
 def test_notify_presenter_with_unrecognised_command_raise_exception(self):
     self.powder_presenter = PowderProjectionPresenter(self.powder_view, self.projection_calculator)
     unrecognised_command = 1234567
     self.assertRaises(ValueError, self.powder_presenter.notify, unrecognised_command)
Esempio n. 9
0
 def test_register_master_invalid_master_fail(self):
     powder_presenter = PowderProjectionPresenter(self.powder_view, self.projection_calculator)
     self.assertRaises(AssertionError, powder_presenter.register_master, 3)
Esempio n. 10
0
 def test_register_master(self):
     powder_presenter = PowderProjectionPresenter(self.powder_view, self.projection_calculator)
     powder_presenter.register_master(self.main_presenter)
Esempio n. 11
0
 def test_constructor_failure_with_incorrect_projection_calculator(self):
     with self.assertRaises(TypeError):
         self.powder_presenter = PowderProjectionPresenter(self.powder_view, MainView)
Esempio n. 12
0
 def test_constructor_success(self):
     self.powder_presenter = PowderProjectionPresenter(self.powder_view, self.projection_calculator)