Example #1
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
Example #2
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
Example #3
0
 def test_correct_tabs_present_axes_only(self):
     fig = figure()
     fig.add_subplot(111)
     mock_view = Mock()
     presenter = PlotConfigDialogPresenter(fig, mock_view)
     expected_presenter_list = [self.axes_mock.return_value, None, None]
     self.assertEqual(expected_presenter_list,
                      presenter.tab_widget_presenters)
     mock_view.add_tab_widget.assert_called_once_with(
         (self.axes_mock.return_value.view, 'Axes'))
    def test_success_callback(self):
        fig = figure()
        fig.canvas.draw = Mock()
        mock_view = Mock()
        presenter = PlotConfigDialogPresenter(fig, mock_view)

        presenter.success_callback()

        mock_view.set_error_text.assert_called_with(None)
        self.assertFalse(presenter.error_state)
    def test_configure_curves_tab_fails_silently_when_curves_tab_not_exists(
            self):
        fig = figure()
        ax = fig.add_subplot(111)
        mock_view = Mock()
        presenter = PlotConfigDialogPresenter(fig, mock_view)
        self.assertIsNone(presenter.tab_widget_presenters[2])

        presenter.configure_curves_tab(ax, None)

        mock_view.set_current_tab_widget.assert_not_called()
Example #6
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
    def test_apply_all_properties_and_exist_does_exit_if_error_state_false(
            self):
        fig = figure()
        fig.canvas.draw = Mock()
        mock_view = Mock()
        presenter = PlotConfigDialogPresenter(fig, mock_view)
        presenter.apply_properties = Mock()
        presenter.error_state = False

        presenter.apply_properties_and_exit()

        mock_view.close.assert_called()
    def test_error_callback(self):
        exception_string = "test string"

        fig = figure()
        fig.canvas.draw = Mock()
        mock_view = Mock()
        presenter = PlotConfigDialogPresenter(fig, mock_view)

        presenter.error_callback(exception_string)

        mock_view.set_error_text.assert_called_with(exception_string)
        self.assertTrue(presenter.error_state)
    def test_apply_properties_calls_success_callback_on_canvas_draw_success(
            self):
        fig = figure()
        fig.canvas.draw = Mock()
        mock_view = Mock()
        presenter = PlotConfigDialogPresenter(fig, mock_view)
        presenter.success_callback = Mock()
        presenter.error_callback = Mock()

        presenter.apply_properties()

        presenter.success_callback.assert_called()
        presenter.error_callback.assert_not_called()
    def test_configure_curves_tab_fails_silently_when_no_curves_on_axes(self):
        fig, (ax0, ax1) = subplots(2, subplot_kw={'projection': 'mantid'})
        ax0.plot([0],
                 [0])  # One axes must have a curve for curves tab to exist
        mock_view = Mock()
        presenter = PlotConfigDialogPresenter(fig, mock_view)
        mock_curves_presenter = presenter.tab_widget_presenters[2]
        mock_curves_presenter.set_axes_from_object.side_effect = ValueError(
            "Axes object does not exist in curves tab")

        presenter.configure_curves_tab(ax1, None)

        mock_curves_presenter.set_axes_from_object.assert_called()
        mock_view.set_current_tab_widget.assert_not_called()
    def test_configure_curves_tab_succeeds_when_curve_and_axes_exist(self):
        fig = figure()
        ax = fig.add_subplot(111)
        curve = ax.plot([0], [0])
        mock_view = Mock()
        presenter = PlotConfigDialogPresenter(fig, mock_view)
        mock_curves_presenter = presenter.tab_widget_presenters[2]
        mock_curves_view, _ = presenter.tab_widget_views[1]

        presenter.configure_curves_tab(ax, curve)

        mock_curves_presenter.set_axes_from_object.assert_called()
        mock_view.set_current_tab_widget.assert_called_with(mock_curves_view)
        mock_view.set_current_tab_widget.assert_called()
Example #12
0
 def test_correct_tabs_present_axes_and_image_colormesh(self):
     fig = figure()
     ax = fig.add_subplot(111)
     ax.pcolormesh([[0, 1], [1, 0]])
     mock_view = Mock()
     presenter = PlotConfigDialogPresenter(fig, mock_view)
     expected_presenter_list = [
         self.axes_mock.return_value, None, self.images_mock.return_value
     ]
     self.assertEqual(expected_presenter_list,
                      presenter.tab_widget_presenters)
     expected_call_args = [(self.axes_mock.return_value.view, 'Axes'),
                           (self.images_mock.return_value.view, 'Images')]
     self.assert_called_x_times_with(2, expected_call_args,
                                     mock_view.add_tab_widget)
Example #13
0
 def test_correct_tabs_present_axes_and_curve_with_errors(self):
     fig = figure()
     ax = fig.add_subplot(111)
     ax.errorbar([0], [0], yerr=[1])
     mock_view = Mock()
     presenter = PlotConfigDialogPresenter(fig, mock_view)
     expected_presenter_list = [
         self.axes_mock.return_value, self.curves_mock.return_value, None
     ]
     self.assertEqual(expected_presenter_list,
                      presenter.tab_widget_presenters)
     expected_call_args = [(self.axes_mock.return_value.view, 'Axes'),
                           (self.curves_mock.return_value.view, 'Curves')]
     self.assert_called_x_times_with(2, expected_call_args,
                                     mock_view.add_tab_widget)
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')

    with patch.object(AxesTabWidgetPresenter, 'update_view',
                      mock_axes_tab_presenter_update_view):
        presenter = PlotConfigDialogPresenter(fig, view=Mock())
    presenter.tab_widget_views[1][
        0].select_curve_combo_box.currentIndex.return_value = 0
    with patch.object(presenter.tab_widget_presenters[1], 'update_view',
                      lambda: None):
        with patch.object(presenter.tab_widget_presenters[1], 'axis_changed',
                          lambda: None):
            presenter.apply_properties()
    return ax
Example #15
0
def _run_apply_properties_on_figure_with_image():
    img_fig = figure()
    img_ax = img_fig.add_subplot(111)
    image = img_ax.imshow([[0, 1], [0, 1]])
    cb = img_fig.colorbar(image)
    cb.set_label('old label')

    with patch.object(AxesTabWidgetPresenter, 'update_view',
                      mock_axes_tab_presenter_update_view):
        presenter = PlotConfigDialogPresenter(img_fig, view=Mock())
    with patch.object(presenter.tab_widget_presenters[1], 'update_view',
                      lambda: None):
        with patch.object(presenter.tab_widget_presenters[1], 'axis_changed',
                          lambda: None):
            presenter.apply_properties()
    return img_ax
 def test_correct_tabs_present_axes_curves_and_legend(self):
     fig = figure()
     ax = fig.add_subplot(111)
     ax.plot([0])
     ax.legend(['Label'])
     mock_view = Mock()
     presenter = PlotConfigDialogPresenter(fig, mock_view)
     expected_presenter_list = [
         self.legend_mock.return_value, self.axes_mock.return_value,
         self.curves_mock.return_value, None
     ]
     self.assertEqual(expected_presenter_list,
                      presenter.tab_widget_presenters)
     expected_call_args = [(self.axes_mock.return_value.view, 'Axes'),
                           (self.curves_mock.return_value.view, 'Curves'),
                           (self.legend_mock.return_value.view, 'Legend')]
     self.assert_called_x_times_with(3, expected_call_args,
                                     mock_view.add_tab_widget)
def _run_apply_properties_on_figure_with_legend(curve_view_mock):
    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)
    curve_view_mock.get_current_curve_name = CurveNameSideEffect(
        'old label', 'New label', switch_count=3)

    with patch.object(AxesTabWidgetPresenter, 'update_view',
                      mock_axes_tab_presenter_update_view):
        presenter = PlotConfigDialogPresenter(fig, view=Mock())
    with patch.object(presenter.tab_widget_presenters[1], 'update_view',
                      lambda: None):
        with patch.object(presenter.tab_widget_presenters[1], 'axis_changed',
                          lambda: None):
            presenter.apply_properties()
    return ax
def _run_apply_properties_on_figure_with_curve(curve_view_mock):
    fig = figure()
    ax = fig.add_subplot(111)
    ax.errorbar([0, 1], [0, 1], yerr=[0.1, 0.2], label='old label')
    ax.containers[0][2][0].axes.creation_args = [{'errorevery': 2}]
    curve_view_mock.get_current_curve_name = CurveNameSideEffect(
        'old label', 'New label', switch_count=6)

    with patch.object(AxesTabWidgetPresenter, 'update_view',
                      mock_axes_tab_presenter_update_view):
        presenter = PlotConfigDialogPresenter(fig, view=Mock())
    presenter.tab_widget_views[1][
        0].select_curve_combo_box.currentIndex.return_value = 0
    with patch.object(presenter.tab_widget_presenters[1], 'update_view',
                      lambda: None):
        with patch.object(presenter.tab_widget_presenters[1], 'axis_changed',
                          lambda: None):
            presenter.apply_properties()
    return ax
 def test_correct_tabs_present_axes_curves_and_image(self):
     fig = figure()
     ax = fig.add_subplot(211)
     ax.imshow([[0, 1], [1, 0]])
     ax1 = fig.add_subplot(212)
     ax1.errorbar([0], [0], yerr=[1])
     mock_view = Mock()
     presenter = PlotConfigDialogPresenter(fig, mock_view)
     expected_presenter_list = [
         None, self.axes_mock.return_value, self.curves_mock.return_value,
         self.images_mock.return_value
     ]
     self.assertEqual(expected_presenter_list,
                      presenter.tab_widget_presenters)
     expected_call_args = [(self.axes_mock.return_value.view, 'Axes'),
                           (self.curves_mock.return_value.view, 'Curves'),
                           (self.images_mock.return_value.view, 'Images')]
     self.assert_called_x_times_with(3, expected_call_args,
                                     mock_view.add_tab_widget)
    def test_configure_curves_tab_fails_silently_when_curve_not_found_in_curves_tab(
            self):
        fig = figure()
        ax = fig.add_subplot(111)
        ax.plot(
            [0], [0]
        )  # Must plot curve for curves tab to exist, hence why we dont use this in the call
        mock_view = Mock()
        presenter = PlotConfigDialogPresenter(fig, mock_view)
        mock_curves_presenter = presenter.tab_widget_presenters[2]
        mock_curves_presenter.set_curve_from_object.side_effect = ValueError(
            "Curve object does not exist in curves tab")
        mock_curves_view, _ = presenter.tab_widget_views[1]

        presenter.configure_curves_tab(ax, Mock())

        mock_curves_presenter.set_axes_from_object.assert_called()
        mock_view.set_current_tab_widget.assert_called_with(mock_curves_view)
        mock_view.set_current_tab_widget.assert_called()
    def test_forget_tab_from_presenter_sets_presenter_and_view_to_none(self):
        fig = figure()
        ax = fig.add_subplot(111)
        ax.plot([0], [0])
        ax.legend()
        mock_view = Mock()
        presenter = PlotConfigDialogPresenter(fig, mock_view)

        mock_curves_presenter = presenter.tab_widget_presenters[2]
        mock_curves_view = mock_curves_presenter.view

        self.assertTrue(
            mock_curves_presenter in presenter.tab_widget_presenters)
        self.assertTrue((mock_curves_view,
                         'Curves') in presenter.tab_widget_views)

        presenter.forget_tab_from_presenter(mock_curves_presenter)

        self.assertTrue(
            mock_curves_presenter not in presenter.tab_widget_presenters)
        self.assertTrue((mock_curves_view,
                         'Curves') not in presenter.tab_widget_views)
    def test_apply_properties_calls_error_callback_when_exception_raised_in_canvas_draw(
            self):
        canvas_draw_exception = Exception("Exception in canvas.draw")

        def raise_():
            raise canvas_draw_exception

        fig = figure()
        fig.canvas.draw = Mock(side_effect=lambda: raise_())
        mock_view = Mock()
        presenter = PlotConfigDialogPresenter(fig, mock_view)
        presenter.success_callback = Mock()
        presenter.error_callback = Mock()
        mock_presenters = [Mock(), Mock(), Mock(), Mock()]
        presenter.tab_widget_presenters = mock_presenters

        presenter.apply_properties()

        presenter.error_callback.assert_called_with(str(canvas_draw_exception))
        presenter.success_callback.assert_not_called()
        for mock in presenter.tab_widget_presenters:
            mock.update_view.assert_not_called()
    def test_tabs_present_updated_properties_from_figure_when_apply_clicked(
            self):
        fig = figure()
        ax = fig.add_subplot(111)
        ax.plot([0], [0])
        mock_view = Mock()
        presenter = PlotConfigDialogPresenter(fig, mock_view)

        # use mock manager to ensure all user properties are applied before view update
        mock_axes_presenter = presenter.tab_widget_presenters[1]
        mock_curves_presenter = presenter.tab_widget_presenters[2]
        mock_manager = Mock()
        mock_manager.attach_mock(mock_axes_presenter, "mock_axes_presenter")
        mock_manager.attach_mock(mock_curves_presenter,
                                 "mock_curves_presenter")

        presenter.apply_properties()
        mock_manager.assert_has_calls([
            call.mock_curves_presenter.apply_properties,
            call.mock_axes_presenter.apply_properties,
            call.mock_curves_presenter.update_view,
            call.mock_axes_presenter.update_view
        ])
Example #24
0
 def launch_plot_options_on_curves_tab(self, axes, curve):
     self.plot_options_dialog = PlotConfigDialogPresenter(
         self.canvas.figure, parent=self.window)
     self.plot_options_dialog.configure_curves_tab(axes, curve)
Example #25
0
 def launch_plot_options(self):
     self.plot_options_dialog = PlotConfigDialogPresenter(
         self.canvas.figure, parent=self.window)