diff --git a/Modules/Chart/CMakeLists.txt b/Modules/Chart/CMakeLists.txt index 102806e36d..3c3a31d467 100644 --- a/Modules/Chart/CMakeLists.txt +++ b/Modules/Chart/CMakeLists.txt @@ -1,4 +1,8 @@ MITK_CREATE_MODULE( DEPENDS MitkCore - PACKAGE_DEPENDS PRIVATE Qt5|WebEngineWidgets + PACKAGE_DEPENDS PUBLIC Qt5|WebEngineWidgets ) + +if(BUILD_TESTING) + ADD_SUBDIRECTORY(Test) +endif(BUILD_TESTING) \ No newline at end of file diff --git a/Modules/Chart/Test/CMakeLists.txt b/Modules/Chart/Test/CMakeLists.txt new file mode 100644 index 0000000000..d45daf111d --- /dev/null +++ b/Modules/Chart/Test/CMakeLists.txt @@ -0,0 +1 @@ +MITK_CREATE_MODULE_TESTS() \ No newline at end of file diff --git a/Modules/Chart/Test/files.cmake b/Modules/Chart/Test/files.cmake new file mode 100644 index 0000000000..ae25413a40 --- /dev/null +++ b/Modules/Chart/Test/files.cmake @@ -0,0 +1,7 @@ +set(MODULE_TESTS + mitkChartExampleTest.cpp +) + +set(CPP_FILES + mitkChartExampleTestHelper.cpp +) diff --git a/Modules/Chart/Test/mitkChartExampleTest.cpp b/Modules/Chart/Test/mitkChartExampleTest.cpp new file mode 100644 index 0000000000..37ba0367d3 --- /dev/null +++ b/Modules/Chart/Test/mitkChartExampleTest.cpp @@ -0,0 +1,181 @@ +/*=================================================================== +The Medical Imaging Interaction Toolkit (MITK) +Copyright (c) German Cancer Research Center, +Division of Medical and Biological Informatics. +All rights reserved. +This software is distributed WITHOUT ANY WARRANTY; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR +A PARTICULAR PURPOSE. +See LICENSE.txt or http://www.mitk.org for details. +===================================================================*/ + +// mitk chart +#include "mitkChartExampleTestHelper.h" + +// mitk core +#include +#include +#include +#include + +// std includes +#include + +class mitkChartExampleTestSuite : public mitk::TestFixture +{ + CPPUNIT_TEST_SUITE(mitkChartExampleTestSuite); + MITK_TEST(AddingDataTest); + MITK_TEST(CheckingDataTest); + MITK_TEST(ClearingDataTest); + CPPUNIT_TEST_SUITE_END(); + +private: + + mitk::ChartExampleTestHelper helper; + +public: + + void AddingDataTest() + { + MITK_INFO << "=== AddingDataTest start ==="; + AddNewData(); + CheckData(); + ClearData(); + MITK_INFO << "=== AddingDataTest end ==="; + } + + void CheckingDataTest() + { + MITK_INFO << "=== CheckingDataTest start ==="; + CheckData(); + MITK_INFO << "=== CheckingDataTest end ==="; + } + + void ClearingDataTest() + { + MITK_INFO << "=== ClearingDataTest start ==="; + ClearData(); + MITK_INFO << "=== ClearingDataTest end ==="; + } + + + void AddNewData() + { + MITK_INFO << "=== AddNewData"; + + // Adding data + size_t size; + for (size_t i = 1; i < 6; i++) + { + helper.Add(i); + size = helper.qmitkChartWidget.ReturnSizeOfMemory(); + CPPUNIT_ASSERT_MESSAGE("Data storage does not contain the right amount of items!", size == i); + } + } + + void CheckData() + { + auto myDataOne = helper.GetDataOne(); + + auto xDataOne = myDataOne->GetXData(); + auto yDataOne = myDataOne->GetYData(); + auto labelOne = myDataOne->GetLabel(); + auto typeOne = myDataOne->GetChartType(); + auto colorOne = myDataOne->GetColor(); + auto styleOne = myDataOne->GetLineStyle(); + + auto dataToCheckOne = helper.qmitkChartWidget.GetDataElementByLabel(labelOne.toString().toStdString()); + + CPPUNIT_ASSERT_MESSAGE("Dataset one was not saved correctly", dataToCheckOne->GetXData() == xDataOne && + dataToCheckOne->GetYData() == yDataOne && + dataToCheckOne->GetLabel() == labelOne && + dataToCheckOne->GetChartType() == typeOne && + dataToCheckOne->GetColor() == colorOne && + dataToCheckOne->GetLineStyle() == styleOne); + + auto myDataTwo = helper.GetDataTwo(); + + auto xDataTwo = myDataTwo->GetXData(); + auto yDataTwo = myDataTwo->GetYData(); + auto labelTwo = myDataTwo->GetLabel(); + auto typeTwo = myDataTwo->GetChartType(); + auto colorTwo = myDataTwo->GetColor(); + auto styleTwo = myDataTwo->GetLineStyle(); + + auto dataToCheckTwo = helper.qmitkChartWidget.GetDataElementByLabel(labelTwo.toString().toStdString()); + + CPPUNIT_ASSERT_MESSAGE("Dataset two was not saved correctly", dataToCheckTwo->GetXData() == xDataTwo && + dataToCheckTwo->GetYData() == yDataTwo && + dataToCheckTwo->GetLabel() == labelTwo && + dataToCheckTwo->GetChartType() == typeTwo && + dataToCheckTwo->GetColor() == colorTwo && + dataToCheckTwo->GetLineStyle() == styleTwo); + + auto myDataThree = helper.GetDataThree(); + + auto xDataThree = myDataThree->GetXData(); + auto yDataThree = myDataThree->GetYData(); + auto labelThree = myDataThree->GetLabel(); + auto typeThree = myDataThree->GetChartType(); + auto colorThree = myDataThree->GetColor(); + auto styleThree = myDataThree->GetLineStyle(); + + auto dataToCheckThree = helper.qmitkChartWidget.GetDataElementByLabel(labelThree.toString().toStdString()); + + CPPUNIT_ASSERT_MESSAGE("Dataset three was not saved correctly", dataToCheckThree->GetXData() == xDataThree && + dataToCheckThree->GetYData() == yDataThree && + dataToCheckThree->GetLabel() == labelThree && + dataToCheckThree->GetChartType() == typeThree && + dataToCheckThree->GetColor() == colorThree && + dataToCheckThree->GetLineStyle() == styleThree); + + auto myDataFour = helper.GetDataFour(); + + auto xDataFour = myDataFour->GetXData(); + auto yDataFour = myDataFour->GetYData(); + auto labelFour = myDataFour->GetLabel(); + auto typeFour = myDataFour->GetChartType(); + auto colorFour = myDataFour->GetColor(); + auto styleFour = myDataFour->GetLineStyle(); + + auto dataToCheckFour = helper.qmitkChartWidget.GetDataElementByLabel(labelFour.toString().toStdString()); + + CPPUNIT_ASSERT_MESSAGE("Dataset one was not saved correctly", dataToCheckFour->GetXData() == xDataFour && + dataToCheckFour->GetYData() == yDataFour && + dataToCheckFour->GetLabel() == labelFour && + dataToCheckFour->GetChartType() == typeFour && + dataToCheckFour->GetColor() == colorFour && + dataToCheckFour->GetLineStyle() == styleFour); + + auto myDataFive = helper.GetDataFive(); + + auto xDataFive = myDataFive->GetXData(); + auto yDataFive = myDataFive->GetYData(); + auto labelFive = myDataFive->GetLabel(); + auto typeFive = myDataFive->GetChartType(); + auto colorFive = myDataFive->GetColor(); + auto styleFive = myDataFive->GetLineStyle(); + + auto dataToCheckFive = helper.qmitkChartWidget.GetDataElementByLabel(labelFive.toString().toStdString()); + + CPPUNIT_ASSERT_MESSAGE("Dataset one was not saved correctly", dataToCheckFive->GetXData() == xDataFive && + dataToCheckFive->GetYData() == yDataFive && + dataToCheckFive->GetLabel() == labelFive && + dataToCheckFive->GetChartType() == typeFive && + dataToCheckFive->GetColor() == colorFive && + dataToCheckFive->GetLineStyle() == styleFive); + } + + void ClearData() + { + MITK_INFO << "=== ClearData"; + + // Claering data + mitk::ChartExampleTestHelper helper; + helper.qmitkChartWidget.Clear(); + int size = helper.qmitkChartWidget.ReturnSizeOfMemory(); + CPPUNIT_ASSERT_MESSAGE("Data storage was not cleared completly!", size == 0); + } +}; + +MITK_TEST_SUITE_REGISTRATION(mitkChartExample) \ No newline at end of file diff --git a/Modules/Chart/Test/mitkChartExampleTestHelper.cpp b/Modules/Chart/Test/mitkChartExampleTestHelper.cpp new file mode 100644 index 0000000000..e5e0de9e3a --- /dev/null +++ b/Modules/Chart/Test/mitkChartExampleTestHelper.cpp @@ -0,0 +1,388 @@ +/*=================================================================== + +The Medical Imaging Interaction Toolkit (MITK) + +Copyright (c) German Cancer Research Center, +Division of Medical and Biological Informatics. +All rights reserved. + +This software is distributed WITHOUT ANY WARRANTY; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR +A PARTICULAR PURPOSE. + +See LICENSE.txt or http://www.mitk.org for details. + +===================================================================*/ + +#include "mitkChartExampleTestHelper.h" + +// std includes +#include + +std::unique_ptr mitk::ChartExampleTestHelper::GetDataOne() +{ + QmitkChartxyData myDataOne; + + QMap data; + + for (int i = 0; i < 10; i++) + { + data.insert(i, i); + } + + myDataOne.SetData(data); + myDataOne.SetLabel("DataOne"); + myDataOne.SetChartType("bar"); + myDataOne.SetColor("red"); + myDataOne.SetLineStyle("solid"); + + return std::make_unique(myDataOne); +} + +std::unique_ptr mitk::ChartExampleTestHelper::GetDataTwo() +{ + QmitkChartxyData myDataTwo; + + QMap data; + + for (int i = 10; i < 20; i++) + { + data.insert(i, i); + } + + myDataTwo.SetData(data); + myDataTwo.SetLabel("DataTwo"); + myDataTwo.SetChartType("bar"); + myDataTwo.SetColor("green"); + myDataTwo.SetLineStyle("solid"); + + return std::make_unique(myDataTwo); +} + +std::unique_ptr mitk::ChartExampleTestHelper::GetDataThree() +{ + QmitkChartxyData myDataThree; + + QMap data; + + for (int i = 20; i < 30; i++) + { + data.insert(i, i); + } + + myDataThree.SetData(data); + myDataThree.SetLabel("DataThree"); + myDataThree.SetChartType("bar"); + myDataThree.SetColor("blue"); + myDataThree.SetLineStyle("solid"); + + return std::make_unique(myDataThree); +} + +std::unique_ptr mitk::ChartExampleTestHelper::GetDataFour() +{ + QmitkChartxyData myDataFour; + + QMap data; + + for (int i = 30; i < 40; i++) + { + data.insert(i, i); + } + + myDataFour.SetData(data); + myDataFour.SetLabel("DataFour"); + myDataFour.SetChartType("bar"); + myDataFour.SetColor("yellow"); + myDataFour.SetLineStyle("solid"); + + return std::make_unique(myDataFour); +} + +std::unique_ptr mitk::ChartExampleTestHelper::GetDataFive() +{ + QmitkChartxyData myDataFive; + + QMap data; + + for (int i = 40; i < 50; i++) + { + data.insert(i, i); + } + + myDataFive.SetData(data); + myDataFive.SetLabel("DataFive"); + myDataFive.SetChartType("bar"); + myDataFive.SetColor("black"); + myDataFive.SetLineStyle("solid"); + + return std::make_unique(myDataFive); +} + +QmitkChartWidget::ChartType mitk::ChartExampleTestHelper::ReturnChartTypeByString(std::string chartTypeString) +{ + if (chartTypeString == "bar") + { + return QmitkChartWidget::ChartType::bar; + } + + if (chartTypeString == "line") + { + return QmitkChartWidget::ChartType::line; + } + + if (chartTypeString == "spline") + { + return QmitkChartWidget::ChartType::spline; + } + + if (chartTypeString == "pie") + { + return QmitkChartWidget::ChartType::pie; + } + + if (chartTypeString == "area") + { + return QmitkChartWidget::ChartType::area; + } + + if (chartTypeString == "area_spline") + { + return QmitkChartWidget::ChartType::area_spline; + } + + if (chartTypeString == "scatter") + { + return QmitkChartWidget::ChartType::scatter; + } + + return QmitkChartWidget::ChartType::bar; +} + +QmitkChartWidget::ChartColor mitk::ChartExampleTestHelper::ReturnChartColorByString(std::string chartColorString) +{ + if (chartColorString == "red") + { + return QmitkChartWidget::ChartColor::red; + } + + if (chartColorString == "orange") + { + return QmitkChartWidget::ChartColor::orange; + } + + if (chartColorString == "yellow") + { + return QmitkChartWidget::ChartColor::yellow; + } + + if (chartColorString == "green") + { + return QmitkChartWidget::ChartColor::green; + } + + if (chartColorString == "blue") + { + return QmitkChartWidget::ChartColor::blue; + } + + if (chartColorString == "purple") + { + return QmitkChartWidget::ChartColor::purple; + } + + if (chartColorString == "brown") + { + return QmitkChartWidget::ChartColor::brown; + } + + if (chartColorString == "magenta") + { + return QmitkChartWidget::ChartColor::magenta; + } + + if (chartColorString == "tan") + { + return QmitkChartWidget::ChartColor::tan; + } + + if (chartColorString == "cyan") + { + return QmitkChartWidget::ChartColor::cyan; + } + + if (chartColorString == "olive") + { + return QmitkChartWidget::ChartColor::olive; + } + + if (chartColorString == "maroon") + { + return QmitkChartWidget::ChartColor::maroon; + } + + if (chartColorString == "navy") + { + return QmitkChartWidget::ChartColor::navy; + } + + if (chartColorString == "aquamarine") + { + return QmitkChartWidget::ChartColor::aquamarine; + } + + if (chartColorString == "turqouise") + { + return QmitkChartWidget::ChartColor::turqouise; + } + + if (chartColorString == "silver") + { + return QmitkChartWidget::ChartColor::silver; + } + + if (chartColorString == "lime") + { + return QmitkChartWidget::ChartColor::lime; + } + + if (chartColorString == "teal") + { + return QmitkChartWidget::ChartColor::teal; + } + + if (chartColorString == "indigo") + { + return QmitkChartWidget::ChartColor::indigo; + } + + if (chartColorString == "violet") + { + return QmitkChartWidget::ChartColor::violet; + } + + if (chartColorString == "pink") + { + return QmitkChartWidget::ChartColor::pink; + } + + if (chartColorString == "black") + { + return QmitkChartWidget::ChartColor::black; + } + + if (chartColorString == "white") + { + return QmitkChartWidget::ChartColor::white; + } + + if (chartColorString == "grey") + { + return QmitkChartWidget::ChartColor::grey; + } + + return QmitkChartWidget::ChartColor::red; +} + +QmitkChartWidget::LineStyle mitk::ChartExampleTestHelper::ReturnChartStyleByString(std::string chartStyleString) +{ + if (chartStyleString == "solid") + { + return QmitkChartWidget::LineStyle::solid; + } + + if (chartStyleString == "dashed") + { + return QmitkChartWidget::LineStyle::dashed; + } + + return QmitkChartWidget::LineStyle::solid; +} + +void mitk::ChartExampleTestHelper::Add(int dataSet) +{ + if (dataSet == 1) + { + auto myDataOne = mitk::ChartExampleTestHelper::GetDataOne(); + + std::map data = mitk::ChartExampleTestHelper::ToStdMap(myDataOne->GetXData(), myDataOne->GetYData()); + auto label = myDataOne->GetLabel().toString().toStdString(); + auto type = mitk::ChartExampleTestHelper::ReturnChartTypeByString((myDataOne->GetChartType().toString().toStdString())); + auto color = mitk::ChartExampleTestHelper::ReturnChartColorByString((myDataOne->GetColor().toString().toStdString())); + auto style = mitk::ChartExampleTestHelper::ReturnChartStyleByString((myDataOne->GetLineStyle().toString().toStdString())); + + qmitkChartWidget.AddChartExampleData(data, label, type, color, style); + } + + if (dataSet == 2) + { + auto myDataTwo = mitk::ChartExampleTestHelper::GetDataTwo(); + + std::map data = mitk::ChartExampleTestHelper::ToStdMap(myDataTwo->GetXData(), myDataTwo->GetYData()); + auto label = myDataTwo->GetLabel().toString().toStdString(); + auto type = mitk::ChartExampleTestHelper::ReturnChartTypeByString((myDataTwo->GetChartType().toString().toStdString())); + auto color = mitk::ChartExampleTestHelper::ReturnChartColorByString((myDataTwo->GetColor().toString().toStdString())); + auto style = mitk::ChartExampleTestHelper::ReturnChartStyleByString((myDataTwo->GetLineStyle().toString().toStdString())); + + qmitkChartWidget.AddChartExampleData(data, label, type, color, style); + } + + if (dataSet == 3) + { + auto myDataThree = mitk::ChartExampleTestHelper::GetDataThree(); + + std::map data = mitk::ChartExampleTestHelper::ToStdMap(myDataThree->GetXData(), myDataThree->GetYData()); + auto label = myDataThree->GetLabel().toString().toStdString(); + auto type = mitk::ChartExampleTestHelper::ReturnChartTypeByString((myDataThree->GetChartType().toString().toStdString())); + auto color = mitk::ChartExampleTestHelper::ReturnChartColorByString((myDataThree->GetColor().toString().toStdString())); + auto style = mitk::ChartExampleTestHelper::ReturnChartStyleByString((myDataThree->GetLineStyle().toString().toStdString())); + + qmitkChartWidget.AddChartExampleData(data, label, type, color, style); + } + + if (dataSet == 4) + { + auto myDataFour = mitk::ChartExampleTestHelper::GetDataFour(); + + std::map data = mitk::ChartExampleTestHelper::ToStdMap(myDataFour->GetXData(), myDataFour->GetYData()); + auto label = myDataFour->GetLabel().toString().toStdString(); + auto type = mitk::ChartExampleTestHelper::ReturnChartTypeByString((myDataFour->GetChartType().toString().toStdString())); + auto color = mitk::ChartExampleTestHelper::ReturnChartColorByString((myDataFour->GetColor().toString().toStdString())); + auto style = mitk::ChartExampleTestHelper::ReturnChartStyleByString((myDataFour->GetLineStyle().toString().toStdString())); + + qmitkChartWidget.AddChartExampleData(data, label, type, color, style); + } + + if (dataSet == 5) + { + auto myDataFive = mitk::ChartExampleTestHelper::GetDataFive(); + + std::map data = mitk::ChartExampleTestHelper::ToStdMap(myDataFive->GetXData(), myDataFive->GetYData()); + auto label = myDataFive->GetLabel().toString().toStdString(); + auto type = mitk::ChartExampleTestHelper::ReturnChartTypeByString((myDataFive->GetChartType().toString().toStdString())); + auto color = mitk::ChartExampleTestHelper::ReturnChartColorByString((myDataFive->GetColor().toString().toStdString())); + auto style = mitk::ChartExampleTestHelper::ReturnChartStyleByString((myDataFive->GetLineStyle().toString().toStdString())); + + qmitkChartWidget.AddChartExampleData(data, label, type, color, style); + } +} + +std::map mitk::ChartExampleTestHelper::ToStdMap(QVariantList xData, QVariantList yData) +{ + auto xDataConverted = xData.toVector().toStdVector(); + auto yDataConverted = yData.toVector().toStdVector(); + + std::map data; + for (int i = 0; i < xDataConverted.size(); i++) + { + data.insert_or_assign(xDataConverted[i].toDouble(), yDataConverted[i].toDouble()); + } + + return data; +} + +void mitk::ChartExampleTestHelper::ClearMemory() +{ + // Clear the vector + qmitkChartWidget.Clear(); +} diff --git a/Modules/Chart/Test/mitkChartExampleTestHelper.h b/Modules/Chart/Test/mitkChartExampleTestHelper.h new file mode 100644 index 0000000000..36f8f20ad8 --- /dev/null +++ b/Modules/Chart/Test/mitkChartExampleTestHelper.h @@ -0,0 +1,67 @@ +/*=================================================================== + +The Medical Imaging Interaction Toolkit (MITK) + +Copyright (c) German Cancer Research Center, +Division of Medical and Biological Informatics. +All rights reserved. + +This software is distributed WITHOUT ANY WARRANTY; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR +A PARTICULAR PURPOSE. + +See LICENSE.txt or http://www.mitk.org for details. + +===================================================================*/ + +#ifndef MITK_CHART_EXAMPLE_TEST_HELPER_H +#define MITK_CHART_EXAMPLE_TEST_HELPER_H + +// mitk core +#include "QmitkChartxyData.h" +#include "QmitkChartWidget.h" + +// std includes +#include +#include +#include +#include + +namespace mitk +{ + class ChartExampleTestHelper + { + + public: + ////////////////////////////////////////////////////////////////////////// + // ACCESS TO DATA SETS + ////////////////////////////////////////////////////////////////////////// + + std::unique_ptr GetDataOne(); + std::unique_ptr GetDataTwo(); + std::unique_ptr GetDataThree(); + std::unique_ptr GetDataFour(); + std::unique_ptr GetDataFive(); + + ////////////////////////////////////////////////////////////////////////// + // INSTANCE OF CLASS TO BE TESTED + ////////////////////////////////////////////////////////////////////////// + + QmitkChartWidget qmitkChartWidget; + + ////////////////////////////////////////////////////////////////////////// + // AUXILIARY FUNCTIONS + ////////////////////////////////////////////////////////////////////////// + + QmitkChartWidget::ChartType ReturnChartTypeByString(std::string chartTypeString); + QmitkChartWidget::ChartColor ReturnChartColorByString(std::string chartColorString); + QmitkChartWidget::LineStyle ReturnChartStyleByString(std::string chartStyleString); + + void Add(int dataSet); + std::map ToStdMap(QVariantList xData, QVariantList yData); + void ClearMemory(); + + }; // end ChartExampleTestHelper +} // end mitk + +#endif