Salome HOME
dbf65e2e601696e1fa1ce27e4a0df2622041ab03
[modules/kernel.git] / src / SALOMEDS / Test / SALOMEDSTest_Study.cxx
1 // Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
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.
10 //
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.
15 //
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
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22
23 /*!
24  * Check all methods of SALOMEDS_Study
25  * Use code of SALOMEDS_Study.cxx
26  */
27
28 void SALOMEDSTest::testStudy()
29 {
30   //Create Study
31   _PTR(Study) study(new SALOMEDS_Study(_study));
32
33   //Check the creation of the study
34   CPPUNIT_ASSERT(study);
35
36   //Check method NewBuilder
37   _PTR(StudyBuilder) studyBuilder = study->NewBuilder();
38   CPPUNIT_ASSERT(studyBuilder);
39
40   //Check method NewComponentIterator
41   _PTR(SComponentIterator) componentIterator = study->NewComponentIterator();
42
43   CPPUNIT_ASSERT(componentIterator);
44
45   //Check method GetTransientReference
46   CPPUNIT_ASSERT(!study->GetTransientReference().empty());
47
48   //Check method URL (get/set)
49   study->URL("");
50   CPPUNIT_ASSERT(study->URL() == "");
51   study->URL("some url");
52   CPPUNIT_ASSERT(study->URL() == "some url");
53
54   //Check method GetPersistentReference == URL
55   CPPUNIT_ASSERT(study->GetPersistentReference() == "some url");
56
57   //Check method IsSaved (get/set)
58   study->IsSaved(true);
59   CPPUNIT_ASSERT(study->IsSaved());
60   study->IsSaved(false);
61   CPPUNIT_ASSERT(!study->IsSaved());
62
63   //Check method CreateObjectID
64   _PTR(SObject) so = study->CreateObjectID("0:2:1:3");
65   CPPUNIT_ASSERT(so);
66
67   //Try to create SObject with empty and invalid entries
68   //CPPUNIT_ASSERT(!study->CreateObjectID(""));
69   CPPUNIT_ASSERT(!study->CreateObjectID("entry"));
70
71   //Check method NewChildIterator
72   _PTR(ChildIterator) childIterator = study->NewChildIterator(so);
73   CPPUNIT_ASSERT(childIterator);
74
75   //Check method IsEmpty
76   CPPUNIT_ASSERT(!study->IsEmpty());
77
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");
86
87   //Try to find component with empty type
88   CPPUNIT_ASSERT(!study->FindComponent(""));
89
90   //Check method FindComponentID
91   _PTR(SComponent) sco3 = study->FindComponentID(sco1->GetID());
92   CPPUNIT_ASSERT(sco3 && sco3->GetID() == sco1->GetID());
93
94   //Try to find component with empty id
95   CPPUNIT_ASSERT(!study->FindComponentID(""));
96
97   _PTR(SObject) so1 = studyBuilder->NewObject(sco1);
98   CPPUNIT_ASSERT(so1);
99   _PTR(AttributeName) name_attr_so1 = studyBuilder->FindOrCreateAttribute(so1, "AttributeName");
100   CPPUNIT_ASSERT(name_attr_so1);
101   name_attr_so1->SetValue("so1");
102   
103    //Create an attribute AttributeIOR
104   _PTR(AttributeIOR) ior_attr_so1 = studyBuilder->FindOrCreateAttribute(so1, "AttributeIOR");
105   CPPUNIT_ASSERT(ior_attr_so1);
106
107   std::string ior = _orb->object_to_string(_study);
108   ior_attr_so1->SetValue(ior);
109   
110   _PTR(SObject) so2 = studyBuilder->NewObject(so1);
111   CPPUNIT_ASSERT(so2);
112   _PTR(AttributeName) name_attr_so2 = studyBuilder->FindOrCreateAttribute(so2, "AttributeName");
113   CPPUNIT_ASSERT(name_attr_so2);
114   name_attr_so2->SetValue("so2");
115
116   //Check method FindObject
117   _PTR(SObject) so3 = study->FindObject("so1");
118   CPPUNIT_ASSERT(so3 && so3->GetID() == so1->GetID());
119
120   //Try to find SObject with empty name
121   CPPUNIT_ASSERT(!study->FindObject(""));
122
123   //Check method FindObjectID
124   _PTR(SObject) so4 = study->FindObjectID(so1->GetID());
125   CPPUNIT_ASSERT(so4 && so4->GetID() == so1->GetID());
126
127   //Try to find SObject with empty ID
128   //CPPUNIT_ASSERT(!study->FindObjectID(""));
129
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());
133
134   //Try to find SObject with empty name and empty component type
135   CPPUNIT_ASSERT((study->FindObjectByName("", "")).size() == 0);
136
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());
140
141   //Check method FindObjectIOR
142   _PTR(SObject) so5 = study->FindObjectIOR(ior);
143   CPPUNIT_ASSERT(so5 && so5->GetID() == so1->GetID());
144
145   //Try to find SObject with empty IOR
146   CPPUNIT_ASSERT(!study->FindObjectIOR(""));
147
148   //Check method GetObjectPath
149   std::string path = study->GetObjectPath(so2);
150
151   //Try to get path of NULL SObject
152   _PTR(SObject) emptySO;
153   path = study->GetObjectPath(emptySO);
154   CPPUNIT_ASSERT(path.empty());
155
156   //Check method FindObjectByPath
157   _PTR(SObject) so6 = study->FindObjectByPath("so1");
158   CPPUNIT_ASSERT(so6 && so6->GetID() == so1->GetID());
159
160   
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());
164
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());
170
171   //Check method GetProperties
172   _PTR(AttributeStudyProperties) sp = study->GetProperties();
173   CPPUNIT_ASSERT(sp);
174
175   //Check Lock functionality
176   /*sp->SetLocked(true);
177   bool isLockRaised = false;
178   try {
179      name_attr_so1->SetValue("test");      
180   }
181   catch(...) {
182     isLockRaised = true;
183   }
184   CPPUNIT_ASSERT(isLockRaised);
185  
186   sp->SetLocked(false);
187   isLockRaised = false;
188   try {
189      name_attr_so1->SetValue("test");      
190   }
191   catch(...) {
192     isLockRaised = true;
193   }
194   CPPUNIT_ASSERT(!isLockRaised);*/
195
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();  
200
201   CPPUNIT_ASSERT(date == "08/09/0010 07:06");
202
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");
206
207   //Check method GetCommonParameters
208   _PTR(AttributeParameter) cp = study->GetCommonParameters("id", 1); //Save point = 1
209   CPPUNIT_ASSERT(cp);
210   cp->SetBool("test_true", true);
211   cp->SetBool("test_false", false);
212   _PTR(AttributeParameter) cp2 = study->GetCommonParameters("id", 1); //Save point = 1
213   CPPUNIT_ASSERT(cp2);
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));
218
219   //Check method GetModuleParameters
220   _PTR(AttributeParameter) cp3 = study->GetModuleParameters("id", "module name", 1); //Save point = 1, name = "module name"
221   CPPUNIT_ASSERT(cp3);
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"
225   CPPUNIT_ASSERT(cp4);
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"
228   CPPUNIT_ASSERT(cp5);
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"
231   CPPUNIT_ASSERT(cp6);
232   CPPUNIT_ASSERT(!cp6->IsSet("test_true", PT_BOOLEAN) && !cp6->IsSet("test_false", PT_BOOLEAN));
233
234   //Check method GetUseCaseBuilder
235   _PTR(UseCaseBuilder) ub = study->GetUseCaseBuilder();
236   CPPUNIT_ASSERT(ub);
237
238   //Check method SetStudyLock
239   study->SetStudyLock("locker1");
240
241   //Check method IsStudyLocked
242   CPPUNIT_ASSERT(study->IsStudyLocked());
243
244   //Check method GetLockerID
245   study->SetStudyLock("locker2");
246   vs = study->GetLockerID();
247   CPPUNIT_ASSERT(vs.size() == 2 && vs[0] == "locker1" && vs[1] == "locker2");
248
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);
258
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); 
264
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
269
270   //Check method DumpStudy
271   study->DumpStudy(".", "SRN", false, false);
272
273   std::fstream f("SRN.py");
274   char buffer[128];
275   buffer[81] = (char)0;
276   for(int i=0;i<4;i++)
277     f.getline(buffer, 80);
278   std::string line(buffer);
279  
280   f.close();
281   system("rm -f SRN.py");
282   CPPUNIT_ASSERT(line.substr(0,50) == "### This file is generated automatically by SALOME");
283
284   //Check method Clear
285   bool isException = false;
286   try {
287     study->Clear();  //Clear is called inside Study::Clear()
288   }
289   catch(...) {
290     isException = true;
291   }
292   CPPUNIT_ASSERT(!isException);
293 }
294
295
296