diff --git a/Modules/QtWidgets/test/QmitkAbstractNodeSelectionWidgetTest.cpp b/Modules/QtWidgets/test/QmitkAbstractNodeSelectionWidgetTest.cpp index 78460023bf..5541a9c309 100644 --- a/Modules/QtWidgets/test/QmitkAbstractNodeSelectionWidgetTest.cpp +++ b/Modules/QtWidgets/test/QmitkAbstractNodeSelectionWidgetTest.cpp @@ -1,501 +1,586 @@ /*============================================================================ The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center (DKFZ) All rights reserved. Use of this source code is governed by a 3-clause BSD license that can be found in the LICENSE file. ============================================================================*/ #include "QmitkAbstractNodeSelectionWidget.h" #include #include #include #include "QmitkModelViewSelectionConnector.h" #include #include class TestWidget : public QmitkAbstractNodeSelectionWidget { public: explicit TestWidget(QWidget* parent = nullptr) : QmitkAbstractNodeSelectionWidget(parent), m_UpdateInfo(0), m_OnNodePredicateChanged(0), m_OnDataStorageChanged(0), m_OnInternalSelectionChanged(0), m_OnNodeAddedToStorage(0), m_OnNodeRemovedFromStorage(0), m_ReviseSelectionChanged(0), m_AllowEmissionOfSelection(0), m_Allow(true), m_NewSelectionEmited(0) { connect(this, &QmitkAbstractNodeSelectionWidget::CurrentSelectionChanged, this, &TestWidget::NewSelectionEmited); }; int m_UpdateInfo; void UpdateInfo() override { m_UpdateInfo++; }; int m_OnNodePredicateChanged; void OnNodePredicateChanged() override { m_OnNodePredicateChanged++; }; int m_OnDataStorageChanged; void OnDataStorageChanged() override { m_OnDataStorageChanged++; }; int m_OnInternalSelectionChanged; void OnInternalSelectionChanged() override { m_OnInternalSelectionChanged++; }; int m_OnNodeAddedToStorage; void OnNodeAddedToStorage(const mitk::DataNode* node) override { m_OnNodeAddedToStorage++; }; int m_OnNodeRemovedFromStorage; void OnNodeRemovedFromStorage(const mitk::DataNode* node) override { m_OnNodeRemovedFromStorage++; }; int m_ReviseSelectionChanged; void ReviseSelectionChanged(const NodeList& oldInternalSelection, NodeList& newInternalSelection) override { m_ReviseSelectionChanged++; }; mutable int m_AllowEmissionOfSelection; bool m_Allow; bool AllowEmissionOfSelection(const NodeList& emissionCandidates) const override { m_AllowEmissionOfSelection++; if (m_Allow) return QmitkAbstractNodeSelectionWidget::AllowEmissionOfSelection(emissionCandidates); return false; }; int m_NewSelectionEmited; QmitkAbstractNodeSelectionWidget::NodeList m_LastNewEmision; void NewSelectionEmited(NodeList selection) { m_NewSelectionEmited++; m_LastNewEmision = selection; }; }; class QmitkAbstractNodeSelectionWidgetTestSuite : public mitk::TestFixture { CPPUNIT_TEST_SUITE(QmitkAbstractNodeSelectionWidgetTestSuite); MITK_TEST(InstantiationTest); MITK_TEST(SetDataStorageTest); MITK_TEST(DataStorageEventTest); MITK_TEST(NodePredicateTest); MITK_TEST(SelectOnlyVisibleNodesTest); MITK_TEST(OtherSetterAnsGetterTest); MITK_TEST(AllowEmissionOfSelectionTest); + MITK_TEST(OnNodeModifiedTest); CPPUNIT_TEST_SUITE_END(); mitk::DataStorage::Pointer m_DataStorage; mitk::DataNode::Pointer m_Node1; mitk::DataNode::Pointer m_Node1_2; mitk::DataNode::Pointer m_Node2; mitk::DataNode::Pointer m_Node3; QApplication* m_TestApp; public: void setUp() override { m_DataStorage = mitk::StandaloneDataStorage::New(); m_Node1 = mitk::DataNode::New(); m_Node1->SetName("node1_1"); m_Node2 = mitk::DataNode::New(); m_Node2->SetName("node2"); m_Node3 = mitk::DataNode::New(); m_Node3->SetName("node3"); m_Node1_2 = mitk::DataNode::New(); m_Node1_2->SetName("node1_2"); m_DataStorage->Add(m_Node1); m_DataStorage->Add(m_Node2); m_DataStorage->Add(m_Node3); m_DataStorage->Add(m_Node1_2); int argc = 0; char** argv = nullptr; m_TestApp = new QApplication(argc, argv); } mitk::NodePredicateBase::Pointer GeneratTestPredicate(const std::string& name) { auto check = [name](const mitk::DataNode * node) { return node->GetName().find(name,0) == 0; }; auto predicate = mitk::NodePredicateFunction::New(check); return predicate.GetPointer(); } void tearDown() override { delete m_TestApp; } void InstantiationTest() { TestWidget* widget; CPPUNIT_ASSERT_NO_THROW_MESSAGE("Normal constructor fails", widget = new TestWidget()); CPPUNIT_ASSERT_NO_THROW_MESSAGE("Normal destructor fails", delete widget); } void SetDataStorageTest() { TestWidget widget; widget.SetDataStorage(nullptr); CPPUNIT_ASSERT_EQUAL(0, widget.m_UpdateInfo); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodePredicateChanged); CPPUNIT_ASSERT_EQUAL_MESSAGE("Set same data storage but triggered change", 0, widget.m_OnDataStorageChanged); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnInternalSelectionChanged); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeAddedToStorage); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeRemovedFromStorage); CPPUNIT_ASSERT_EQUAL(0, widget.m_ReviseSelectionChanged); CPPUNIT_ASSERT_EQUAL(0, widget.m_AllowEmissionOfSelection); CPPUNIT_ASSERT_EQUAL(0, widget.m_NewSelectionEmited); widget.SetDataStorage(m_DataStorage); CPPUNIT_ASSERT_EQUAL(1, widget.m_UpdateInfo); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodePredicateChanged); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnDataStorageChanged); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnInternalSelectionChanged); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeAddedToStorage); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeRemovedFromStorage); CPPUNIT_ASSERT_EQUAL(1, widget.m_ReviseSelectionChanged); CPPUNIT_ASSERT_EQUAL(1, widget.m_AllowEmissionOfSelection); CPPUNIT_ASSERT_EQUAL(0, widget.m_NewSelectionEmited); widget.SetCurrentSelection({ m_Node1 }); CPPUNIT_ASSERT_EQUAL(2, widget.m_UpdateInfo); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodePredicateChanged); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnDataStorageChanged); CPPUNIT_ASSERT_EQUAL(2, widget.m_OnInternalSelectionChanged); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeAddedToStorage); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeRemovedFromStorage); CPPUNIT_ASSERT_EQUAL(2, widget.m_ReviseSelectionChanged); CPPUNIT_ASSERT_EQUAL(2, widget.m_AllowEmissionOfSelection); CPPUNIT_ASSERT_EQUAL(1, widget.m_NewSelectionEmited); CPPUNIT_ASSERT(EqualNodeSelections({ m_Node1 }, widget.m_LastNewEmision)); CPPUNIT_ASSERT(EqualNodeSelections({ m_Node1 }, widget.GetSelectedNodes())); widget.SetDataStorage(m_DataStorage); CPPUNIT_ASSERT_EQUAL(2, widget.m_UpdateInfo); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodePredicateChanged); CPPUNIT_ASSERT_EQUAL_MESSAGE("Set same data storage but triggered change", 1, widget.m_OnDataStorageChanged); CPPUNIT_ASSERT_EQUAL(2, widget.m_OnInternalSelectionChanged); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeAddedToStorage); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeRemovedFromStorage); CPPUNIT_ASSERT_EQUAL(2, widget.m_ReviseSelectionChanged); CPPUNIT_ASSERT_EQUAL(2, widget.m_AllowEmissionOfSelection); CPPUNIT_ASSERT_EQUAL(1, widget.m_NewSelectionEmited); CPPUNIT_ASSERT(EqualNodeSelections({ m_Node1 }, widget.GetSelectedNodes())); widget.SetDataStorage(nullptr); CPPUNIT_ASSERT_EQUAL(3, widget.m_UpdateInfo); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodePredicateChanged); CPPUNIT_ASSERT_EQUAL_MESSAGE("Set same data storage but triggered change", 2, widget.m_OnDataStorageChanged); CPPUNIT_ASSERT_EQUAL(3, widget.m_OnInternalSelectionChanged); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeAddedToStorage); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeRemovedFromStorage); CPPUNIT_ASSERT_EQUAL(3, widget.m_ReviseSelectionChanged); CPPUNIT_ASSERT_EQUAL(3, widget.m_AllowEmissionOfSelection); CPPUNIT_ASSERT_EQUAL(2, widget.m_NewSelectionEmited); CPPUNIT_ASSERT(EqualNodeSelections({}, widget.m_LastNewEmision)); CPPUNIT_ASSERT(EqualNodeSelections({}, widget.GetSelectedNodes())); } void DataStorageEventTest() { TestWidget widget; auto newNode = mitk::DataNode::New(); widget.SetDataStorage(m_DataStorage); m_DataStorage->Add(newNode); CPPUNIT_ASSERT_EQUAL(1, widget.m_UpdateInfo); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodePredicateChanged); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnDataStorageChanged); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnInternalSelectionChanged); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnNodeAddedToStorage); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeRemovedFromStorage); CPPUNIT_ASSERT_EQUAL(1, widget.m_ReviseSelectionChanged); CPPUNIT_ASSERT_EQUAL(1, widget.m_AllowEmissionOfSelection); CPPUNIT_ASSERT_EQUAL(0, widget.m_NewSelectionEmited); widget.SetCurrentSelection({ newNode }); m_DataStorage->Remove(m_Node1); CPPUNIT_ASSERT_EQUAL(2, widget.m_UpdateInfo); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodePredicateChanged); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnDataStorageChanged); CPPUNIT_ASSERT_EQUAL(2, widget.m_OnInternalSelectionChanged); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnNodeAddedToStorage); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnNodeRemovedFromStorage); CPPUNIT_ASSERT_EQUAL(2, widget.m_ReviseSelectionChanged); CPPUNIT_ASSERT_EQUAL(2, widget.m_AllowEmissionOfSelection); CPPUNIT_ASSERT_EQUAL(1, widget.m_NewSelectionEmited); CPPUNIT_ASSERT(EqualNodeSelections({ newNode }, widget.m_LastNewEmision)); CPPUNIT_ASSERT(EqualNodeSelections({ newNode }, widget.GetSelectedNodes())); m_DataStorage->Remove(newNode); CPPUNIT_ASSERT_EQUAL(3, widget.m_UpdateInfo); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodePredicateChanged); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnDataStorageChanged); CPPUNIT_ASSERT_EQUAL(3, widget.m_OnInternalSelectionChanged); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnNodeAddedToStorage); CPPUNIT_ASSERT_EQUAL(2, widget.m_OnNodeRemovedFromStorage); CPPUNIT_ASSERT_EQUAL(3, widget.m_ReviseSelectionChanged); CPPUNIT_ASSERT_EQUAL(3, widget.m_AllowEmissionOfSelection); CPPUNIT_ASSERT_EQUAL(2, widget.m_NewSelectionEmited); CPPUNIT_ASSERT(EqualNodeSelections({}, widget.m_LastNewEmision)); CPPUNIT_ASSERT(EqualNodeSelections({}, widget.GetSelectedNodes())); widget.SetCurrentSelection({ m_Node2 }); m_DataStorage = nullptr; CPPUNIT_ASSERT_EQUAL(5, widget.m_UpdateInfo); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodePredicateChanged); CPPUNIT_ASSERT_EQUAL(2, widget.m_OnDataStorageChanged); CPPUNIT_ASSERT_EQUAL(5, widget.m_OnInternalSelectionChanged); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnNodeAddedToStorage); CPPUNIT_ASSERT_EQUAL(2, widget.m_OnNodeRemovedFromStorage); CPPUNIT_ASSERT_EQUAL(5, widget.m_ReviseSelectionChanged); CPPUNIT_ASSERT_EQUAL(5, widget.m_AllowEmissionOfSelection); CPPUNIT_ASSERT_EQUAL(4, widget.m_NewSelectionEmited); CPPUNIT_ASSERT(EqualNodeSelections({}, widget.m_LastNewEmision)); CPPUNIT_ASSERT(EqualNodeSelections({}, widget.GetSelectedNodes())); } void NodePredicateTest() { TestWidget widget; CPPUNIT_ASSERT(nullptr == widget.GetNodePredicate()); auto testPred = GeneratTestPredicate("node2"); widget.SetNodePredicate(testPred); CPPUNIT_ASSERT(testPred == widget.GetNodePredicate()); CPPUNIT_ASSERT_EQUAL(1, widget.m_UpdateInfo); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnNodePredicateChanged); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnDataStorageChanged); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnInternalSelectionChanged); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeAddedToStorage); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeRemovedFromStorage); CPPUNIT_ASSERT_EQUAL(1, widget.m_ReviseSelectionChanged); CPPUNIT_ASSERT_EQUAL(1, widget.m_AllowEmissionOfSelection); CPPUNIT_ASSERT_EQUAL(0, widget.m_NewSelectionEmited); widget.SetDataStorage(m_DataStorage); widget.SetCurrentSelection({ m_Node3 }); CPPUNIT_ASSERT_EQUAL(3, widget.m_UpdateInfo); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnNodePredicateChanged); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnDataStorageChanged); CPPUNIT_ASSERT_EQUAL(3, widget.m_OnInternalSelectionChanged); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeAddedToStorage); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeRemovedFromStorage); CPPUNIT_ASSERT_EQUAL(3, widget.m_ReviseSelectionChanged); CPPUNIT_ASSERT_EQUAL(3, widget.m_AllowEmissionOfSelection); CPPUNIT_ASSERT_EQUAL(0, widget.m_NewSelectionEmited); CPPUNIT_ASSERT(EqualNodeSelections({}, widget.m_LastNewEmision)); CPPUNIT_ASSERT(EqualNodeSelections({}, widget.GetSelectedNodes())); widget.SetCurrentSelection({ m_Node2 }); CPPUNIT_ASSERT_EQUAL(4, widget.m_UpdateInfo); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnNodePredicateChanged); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnDataStorageChanged); CPPUNIT_ASSERT_EQUAL(4, widget.m_OnInternalSelectionChanged); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeAddedToStorage); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeRemovedFromStorage); CPPUNIT_ASSERT_EQUAL(4, widget.m_ReviseSelectionChanged); CPPUNIT_ASSERT_EQUAL(4, widget.m_AllowEmissionOfSelection); CPPUNIT_ASSERT_EQUAL(1, widget.m_NewSelectionEmited); CPPUNIT_ASSERT(EqualNodeSelections({ m_Node2 }, widget.m_LastNewEmision)); CPPUNIT_ASSERT(EqualNodeSelections({ m_Node2 }, widget.GetSelectedNodes())); //change predicate while nodes are selected widget.SetNodePredicate(GeneratTestPredicate("node1")); CPPUNIT_ASSERT_EQUAL(5, widget.m_UpdateInfo); CPPUNIT_ASSERT_EQUAL(2, widget.m_OnNodePredicateChanged); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnDataStorageChanged); CPPUNIT_ASSERT_EQUAL(5, widget.m_OnInternalSelectionChanged); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeAddedToStorage); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeRemovedFromStorage); CPPUNIT_ASSERT_EQUAL(5, widget.m_ReviseSelectionChanged); CPPUNIT_ASSERT_EQUAL(5, widget.m_AllowEmissionOfSelection); CPPUNIT_ASSERT_EQUAL(2, widget.m_NewSelectionEmited); CPPUNIT_ASSERT(EqualNodeSelections({}, widget.m_LastNewEmision)); CPPUNIT_ASSERT(EqualNodeSelections({}, widget.GetSelectedNodes())); //change selection to mixed one (valid nodes and invalid ones) widget.SetCurrentSelection({ m_Node1, m_Node2, m_Node1_2 }); CPPUNIT_ASSERT_EQUAL(6, widget.m_UpdateInfo); CPPUNIT_ASSERT_EQUAL(2, widget.m_OnNodePredicateChanged); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnDataStorageChanged); CPPUNIT_ASSERT_EQUAL(6, widget.m_OnInternalSelectionChanged); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeAddedToStorage); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeRemovedFromStorage); CPPUNIT_ASSERT_EQUAL(6, widget.m_ReviseSelectionChanged); CPPUNIT_ASSERT_EQUAL(6, widget.m_AllowEmissionOfSelection); CPPUNIT_ASSERT_EQUAL(3, widget.m_NewSelectionEmited); CPPUNIT_ASSERT(EqualNodeSelections({ m_Node1, m_Node1_2 }, widget.m_LastNewEmision)); CPPUNIT_ASSERT(EqualNodeSelections({ m_Node1, m_Node1_2 }, widget.GetSelectedNodes())); } void SelectOnlyVisibleNodesTest() { TestWidget widget; CPPUNIT_ASSERT_EQUAL(true, widget.GetSelectOnlyVisibleNodes()); CPPUNIT_ASSERT(nullptr == widget.GetNodePredicate()); auto testPred = GeneratTestPredicate("node2"); widget.SetNodePredicate(testPred); widget.SetDataStorage(m_DataStorage); widget.SetCurrentSelection({ m_Node3 }); CPPUNIT_ASSERT_EQUAL(3, widget.m_UpdateInfo); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnNodePredicateChanged); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnDataStorageChanged); CPPUNIT_ASSERT_EQUAL(3, widget.m_OnInternalSelectionChanged); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeAddedToStorage); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeRemovedFromStorage); CPPUNIT_ASSERT_EQUAL(3, widget.m_ReviseSelectionChanged); CPPUNIT_ASSERT_EQUAL(3, widget.m_AllowEmissionOfSelection); CPPUNIT_ASSERT_EQUAL(0, widget.m_NewSelectionEmited); CPPUNIT_ASSERT(EqualNodeSelections({}, widget.m_LastNewEmision)); CPPUNIT_ASSERT(EqualNodeSelections({}, widget.GetSelectedNodes())); widget.SetSelectOnlyVisibleNodes(false); CPPUNIT_ASSERT_EQUAL(false, widget.GetSelectOnlyVisibleNodes()); CPPUNIT_ASSERT_EQUAL(3, widget.m_UpdateInfo); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnNodePredicateChanged); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnDataStorageChanged); CPPUNIT_ASSERT_EQUAL(3, widget.m_OnInternalSelectionChanged); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeAddedToStorage); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeRemovedFromStorage); CPPUNIT_ASSERT_EQUAL(3, widget.m_ReviseSelectionChanged); CPPUNIT_ASSERT_EQUAL(4, widget.m_AllowEmissionOfSelection); CPPUNIT_ASSERT_EQUAL(1, widget.m_NewSelectionEmited); CPPUNIT_ASSERT(EqualNodeSelections({ m_Node3 }, widget.m_LastNewEmision)); CPPUNIT_ASSERT(EqualNodeSelections({ m_Node3 }, widget.GetSelectedNodes())); //change selection to mixed one (valid nodes and invalid ones) widget.SetCurrentSelection({ m_Node1, m_Node2, m_Node1_2 }); CPPUNIT_ASSERT_EQUAL(4, widget.m_UpdateInfo); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnNodePredicateChanged); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnDataStorageChanged); CPPUNIT_ASSERT_EQUAL(4, widget.m_OnInternalSelectionChanged); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeAddedToStorage); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeRemovedFromStorage); CPPUNIT_ASSERT_EQUAL(4, widget.m_ReviseSelectionChanged); CPPUNIT_ASSERT_EQUAL(5, widget.m_AllowEmissionOfSelection); CPPUNIT_ASSERT_EQUAL(2, widget.m_NewSelectionEmited); CPPUNIT_ASSERT(EqualNodeSelections({ m_Node1, m_Node2, m_Node1_2 }, widget.m_LastNewEmision)); CPPUNIT_ASSERT(EqualNodeSelections({ m_Node1, m_Node2, m_Node1_2 }, widget.GetSelectedNodes())); //change predicate while nodes are selected widget.SetNodePredicate(GeneratTestPredicate("node1")); CPPUNIT_ASSERT_EQUAL(5, widget.m_UpdateInfo); CPPUNIT_ASSERT_EQUAL(2, widget.m_OnNodePredicateChanged); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnDataStorageChanged); CPPUNIT_ASSERT_EQUAL(5, widget.m_OnInternalSelectionChanged); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeAddedToStorage); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeRemovedFromStorage); CPPUNIT_ASSERT_EQUAL(5, widget.m_ReviseSelectionChanged); CPPUNIT_ASSERT_EQUAL(6, widget.m_AllowEmissionOfSelection); CPPUNIT_ASSERT_EQUAL(2, widget.m_NewSelectionEmited); CPPUNIT_ASSERT(EqualNodeSelections({ m_Node1, m_Node2, m_Node1_2 }, widget.m_LastNewEmision)); CPPUNIT_ASSERT(EqualNodeSelections({ m_Node1, m_Node2, m_Node1_2 }, widget.GetSelectedNodes())); widget.SetSelectOnlyVisibleNodes(true); CPPUNIT_ASSERT_EQUAL(true, widget.GetSelectOnlyVisibleNodes()); CPPUNIT_ASSERT_EQUAL(5, widget.m_UpdateInfo); CPPUNIT_ASSERT_EQUAL(2, widget.m_OnNodePredicateChanged); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnDataStorageChanged); CPPUNIT_ASSERT_EQUAL(5, widget.m_OnInternalSelectionChanged); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeAddedToStorage); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeRemovedFromStorage); CPPUNIT_ASSERT_EQUAL(5, widget.m_ReviseSelectionChanged); CPPUNIT_ASSERT_EQUAL(7, widget.m_AllowEmissionOfSelection); CPPUNIT_ASSERT_EQUAL(3, widget.m_NewSelectionEmited); CPPUNIT_ASSERT(EqualNodeSelections({ m_Node1, m_Node1_2 }, widget.m_LastNewEmision)); CPPUNIT_ASSERT(EqualNodeSelections({ m_Node1, m_Node1_2 }, widget.GetSelectedNodes())); } void OtherSetterAnsGetterTest() { TestWidget widget; CPPUNIT_ASSERT("Error. Select data." == widget.GetInvalidInfo()); CPPUNIT_ASSERT("Empty. Make a selection." == widget.GetEmptyInfo()); CPPUNIT_ASSERT("Select a data node" == widget.GetPopUpTitel()); CPPUNIT_ASSERT("" == widget.GetPopUpHint()); CPPUNIT_ASSERT(false == widget.GetSelectionIsOptional()); widget.SetInvalidInfo("SetInvalidInfo"); widget.SetEmptyInfo("SetEmptyInfo"); widget.SetPopUpTitel("SetPopUpTitel"); widget.SetPopUpHint("SetPopUpHint"); widget.SetSelectionIsOptional(true); CPPUNIT_ASSERT("SetInvalidInfo" == widget.GetInvalidInfo()); CPPUNIT_ASSERT("SetEmptyInfo" == widget.GetEmptyInfo()); CPPUNIT_ASSERT("SetPopUpTitel" == widget.GetPopUpTitel()); CPPUNIT_ASSERT("SetPopUpHint" == widget.GetPopUpHint()); CPPUNIT_ASSERT(true == widget.GetSelectionIsOptional()); } void AllowEmissionOfSelectionTest() { TestWidget widget; widget.SetDataStorage(m_DataStorage); widget.SetCurrentSelection({ m_Node3 }); CPPUNIT_ASSERT_EQUAL(2, widget.m_UpdateInfo); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodePredicateChanged); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnDataStorageChanged); CPPUNIT_ASSERT_EQUAL(2, widget.m_OnInternalSelectionChanged); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeAddedToStorage); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeRemovedFromStorage); CPPUNIT_ASSERT_EQUAL(2, widget.m_ReviseSelectionChanged); CPPUNIT_ASSERT_EQUAL(2, widget.m_AllowEmissionOfSelection); CPPUNIT_ASSERT_EQUAL(1, widget.m_NewSelectionEmited); CPPUNIT_ASSERT(EqualNodeSelections({ m_Node3 }, widget.m_LastNewEmision)); CPPUNIT_ASSERT(EqualNodeSelections({ m_Node3 }, widget.GetSelectedNodes())); widget.m_Allow = false; widget.SetCurrentSelection({ m_Node1 }); CPPUNIT_ASSERT_EQUAL(3, widget.m_UpdateInfo); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodePredicateChanged); CPPUNIT_ASSERT_EQUAL(1, widget.m_OnDataStorageChanged); CPPUNIT_ASSERT_EQUAL(3, widget.m_OnInternalSelectionChanged); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeAddedToStorage); CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeRemovedFromStorage); CPPUNIT_ASSERT_EQUAL(3, widget.m_ReviseSelectionChanged); CPPUNIT_ASSERT_EQUAL(3, widget.m_AllowEmissionOfSelection); CPPUNIT_ASSERT_EQUAL(1, widget.m_NewSelectionEmited); CPPUNIT_ASSERT(EqualNodeSelections({ m_Node3 }, widget.m_LastNewEmision)); CPPUNIT_ASSERT(EqualNodeSelections({ m_Node1 }, widget.GetSelectedNodes())); } + void OnNodeModifiedTest() + { + TestWidget widget; + + widget.SetDataStorage(m_DataStorage); + widget.SetCurrentSelection({ m_Node3 }); + + //Check OnNodeModified behavour without predicate + m_Node3->SetName("NewName"); + CPPUNIT_ASSERT_EQUAL(2, widget.m_UpdateInfo); + CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodePredicateChanged); + CPPUNIT_ASSERT_EQUAL(1, widget.m_OnDataStorageChanged); + CPPUNIT_ASSERT_EQUAL(2, widget.m_OnInternalSelectionChanged); + CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeAddedToStorage); + CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeRemovedFromStorage); + CPPUNIT_ASSERT_EQUAL(2, widget.m_ReviseSelectionChanged); + CPPUNIT_ASSERT_EQUAL(3, widget.m_AllowEmissionOfSelection); + CPPUNIT_ASSERT_EQUAL(1, widget.m_NewSelectionEmited); + CPPUNIT_ASSERT(EqualNodeSelections({ m_Node3 }, widget.m_LastNewEmision)); + CPPUNIT_ASSERT(EqualNodeSelections({ m_Node3 }, widget.GetSelectedNodes())); + + //simulate behaviour if allowance is changed to true + widget.m_Allow = false; + m_Node3->SetName("NewName_temp"); + widget.m_Allow = true; + m_Node3->SetName("NewName"); + CPPUNIT_ASSERT_EQUAL(4, widget.m_UpdateInfo); + CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodePredicateChanged); + CPPUNIT_ASSERT_EQUAL(1, widget.m_OnDataStorageChanged); + CPPUNIT_ASSERT_EQUAL(2, widget.m_OnInternalSelectionChanged); + CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeAddedToStorage); + CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeRemovedFromStorage); + CPPUNIT_ASSERT_EQUAL(2, widget.m_ReviseSelectionChanged); + CPPUNIT_ASSERT_EQUAL(7, widget.m_AllowEmissionOfSelection); + CPPUNIT_ASSERT_EQUAL(1, widget.m_NewSelectionEmited); + CPPUNIT_ASSERT(EqualNodeSelections({ m_Node3 }, widget.m_LastNewEmision)); + CPPUNIT_ASSERT(EqualNodeSelections({ m_Node3 }, widget.GetSelectedNodes())); + + //change irrelevant node + m_Node2->SetName("IrrelevantNode"); + CPPUNIT_ASSERT_EQUAL(4, widget.m_UpdateInfo); + CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodePredicateChanged); + CPPUNIT_ASSERT_EQUAL(1, widget.m_OnDataStorageChanged); + CPPUNIT_ASSERT_EQUAL(2, widget.m_OnInternalSelectionChanged); + CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeAddedToStorage); + CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeRemovedFromStorage); + CPPUNIT_ASSERT_EQUAL(2, widget.m_ReviseSelectionChanged); + CPPUNIT_ASSERT_EQUAL(7, widget.m_AllowEmissionOfSelection); + CPPUNIT_ASSERT_EQUAL(1, widget.m_NewSelectionEmited); + CPPUNIT_ASSERT(EqualNodeSelections({ m_Node3 }, widget.m_LastNewEmision)); + CPPUNIT_ASSERT(EqualNodeSelections({ m_Node3 }, widget.GetSelectedNodes())); + + //test with predicate set + widget.SetNodePredicate(GeneratTestPredicate("node1")); + m_Node3->SetName("NowAlsoIrrelevantNode"); + CPPUNIT_ASSERT_EQUAL(5, widget.m_UpdateInfo); + CPPUNIT_ASSERT_EQUAL(1, widget.m_OnNodePredicateChanged); + CPPUNIT_ASSERT_EQUAL(1, widget.m_OnDataStorageChanged); + CPPUNIT_ASSERT_EQUAL(3, widget.m_OnInternalSelectionChanged); + CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeAddedToStorage); + CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeRemovedFromStorage); + CPPUNIT_ASSERT_EQUAL(3, widget.m_ReviseSelectionChanged); + CPPUNIT_ASSERT_EQUAL(8, widget.m_AllowEmissionOfSelection); + CPPUNIT_ASSERT_EQUAL(2, widget.m_NewSelectionEmited); + CPPUNIT_ASSERT(EqualNodeSelections({ }, widget.m_LastNewEmision)); + CPPUNIT_ASSERT(EqualNodeSelections({ }, widget.GetSelectedNodes())); + + widget.SetCurrentSelection({ m_Node1, m_Node1_2 }); + CPPUNIT_ASSERT(EqualNodeSelections({ m_Node1, m_Node1_2 }, widget.m_LastNewEmision)); + + m_Node1->SetName("NodeSortedOutByPredicate"); + CPPUNIT_ASSERT_EQUAL(7, widget.m_UpdateInfo); + CPPUNIT_ASSERT_EQUAL(1, widget.m_OnNodePredicateChanged); + CPPUNIT_ASSERT_EQUAL(1, widget.m_OnDataStorageChanged); + CPPUNIT_ASSERT_EQUAL(5, widget.m_OnInternalSelectionChanged); + CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeAddedToStorage); + CPPUNIT_ASSERT_EQUAL(0, widget.m_OnNodeRemovedFromStorage); + CPPUNIT_ASSERT_EQUAL(5, widget.m_ReviseSelectionChanged); + CPPUNIT_ASSERT_EQUAL(10, widget.m_AllowEmissionOfSelection); + CPPUNIT_ASSERT_EQUAL(4, widget.m_NewSelectionEmited); + CPPUNIT_ASSERT(EqualNodeSelections({ m_Node1_2 }, widget.m_LastNewEmision)); + CPPUNIT_ASSERT(EqualNodeSelections({ m_Node1_2 }, widget.GetSelectedNodes())); + } + }; MITK_TEST_SUITE_REGISTRATION(QmitkAbstractNodeSelectionWidget)