1 // Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
24 * Check all methods of SALOMEDS_Study
25 * Use code of SALOMEDS_Study.cxx
28 void SALOMEDSTest::testStudy()
31 _PTR(Study) study(new SALOMEDS_Study(_study));
33 //Check the creation of the study
34 CPPUNIT_ASSERT(study);
36 //Check method NewBuilder
37 _PTR(StudyBuilder) studyBuilder = study->NewBuilder();
38 CPPUNIT_ASSERT(studyBuilder);
40 //Check method NewComponentIterator
41 _PTR(SComponentIterator) componentIterator = study->NewComponentIterator();
43 CPPUNIT_ASSERT(componentIterator);
45 //Check method GetTransientReference
46 CPPUNIT_ASSERT(!study->GetTransientReference().empty());
48 //Check method URL (get/set)
50 CPPUNIT_ASSERT(study->URL() == "");
51 study->URL("some url");
52 CPPUNIT_ASSERT(study->URL() == "some url");
54 //Check method GetPersistentReference == URL
55 CPPUNIT_ASSERT(study->GetPersistentReference() == "some url");
57 //Check method IsSaved (get/set)
59 CPPUNIT_ASSERT(study->IsSaved());
60 study->IsSaved(false);
61 CPPUNIT_ASSERT(!study->IsSaved());
63 //Check method CreateObjectID
64 _PTR(SObject) so = study->CreateObjectID("0:2:1:3");
67 //Try to create SObject with empty and invalid entries
68 //CPPUNIT_ASSERT(!study->CreateObjectID(""));
69 CPPUNIT_ASSERT(!study->CreateObjectID("entry"));
71 //Check method NewChildIterator
72 _PTR(ChildIterator) childIterator = study->NewChildIterator(so);
73 CPPUNIT_ASSERT(childIterator);
75 //Check method IsEmpty
76 CPPUNIT_ASSERT(!study->IsEmpty());
78 //Check method FindComponent
79 _PTR(SComponent) sco1 = studyBuilder->NewComponent("test1");
80 _PTR(SComponent) sco2 = study->FindComponent("test1");
81 CPPUNIT_ASSERT(sco1 && sco2);
82 CPPUNIT_ASSERT(sco1->GetID() == sco2->GetID());
83 _PTR(AttributeName) name_attr_sco1 = studyBuilder->FindOrCreateAttribute(sco1, "AttributeName");
84 CPPUNIT_ASSERT(name_attr_sco1);
85 name_attr_sco1->SetValue("sco1");
87 //Try to find component with empty type
88 CPPUNIT_ASSERT(!study->FindComponent(""));
90 //Check method FindComponentID
91 _PTR(SComponent) sco3 = study->FindComponentID(sco1->GetID());
92 CPPUNIT_ASSERT(sco3 && sco3->GetID() == sco1->GetID());
94 //Try to find component with empty id
95 CPPUNIT_ASSERT(!study->FindComponentID(""));
97 _PTR(SObject) so1 = studyBuilder->NewObject(sco1);
99 _PTR(AttributeName) name_attr_so1 = studyBuilder->FindOrCreateAttribute(so1, "AttributeName");
100 CPPUNIT_ASSERT(name_attr_so1);
101 name_attr_so1->SetValue("so1");
103 //Create an attribute AttributeIOR
104 _PTR(AttributeIOR) ior_attr_so1 = studyBuilder->FindOrCreateAttribute(so1, "AttributeIOR");
105 CPPUNIT_ASSERT(ior_attr_so1);
107 std::string ior = _orb->object_to_string(_study);
108 ior_attr_so1->SetValue(ior);
110 _PTR(SObject) so2 = studyBuilder->NewObject(so1);
112 _PTR(AttributeName) name_attr_so2 = studyBuilder->FindOrCreateAttribute(so2, "AttributeName");
113 CPPUNIT_ASSERT(name_attr_so2);
114 name_attr_so2->SetValue("so2");
116 //Check method FindObject
117 _PTR(SObject) so3 = study->FindObject("so1");
118 CPPUNIT_ASSERT(so3 && so3->GetID() == so1->GetID());
120 //Try to find SObject with empty name
121 CPPUNIT_ASSERT(!study->FindObject(""));
123 //Check method FindObjectID
124 _PTR(SObject) so4 = study->FindObjectID(so1->GetID());
125 CPPUNIT_ASSERT(so4 && so4->GetID() == so1->GetID());
127 //Try to find SObject with empty ID
128 //CPPUNIT_ASSERT(!study->FindObjectID(""));
130 //Check method FindObjectByName
131 std::vector< _PTR(SObject) > v = study->FindObjectByName("so1", sco1->ComponentDataType());
132 CPPUNIT_ASSERT(v.size()==1 && v[0]->GetID() == so1->GetID());
134 //Try to find SObject with empty name and empty component type
135 CPPUNIT_ASSERT((study->FindObjectByName("", "")).size() == 0);
137 //Check method FindObjectByPath
138 _PTR(SObject) path_so = study->FindObjectByPath("/"+sco1->GetName()+"/"+so1->GetName());
139 CPPUNIT_ASSERT(path_so && path_so->GetID() == so1->GetID());
141 //Check method FindObjectIOR
142 _PTR(SObject) so5 = study->FindObjectIOR(ior);
143 CPPUNIT_ASSERT(so5 && so5->GetID() == so1->GetID());
145 //Try to find SObject with empty IOR
146 CPPUNIT_ASSERT(!study->FindObjectIOR(""));
148 //Check method GetObjectPath
149 std::string path = study->GetObjectPath(so2);
151 //Try to get path of NULL SObject
152 _PTR(SObject) emptySO;
153 path = study->GetObjectPath(emptySO);
154 CPPUNIT_ASSERT(path.empty());
156 //Check method FindObjectByPath
157 _PTR(SObject) so6 = study->FindObjectByPath("so1");
158 CPPUNIT_ASSERT(so6 && so6->GetID() == so1->GetID());
161 //Try to find SObject with empty path
162 _PTR(SObject) tmp = study->FindObjectByPath(""); //Must return the Context SObject
163 CPPUNIT_ASSERT(tmp && tmp->GetID() == sco1->GetID());
165 //Check method FindDependances
166 studyBuilder->Addreference(so2, so1);
167 studyBuilder->Addreference(sco1, so1);
168 std::vector< _PTR(SObject) > vso = study->FindDependances(so1);
169 CPPUNIT_ASSERT(vso.size() == 2 && vso[0]->GetID() == sco1->GetID() && vso[1]->GetID() == so2->GetID());
171 //Check method GetProperties
172 _PTR(AttributeStudyProperties) sp = study->GetProperties();
175 //Check Lock functionality
176 /*sp->SetLocked(true);
177 bool isLockRaised = false;
179 name_attr_so1->SetValue("test");
184 CPPUNIT_ASSERT(isLockRaised);
186 sp->SetLocked(false);
187 isLockRaised = false;
189 name_attr_so1->SetValue("test");
194 CPPUNIT_ASSERT(!isLockRaised);*/
196 //Check method GetLastModificationDate
197 sp->SetModification("srn", 1, 2, 3, 4, 5);
198 sp->SetModification("srn", 6, 7, 8, 9, 10);
199 std::string date = study->GetLastModificationDate();
201 CPPUNIT_ASSERT(date == "08/09/0010 07:06");
203 //Check method GetModificationsDate
204 std::vector<std::string> vs = study->GetModificationsDate();
205 CPPUNIT_ASSERT(vs.size() == 2 && vs[0] == "03/04/0005 02:01" && vs[1] == "08/09/0010 07:06");
207 //Check method GetCommonParameters
208 _PTR(AttributeParameter) cp = study->GetCommonParameters("id", 1); //Save point = 1
210 cp->SetBool("test_true", true);
211 cp->SetBool("test_false", false);
212 _PTR(AttributeParameter) cp2 = study->GetCommonParameters("id", 1); //Save point = 1
214 CPPUNIT_ASSERT(cp2->GetBool("test_true") && !cp2->GetBool("test_false"));
215 _PTR(AttributeParameter) cp21 = study->GetCommonParameters("id", 2); //Save point = 2
216 CPPUNIT_ASSERT(cp21);
217 CPPUNIT_ASSERT(!cp21->IsSet("test_true", PT_BOOLEAN) && !cp21->IsSet("test_false", PT_BOOLEAN));
219 //Check method GetModuleParameters
220 _PTR(AttributeParameter) cp3 = study->GetModuleParameters("id", "module name", 1); //Save point = 1, name = "module name"
222 cp3->SetBool("test_true", true);
223 cp3->SetBool("test_false", false);
224 _PTR(AttributeParameter) cp4 = study->GetModuleParameters("id", "module name", 1); //Save point = 1, name = "module name"
226 CPPUNIT_ASSERT(cp4->GetBool("test_true") && !cp4->GetBool("test_false"));
227 _PTR(AttributeParameter) cp5 = study->GetModuleParameters("id", "module name 2", 1); //Save point = 1, name = "module name 2"
229 CPPUNIT_ASSERT(!cp5->IsSet("test_true", PT_BOOLEAN) && !cp5->IsSet("test_false", PT_BOOLEAN));
230 _PTR(AttributeParameter) cp6 = study->GetModuleParameters("id", "module name", 2); //Save point = 2, name = "module name"
232 CPPUNIT_ASSERT(!cp6->IsSet("test_true", PT_BOOLEAN) && !cp6->IsSet("test_false", PT_BOOLEAN));
234 //Check method GetUseCaseBuilder
235 _PTR(UseCaseBuilder) ub = study->GetUseCaseBuilder();
238 //Check method SetStudyLock
239 study->SetStudyLock("locker1");
241 //Check method IsStudyLocked
242 CPPUNIT_ASSERT(study->IsStudyLocked());
244 //Check method GetLockerID
245 study->SetStudyLock("locker2");
246 vs = study->GetLockerID();
247 CPPUNIT_ASSERT(vs.size() == 2 && vs[0] == "locker1" && vs[1] == "locker2");
249 //Check method UnLockStudy
250 study->UnLockStudy("locker1");
251 CPPUNIT_ASSERT(study->IsStudyLocked());
252 vs = study->GetLockerID();
253 CPPUNIT_ASSERT(vs.size() == 1 && vs[0] == "locker2");
254 study->UnLockStudy("locker2");
255 CPPUNIT_ASSERT(!study->IsStudyLocked());
256 vs = study->GetLockerID();
257 CPPUNIT_ASSERT(vs.size() == 0);
259 //Check method EnableUseCaseAutoFilling
260 study->EnableUseCaseAutoFilling(false);
261 _PTR(SObject) uso1 = study->NewBuilder()->NewObject(sco1);
262 std::vector< _PTR(GenericAttribute) > va1 = uso1->GetAllAttributes();
263 CPPUNIT_ASSERT(va1.size() == 0);
265 study->EnableUseCaseAutoFilling(true);
266 _PTR(SObject) uso2 = study->NewBuilder()->NewObject(sco1);
267 std::vector< _PTR(GenericAttribute) > va2 = uso2->GetAllAttributes();
268 CPPUNIT_ASSERT(va2.size() == 1); // +AttributeTreeNode
270 //Check method DumpStudy
271 study->DumpStudy(".", "SRN", false, false);
273 std::fstream f("SRN.py");
275 buffer[81] = (char)0;
277 f.getline(buffer, 80);
278 std::string line(buffer);
281 system("rm -f SRN.py");
282 CPPUNIT_ASSERT(line.substr(0,50) == "### This file is generated automatically by SALOME");
285 bool isException = false;
287 study->Clear(); //Clear is called inside Study::Clear()
292 CPPUNIT_ASSERT(!isException);