Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
mitkPropertyRelationsTest.cpp
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
13 
14 #include "mitkPropertyRelations.h"
16 #include "mitkDataNode.h"
17 
18 #include "mitkTestFixture.h"
19 #include "mitkTestingMacros.h"
20 
21 #include <mitkEqual.h>
22 #include <mitkNumericConstants.h>
23 
24 class mitkPropertyRelationsTestSuite : public mitk::TestFixture
25 {
26  CPPUNIT_TEST_SUITE(mitkPropertyRelationsTestSuite);
27 
28  MITK_TEST(AddRule);
29  MITK_TEST(GetRulesForSource);
30  MITK_TEST(GetRulesForSourceCandidate);
31  MITK_TEST(GetRulesForDestinationCandidate);
32  MITK_TEST(GetRule);
33  MITK_TEST(GetRuleIDs);
34  MITK_TEST(HasRuleForSource);
35  MITK_TEST(RemoveRule);
36  MITK_TEST(RemoveAllRules);
37 
38  CPPUNIT_TEST_SUITE_END();
39 
40 private:
46 
47  mitk::DataNode::Pointer unRelated;
48  mitk::DataNode::Pointer destination;
49  mitk::DataNode::Pointer source_1;
50  mitk::DataNode::Pointer source_1n2;
51  mitk::DataNode::Pointer source_2;
52  mitk::DataNode::Pointer source_4;
53 
54  mitk::IPropertyRelations *service;
55 
56  static bool checkExistence(const mitk::PropertyRelations::RuleResultVectorType &rules,
58  {
59  auto predicate = [rule](const mitk::PropertyRelationRuleBase::ConstPointer &x) { return rule->GetRuleID() == x->GetRuleID(); };
60 
61  auto finding = std::find_if(rules.begin(), rules.end(), predicate);
62 
63  bool result = finding != rules.end();
64  return result;
65  }
66 
67 public:
68  void setUp() override
69  {
71 
72  rule1 = mitk::GenericIDRelationRule::New("rule1");
73  rule2 = mitk::GenericIDRelationRule::New("rule2");
74  rule3 = mitk::GenericIDRelationRule::New("rule3");
75  rule4 = mitk::GenericIDRelationRule::New("rule4");
76  unkownRule = mitk::GenericIDRelationRule::New("unkownRule");
77 
78  unRelated = mitk::DataNode::New();
79  unRelated->SetName("unRelated");
80 
81  destination = mitk::DataNode::New();
82  destination->SetName("destination");
83 
84  source_1 = mitk::DataNode::New();
85  source_1->SetName("source_1");
86  rule1->Connect(source_1, destination);
87 
88  source_1n2 = mitk::DataNode::New();
89  source_1n2->SetName("source_1n2");
90  rule1->Connect(source_1n2, destination);
91  rule2->Connect(source_1n2, destination);
92 
93  source_2 = mitk::DataNode::New();
94  source_2->SetName("source_2");
95  rule2->Connect(source_2, destination);
96 
97  source_4 = mitk::DataNode::New();
98  source_4->SetName("source_4");
99  rule4->Connect(source_4, destination);
100 
101  service->AddRule(rule1, false);
102  service->AddRule(rule2, false);
103  service->AddRule(rule3, false);
104  service->AddRule(rule4, false);
105  }
106 
107  void tearDown() override { delete service; }
108 
109  void AddRule()
110  {
112 
113  CPPUNIT_ASSERT_MESSAGE("Testing addrule of already existing rule (no overwrite) -> failed",
114  !service->AddRule(rule2_new, false));
115  CPPUNIT_ASSERT(service->GetRule(rule2->GetRuleID()).GetPointer() == rule2.GetPointer());
116 
117  CPPUNIT_ASSERT_MESSAGE("Testing addrule of already existing rule (overwrite) -> failed, was not added.",
118  service->AddRule(rule2_new, true));
119  CPPUNIT_ASSERT(service->GetRule(rule2->GetRuleID()).GetPointer() == rule2_new.GetPointer());
120 
121 
122  CPPUNIT_ASSERT(service->GetRule(unkownRule->GetRuleID()).IsNull());
123  CPPUNIT_ASSERT(service->AddRule(unkownRule));
124  CPPUNIT_ASSERT(service->GetRule(unkownRule->GetRuleID()).IsNotNull());
125 
126  CPPUNIT_ASSERT(!service->AddRule(nullptr));
127  }
128 
129  void GetRulesForSource()
130  {
132  CPPUNIT_ASSERT(rules.size() == 1);
133  CPPUNIT_ASSERT(checkExistence(rules, rule1));
134 
135  rules = service->GetRulesForSource(source_1n2);
136  CPPUNIT_ASSERT(rules.size() == 2);
137  CPPUNIT_ASSERT(checkExistence(rules, rule1));
138  CPPUNIT_ASSERT(checkExistence(rules, rule2));
139 
140  rules = service->GetRulesForSource(unRelated);
141  CPPUNIT_ASSERT(rules.size() == 0);
142 
143  rules = service->GetRulesForSource(nullptr);
144  CPPUNIT_ASSERT(rules.size() == 0);
145  }
146 
147  void GetRulesForSourceCandidate()
148  {
150  CPPUNIT_ASSERT(rules.size() == 4);
151  CPPUNIT_ASSERT(checkExistence(rules, rule1));
152  CPPUNIT_ASSERT(checkExistence(rules, rule2));
153  CPPUNIT_ASSERT(checkExistence(rules, rule3));
154  CPPUNIT_ASSERT(checkExistence(rules, rule4));
155 
156  rules = service->GetRulesForSourceCandidate(nullptr);
157  CPPUNIT_ASSERT(rules.size() == 0);
158  }
159 
160  void GetRulesForDestinationCandidate()
161  {
163  CPPUNIT_ASSERT(rules.size() == 4);
164  CPPUNIT_ASSERT(checkExistence(rules, rule1));
165  CPPUNIT_ASSERT(checkExistence(rules, rule2));
166  CPPUNIT_ASSERT(checkExistence(rules, rule3));
167  CPPUNIT_ASSERT(checkExistence(rules, rule4));
168 
169  rules = service->GetRulesForDestinationCandidate(nullptr);
170  CPPUNIT_ASSERT(rules.size() == 0);
171  }
172 
173  void GetRule()
174  {
175  auto rule = service->GetRule(rule3->GetRuleID());
176  CPPUNIT_ASSERT(rule.IsNotNull());
177  rule = service->GetRule(rule1->GetRuleID());
178  CPPUNIT_ASSERT(rule.IsNotNull());
179  rule = service->GetRule(rule2->GetRuleID());
180  CPPUNIT_ASSERT(rule.IsNotNull());
181  rule = service->GetRule(rule4->GetRuleID());
182  CPPUNIT_ASSERT(rule.IsNotNull());
183 
184  rule = service->GetRule(unkownRule->GetRuleID());
185  CPPUNIT_ASSERT(rule.IsNull());
186  }
187 
188  void GetRuleIDs()
189  {
190  auto ruleIDs = service->GetRuleIDs();
191 
192  CPPUNIT_ASSERT(ruleIDs.size()==4);
193  CPPUNIT_ASSERT(std::find(ruleIDs.begin(), ruleIDs.end(), rule1->GetRuleID()) != ruleIDs.end());
194  CPPUNIT_ASSERT(std::find(ruleIDs.begin(), ruleIDs.end(), rule2->GetRuleID()) != ruleIDs.end());
195  CPPUNIT_ASSERT(std::find(ruleIDs.begin(), ruleIDs.end(), rule3->GetRuleID()) != ruleIDs.end());
196  CPPUNIT_ASSERT(std::find(ruleIDs.begin(), ruleIDs.end(), rule4->GetRuleID()) != ruleIDs.end());
197  }
198 
199  void HasRuleForSource()
200  {
201  CPPUNIT_ASSERT(service->HasRuleForSource(source_1));
202  CPPUNIT_ASSERT(service->HasRuleForSource(source_1n2));
203  CPPUNIT_ASSERT(!service->HasRuleForSource(unRelated));
204  CPPUNIT_ASSERT(!service->HasRuleForSource(nullptr));
205  }
206 
207  void RemoveRule()
208  {
209  CPPUNIT_ASSERT_NO_THROW(service->RemoveRule(rule1->GetRuleID()));
210  CPPUNIT_ASSERT(!service->GetRule(rule1->GetRuleID()));
211  CPPUNIT_ASSERT(service->GetRule(rule2->GetRuleID()));
212  CPPUNIT_ASSERT(service->GetRule(rule3->GetRuleID()));
213  CPPUNIT_ASSERT(service->GetRule(rule4->GetRuleID()));
214 
215  CPPUNIT_ASSERT_NO_THROW(service->RemoveRule(rule3->GetRuleID()));
216  CPPUNIT_ASSERT(!service->GetRule(rule1->GetRuleID()));
217  CPPUNIT_ASSERT(service->GetRule(rule2->GetRuleID()));
218  CPPUNIT_ASSERT(!service->GetRule(rule3->GetRuleID()));
219  CPPUNIT_ASSERT(service->GetRule(rule4->GetRuleID()));
220 
221  CPPUNIT_ASSERT_NO_THROW(service->RemoveRule("unknown_rule"));
222  CPPUNIT_ASSERT(!service->GetRule(rule1->GetRuleID()));
223  CPPUNIT_ASSERT(service->GetRule(rule2->GetRuleID()));
224  CPPUNIT_ASSERT(!service->GetRule(rule3->GetRuleID()));
225  CPPUNIT_ASSERT(service->GetRule(rule4->GetRuleID()));
226  }
227 
228  void RemoveAllRules()
229  {
230  CPPUNIT_ASSERT_NO_THROW(service->RemoveAllRules());
231  CPPUNIT_ASSERT(service->GetRuleIDs().empty());
232  }
233 };
234 
235 MITK_TEST_SUITE_REGISTRATION(mitkPropertyRelations)
virtual RuleIDType GetRuleID() const =0
Interface of property relations service.
MITK_TEST_SUITE_REGISTRATION(mitkImageToItk)
virtual void RemoveRule(const RuleIDType &ruleID)=0
Remove relation rule instance with the passed ID. If rule does not exist nothing happens.
virtual RuleResultVectorType GetRulesForSource(const IPropertyProvider *source) const =0
Get all relation rules the passed source is really a source of. (PropertyRelationRuleBase::IsSource()...
virtual RuleResultVectorType GetRulesForDestinationCandidate(const IPropertyProvider *destCandidate) const =0
Get all relation rules that would accept the passed IPropertOwner as destination. ...
static Pointer New(const RuleIDType &_arg)
#define MITK_TEST(TESTMETHOD)
Adds a test to the current test suite.
MITKCORE_EXPORT IPropertyRelations * CreateTestInstancePropertyRelations()
static Pointer New()
virtual void RemoveAllRules()=0
Remove all relation rules.
Test fixture for parameterized tests.
IPropertyRelations::RuleResultVectorType RuleResultVectorType
virtual PropertyRelationRuleBase::ConstPointer GetRule(const RuleIDType &ruleID) const =0
Get the relation rule that has the specfied ruleID.
virtual RuleResultVectorType GetRulesForSourceCandidate(const IPropertyProvider *sourceCandidate) const =0
Get all relation rules that would accept the passed IPropertOwner as source.
virtual RuleIDVectorType GetRuleIDs() const =0
Get all IDs of registered rules.
virtual bool HasRuleForSource(const IPropertyProvider *source) const =0
Check if a passed instance has defined relation covered by the registered rules.
virtual bool AddRule(const PropertyRelationRuleBase *rule, bool overwrite=false)=0
Add rule for a specific relation. If there is already a property rule instance it won&#39;t be added...