diff --git a/qt/scientific_interfaces/Indirect/IndirectFitPlotPresenter.cpp b/qt/scientific_interfaces/Indirect/IndirectFitPlotPresenter.cpp index bfcea94e63e568dbbce6b6710a1fbc8a770685d5..14b7681c619250f04c120d9ec56fc6515ecaadbc 100644 --- a/qt/scientific_interfaces/Indirect/IndirectFitPlotPresenter.cpp +++ b/qt/scientific_interfaces/Indirect/IndirectFitPlotPresenter.cpp @@ -93,7 +93,6 @@ void IndirectFitPlotPresenter::handleSelectedFitDataChanged( setActiveIndex(index); updateAvailableSpectra(); updatePlots(); - updateFitRangeSelector(); updateGuess(); emit selectedFitDataChanged(index); } @@ -102,7 +101,6 @@ void IndirectFitPlotPresenter::handlePlotSpectrumChanged( WorkspaceIndex spectrum) { setActiveSpectrum(spectrum); updatePlots(); - updateFitRangeSelector(); emit plotSpectrumChanged(spectrum); } diff --git a/qt/scientific_interfaces/Indirect/test/IndirectFitPlotPresenterTest.h b/qt/scientific_interfaces/Indirect/test/IndirectFitPlotPresenterTest.h index 2182a6e33ecf3c2ddfbf5f152b84e15c8c567535..7faa1c74feeddfabcf0fc984ec602975ae7e4b9a 100644 --- a/qt/scientific_interfaces/Indirect/test/IndirectFitPlotPresenterTest.h +++ b/qt/scientific_interfaces/Indirect/test/IndirectFitPlotPresenterTest.h @@ -9,9 +9,9 @@ #include <cxxtest/TestSuite.h> #include <gmock/gmock.h> -#include "IIndirectFitPlotViewLegacy.h" -#include "IndirectFitPlotPresenterLegacy.h" -#include "IndirectFittingModelLegacy.h" +#include "IIndirectFitPlotView.h" +#include "IndirectFitPlotPresenter.h" +#include "IndirectFittingModel.h" #include "MantidAPI/FrameworkManager.h" #include "MantidAPI/FunctionFactory.h" #include "MantidAPI/IFunction.h" @@ -27,19 +27,20 @@ using namespace testing; namespace { -IFunction_sptr getFunction(std::string const &functionString) { - return FunctionFactory::Instance().createInitialized(functionString); +MultiDomainFunction_sptr getFunction(std::string const &functionString) { + return FunctionFactory::Instance().createInitializedMultiDomainFunction( + functionString, 10); } -IFunction_sptr getFunctionWithWorkspaceName(std::string const &workspaceName) { +MultiDomainFunction_sptr +getFunctionWithWorkspaceName(std::string const &workspaceName) { std::string const functionString = "name=LinearBackground,A0=0,A1=0,ties=(A0=0.000000,A1=0.0);" "(composite=Convolution,FixResolution=true,NumDeriv=true;" "name=Resolution,Workspace=" + - workspaceName + - ",WorkspaceIndex=0;((composite=ProductFunction,NumDeriv=" - "false;name=Lorentzian,Amplitude=1,PeakCentre=0,FWHM=0." - "0175)))"; + workspaceName + ",WorkspaceIndex=0;((composite=ProductFunction,NumDeriv=" + "false;name=Lorentzian,Amplitude=1,PeakCentre=0,FWHM=0." + "0175)))"; return getFunction(functionString); } @@ -48,16 +49,16 @@ IFunction_sptr getFunctionWithWorkspaceName(std::string const &workspaceName) { GNU_DIAG_OFF_SUGGEST_OVERRIDE /// Mock object to mock the view -class MockIndirectFitPlotView : public IIndirectFitPlotViewLegacy { +class MockIndirectFitPlotView : public IIndirectFitPlotView { public: /// Signals - void emitSelectedFitDataChanged(std::size_t index) { + void emitSelectedFitDataChanged(TableDatasetIndex index) { emit selectedFitDataChanged(index); } void emitPlotCurrentPreview() { emit plotCurrentPreview(); } - void emitPlotSpectrumChanged(std::size_t spectrum) { + void emitPlotSpectrumChanged(IDA::WorkspaceIndex spectrum) { emit plotSpectrumChanged(spectrum); } @@ -81,38 +82,40 @@ public: /// Public methods MOCK_METHOD1(watchADS, void(bool watch)); + MOCK_METHOD0(disableSpectrumPlotSelection, void()); - MOCK_CONST_METHOD0(getSelectedSpectrum, std::size_t()); - MOCK_CONST_METHOD0(getSelectedSpectrumIndex, int()); - MOCK_CONST_METHOD0(getSelectedDataIndex, int()); - MOCK_CONST_METHOD0(dataSelectionSize, std::size_t()); + MOCK_CONST_METHOD0(getSelectedSpectrum, IDA::WorkspaceIndex()); + MOCK_CONST_METHOD0(getSelectedSpectrumIndex, TableRowIndex()); + MOCK_CONST_METHOD0(getSelectedDataIndex, TableDatasetIndex()); + MOCK_CONST_METHOD0(dataSelectionSize, TableDatasetIndex()); MOCK_CONST_METHOD0(isPlotGuessChecked, bool()); MOCK_METHOD0(hideMultipleDataSelection, void()); MOCK_METHOD0(showMultipleDataSelection, void()); MOCK_METHOD2(setAvailableSpectra, - void(std::size_t minimum, std::size_t maximum)); - MOCK_METHOD2(setAvailableSpectra, - void(std::vector<std::size_t>::const_iterator const &from, - std::vector<std::size_t>::const_iterator const &to)); + void(IDA::WorkspaceIndex minimum, IDA::WorkspaceIndex maximum)); + MOCK_METHOD2( + setAvailableSpectra, + void(std::vector<IDA::WorkspaceIndex>::const_iterator const &from, + std::vector<IDA::WorkspaceIndex>::const_iterator const &to)); MOCK_METHOD1(setMinimumSpectrum, void(int minimum)); MOCK_METHOD1(setMaximumSpectrum, void(int maximum)); - MOCK_METHOD1(setPlotSpectrum, void(int spectrum)); + MOCK_METHOD1(setPlotSpectrum, void(IDA::WorkspaceIndex spectrum)); MOCK_METHOD1(appendToDataSelection, void(std::string const &dataName)); MOCK_METHOD2(setNameInDataSelection, - void(std::string const &dataName, std::size_t index)); + void(std::string const &dataName, TableDatasetIndex index)); MOCK_METHOD0(clearDataSelection, void()); MOCK_METHOD4(plotInTopPreview, void(QString const &name, Mantid::API::MatrixWorkspace_sptr workspace, - std::size_t spectrum, Qt::GlobalColor colour)); + IDA::WorkspaceIndex spectrum, Qt::GlobalColor colour)); MOCK_METHOD4(plotInBottomPreview, void(QString const &name, Mantid::API::MatrixWorkspace_sptr workspace, - std::size_t spectrum, Qt::GlobalColor colour)); + IDA::WorkspaceIndex spectrum, Qt::GlobalColor colour)); MOCK_METHOD1(removeFromTopPreview, void(QString const &name)); MOCK_METHOD1(removeFromBottomPreview, void(QString const &name)); @@ -146,35 +149,40 @@ public: MOCK_METHOD1(setHWHMMaximum, void(double maximum)); }; -class MockIndirectFittingModel : public IndirectFittingModelLegacy { +class MockIndirectFittingModel : public IndirectFittingModel { public: /// Public methods - MOCK_CONST_METHOD1(getWorkspace, MatrixWorkspace_sptr(std::size_t index)); + MOCK_CONST_METHOD1(getWorkspace, + MatrixWorkspace_sptr(TableDatasetIndex index)); MOCK_CONST_METHOD2(getFittingRange, - std::pair<double, double>(std::size_t dataIndex, - std::size_t spectrum)); + std::pair<double, double>(TableDatasetIndex dataIndex, + IDA::WorkspaceIndex spectrum)); MOCK_CONST_METHOD3(createDisplayName, std::string(std::string const &formatString, std::string const &rangeDelimiter, - std::size_t dataIndex)); + TableDatasetIndex dataIndex)); MOCK_CONST_METHOD0(isMultiFit, bool()); - MOCK_CONST_METHOD0(numberOfWorkspaces, std::size_t()); - MOCK_CONST_METHOD0(getFittingFunction, IFunction_sptr()); + MOCK_CONST_METHOD0(numberOfWorkspaces, TableDatasetIndex()); + MOCK_CONST_METHOD0(getFittingFunction, + Mantid::API::MultiDomainFunction_sptr()); + + MOCK_METHOD3(setStartX, void(double startX, TableDatasetIndex dataIndex, + IDA::WorkspaceIndex spectrum)); + MOCK_METHOD3(setEndX, void(double endX, TableDatasetIndex dataIndex, + IDA::WorkspaceIndex spectrum)); - MOCK_METHOD3(setStartX, void(double startX, std::size_t dataIndex, - std::size_t spectrum)); - MOCK_METHOD3(setEndX, - void(double endX, std::size_t dataIndex, std::size_t spectrum)); + MOCK_METHOD2(setEndX, void(double endX, TableDatasetIndex dataIndex)); + MOCK_METHOD2(setStartX, void(double endX, TableDatasetIndex dataIndex)); MOCK_METHOD3(setDefaultParameterValue, void(std::string const &name, double value, - std::size_t dataIndex)); + TableDatasetIndex dataIndex)); private: std::string sequentialFitOutputName() const override { return ""; }; std::string simultaneousFitOutputName() const override { return ""; }; - std::string singleFitOutputName(std::size_t index, - std::size_t spectrum) const override { + std::string singleFitOutputName(TableDatasetIndex index, + IDA::WorkspaceIndex spectrum) const override { UNUSED_ARG(index); UNUSED_ARG(spectrum); return ""; @@ -201,13 +209,13 @@ public: } void setUp() override { - /// Note that the IndirectFitPlotModelLegacy could not be mocked as the - /// Presenter takes an IndirectFittingModelLegacy. This means the - /// IndirectFittingModelLegacy is mocked instead - which is a good + /// Note that the IndirectFitPlotModel could not be mocked as the + /// Presenter takes an IndirectFittingModel. This means the + /// IndirectFittingModel is mocked instead - which is a good /// substitute anyway m_view = std::make_unique<NiceMock<MockIndirectFitPlotView>>(); m_fittingModel = std::make_unique<NiceMock<MockIndirectFittingModel>>(); - m_presenter = std::make_unique<IndirectFitPlotPresenterLegacy>( + m_presenter = std::make_unique<IndirectFitPlotPresenter>( std::move(m_fittingModel.get()), std::move(m_view.get())); SetUpADSWithWorkspace m_ads("WorkspaceName", createWorkspace(10)); @@ -230,7 +238,7 @@ public: ///---------------------------------------------------------------------- void test_that_the_model_and_view_have_been_instantiated_correctly() { - std::size_t const selectedSpectrum(3); + IDA::WorkspaceIndex const selectedSpectrum(3); ON_CALL(*m_view, getSelectedSpectrum()) .WillByDefault(Return(selectedSpectrum)); @@ -247,7 +255,7 @@ public: void test_that_invoking_a_presenter_method_will_call_the_relevant_methods_in_the_model_and_view() { - std::size_t const selectionSize(2); + TableDatasetIndex const selectionSize(2); ON_CALL(*m_view, dataSelectionSize()).WillByDefault(Return(selectionSize)); @@ -272,18 +280,20 @@ public: void test_that_the_selectedFitDataChanged_signal_will_set_the_available_spectra() { - std::size_t const index(0); + TableDatasetIndex const index(0); ON_CALL(*m_fittingModel, getWorkspace(index)) .WillByDefault(Return(m_ads->retrieveWorkspace("WorkspaceName"))); - EXPECT_CALL(*m_view, setAvailableSpectra(0, 9)).Times(1); + EXPECT_CALL(*m_view, setAvailableSpectra(IDA::WorkspaceIndex(0), + IDA::WorkspaceIndex(9))) + .Times(1); m_view->emitSelectedFitDataChanged(index); } void test_that_the_selectedFitDataChanged_signal_will_disable_selectors_when_there_is_no_workspace() { - std::size_t const index(0); + TableDatasetIndex const index(0); ON_CALL(*m_fittingModel, getWorkspace(index)) .WillByDefault(Return(nullptr)); @@ -295,39 +305,39 @@ public: void test_that_the_selectedFitDataChanged_signal_will_plot_the_input_when_there_is_only_an_input_workspace() { - std::size_t const index(0); + TableDatasetIndex const index(0); ON_CALL(*m_fittingModel, getWorkspace(index)) .WillByDefault(Return(m_ads->retrieveWorkspace("WorkspaceName"))); - EXPECT_CALL(*m_fittingModel, getWorkspace(index)).Times(3); + EXPECT_CALL(*m_fittingModel, getWorkspace(index)).Times(5); m_view->emitSelectedFitDataChanged(index); } void test_that_the_selectedFitDataChanged_signal_will_clear_the_plots_when_there_is_no_input_workspace() { - std::size_t const index(0); + TableDatasetIndex const index(0); ON_CALL(*m_fittingModel, getWorkspace(index)) .WillByDefault(Return(nullptr)); - EXPECT_CALL(*m_fittingModel, getWorkspace(index)).Times(2); - EXPECT_CALL(*m_view, clearPreviews()).Times(1); + EXPECT_CALL(*m_fittingModel, getWorkspace(index)).Times(3); + EXPECT_CALL(*m_view, clearPreviews()).Times(2); m_view->emitSelectedFitDataChanged(index); } void test_that_the_selectedFitDataChanged_signal_will_set_the_minimum_and_maximum_of_the_fit_range() { - std::size_t const index(0); + TableDatasetIndex const index(0); auto const range = std::make_pair(1.0, 2.0); - ON_CALL(*m_fittingModel, getFittingRange(index, 0)) + ON_CALL(*m_fittingModel, getFittingRange(index, IDA::WorkspaceIndex(0))) .WillByDefault(Return(range)); - EXPECT_CALL(*m_fittingModel, getFittingRange(index, 0)) - .Times(1) + EXPECT_CALL(*m_fittingModel, getFittingRange(index, IDA::WorkspaceIndex(0))) + .Times(2) .WillRepeatedly(Return(range)); - EXPECT_CALL(*m_view, setFitRangeMinimum(1.0)).Times(1); - EXPECT_CALL(*m_view, setFitRangeMaximum(2.0)).Times(1); + EXPECT_CALL(*m_view, setFitRangeMinimum(1.0)).Times(2); + EXPECT_CALL(*m_view, setFitRangeMaximum(2.0)).Times(2); m_view->emitSelectedFitDataChanged(index); } @@ -339,47 +349,47 @@ public: void test_that_the_plotSpectrumChanged_signal_will_plot_the_input_when_there_is_only_an_input_workspace() { - std::size_t const index(0); + TableDatasetIndex const index(0); ON_CALL(*m_fittingModel, getWorkspace(index)) .WillByDefault(Return(m_ads->retrieveWorkspace("WorkspaceName"))); EXPECT_CALL(*m_fittingModel, getWorkspace(index)).Times(2); EXPECT_CALL(*m_view, clearPreviews()).Times(1); - m_view->emitPlotSpectrumChanged(index); + m_view->emitPlotSpectrumChanged(0); } void test_that_the_plotSpectrumChanged_signal_will_clear_the_plots_when_there_is_no_input_workspace() { - std::size_t const index(0); + TableDatasetIndex const index(0); ON_CALL(*m_fittingModel, getWorkspace(index)) .WillByDefault(Return(nullptr)); EXPECT_CALL(*m_fittingModel, getWorkspace(index)).Times(1); EXPECT_CALL(*m_view, clearPreviews()).Times(1); - m_view->emitPlotSpectrumChanged(index); + m_view->emitPlotSpectrumChanged(0); } void test_that_the_plotSpectrumChanged_signal_will_set_the_minimum_and_maximum_of_the_fit_range() { - std::size_t const index(0); + TableDatasetIndex const index(0); auto const range = std::make_pair(1.0, 2.0); - ON_CALL(*m_fittingModel, getFittingRange(index, 0)) + ON_CALL(*m_fittingModel, getFittingRange(index, IDA::WorkspaceIndex(0))) .WillByDefault(Return(range)); - EXPECT_CALL(*m_fittingModel, getFittingRange(index, 0)) + EXPECT_CALL(*m_fittingModel, getFittingRange(index, IDA::WorkspaceIndex(0))) .Times(1) .WillOnce(Return(range)); EXPECT_CALL(*m_view, setFitRangeMinimum(1.0)).Times(1); EXPECT_CALL(*m_view, setFitRangeMaximum(2.0)).Times(1); - m_view->emitPlotSpectrumChanged(index); + m_view->emitPlotSpectrumChanged(0); } void test_that_the_plotCurrentPreview_signal_will_display_an_error_message_if_there_is_no_input_workspace() { - std::size_t const index(0); + TableDatasetIndex const index(0); std::string const message("Workspace not found - data may not be loaded."); ON_CALL(*m_fittingModel, getWorkspace(index)) @@ -394,12 +404,12 @@ public: void test_that_the_plotGuessChanged_signal_will_not_clear_the_guess_plot_when_passed_true() { - std::size_t const index(0); + TableDatasetIndex const index(0); std::string const workspaceName("WorkspaceName"); auto const range = std::make_pair(1.0, 2.0); auto const fitFunction = getFunctionWithWorkspaceName(workspaceName); - ON_CALL(*m_fittingModel, getFittingRange(index, 0)) + ON_CALL(*m_fittingModel, getFittingRange(index, IDA::WorkspaceIndex(0))) .WillByDefault(Return(range)); ON_CALL(*m_fittingModel, getFittingFunction()) .WillByDefault(Return(fitFunction)); @@ -413,7 +423,7 @@ public: void test_that_the_plotGuessChanged_signal_will_clear_the_plot_when_passed_false() { - std::size_t const index(0); + TableDatasetIndex const index(0); ON_CALL(*m_fittingModel, getWorkspace(index)) .WillByDefault(Return(m_ads->retrieveWorkspace("WorkspaceName"))); @@ -424,16 +434,17 @@ public: void test_that_the_startXChanged_signal_will_set_the_fitting_models_startX() { auto const range = std::make_pair(0.0, 2.0); - ON_CALL(*m_fittingModel, getFittingRange(0, 0)) + ON_CALL(*m_fittingModel, + getFittingRange(TableDatasetIndex(0), IDA::WorkspaceIndex(0))) .WillByDefault(Return(range)); - EXPECT_CALL(*m_fittingModel, setStartX(1.0, 0, 0)).Times(1); + EXPECT_CALL(*m_fittingModel, setStartX(1.0, TableDatasetIndex(0))).Times(1); m_view->emitStartXChanged(1.0); } void test_that_the_endXChanged_signal_will_set_the_fitting_models_endX() { - EXPECT_CALL(*m_fittingModel, setEndX(2.0, 0, 0)).Times(1); + EXPECT_CALL(*m_fittingModel, setEndX(2.0, TableDatasetIndex(0))).Times(1); m_view->emitEndXChanged(2.0); } @@ -456,8 +467,9 @@ public: .WillByDefault(Return(fitFunction)); Expectation setDefault = - EXPECT_CALL(*m_fittingModel, - setDefaultParameterValue("A0", background, 0)) + EXPECT_CALL( + *m_fittingModel, + setDefaultParameterValue("A0", background, TableDatasetIndex(0))) .Times(1); EXPECT_CALL(*m_fittingModel, getFittingFunction()) .Times(1) @@ -474,7 +486,7 @@ public: test_that_getSelectedSpectrumIndex_will_get_the_selected_spectrum_from_the_view() { EXPECT_CALL(*m_view, getSelectedSpectrumIndex()) .Times(1) - .WillOnce(Return(0)); + .WillOnce(Return(TableRowIndex(0))); m_presenter->getSelectedSpectrumIndex(); } @@ -541,11 +553,14 @@ public: void test_that_appendLastDataToSelection_will_set_the_name_of_the_data_selection_if_the_dataSelectionSize_and_numberOfWorkspaces_are_equal() { - std::size_t const index(1); - - ON_CALL(*m_view, dataSelectionSize()).WillByDefault(Return(2)); - ON_CALL(*m_fittingModel, numberOfWorkspaces()).WillByDefault(Return(2)); - ON_CALL(*m_fittingModel, createDisplayName("%1% (%2%)", "-", index)) + TableDatasetIndex const index(1); + + ON_CALL(*m_view, dataSelectionSize()) + .WillByDefault(Return(TableDatasetIndex(2))); + ON_CALL(*m_fittingModel, numberOfWorkspaces()) + .WillByDefault(Return(TableDatasetIndex(2))); + ON_CALL(*m_fittingModel, + createDisplayName("%1% (%2%)", "-", TableDatasetIndex(1))) .WillByDefault(Return("DisplayName-1")); ON_CALL(*m_fittingModel, getWorkspace(index)) .WillByDefault(Return(m_ads->retrieveWorkspace("WorkspaceName"))); @@ -562,10 +577,12 @@ public: void test_that_appendLastDataToSelection_will_add_to_the_data_selection_if_the_dataSelectionSize_and_numberOfWorkspaces_are_not_equal() { - std::size_t const index(1); + TableDatasetIndex const index(1); - ON_CALL(*m_view, dataSelectionSize()).WillByDefault(Return(1)); - ON_CALL(*m_fittingModel, numberOfWorkspaces()).WillByDefault(Return(2)); + ON_CALL(*m_view, dataSelectionSize()) + .WillByDefault(Return(TableDatasetIndex(1))); + ON_CALL(*m_fittingModel, numberOfWorkspaces()) + .WillByDefault(Return(TableDatasetIndex(2))); ON_CALL(*m_fittingModel, createDisplayName("%1% (%2%)", "-", index)) .WillByDefault(Return("DisplayName-1")); ON_CALL(*m_fittingModel, getWorkspace(index)) @@ -583,7 +600,7 @@ public: void test_that_updateSelectedDataName_will_update_the_name_in_the_data_selection() { - std::size_t const index(0); + TableDatasetIndex const index(0); ON_CALL(*m_fittingModel, createDisplayName("%1% (%2%)", "-", index)) .WillByDefault(Return("DisplayName-1")); @@ -593,7 +610,8 @@ public: Expectation createName = EXPECT_CALL(*m_fittingModel, createDisplayName("%1% (%2%)", "-", index)) .Times(1); - EXPECT_CALL(*m_view, setNameInDataSelection("DisplayName-1", 0)) + EXPECT_CALL(*m_view, + setNameInDataSelection("DisplayName-1", TableDatasetIndex(0))) .Times(1) .After(createName); @@ -603,7 +621,7 @@ public: private: std::unique_ptr<MockIndirectFitPlotView> m_view; std::unique_ptr<MockIndirectFittingModel> m_fittingModel; - std::unique_ptr<IndirectFitPlotPresenterLegacy> m_presenter; + std::unique_ptr<IndirectFitPlotPresenter> m_presenter; SetUpADSWithWorkspace *m_ads; };