diff --git a/Modules/DataTypesExt/src/mitkColorSequenceRainbow.cpp b/Modules/DataTypesExt/src/mitkColorSequenceRainbow.cpp index b7fa1608ef..2342400740 100644 --- a/Modules/DataTypesExt/src/mitkColorSequenceRainbow.cpp +++ b/Modules/DataTypesExt/src/mitkColorSequenceRainbow.cpp @@ -1,68 +1,66 @@ /*=================================================================== 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 "mitkColorSequenceRainbow.h" #include namespace mitk { ColorSequenceRainbow::ColorSequenceRainbow() { m_ColorIndex = 0; m_Color.SetRed(1.0); m_Color.SetGreen(0.67); m_Color.SetBlue(0.0); InitColorList(); } // end of constructor ColorSequenceRainbow::~ColorSequenceRainbow() {} // end of destructor Color ColorSequenceRainbow::GetNextColor() { - m_Color = m_ColorList[m_ColorIndex]; - if (m_ColorIndex < m_ColorList.size()) + if (m_ColorIndex < (m_ColorList.size() - 1)) { m_ColorIndex++; } else { m_ColorIndex = 0; } + m_Color = m_ColorList[m_ColorIndex]; return m_Color; } // end of GetNextMitkColor() void ColorSequenceRainbow::InitColorList() { mitk::Color defaultColor, red, green, blue, yellow, magenta, cyan, orange; defaultColor.Set(1.0, 0.67, 0.0); red.Set(1.0, 0.0, 0.0); green.Set(0.0, 1.0, 0.0); blue.Set(0.0, 0.0, 1.0); yellow.Set(1.0, 1.0, 0.0); magenta.Set(1.0, 0.0, 1.0); cyan.Set(0.0, 1.0, 1.0); orange.Set(1.0, 0.6, 0.0); - // m_ColorList.push_back(defaultColor); + m_ColorList.push_back(defaultColor); m_ColorList.push_back(red); m_ColorList.push_back(yellow); m_ColorList.push_back(blue); m_ColorList.push_back(green); m_ColorList.push_back(magenta); m_ColorList.push_back(cyan); m_ColorList.push_back(orange); - m_ColorList.push_back(defaultColor); - } // end of ColorList void ColorSequenceRainbow::GoToBegin() { m_ColorIndex = 0; } } // end of namespace diff --git a/Modules/DataTypesExt/test/files.cmake b/Modules/DataTypesExt/test/files.cmake index a9b690a9e5..8186c7f800 100644 --- a/Modules/DataTypesExt/test/files.cmake +++ b/Modules/DataTypesExt/test/files.cmake @@ -1,18 +1,19 @@ set(MODULE_TESTS + mitkColorSequenceRainbowTest.cpp mitkMeshTest.cpp mitkMultiStepperTest.cpp mitkOrganTypePropertyTest.cpp mitkUnstructuredGridTest.cpp ) set(MODULE_IMAGE_TESTS mitkCompressedImageContainerTest.cpp #only runs on images ) set(MODULE_TESTIMAGE US4DCyl.nrrd Pic3D.nrrd Pic2DplusT.nrrd BallBinary30x30x30.nrrd Png2D-bw.png ) diff --git a/Modules/DataTypesExt/test/mitkColorSequenceRainbowTest.cpp b/Modules/DataTypesExt/test/mitkColorSequenceRainbowTest.cpp new file mode 100644 index 0000000000..c979421bc7 --- /dev/null +++ b/Modules/DataTypesExt/test/mitkColorSequenceRainbowTest.cpp @@ -0,0 +1,95 @@ +/*=================================================================== + +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. + +===================================================================*/ + +// Testing +#include "mitkTestFixture.h" +#include "mitkTestingMacros.h" + +// std includes +#include + +// MITK includes +#include "mitkColorSequenceRainbow.h" + +// VTK includes +#include + +class mitkColorSequenceRainbowTestSuite : public mitk::TestFixture +{ + CPPUNIT_TEST_SUITE(mitkColorSequenceRainbowTestSuite); + + MITK_TEST(GetNextColor_ReturnsADifferentColor); + MITK_TEST(GoToBegin_NextCallReturnsSameColorAsFirstCall); + MITK_TEST(GetNextColor_CanWrapAroundWithoutCrashing); + CPPUNIT_TEST_SUITE_END(); + + +public: + /** + * @brief Setup Always call this method before each Test-case to ensure correct and new intialization of the used + * members for a new test case. (If the members are not used in a test, the method does not need to be called). + */ + void setUp() override + { + } + + void tearDown() override + { + } + + void GetNextColor_ReturnsADifferentColor() + { + mitk::ColorSequenceRainbow rainbowColorSequence; + mitk::Color color1 = rainbowColorSequence.GetNextColor(); + mitk::Color color2 = rainbowColorSequence.GetNextColor(); + + CPPUNIT_ASSERT_MESSAGE("Two consecutive colors are not equal.", color1 != color2); + } + + void GoToBegin_NextCallReturnsSameColorAsFirstCall() + { + mitk::ColorSequenceRainbow rainbowColorSequence; + mitk::Color color1 = rainbowColorSequence.GetNextColor(); + rainbowColorSequence.GoToBegin(); + mitk::Color color2 = rainbowColorSequence.GetNextColor(); + + CPPUNIT_ASSERT_MESSAGE("GoToBegin is identical to beginning.", color1 == color2); + } + + void GetNextColor_CanWrapAroundWithoutCrashing() + { + int counter = 0; + try + { + mitk::ColorSequenceRainbow rainbowColorSequence; + mitk::Color color1 = rainbowColorSequence.GetNextColor(); + mitk::Color color2 = rainbowColorSequence.GetNextColor(); + + while (color1 != color2 && counter < std::numeric_limits::max()) + { + color2 = rainbowColorSequence.GetNextColor(); + ++counter; + } + } + catch (...) + { + CPPUNIT_FAIL("Exception during rainbow color sequence color generation"); + } + CPPUNIT_ASSERT_MESSAGE("Error free wraparound achieved.", counter < std::numeric_limits::max()); + } +}; + +MITK_TEST_SUITE_REGISTRATION(mitkColorSequenceRainbow)