Exemplo n.º 1
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 test_add_function(self, mock_view):
     dialog = AddFunctionDialog(view=mock_view)
     with patch.object(mock_view.ui.functionBox, 'currentText',
                       lambda: "Gaussian"):
         with patch.object(mock_view, 'is_text_in_function_list',
                           lambda x: True):
             dialog.action_add_function()
             mock_view.function_added.emit.assert_called_once_with(
                 "Gaussian")
             self.assertEqual(1, dialog.view.accept.call_count)
 def test_normalise_data_set_on_fit_menu_shown(self, normaliseData_mock):
     for normalised in [True, False]:
         ws_artist_mock = Mock(is_normalized=normalised, workspace_index=0)
         axes_mock = Mock(tracked_workspaces={'ws_name': [ws_artist_mock]})
         property_browser = self._create_widget()
         with patch.object(property_browser, 'get_axes', lambda: axes_mock):
             with patch.object(property_browser, 'workspaceName',
                               lambda: 'ws_name'):
                 property_browser.getFitMenu().aboutToShow.emit()
         property_browser.normaliseData.assert_called_once_with(normalised)
         normaliseData_mock.reset_mock()
Exemplo n.º 4
0
 def test_destroy_doesnt_have_fig(self):
     with patch.object(GlobalFigureManager,
                       'has_fignum',
                       return_value=False) as mock_has_fignum:
         num = 123123
         GlobalFigureManager.destroy(num)
         mock_has_fignum.assert_called_once_with(num)
 def test_curve_names_not_equal_in_curve_names_dict_if_curves_have_same_labels(self):
     line = self._get_no_errors_line()
     # Patch line in ax0 to have same label as the errorbar curve in the
     # same axes
     with patch.object(line, 'get_label', lambda: 'Workspace'):
         presenter = self._generate_presenter()
     self.assertSequenceEqual(['Workspace', 'Workspace (1)'],
                              sorted(presenter.curve_names_dict.keys()))
Exemplo n.º 6
0
 def test_figure_visibility_changed(self):
     mock_figure_number = 99994
     with patch.object(GlobalFigureManager,
                       'notify_observers',
                       return_value=False) as mock_notify_observers:
         GlobalFigureManager.figure_visibility_changed(mock_figure_number)
         mock_notify_observers.assert_called_once_with(
             FigureAction.VisibilityChanged, mock_figure_number)
Exemplo n.º 7
0
 def test_figure_title_changed(self):
     mock_figure_number = 312312
     with patch.object(GlobalFigureManager,
                       'notify_observers',
                       return_value=False) as mock_notify_observers:
         GlobalFigureManager.figure_title_changed(mock_figure_number)
         mock_notify_observers.assert_called_once_with(
             FigureAction.Renamed, mock_figure_number)
 def test_add_function_give_error_if_function_not_valid(self, mock_view):
     dialog = AddFunctionDialog(view=mock_view)
     with patch.object(mock_view, 'is_text_in_function_list',
                       lambda x: False):
         dialog.action_add_function()
         self.assertEqual(1, dialog.view.set_error_message.call_count)
         self.assertEqual(0, mock_view.function_added.emit.call_count)
         self.assertEqual(0, dialog.view.accept.call_count)
 def test_remove_selected_curve_removes_curve_from_curves_names_and_combo_box(self):
     self.ax2.plot([0], [0], label='new_line')
     mock_view = Mock(get_selected_ax_name=lambda: "(1, 0)",
                      get_selected_curve_name=lambda: "new_line")
     presenter = self._generate_presenter(mock_view=mock_view)
     with patch.object(presenter, 'update_view', lambda: None):
         presenter.remove_selected_curve()
     self.assertNotIn('new_line', presenter.curve_names_dict)
     presenter.view.remove_select_curve_combo_box_selected_item.assert_called_once_with()
Exemplo n.º 10
0
def _run_apply_properties_on_figure_with_image():
    img_fig = figure()
    img_ax = img_fig.add_subplot(111)
    img_ax.imshow([[0, 1], [0, 1]], label='old label')
    presenter = PlotConfigDialogPresenter(img_fig, view=Mock())
    with patch.object(presenter.tab_widget_presenters[1], 'update_view',
                      lambda: None):
        presenter.apply_properties()
    return img_ax
Exemplo n.º 11
0
def _run_apply_properties_on_figure_with_curve():
    fig = figure()
    ax = fig.add_subplot(111)
    ax.errorbar([0, 1], [0, 1], yerr=[0.1, 0.2], label='old label')
    presenter = PlotConfigDialogPresenter(fig, view=Mock())
    with patch.object(presenter.tab_widget_presenters[1], 'update_view',
                      lambda: None):
        presenter.apply_properties()
    return ax
Exemplo n.º 12
0
 def test_launch_custom_cpp_gui_creates_interface_if_not_already_open(
         self, mock_find_window):
     mock_find_window.return_value = None
     interface_name = 'ISIS Reflectometry'
     with patch.object(self.main_window,
                       'interface_manager') as mock_interface_manager:
         self.main_window.launch_custom_cpp_gui(interface_name)
         mock_interface_manager.createSubWindow.assert_called_once_with(
             interface_name)
Exemplo n.º 13
0
 def test_normalise_data_set_to_false_for_distribution_workspace(
         self, normaliseData_mock):
     fig, canvas = self._create_and_plot_matrix_workspace('ws_name',
                                                          distribution=True)
     property_browser = self._create_widget(canvas=canvas)
     with patch.object(property_browser, 'workspaceName',
                       lambda: 'ws_name'):
         property_browser.getFitMenu().aboutToShow.emit()
     property_browser.normaliseData.assert_called_once_with(False)
Exemplo n.º 14
0
    def test_right_click_gives_marker_menu_when_hovering_over_one(
            self, mocked_figure_type, mocked_qmenu_cls):
        mouse_event = self._create_mock_right_click()
        mouse_event.inaxes.get_xlim.return_value = (1, 2)
        mouse_event.inaxes.get_ylim.return_value = (1, 2)
        mocked_figure_type.return_value = FigureType.Line
        marker1 = MagicMock()
        marker2 = MagicMock()
        marker3 = MagicMock()
        self.interactor.markers = [marker1, marker2, marker3]
        for marker in self.interactor.markers:
            marker.is_above.return_value = True

        # 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()
        qmenu_call4 = MagicMock()
        mocked_qmenu_cls.side_effect = [
            qmenu_call1, qmenu_call2, qmenu_call3, qmenu_call4
        ]

        with patch('workbench.plotting.figureinteraction.QActionGroup',
                   autospec=True):
            with patch.object(self.interactor.toolbar_manager,
                              'is_tool_active', lambda: False):
                with patch.object(self.interactor, 'add_error_bars_menu',
                                  MagicMock()):
                    self.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(marker1.name, qmenu_call1),
                        call(marker2.name, qmenu_call1),
                        call(marker3.name, qmenu_call1)
                    ]
                    self.assertEqual(expected_qmenu_calls,
                                     mocked_qmenu_cls.call_args_list)
                    # 2 Actions in marker menu
                    self.assertEqual(2, qmenu_call2.addAction.call_count)
                    self.assertEqual(2, qmenu_call3.addAction.call_count)
                    self.assertEqual(2, qmenu_call4.addAction.call_count)
Exemplo n.º 15
0
def _run_apply_properties_on_figure_with_legend():
    fig = figure()
    ax = fig.add_subplot(111)
    ax.plot([1, 2, 3], label='old label')
    legend = ax.legend()
    legend.get_frame().set_alpha(0.5)
    presenter = PlotConfigDialogPresenter(fig, view=Mock())
    with patch.object(presenter.tab_widget_presenters[1], 'update_view',
                      lambda: None):
        presenter.apply_properties()
    return ax
Exemplo n.º 16
0
    def test_right_click_gives_no_context_menu_for_empty_figure(
            self, mocked_figure_type, mocked_qmenu):
        fig_manager = self._create_mock_fig_manager_to_accept_right_click()
        interactor = FigureInteraction(fig_manager)
        mouse_event = self._create_mock_right_click()
        mocked_figure_type.return_value = FigureType.Empty

        with patch.object(interactor.toolbar_manager, 'is_tool_active',
                          lambda: False):
            interactor.on_mouse_button_press(mouse_event)
            self.assertEqual(0, mocked_qmenu.call_count)
Exemplo n.º 17
0
 def _run_check_axes_distribution_consistency(self, normalization_states):
     mock_tracked_workspaces = {
         'ws': [
             Mock(is_normalized=normalization_states[0]),
             Mock(is_normalized=normalization_states[1])
         ],
         'ws1': [Mock(is_normalized=normalization_states[2])]
     }
     with patch('mantid.kernel.logger.warning', Mock()) as mock_logger:
         with patch.object(self.ax, 'tracked_workspaces', mock_tracked_workspaces):
             self.ax.check_axes_distribution_consistency()
     return mock_logger
Exemplo n.º 18
0
 def test_different_interfaces_simultaneously_created(
         self, mock_find_window):
     mock_find_window.return_value = None
     interface_name = 'Data Reduction'
     second_interface_name = 'Settings'
     with patch.object(self.main_window,
                       'interface_manager') as mock_interface_manager:
         self.main_window.launch_custom_cpp_gui(interface_name)
         mock_interface_manager.createSubWindow.assert_called_with(
             interface_name)
         self.main_window.launch_custom_cpp_gui(second_interface_name)
         mock_interface_manager.createSubWindow.assert_called_with(
             second_interface_name)
 def test_axes_removed_from_axes_names_dict_when_all_curves_removed(self):
     fig = figure()
     ax0 = fig.add_subplot(211)
     ax0.set_title("First Axes")
     ax1 = fig.add_subplot(212)
     ax1.set_title("Second Axes")
     ax0.plot([0, 1], [0, 1], label='ax0 curve')
     ax1.plot([0], [0], label='ax1 curve')
     mock_view = Mock(get_selected_ax_name=lambda: "First Axes: (0, 0)",
                      get_selected_curve_name=lambda: "ax0 curve")
     presenter = self._generate_presenter(fig=fig, mock_view=mock_view)
     with patch.object(presenter, 'update_view', lambda: None):
         presenter.remove_selected_curve()
     self.assertNotIn('First Axes', presenter.axes_names_dict)
     self.assertNotIn("ax0 curve", presenter.curve_names_dict)
Exemplo n.º 20
0
 def test_destroy(self, mock_gc_collect):
     num = 0
     mock_manager = MockFigureManager(num)
     GlobalFigureManager.set_active(mock_manager)
     self.assertEqual(1, len(GlobalFigureManager._activeQue))
     self.assertEqual(1, len(GlobalFigureManager.figs))
     with patch.object(GlobalFigureManager,
                       'notify_observers') as mock_notify_observers:
         GlobalFigureManager.destroy(num)
         self.assertEqual(0, len(GlobalFigureManager._activeQue))
         self.assertEqual(0, len(GlobalFigureManager.figs))
         mock_gc_collect.assert_called_once_with(1)
         mock_notify_observers.assert_has_calls([
             call(FigureAction.Closed, num),
             call(FigureAction.OrderChanged, -1)
         ])
Exemplo n.º 21
0
    def test_right_click_gives_context_menu_for_color_plot(
            self, mocked_figure_type, mocked_qmenu):
        fig_manager = self._create_mock_fig_manager_to_accept_right_click()
        interactor = FigureInteraction(fig_manager)
        mouse_event = self._create_mock_right_click()
        mocked_figure_type.return_value = FigureType.Image

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

        with patch('workbench.plotting.figureinteraction.QActionGroup',
                   autospec=True):
            with patch.object(interactor.toolbar_manager, 'is_tool_active',
                              lambda: False):
                interactor.on_mouse_button_press(mouse_event)
                self.assertEqual(0, qmenu_call1.addAction.call_count)
                expected_qmenu_calls = [
                    call(),
                    call("Axes", qmenu_call1),
                    call("Normalization", qmenu_call1),
                    call("Color bar", qmenu_call1)
                ]
                self.assertEqual(expected_qmenu_calls,
                                 mocked_qmenu.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)
                # 2 actions in Colorbar submenu
                self.assertEqual(2, qmenu_call4.addAction.call_count)
 def test_curves_with__no_legend__label_not_in_curves_name_dict(self):
     line = self.fig.get_axes()[0].get_lines()[1]
     with patch.object(line, 'get_label', lambda: '_nolegend_'):
         presenter = self._generate_presenter()
     self.assertNotIn(line, presenter.curve_names_dict.values())
Exemplo n.º 23
0
 def test_font_dialog_signals(self):
     presenter = GeneralSettings(None)
     with patch.object(presenter.view, 'create_font_dialog',
                       MagicMock()) as font_dialog:
         presenter.action_main_font_button_clicked()
         self.assertEqual(1, font_dialog().fontSelected.connect.call_count)