def setUp(self):
        # Store an empty widget to parent all the views, and ensure they are deleted correctly
        self.obj = QWidget()

        setup_context_for_tests(self)

        self.view = LoadRunWidgetView(parent=self.obj)
        self.model = LoadRunWidgetModel(self.loaded_data, self.context)
        self.presenter = LoadRunWidgetPresenter(self.view, self.model)

        self.view.warning_popup = mock.Mock()
        self.presenter.set_current_instrument("EMU")

        patcher = mock.patch(
            'Muon.GUI.Common.load_run_widget.load_run_model.load_utils')
        self.addCleanup(patcher.stop)
        self.load_utils_patcher = patcher.start()
        self.load_utils_patcher.exception_message_for_failed_files.return_value = ''

        file_finder_patcher = mock.patch(
            'Muon.GUI.Common.load_run_widget.load_run_presenter.FileFinder')
        self.addCleanup(file_finder_patcher.stop)
        file_finder_patcher.start()

        self.load_single_run()
예제 #2
0
    def setUpClass(cls):
        # Mock axes tab view
        mock_axes_view = Mock(
            get_selected_ax_name=lambda: '(0, 0)',
            get_properties=lambda: AxProperties(new_ax_view_props))
        cls.ax_view_patch = patch(AX_VIEW, lambda x: mock_axes_view)
        cls.ax_view_mock = cls.ax_view_patch.start()

        # Mock curves tab view
        cls.curve_view_mock = Mock(
            get_selected_curve_name=lambda: 'old label',
            get_selected_ax_name=lambda: '(0, 0)',
            get_properties=lambda: CurveProperties(new_curve_view_props))
        cls.curve_view_patch = patch(CURVE_VIEW, lambda x: cls.curve_view_mock)
        cls.curve_view_patch.start()

        cls.ax = _run_apply_properties_on_figure_with_curve()
        cls.new_curve = cls.ax.containers[0]

        # Mock images tab view
        cls.img_view_mock = Mock(
            get_selected_image_name=lambda: '(0, 0) - old label',
            get_properties=lambda: ImageProperties(new_image_props))
        cls.img_view_patch = patch(IMAGE_VIEW, lambda x: cls.img_view_mock)
        cls.img_view_patch.start()

        cls.img_ax = _run_apply_properties_on_figure_with_image()
        cls.new_img = cls.img_ax.images[0]
예제 #3
0
    def setUp(self):
        self.notify_progress = mock.MagicMock()
        self.notify_done = mock.MagicMock()
        self.notify_error = mock.MagicMock()

        self.sans_batch_instance = mock.MagicMock()
        self.sans_batch_instance.return_value = (mock.MagicMock(),
                                                 mock.MagicMock())
        batch_patcher = mock.patch(
            'sans.gui_logic.models.batch_process_runner.SANSBatchReduction')
        self.addCleanup(batch_patcher.stop)
        self.batch_mock = batch_patcher.start()
        self.batch_mock.return_value = self.sans_batch_instance

        load_patcher = mock.patch(
            'sans.gui_logic.models.batch_process_runner.load_workspaces_from_states'
        )
        self.addCleanup(load_patcher.stop)
        self.load_mock = load_patcher.start()

        self.batch_process_runner = BatchProcessRunner(self.notify_progress,
                                                       self.notify_done,
                                                       self.notify_error)
        self.states = {
            0: mock.MagicMock(),
            1: mock.MagicMock(),
            2: mock.MagicMock()
        }
예제 #4
0
    def setUp(self):
        self.logger_mock_instance = mock.MagicMock()
        logger_patcher = mock.patch(
            'ErrorReporter.error_report_presenter.Logger')
        self.addCleanup(logger_patcher.stop)
        self.logger_mock = logger_patcher.start()
        self.logger_mock.return_value = self.logger_mock_instance

        self.errorreport_mock_instance = mock.MagicMock()
        errorreport_patcher = mock.patch(
            'ErrorReporter.error_report_presenter.ErrorReporter')
        self.addCleanup(errorreport_patcher.stop)
        self.errorreport_mock = errorreport_patcher.start()
        self.errorreport_mock.return_value = self.errorreport_mock_instance

        zip_recovery_patcher = mock.patch(
            'ErrorReporter.error_report_presenter.zip_recovery_directory')
        self.addCleanup(zip_recovery_patcher.stop)
        self.zip_recovery_mock = zip_recovery_patcher.start()
        self.zip_recovery_mock.return_value = ('zipped_file', 'file_hash')

        self.view = mock.MagicMock()
        self.exit_code = 255
        self.error_report_presenter = ErrorReporterPresenter(
            self.view, self.exit_code)
    def setUp(self):
        self.model_patcher = mock.patch(RESULTS_TAB_MODEL_CLS, autospec=True)
        self.view_patcher = mock.patch(RESULTS_TAB_VIEW_CLS, autospec=True)

        self.mock_model = self.model_patcher.start()
        self.mock_view = self.view_patcher.start()
        self.mock_view.function_selection_changed.connect = mock.MagicMock()
        self.mock_view.results_name_edited.connect = mock.MagicMock()
        self.mock_view.output_results_requested.connect = mock.MagicMock()
 def test_open_file_in_new_tab_no_import_added(self):
     test_string = "Test file\n"
     widget = MultiPythonFileInterpreter()
     mock_open_func = mock.mock_open(read_data=test_string)
     with mock.patch(widget.__module__ + '.open', mock_open_func, create=True):
         with mock.patch(PERMISSION_BOX_FUNC, lambda: True):
             widget.open_file_in_new_tab(test_string)
     self.assertNotIn(MANTID_API_IMPORT,
                      widget.current_editor().editor.text())
예제 #7
0
    def setUp(self):
        # Store an empty widget to parent all the views, and ensure they are deleted correctly
        self.obj = QWidget()

        setup_context_for_tests(self)
        self.context.instrument = 'EMU'
        self.load_file_view = BrowseFileWidgetView(self.obj)
        self.load_run_view = LoadRunWidgetView(self.obj)
        self.load_file_model = BrowseFileWidgetModel(self.loaded_data,
                                                     self.context)
        self.load_run_model = LoadRunWidgetModel(self.loaded_data,
                                                 self.context)

        self.presenter = LoadWidgetPresenter(
            LoadWidgetView(parent=self.obj,
                           load_file_view=self.load_file_view,
                           load_run_view=self.load_run_view),
            LoadWidgetModel(self.loaded_data, self.context))
        self.presenter.set_load_file_widget(
            BrowseFileWidgetPresenter(self.load_file_view,
                                      self.load_file_model))
        self.presenter.set_load_run_widget(
            LoadRunWidgetPresenter(self.load_run_view, self.load_run_model))

        self.filepath = FileFinder.findRuns('MUSR00022725.nxs')[0]

        self.load_patcher = mock.patch(
            'Muon.GUI.Common.load_file_widget.model.load_utils.load_workspace_from_filename'
        )
        self.addCleanup(self.load_patcher.stop)
        self.load_mock = self.load_patcher.start()

        self.load_run_patcher = mock.patch(
            'Muon.GUI.Common.load_run_widget.load_run_model.load_utils.load_workspace_from_filename'
        )
        self.addCleanup(self.load_run_patcher.stop)
        self.load_run_mock = self.load_run_patcher.start()

        self.mock_workspace = self.create_fake_workspace(1)
        self.mock_loading_from_browse(self.mock_workspace,
                                      "C:\dir1\dir2\dir3\EMU0001234.nxs", 1234)
        file_utils.get_current_run_filename = mock.Mock(
            return_value="C:\dir1\dir2\dir3\EMU0001234.nxs")

        self.presenter.load_file_widget._view.warning_popup = mock.MagicMock()
        self.presenter.load_run_widget._view.warning_popup = mock.MagicMock()

        self.popup_patcher = mock.patch('Muon.GUI.Common.thread_model.warning')
        self.addCleanup(self.popup_patcher.stop)
        self.popup_mock = self.popup_patcher.start()

        def setGroupAndPairsToEmptyList(grouping_context):
            grouping_context._groups = []
            grouping_context._pairs = []

        self.group_context.reset_group_and_pairs_to_default = mock.MagicMock(
            side_effect=setGroupAndPairsToEmptyList(self.group_context))
예제 #8
0
 def setUp(self):
     self.axes_patch = patch(PRESENTER_REF + 'AxesTabWidgetPresenter',
                             new=Mock())
     self.axes_mock = self.axes_patch.start()
     self.curves_patch = patch(PRESENTER_REF + 'CurvesTabWidgetPresenter',
                               new=Mock())
     self.curves_mock = self.curves_patch.start()
     self.images_patch = patch(PRESENTER_REF + 'ImagesTabWidgetPresenter',
                               new=Mock())
     self.images_mock = self.images_patch.start()
 def test_open_file_in_new_tab_import_added(self):
     test_string = "Test file\nLoad()"
     widget = MultiPythonFileInterpreter()
     mock_open_func = mock.mock_open(read_data=test_string)
     with mock.patch(widget.__module__ + '.open', mock_open_func, create=True):
         with mock.patch(PERMISSION_BOX_FUNC, lambda: True):
             widget.open_file_in_new_tab(test_string)
     self.assertEqual(widget.current_editor().editor.isModified(), True,
                      msg="Script not marked as modified.")
     self.assertIn(MANTID_API_IMPORT, widget.current_editor().editor.text(),
                   msg="'simpleapi' import not added to script.")
예제 #10
0
 def test_open_file_in_new_tab_no_import_added(self):
     test_string = "Test file\n"
     widget = MultiPythonFileInterpreter()
     mock_open_func = mock.mock_open(read_data=test_string)
     with mock.patch(widget.__module__ + '.open',
                     mock_open_func,
                     create=True):
         with mock.patch(PERMISSION_BOX_FUNC, lambda: True):
             widget.open_file_in_new_tab(test_string)
     self.assertNotIn(MANTID_API_IMPORT,
                      widget.current_editor().editor.text())
    def setUp(self):
        self._qapp = mock_widget.mockQapp()

        # Store an empty widget to parent all the views, and ensure they are deleted correctly
        self.obj = QtGui.QWidget()

        self.popup_patcher = mock.patch('Muon.GUI.Common.thread_model.warning')
        self.addCleanup(self.popup_patcher.stop)
        self.popup_mock = self.popup_patcher.start()

        self.load_patcher = mock.patch('Muon.GUI.Common.load_file_widget.model.load_utils.load_workspace_from_filename')
        self.addCleanup(self.load_patcher.stop)
        self.load_mock = self.load_patcher.start()

        self.load_run_patcher = mock.patch(
            'Muon.GUI.Common.load_run_widget.load_run_model.load_utils.load_workspace_from_filename')
        self.addCleanup(self.load_run_patcher.stop)
        self.load_run_mock = self.load_run_patcher.start()

        setup_context_for_tests(self)
        self.data_context.instrument = 'EMU'
        self.load_file_view = BrowseFileWidgetView(self.obj)
        self.load_run_view = LoadRunWidgetView(self.obj)
        self.load_file_model = BrowseFileWidgetModel(self.loaded_data, self.context)
        self.load_run_model = LoadRunWidgetModel(self.loaded_data, self.context)

        self.model = LoadWidgetModel(self.loaded_data, self.context)
        self.view = LoadWidgetView(parent=self.obj, load_run_view=self.load_run_view,
                                   load_file_view=self.load_file_view)

        self.presenter = LoadWidgetPresenter(view=self.view, model=self.model)
        self.presenter.set_load_file_widget(BrowseFileWidgetPresenter(self.load_file_view, self.load_file_model))
        self.presenter.set_load_run_widget(LoadRunWidgetPresenter(self.load_run_view, self.load_run_model))
        self.presenter.load_run_widget.set_current_instrument('EMU')

        self.presenter.load_file_widget._view.warning_popup = mock.MagicMock()
        self.presenter.load_run_widget._view.warning_popup = mock.MagicMock()

        self.load_file_view.show_file_browser_and_return_selection = mock.Mock(
            return_value=["C:\\dir1\\EMU0001234.nxs"])
        self.workspace_mock = self.create_fake_workspace(1)
        self.load_mock.return_value = (self.workspace_mock, 1234, "C:\\dir1\\EMU0001234.nxs")
        self.load_run_mock.return_value = (self.workspace_mock, 1234, "C:\\dir1\\EMU0001234.nxs")

        self.presenter.load_file_widget.on_browse_button_clicked()
        self.wait_for_thread(self.presenter.load_file_widget._load_thread)

        self.mock_loading_to_throw()
        file_utils.get_current_run_filename = mock.Mock(return_value="EMU0001234.nxs")
예제 #12
0
 def test_add_line_errors(self):
     ws = mock.MagicMock()
     self.context.change_errors(True)
     lines = line()
     with mock.patch("mantid.plots.plotfunctions.plot") as plot:
         plot.return_value = tuple([lines])
         with mock.patch("mantid.plots.plotfunctions.errorbar") as patch:
             patch.return_value = errors()
             self.context.addLine(ws, 3)
             self.assertEqual(plot.call_count, 1)
             self.assertEqual(patch.call_count, 1)
             patch.assert_called_with(self.subplot,
                                      ws,
                                      specNum=3,
                                      distribution=True)
예제 #13
0
 def test_open_file_in_new_tab_import_added(self):
     test_string = "Test file\nLoad()"
     widget = MultiPythonFileInterpreter()
     mock_open_func = mock.mock_open(read_data=test_string)
     with mock.patch(widget.__module__ + '.open',
                     mock_open_func,
                     create=True):
         with mock.patch(PERMISSION_BOX_FUNC, lambda: True):
             widget.open_file_in_new_tab(test_string)
     self.assertEqual(widget.current_editor().editor.isModified(),
                      True,
                      msg="Script not marked as modified.")
     self.assertIn(MANTID_API_IMPORT,
                   widget.current_editor().editor.text(),
                   msg="'simpleapi' import not added to script.")
    def setUp(self):
        # Store an empty widget to parent all the views, and ensure they are deleted correctly
        self.obj = QWidget()

        setup_context_for_tests(self)

        self.data_context.instrument = 'EMU'
        self.view = LoadRunWidgetView(parent=self.obj)
        self.model = LoadRunWidgetModel(self.loaded_data, self.context)
        self.presenter = LoadRunWidgetPresenter(self.view, self.model)

        self.model.load_workspace_from_filename = mock.Mock(
            return_value=([1, 2, 3], "currentRun.nxs", 1234, False))
        self.view.warning_popup = mock.Mock()
        self.view.disable_load_buttons = mock.Mock()
        self.view.enable_load_buttons = mock.Mock()

        self.presenter.set_current_instrument("EMU")

        fileUtils.get_current_run_filename = mock.Mock(
            return_value="EMU0001234.nxs")

        patcher = mock.patch(
            'Muon.GUI.Common.load_run_widget.load_run_model.load_utils')
        self.addCleanup(patcher.stop)
        self.load_utils_patcher = patcher.start()
        self.load_utils_patcher.exception_message_for_failed_files.return_value = ''
    def setUp(self):
        self._qapp = mock_widget.mockQapp()
        # Store an empty widget to parent all the views, and ensure they are deleted correctly
        self.obj = QtGui.QWidget()

        setup_context_for_tests(self)

        self.data_context.instrument = 'EMU'
        self.view = LoadRunWidgetView(parent=self.obj)
        self.model = LoadRunWidgetModel(self.loaded_data, self.context)
        self.presenter = LoadRunWidgetPresenter(self.view, self.model)

        self.model.load_workspace_from_filename = mock.Mock(return_value=([1, 2, 3], "currentRun.nxs", 1234))
        self.view.warning_popup = mock.Mock()
        self.view.disable_load_buttons = mock.Mock()
        self.view.enable_load_buttons = mock.Mock()

        self.presenter.set_current_instrument("EMU")

        fileUtils.get_current_run_filename = mock.Mock(return_value="EMU0001234.nxs")

        patcher = mock.patch('Muon.GUI.Common.load_run_widget.load_run_model.load_utils')
        self.addCleanup(patcher.stop)
        self.load_utils_patcher = patcher.start()
        self.load_utils_patcher.exception_message_for_failed_files.return_value = ''
예제 #16
0
    def test_right_click_gives_context_menu_for_plot_without_fit_enabled(
            self, mocked_figure_type, mocked_qmenu_cls):
        fig_manager = self._create_mock_fig_manager_to_accept_right_click()
        fig_manager.fit_browser.tool = None
        interactor = FigureInteraction(fig_manager)
        mouse_event = self._create_mock_right_click()
        mocked_figure_type.return_value = FigureType.Line

        # Expect a call to QMenu() for the outer menu followed by two more calls
        # for the Axes and Normalization menus
        qmenu_call1 = MagicMock()
        qmenu_call2 = MagicMock()
        qmenu_call3 = MagicMock()
        mocked_qmenu_cls.side_effect = [qmenu_call1, qmenu_call2, qmenu_call3]

        with patch('workbench.plotting.figureinteraction.QActionGroup',
                   autospec=True):
            with patch.object(interactor.toolbar_manager, 'is_tool_active',
                              lambda: False):
                with patch.object(interactor.errors_manager,
                                  'add_error_bars_menu', MagicMock()):
                    interactor.on_mouse_button_press(mouse_event)
                    self.assertEqual(0, qmenu_call1.addSeparator.call_count)
                    self.assertEqual(0, qmenu_call1.addAction.call_count)
                    expected_qmenu_calls = [
                        call(),
                        call("Axes", qmenu_call1),
                        call("Normalization", qmenu_call1)
                    ]
                    self.assertEqual(expected_qmenu_calls,
                                     mocked_qmenu_cls.call_args_list)
                    # 4 actions in Axes submenu
                    self.assertEqual(4, qmenu_call2.addAction.call_count)
                    # 2 actions in Normalization submenu
                    self.assertEqual(2, qmenu_call3.addAction.call_count)
    def setUp(self):
        self._qapp = mock_widget.mockQapp()
        self.view = BrowseFileWidgetView()

        self.view.on_browse_clicked = mock.Mock()
        self.view.set_file_edit = mock.Mock()
        self.view.reset_edit_to_cached_value = mock.Mock()
        self.view.show_file_browser_and_return_selection = mock.Mock(
            return_value=["C:/dir1/file1.nxs", "C:/dir2/file2.nxs"])

        setup_context_for_tests(self)

        self.data_context.instrument = 'EMU'
        self.model = BrowseFileWidgetModel(self.loaded_data, self.context)
        self.model.exception_message_for_failed_files = mock.Mock()

        self.view.disable_load_buttons = mock.Mock()
        self.view.enable_load_buttons = mock.Mock()
        self.view.warning_popup = mock.Mock()

        self.presenter = BrowseFileWidgetPresenter(self.view, self.model)

        patcher = mock.patch(
            'Muon.GUI.Common.load_file_widget.model.load_utils.load_workspace_from_filename'
        )
        self.addCleanup(patcher.stop)
        self.load_utils_patcher = patcher.start()
        self.load_utils_patcher.return_value = (self.create_fake_workspace(1),
                                                '22222', 'filename')
    def test_do_action_plot__plot_func_throws_error(self, ws, view, twd,
                                                    mock_logger_error):
        mock_plot_function = Mock()
        error_message = "See bottom of keyboard for HEALTH WARNING"
        mock_plot_function.side_effect = ValueError(error_message)
        with patch(
                'mantidqt.widgets.workspacedisplay.table.presenter.TableWorkspaceDisplay._get_plot_function_from_type') \
                as mock_get_plot_function_from_type:
            mock_get_plot_function_from_type.return_value = mock_plot_function
            view.mock_selection_model.selectedColumns.return_value = [
                MockQModelIndex(1, 1)
            ]
            twd.action_set_as_x()

            view.mock_selection_model.selectedColumns.return_value = [
                MockQModelIndex(1, 2)
            ]
            twd.action_plot(PlotType.LINEAR)

            view.show_warning.assert_called_once_with(
                TableWorkspaceDisplay.PLOT_FUNCTION_ERROR_MESSAGE.format(
                    error_message),
                TableWorkspaceDisplay.INVALID_DATA_WINDOW_TITLE)
            mock_logger_error.assert_called_once_with(
                TableWorkspaceDisplay.PLOT_FUNCTION_ERROR_MESSAGE.format(
                    error_message))
        self.assertNotCalled(twd.plot.mock_fig.show)
        self.assertNotCalled(twd.plot.mock_ax.legend)
예제 #19
0
 def test_run_dialog_opens_on_execute_button_click(self):
     with patch(createDialogFromName_func_name) as createDialog:
         widget = AlgorithmSelectorWidget()
         self._select_in_tree(widget, 'DoStuff v.2')
         widget.execute_button.click()
         createDialog.assert_called_once_with('DoStuff', 2, None, False, {},
                                              '', [])
예제 #20
0
 def test_run_dialog_opens_on_return_press(self):
     with patch(createDialogFromName_func_name) as createDialog:
         widget = AlgorithmSelectorWidget()
         self._select_in_tree(widget, 'DoStuff v.2')
         QTest.keyClick(widget.search_box, Qt.Key_Return)
         createDialog.assert_called_once_with('DoStuff', 2, None, False, {},
                                              '', [])
예제 #21
0
    def test_process_calls_find_good_peaks(self):
        with mock.patch(
                'plugins.algorithms.WorkflowAlgorithms.FindPeaksAutomatic.CreateWorkspace'
        ) as mock_create_ws:
            mock_create_ws.return_value = self.data_ws
            self.alg_instance.find_good_peaks = mock.Mock()

            self.alg_instance.process(self.x_values,
                                      self.y_values,
                                      raw_error=np.sqrt(self.y_values),
                                      acceptance=0,
                                      average_window=50,
                                      bad_peak_to_consider=2,
                                      use_poisson=False,
                                      peak_width_estimate=5,
                                      fit_to_baseline=False,
                                      prog_reporter=mock.Mock())

            base = self.alg_instance.average(self.y_values, 50)
            base += self.alg_instance.average(self.y_values - base, 50)
            flat = self.y_values - base

            self.assertEqual(1, self.alg_instance.find_good_peaks.call_count)
            self.alg_instance.find_good_peaks.asser_called_with(
                self.x_values,
                flat,
                acceptance=0,
                bad_peak_to_consider=2,
                use_poisson=False,
                fit_ws=self.data_ws,
                peak_width_estimate=5)
 def test_replace_incorrect_workspace(self, ws, view, presenter):
     with patch(
             'mantidqt.widgets.workspacedisplay.table.presenter.TableWorkspaceDisplay.load_data'
     ) as mock_load_data:
         presenter.replace_workspace(ws.TEST_NAME + "123", ws)
         self.assertNotCalled(mock_load_data)
         self.assertNotCalled(view.emit_repaint)
예제 #23
0
    def test_replaceWS(self):
        ws = mock.Mock()
        ws2 = mock.Mock()
        ws.name = mock.Mock(return_value="test")
        ws2.name = mock.Mock(return_value="not used")
        self.context.redraw = mock.Mock()

        with mock.patch("mantid.plots.plotfunctions.plot") as patch:
            patch.return_value = tuple([line()])
            self.context.addLine(ws, 3)
            self.context.addLine(ws2, 3)
        # check inital set up
        keys = self.context.ws.keys()
        expect = [ws, ws2]
        for key in expect:
            self.assertIn(key, keys)
        self.assertEqual(len(keys), len(expect))

        # do the method
        redraw = self.context.replace_ws(ws)
        self.assertEqual(redraw, True)
        new_keys = self.context.ws.keys()
        for key in expect:
            self.assertIn(key, new_keys)
        self.assertEqual(len(new_keys), len(expect))
        self.assertEqual(self.context.ws[ws], ["test"])
예제 #24
0
 def setUp(self):
     self._qapp = QApplication.instance()
     patcher = mock.patch('Muon.GUI.Common.thread_model.warning')
     self.addCleanup(patcher.stop)
     self.warning_box_patcher = patcher.start()
     self.model = testModel()
     self.thread = ThreadModel(self.model)
예제 #25
0
    def test_that_preserves_empty_data(self):
        scriptElement = TOFTOFScriptElement()
        scriptElement.reset()

        self.setupWidget.set_state(scriptElement)

        with mock.patch(
                'reduction_gui.reduction.toftof.toftof_reduction.TOFTOFScriptElement.reset'
        ):
            scriptElement2 = self.setupWidget.get_state()

        scriptElement.facility_name = self.settingsMock.facility_name
        scriptElement.instrument_name = self.settingsMock.instrument_name
        for name in dir(scriptElement):
            attr1 = getattr(scriptElement, name)
            try:
                attr2 = getattr(scriptElement2, name)
            except AttributeError:
                self.fail(
                    "TOFTOFSetupWidget.get_state() doesn't set the attribute '{}'"
                    .format(name))

            if not name.startswith('__') and not hasattr(attr1, '__call__'):
                self.assertEqual(
                    attr1, attr2,
                    "TOFTOFSetupWidget doesn't preserve state of attribute '{}'"
                    .format(name))
예제 #26
0
    def setUp(self):
        self.logger_mock_instance = mock.MagicMock()
        logger_patcher = mock.patch('ErrorReporter.error_report_presenter.Logger')
        self.addCleanup(logger_patcher.stop)
        self.logger_mock = logger_patcher.start()
        self.logger_mock.return_value = self.logger_mock_instance

        self.errorreport_mock_instance = mock.MagicMock()
        errorreport_patcher = mock.patch('ErrorReporter.error_report_presenter.ErrorReporter')
        self.addCleanup(errorreport_patcher.stop)
        self.errorreport_mock = errorreport_patcher.start()
        self.errorreport_mock.return_value = self.errorreport_mock_instance

        self.view = mock.MagicMock()
        self.exit_code = 255
        self.error_report_presenter = ErrorReporterPresenter(self.view, self.exit_code)
예제 #27
0
    def test_loading_does_not_insert_invalid_groups(self):
        self.view.show_file_browser_and_return_selection = mock.Mock(
            return_value="grouping.xml")
        groups = [
            MuonGroup(group_name="grp1", detector_ids=[1, 2, 3, 4, 5]),
            MuonGroup(group_name="grp2", detector_ids=[6, 7, 8, 9, 1000])
        ]
        pairs = [
            MuonPair(pair_name="pair1",
                     forward_group_name="grp1",
                     backward_group_name="grp2")
        ]
        with mock.patch(
                "Muon.GUI.Common.grouping_tab_widget.grouping_tab_widget_presenter.xml_utils.load_grouping_from_XML"
        ) as mock_load:
            # mock the loading to return set groups/pairs
            mock_load.return_value = (groups, pairs, 'description', 'pair1')
            self.view.load_grouping_button.clicked.emit(True)

            self.view.display_warning_box.assert_called_once_with(
                'Invalid detectors in group grp2')
            six.assertCountEqual(self, self.model.group_names, ["grp1"])
            six.assertCountEqual(self, self.model.pair_names, [])
            self.assertEqual(self.grouping_table_view.num_rows(), 1)
            self.assertEqual(self.pairing_table_view.num_rows(), 0)
 def test_mantid_api_import_needed(self):
     expected_results = [False, False, True, False, False, True, False,
                         False, False]
     with mock.patch(PERMISSION_BOX_FUNC, lambda: True):
         for case, expected_out in zip(self.test_cases, expected_results):
             self.assertEqual(expected_out, mantid_api_import_needed(case),
                              msg=self.gen_fail_msg(case, expected_out))
예제 #29
0
    def test_that_load_grouping_inserts_loaded_groups_and_pairs_correctly(
            self):
        self.view.show_file_browser_and_return_selection = mock.Mock(
            return_value="grouping.xml")
        groups = [
            MuonGroup(group_name="grp1", detector_ids=[1, 2, 3, 4, 5]),
            MuonGroup(group_name="grp2", detector_ids=[6, 7, 8, 9, 10])
        ]
        pairs = [
            MuonPair(pair_name="pair1",
                     forward_group_name="grp1",
                     backward_group_name="grp2")
        ]

        with mock.patch(
                "Muon.GUI.Common.grouping_tab_widget.grouping_tab_widget_presenter.xml_utils.load_grouping_from_XML"
        ) as mock_load:
            # mock the loading to return set groups/pairs
            mock_load.return_value = (groups, pairs, 'description', 'pair1')
            self.view.load_grouping_button.clicked.emit(True)

            six.assertCountEqual(self, self.model.group_names,
                                 ["grp1", "grp2"])
            six.assertCountEqual(self, self.model.pair_names, ["pair1"])
            self.assertEqual(self.grouping_table_view.num_rows(), 2)
            self.assertEqual(self.pairing_table_view.num_rows(), 1)
            self.assertEqual(
                self.pairing_table_view.pairing_table.cellWidget(
                    0, 1).currentText(), "grp1")
            self.assertEqual(
                self.pairing_table_view.pairing_table.cellWidget(
                    0, 2).currentText(), "grp2")
예제 #30
0
 def test_add_line_no_erros(self):
     ws = mock.MagicMock()
     with mock.patch("mantid.plots.plotfunctions.plot") as patch:
         patch.return_value = tuple([line()])
         self.context.addLine(ws, 3)
         self.assertEqual(patch.call_count, 1)
         patch.assert_called_with(self.subplot, ws, specNum=3)
    def setUp(self):
        self._qapp = mock_widget.mockQapp()
        self.view = BrowseFileWidgetView()

        self.view.on_browse_clicked = mock.Mock()
        self.view.set_file_edit = mock.Mock()
        self.view.reset_edit_to_cached_value = mock.Mock()
        self.view.show_file_browser_and_return_selection = mock.Mock(
            return_value=["C:/dir1/file1.nxs", "C:/dir2/file2.nxs"])

        setup_context_for_tests(self)
        
        self.data_context.instrument = 'EMU'
        self.model = BrowseFileWidgetModel(self.loaded_data, self.context)
        self.model.exception_message_for_failed_files = mock.Mock()

        self.view.disable_load_buttons = mock.Mock()
        self.view.enable_load_buttons = mock.Mock()
        self.view.warning_popup = mock.Mock()

        self.presenter = BrowseFileWidgetPresenter(self.view, self.model)

        patcher = mock.patch('Muon.GUI.Common.load_file_widget.model.load_utils')
        self.addCleanup(patcher.stop)
        self.load_utils_patcher = patcher.start()
예제 #32
0
    def test_fit_function_is_called_correctly_when_given_multiple_peaks(self):
        with mock.patch(
                'plugins.algorithms.WorkflowAlgorithms.FitGaussianPeaks.Fit'
        ) as mock_fit:
            self.alg_instance.estimate_single_parameters = mock.Mock(
                return_value=[1, 2, 3])
            self.alg_instance.getPropertyValue = mock.Mock(return_value='ws')
            ret_ws = CreateWorkspace(DataX=[1, 2, 3, 4],
                                     DataY=[5, 6, 7, 8],
                                     NSpec=2)
            mock_fit.return_value = (None, None, None, 'parameters', ret_ws,
                                     None, None)

            yvals, params = self.alg_instance.general_fit(
                self.x_values, self.y_values, [10, 20])

            self.assertEqual(params, 'parameters')
            np.testing.assert_equal(yvals, [7, 8])
            mock_fit.assert_called_with(
                Function='name=Gaussian,PeakCentre=1,Height=2,Sigma=3;'
                'name=Gaussian,PeakCentre=1,Height=2,Sigma=3;',
                InputWorkspace=None,
                Output='fit_result',
                Minimizer='Levenberg-MarquardtMD',
                OutputCompositeMembers=True,
                StartX=min(self.x_values),
                EndX=max(self.x_values),
                Constraints=
                '0.900000<f0.PeakCentre<1.100000,1.768245<f0.Height<2.161188,0.000000<f0.Sigma<30,'
                '1.800000<f1.PeakCentre<2.200000,2.236669<f1.Height<2.733706,0.000000<f1.Sigma<30,',
                StoreInADS=False)
예제 #33
0
 def test_plot(self):
     with mock.patch("MultiPlotting.subplot.subplot.subplot.plot") as patch:
          ws = mock.MagicMock()
          subplotName = "test"
          specNum = 4
          self.widget.plot(subplotName, ws, specNum)
          patch.assert_called_with(subplotName, ws, specNum=specNum)
          self.assertEqual(patch.call_count,1)
 def test_replace(self, ws, view, presenter):
     # patch this out after the constructor of the presenter has finished,
     # so that we reset any calls it might have made
     with patch(
             'mantidqt.widgets.workspacedisplay.table.presenter.TableWorkspaceDisplay.load_data') as mock_load_data:
         presenter.replace_workspace(ws.TEST_NAME, ws)
         mock_load_data.assert_called_once_with(view)
         view.emit_repaint.assert_called_once_with()
예제 #35
0
 def test_plot(self):
     with mock.patch("MultiPlotting.subplot.subplot.subplot.plot") as patch:
          ws = mock.MagicMock()
          subplotName = "test"
          specNum = 4
          self.widget.plot(subplotName, ws, specNum)
          patch.assert_called_with(subplotName, ws, specNum=specNum)
          self.assertEquals(patch.call_count,1)
    def setUp(self):
        self.notify_progress = mock.MagicMock()
        self.notify_done = mock.MagicMock()
        self.notify_error = mock.MagicMock()

        self.sans_batch_instance = mock.MagicMock()
        self.sans_batch_instance.return_value = (mock.MagicMock(), mock.MagicMock())
        batch_patcher = mock.patch('sans.gui_logic.models.batch_process_runner.SANSBatchReduction')
        self.addCleanup(batch_patcher.stop)
        self.batch_mock = batch_patcher.start()
        self.batch_mock.return_value = self.sans_batch_instance

        load_patcher = mock.patch('sans.gui_logic.models.batch_process_runner.load_workspaces_from_states')
        self.addCleanup(load_patcher.stop)
        self.load_mock = load_patcher.start()

        self.batch_process_runner = BatchProcessRunner(self.notify_progress, self.notify_done, self.notify_error)
        self.states = {0: mock.MagicMock(), 1: mock.MagicMock(), 2: mock.MagicMock()}
 def test_replace(self, ws, view, presenter):
     # patch this out after the constructor of the presenter has finished,
     # so that we reset any calls it might have made
     with patch(
             'mantidqt.widgets.workspacedisplay.table.presenter.TableWorkspaceDisplay.load_data'
     ) as mock_load_data:
         presenter.replace_workspace(ws.TEST_NAME, ws)
         mock_load_data.assert_called_once_with(view)
         view.emit_repaint.assert_called_once_with()
 def test_action_sort_peaks_ws(self, ws, view, twd, mock_SortPeaksWorkspace):
     view.mock_selection_model.selectedColumns = Mock(return_value=[MockQModelIndex(0, 0)])
     ascending = True
     with patch('mantidqt.widgets.workspacedisplay.table.model.TableWorkspaceDisplayModel.is_peaks_workspace',
                return_value=True) as mock_is_peaks_workspace:
         twd.action_sort(ascending)
         mock_SortPeaksWorkspace.assert_called_once_with(InputWorkspace=twd.model.ws, OutputWorkspace=twd.model.ws,
                                                         ColumnNameToSortBy="col0", SortAscending=ascending)
         mock_is_peaks_workspace.assert_called_once_with()
예제 #39
0
 def test_exception(self):
     def testing_function(widget):
         raise RuntimeError('')
     with patch('traceback.print_exc') as print_exc:
         tester = ModalTester(QInputDialog, testing_function)
         tester.start()
         print_exc.assert_called_once_with()
     self.assertFalse(tester.widget.isVisible())
     self.assertFalse(tester.passed)
예제 #40
0
 def test_run_dialog_opens_on_double_click(self):
     with patch(createDialogFromName_func_name) as createDialog:
         widget = AlgorithmSelectorWidget()
         self._select_in_tree(widget, 'Load v.1')
         selected_item = widget.tree.selectedItems()[0]
         item_pos = widget.tree.visualItemRect(selected_item).center()
         QTest.mouseDClick(widget.tree.viewport(), Qt.LeftButton,
                           Qt.NoModifier, pos=item_pos)
         createDialog.assert_called_once_with('Load', 1)
예제 #41
0
 def test_exception(self):
     def testing_function(widget):
         raise RuntimeError('')
     with patch('traceback.print_exc') as print_exc:
         tester = ModalTester(QInputDialog, testing_function)
         tester.start()
         print_exc.assert_called_once_with()
     self.assertFalse(tester.widget.isVisible())
     self.assertFalse(tester.passed)
예제 #42
0
    def test_mask_file_for_existing_file(self):
        tmp_file = tempfile.NamedTemporaryFile(mode='r')

        file_name = os.path.basename(tmp_file.name)
        with mock.patch(
                'sans.command_interface.ISISCommandInterface.find_full_file_path'
        ) as mocked_finder:
            mocked_finder.return_value = tmp_file.name
            self.assertIsNone(MaskFile(file_name))
    def test_that_save_grouping_triggers_the_correct_function(self):
        # Save functionality is tested elsewhere
        self.view.show_file_save_browser_and_return_selection = mock.Mock(return_value="grouping.xml")

        with mock.patch(
                "Muon.GUI.Common.grouping_tab_widget.grouping_tab_widget_presenter.xml_utils.save_grouping_to_XML") as mock_save:
            self.view.save_grouping_button.clicked.emit(True)

            self.assertEqual(mock_save.call_count, 1)
            self.assertEqual(mock_save.call_args[0][-1], "grouping.xml")
 def test_add_line_1(self):
     specNum = 4
     ws = mock.MagicMock()
     # add mock subplot
     subplot = mock.MagicMock()
     self.subplot = mock.create_autospec(subplotContext)
     with mock.patch("MultiPlotting.subplot.subplot_context.subplotContext.addLine") as patch:
         self.context.addSubplot("one",subplot) 
         self.context.addLine("one",ws,specNum)
         self.assertEquals(patch.call_count,1)
         patch.assert_called_with(ws,specNum)
예제 #45
0
 def test_fail_widget_open(self):
     def testing_function(widget):
         widget.setTextValue('Hello World!')
         text = widget.textValue()
         self.assertEqual(text, '')
     with patch('traceback.print_exc') as print_exc:
         tester = ModalTester(QInputDialog, testing_function)
         tester.start()
         print_exc.assert_called_once_with()
     self.assertFalse(tester.widget.isVisible())
     self.assertFalse(tester.passed)
예제 #46
0
 def test_connected_receiver_receives_text(self):
     with patch("sys.stdout") as mock_stdout:
         mock_stdout.fileno.return_value = -1
         recv = Receiver()
         writer = WriteToSignal(mock_stdout)
         writer.sig_write_received.connect(recv.capture_text)
         txt = "I expect to see this"
         writer.write(txt)
         QCoreApplication.processEvents()
         self.assertEqual(txt, recv.captured_txt)
         mock_stdout.fileno.assert_called_once_with()
예제 #47
0
    def test_exception_in_creator(self):
        def create():
            raise RuntimeError('')

        def testing_function(widget):
            pass
        with patch('traceback.print_exc') as print_exc:
            tester = ModalTester(create, testing_function)
            tester.start()
            print_exc.assert_called_once_with()
        self.assertTrue(tester.widget is None)
        self.assertFalse(tester.passed)
 def setUp(self):
     # patch away getting a real icon as it can hit a race condition when running tests
     # in parallel
     patcher = mock.patch('mantidqt.dialogs.spectraselectordialog.get_icon')
     self._mock_get_icon = patcher.start()
     self._mock_get_icon.return_value = QIcon()
     self.addCleanup(patcher.stop)
     if self._single_spec_ws is None:
         self.__class__._single_spec_ws = WorkspaceFactory.Instance().create("Workspace2D", NVectors=1,
                                                                             XLength=1, YLength=1)
         self.__class__._multi_spec_ws = WorkspaceFactory.Instance().create("Workspace2D", NVectors=200,
                                                                            XLength=1, YLength=1)
    def setUp(self):
        self.logger_mock_instance = mock.MagicMock()
        logger_patcher = mock.patch('ErrorReporter.error_report_presenter.Logger')
        self.addCleanup(logger_patcher.stop)
        self.logger_mock = logger_patcher.start()
        self.logger_mock.return_value = self.logger_mock_instance

        self.errorreport_mock_instance = mock.MagicMock()
        errorreport_patcher = mock.patch('ErrorReporter.error_report_presenter.ErrorReporter')
        self.addCleanup(errorreport_patcher.stop)
        self.errorreport_mock = errorreport_patcher.start()
        self.errorreport_mock.return_value = self.errorreport_mock_instance

        zip_recovery_patcher = mock.patch('ErrorReporter.error_report_presenter.zip_recovery_directory')
        self.addCleanup(zip_recovery_patcher.stop)
        self.zip_recovery_mock = zip_recovery_patcher.start()
        self.zip_recovery_mock.return_value = ('zipped_file', 'file_hash')

        self.view = mock.MagicMock()
        self.exit_code = 255
        self.error_report_presenter = ErrorReporterPresenter(self.view, self.exit_code)
예제 #50
0
    def setUp(self):
        self.presenter = mock.Mock(spec=PlotSelectorPresenter)
        self.presenter.get_plot_name_from_number = mock.Mock(side_effect=self.se_plot_name)
        self.presenter.get_initial_last_active_value = mock.Mock(side_effect=self.se_get_initial_last_active_value)
        self.presenter.is_shown_by_filter = mock.Mock(side_effect=self.se_is_shown_by_filter)

        patcher = mock.patch('workbench.widgets.plotselector.view.get_icon')
        self.mock_get_icon = patcher.start()
        self.mock_get_icon.return_value = QIcon()
        self.addCleanup(patcher.stop)

        self.view = PlotSelectorView(self.presenter)
        self.view.table_widget.setSortingEnabled(False)
    def setUp(self):
        self._qapp = mock_widget.mockQapp()
        # Store an empty widget to parent all the views, and ensure they are deleted correctly
        self.obj = QtGui.QWidget()

        setup_context_for_tests(self)
        self.context.instrument = 'EMU'
        self.load_file_view = BrowseFileWidgetView(self.obj)
        self.load_run_view = LoadRunWidgetView(self.obj)
        self.load_file_model = BrowseFileWidgetModel(self.loaded_data, self.context)
        self.load_run_model = LoadRunWidgetModel(self.loaded_data, self.context)

        self.presenter = LoadWidgetPresenter(
            LoadWidgetView(parent=self.obj, load_file_view=self.load_file_view, load_run_view=self.load_run_view),
            LoadWidgetModel(self.loaded_data, self.context))
        self.presenter.set_load_file_widget(BrowseFileWidgetPresenter(self.load_file_view, self.load_file_model))
        self.presenter.set_load_run_widget(LoadRunWidgetPresenter(self.load_run_view, self.load_run_model))

        self.filepath = FileFinder.findRuns('MUSR00022725.nxs')[0]

        self.load_patcher = mock.patch('Muon.GUI.Common.load_file_widget.model.load_utils.load_workspace_from_filename')
        self.addCleanup(self.load_patcher.stop)
        self.load_mock = self.load_patcher.start()

        self.load_run_patcher = mock.patch(
            'Muon.GUI.Common.load_run_widget.load_run_model.load_utils.load_workspace_from_filename')
        self.addCleanup(self.load_run_patcher.stop)
        self.load_run_mock = self.load_run_patcher.start()

        self.mock_workspace = self.create_fake_workspace(1)
        self.mock_loading_from_browse(self.mock_workspace, "C:\dir1\dir2\dir3\EMU0001234.nxs", 1234)
        file_utils.get_current_run_filename = mock.Mock(return_value="C:\dir1\dir2\dir3\EMU0001234.nxs")

        self.presenter.load_file_widget._view.warning_popup = mock.MagicMock()
        self.presenter.load_run_widget._view.warning_popup = mock.MagicMock()

        self.popup_patcher = mock.patch('Muon.GUI.Common.thread_model.warning')
        self.addCleanup(self.popup_patcher.stop)
        self.popup_mock = self.popup_patcher.start()
    def test_updateLayout(self):
        # add mocks
        figure = mock.Mock()
        self.subplot = mock.create_autospec(subplotContext)
        names = ["one","two","three"]
        for name in names:
            self.context.addSubplot(name, mock.Mock())

        gridspec = mock.Mock()
        self.context._gridspec = gridspec
        with mock.patch("MultiPlotting.subplot.subplot_context.subplotContext.update_gridspec") as patch:
            self.context.update_layout(figure)
            self.assertEquals(patch.call_count,3)
            # only last iteration survives
            patch.assert_called_with(gridspec,figure,2)
    def setUp(self):
        self._qapp = mock_widget.mockQapp()
        setup_context_for_tests(self)
        self.data_context.instrument = 'EMU'
        self.view = BrowseFileWidgetView()
        self.model = BrowseFileWidgetModel(self.loaded_data, self.context)

        self.view.disable_load_buttons = mock.Mock()
        self.view.enable_load_buttons = mock.Mock()
        self.view.warning_popup = mock.Mock()

        self.presenter = BrowseFileWidgetPresenter(self.view, self.model)

        patcher = mock.patch('Muon.GUI.Common.load_file_widget.model.load_utils')
        self.addCleanup(patcher.stop)
        self.load_utils_patcher = patcher.start()
    def test_loading_does_not_insert_invalid_groups(self):
        self.view.show_file_browser_and_return_selection = mock.Mock(return_value="grouping.xml")
        groups = [MuonGroup(group_name="grp1", detector_ids=[1, 2, 3, 4, 5]),
                  MuonGroup(group_name="grp2", detector_ids=[6, 7, 8, 9, 1000])]
        pairs = [MuonPair(pair_name="pair1", forward_group_name="grp1", backward_group_name="grp2")]
        with mock.patch(
                "Muon.GUI.Common.grouping_tab_widget.grouping_tab_widget_presenter.xml_utils.load_grouping_from_XML") as mock_load:
            # mock the loading to return set groups/pairs
            mock_load.return_value = (groups, pairs, 'description')
            self.view.load_grouping_button.clicked.emit(True)

            self.view.display_warning_box.assert_called_once_with('Invalid detectors in group grp2')
            six.assertCountEqual(self, self.model.group_names, ["grp1"])
            six.assertCountEqual(self, self.model.pair_names, [])
            self.assertEqual(self.grouping_table_view.num_rows(), 1)
            self.assertEqual(self.pairing_table_view.num_rows(), 0)
    def test_that_load_grouping_inserts_loaded_groups_and_pairs_correctly(self):
        self.view.show_file_browser_and_return_selection = mock.Mock(return_value="grouping.xml")
        groups = [MuonGroup(group_name="grp1", detector_ids=[1, 2, 3, 4, 5]),
                  MuonGroup(group_name="grp2", detector_ids=[6, 7, 8, 9, 10])]
        pairs = [MuonPair(pair_name="pair1", forward_group_name="grp1", backward_group_name="grp2")]

        with mock.patch(
                "Muon.GUI.Common.grouping_tab_widget.grouping_tab_widget_presenter.xml_utils.load_grouping_from_XML") as mock_load:
            # mock the loading to return set groups/pairs
            mock_load.return_value = (groups, pairs, 'description')
            self.view.load_grouping_button.clicked.emit(True)

            six.assertCountEqual(self, self.model.group_names, ["grp1", "grp2"])
            six.assertCountEqual(self, self.model.pair_names, ["pair1"])
            self.assertEqual(self.grouping_table_view.num_rows(), 2)
            self.assertEqual(self.pairing_table_view.num_rows(), 1)
            self.assertEqual(self.pairing_table_view.pairing_table.cellWidget(0, 1).currentText(), "grp1")
            self.assertEqual(self.pairing_table_view.pairing_table.cellWidget(0, 2).currentText(), "grp2")
    def setUp(self):
        self._qapp = mock_widget.mockQapp()
        # Store an empty widget to parent all the views, and ensure they are deleted correctly
        self.obj = QtGui.QWidget()

        setup_context_for_tests(self)

        self.view = LoadRunWidgetView(parent=self.obj)
        self.model = LoadRunWidgetModel(self.loaded_data, self.context)
        self.presenter = LoadRunWidgetPresenter(self.view, self.model)

        self.view.warning_popup = mock.Mock()
        self.presenter.set_current_instrument("EMU")

        patcher = mock.patch('Muon.GUI.Common.load_run_widget.load_run_model.load_utils')
        self.addCleanup(patcher.stop)
        self.load_utils_patcher = patcher.start()
        self.load_utils_patcher.exception_message_for_failed_files.return_value = ''

        self.load_single_run()
예제 #57
0
    def test_that_preserves_empty_data(self):
        scriptElement = TOFTOFScriptElement()
        scriptElement.reset()

        self.setupWidget.set_state(scriptElement)

        with mock.patch('reduction_gui.reduction.toftof.toftof_reduction.TOFTOFScriptElement.reset'):
            scriptElement2 = self.setupWidget.get_state()

        scriptElement.facility_name   = self.settingsMock.facility_name
        scriptElement.instrument_name = self.settingsMock.instrument_name
        for name in dir(scriptElement):
            attr1 = getattr(scriptElement, name)
            try:
                attr2 = getattr(scriptElement2, name)
            except AttributeError:
                self.fail("TOFTOFSetupWidget.get_state() doesn't set the attribute '{}'".format(name))

            if not name.startswith('__') and not hasattr(attr1, '__call__'):
                self.assertEqual(attr1, attr2, "TOFTOFSetupWidget doesn't preserve state of attribute '{}'".format(name))
    def test_do_action_plot__plot_func_throws_error(self, ws, view, twd, mock_logger_error):
        mock_plot_function = Mock()
        error_message = "See bottom of keyboard for HEALTH WARNING"
        mock_plot_function.side_effect = ValueError(error_message)
        with patch(
                'mantidqt.widgets.workspacedisplay.table.presenter.TableWorkspaceDisplay._get_plot_function_from_type') \
                as mock_get_plot_function_from_type:
            mock_get_plot_function_from_type.return_value = mock_plot_function
            view.mock_selection_model.selectedColumns.return_value = [MockQModelIndex(1, 1)]
            twd.action_set_as_x()

            view.mock_selection_model.selectedColumns.return_value = [MockQModelIndex(1, 2)]
            twd.action_plot(PlotType.LINEAR)

            view.show_warning.assert_called_once_with(
                TableWorkspaceDisplay.PLOT_FUNCTION_ERROR_MESSAGE.format(error_message),
                TableWorkspaceDisplay.INVALID_DATA_WINDOW_TITLE)
            mock_logger_error.assert_called_once_with(
                TableWorkspaceDisplay.PLOT_FUNCTION_ERROR_MESSAGE.format(error_message))
        self.assertNotCalled(twd.plot.mock_fig.show)
        self.assertNotCalled(twd.plot.mock_ax.legend)
예제 #59
0
    def test_right_click_gives_context_menu_for_plot_without_fit_enabled(self, mocked_figure_type,
                                                                         mocked_qmenu_cls):
        fig_manager = self._create_mock_fig_manager_to_accept_right_click()
        fig_manager.fit_browser.tool = None
        interactor = FigureInteraction(fig_manager)
        mouse_event = self._create_mock_right_click()
        mocked_figure_type.return_value = FigureType.Line

        # Expect a call to QMenu() for the outer menu followed by a call with the first
        # as its parent to generate the Axes menu.
        qmenu_call1 = MagicMock()
        qmenu_call2 = MagicMock()
        mocked_qmenu_cls.side_effect = [qmenu_call1, qmenu_call2]

        with patch('workbench.plotting.figureinteraction.QActionGroup',
                   autospec=True):
            interactor.on_mouse_button_press(mouse_event)
            self.assertEqual(0, qmenu_call1.addSeparator.call_count)
            self.assertEqual(0, qmenu_call1.addAction.call_count)
            expected_qmenu_calls = [call(), call("Axes", qmenu_call1)]
            self.assertEqual(expected_qmenu_calls, mocked_qmenu_cls.call_args_list)
            self.assertEqual(4, qmenu_call2.addAction.call_count)
예제 #60
0
    def test_that_preserves_data(self):
        scriptElement = TOFTOFScriptElement()
        scriptElement.reset()
        scriptElement.facility_name   = 'nonsense'
        scriptElement.instrument_name = 'The 5th nonSense'

        # prefix of (some) workspace names
        scriptElement.prefix   = 'ws'

        # data files are here
        scriptElement.dataDir  = ''

        # vanadium runs & comment
        scriptElement.vanRuns  = 'TOFTOFTestdata.nxs'
        scriptElement.vanCmnt  = 'vanadium comment'
        scriptElement.vanTemp  = OptionalFloat(None)

        # empty can runs, comment, and factor
        scriptElement.ecRuns   = 'TOFTOFTestdata.nxs'
        scriptElement.ecTemp   = OptionalFloat(21.0)
        scriptElement.ecFactor = 0.9

        # data runs: [(runs,comment, temperature), ...]
        scriptElement.dataRuns = [
            [unicode('TOFTOFTestdata.nxs'), unicode('H2O 21C'), OptionalFloat(None)],
            [unicode('TOFTOFTestdata.nxs'), unicode('H2O 34C'), OptionalFloat(34.0)]
        ]

        # additional parameters
        scriptElement.binEon        = True
        scriptElement.binEstart     = -1.0
        scriptElement.binEstep      = 0.4
        scriptElement.binEend       = 1.8

        scriptElement.binQon        = True
        scriptElement.binQstart     = 0.4
        scriptElement.binQstep      = 0.2
        scriptElement.binQend       = 1.0

        scriptElement.maskDetectors = '1,2'

        # options
        scriptElement.subtractECVan = True
        scriptElement.normalise     = TOFTOFScriptElement.NORM_MONITOR
        scriptElement.correctTof    = TOFTOFScriptElement.CORR_TOF_VAN
        scriptElement.replaceNaNs   = True
        scriptElement.createDiff    = True
        scriptElement.keepSteps     = True

        # save data
        scriptElement.saveDir        = ''
        scriptElement.saveSofTWNxspe = False
        scriptElement.saveSofTWNexus = True
        scriptElement.saveSofTWAscii = True
        scriptElement.saveSofQWNexus = False
        scriptElement.saveSofQWAscii = True

        self.setupWidget.set_state(scriptElement)

        with mock.patch('reduction_gui.reduction.toftof.toftof_reduction.TOFTOFScriptElement.reset'):
            scriptElement2 = self.setupWidget.get_state()

        scriptElement.facility_name   = self.settingsMock.facility_name
        scriptElement.instrument_name = self.settingsMock.instrument_name
        for name in dir(scriptElement):
            attr1 = getattr(scriptElement, name)
            try:
                attr2 = getattr(scriptElement2, name)
            except AttributeError:
                self.fail("TOFTOFSetupWidget.get_state() doesn't set the attribute '{}'".format(name))

            if not name.startswith('__') and not hasattr(attr1, '__call__'):
                self.assertEqual(attr1, attr2, "TOFTOFSetupWidget doesn't preserve state of attribute '{}'".format(name))