]> SALOME platform Git repositories - modules/kernel.git/blob - src/SALOMEDS/Test/SALOMEDSTest_StudyBuilder.cxx
Salome HOME
Updated test cases
[modules/kernel.git] / src / SALOMEDS / Test / SALOMEDSTest_StudyBuilder.cxx
1 // Copyright (C) 2006  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
2 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
3 // 
4 // This library is free software; you can redistribute it and/or
5 // modify it under the terms of the GNU Lesser General Public
6 // License as published by the Free Software Foundation; either 
7 // version 2.1 of the License.
8 // 
9 // This library is distributed in the hope that it will be useful 
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
12 // Lesser General Public License for more details.
13 //
14 // You should have received a copy of the GNU Lesser General Public  
15 // License along with this library; if not, write to the Free Software 
16 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 //
18 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 //
20
21 /*!
22  * Check all methods of SALOMEDS_StudyBuilder
23  * Use code of SALOMEDS_StudyBuilder.cxx
24  */
25
26 void SALOMEDSTest::testStudyBuilder()
27 {
28   //Create or find the Study manager
29   _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
30
31   CPPUNIT_ASSERT(sm);
32
33   //Create a new study
34   _PTR(Study) study = sm->NewStudy("TestStudyBuilder");
35
36   CPPUNIT_ASSERT(study);
37
38   //Create Study Builder
39   _PTR(StudyBuilder) studyBuilder = study->NewBuilder();
40
41   //Check the StudyBuilder creation
42   CPPUNIT_ASSERT(studyBuilder);
43
44   //Check method NewComponent
45   _PTR(SComponent) sco1 = studyBuilder->NewComponent("Test");
46   CPPUNIT_ASSERT(sco1 && sco1->ComponentDataType() == "Test");
47
48   //Check method DefineComponentInstance
49   string ior = _orb->object_to_string(_sm);
50   studyBuilder->DefineComponentInstance(sco1, ior);
51   string newior;
52   sco1->ComponentIOR(newior);
53   CPPUNIT_ASSERT(newior == ior);
54
55   //Check method RemoveComponent
56   studyBuilder->RemoveComponent(sco1);
57   _PTR(SComponent) sco2 = study->FindComponent("Test");
58   CPPUNIT_ASSERT(!sco2);
59
60   //Try to create and find the component with empty type
61   _PTR(SComponent) sco_empty = studyBuilder->NewComponent(""); 
62   CPPUNIT_ASSERT(!sco_empty);
63
64   _PTR(SComponent) sco3 = studyBuilder->NewComponent("NewComp");
65   CPPUNIT_ASSERT(sco3);
66
67   //Check method NewObject
68   _PTR(SObject) so1 = studyBuilder->NewObject(sco3);
69   CPPUNIT_ASSERT(so1);
70   string id1 = so1->GetID();
71
72   //Check method NewObjectToTag
73   _PTR(SObject) so2 = studyBuilder->NewObjectToTag(so1, 2);
74   CPPUNIT_ASSERT(so2 && so2->Tag() == 2);
75   string id2 = so2->GetID();
76
77   //Check method FindOrCreateAttribute
78   _PTR(SObject) so3 = studyBuilder->NewObject(sco3);
79   CPPUNIT_ASSERT(so3);
80   _PTR(AttributeName) an3 = studyBuilder->FindOrCreateAttribute(so3, "AttributeName");
81   CPPUNIT_ASSERT(an3);
82
83   //Try to create attribute with invalid type
84   CPPUNIT_ASSERT(!studyBuilder->FindOrCreateAttribute(so3, "invalid type"));
85
86   //Check method FindAttribute
87   _PTR(GenericAttribute) ga;
88   CPPUNIT_ASSERT(studyBuilder->FindAttribute(so3, ga, "AttributeName"));
89
90   //Try to find attribute with invalid type
91   CPPUNIT_ASSERT(!studyBuilder->FindAttribute(so3, ga, "invalid type"));
92
93   //Check method RemoveObject
94   studyBuilder->RemoveObject(so3);
95   CPPUNIT_ASSERT(!studyBuilder->FindAttribute(so3, ga, "AttributeName"));
96
97   //Check method RemoveObjectWithChildren
98   _PTR(AttributeName) an2 = studyBuilder->FindOrCreateAttribute(so2, "AttributeName");
99   CPPUNIT_ASSERT(an2);
100   studyBuilder->RemoveObjectWithChildren(so1);
101   CPPUNIT_ASSERT(!studyBuilder->FindAttribute(so2, ga, "AttributeName"));
102
103   //Check method RemoveAttribute
104   _PTR(AttributeName) an1 = studyBuilder->FindOrCreateAttribute(so1, "AttributeName");
105   CPPUNIT_ASSERT(an1);
106   CPPUNIT_ASSERT(studyBuilder->FindAttribute(so1, ga, "AttributeName"));
107   studyBuilder->RemoveAttribute(so1, "AttributeName");
108   CPPUNIT_ASSERT(!studyBuilder->FindAttribute(so1, ga, "AttributeName"));
109
110   //Check method Addreference
111   studyBuilder->Addreference(so2, so1);
112   _PTR(SObject) refSO;
113   CPPUNIT_ASSERT(so2->ReferencedObject(refSO) && refSO->GetID() == so1->GetID());
114
115   //Try to set reference to NULL SObject
116   bool isRaised = false;
117   _PTR(SObject) empty_so;
118   try {
119     ;//studyBuilder->Addreference(so2, empty_so);
120   }
121   catch(...) {
122     isRaised = true;
123   }
124   CPPUNIT_ASSERT(!isRaised); //There is a check inside of Addreference, the values are ASSERTed and checked
125
126   //Check method RemoveReference
127   studyBuilder->RemoveReference(so2);
128   CPPUNIT_ASSERT(!so2->ReferencedObject(refSO));
129
130   //Check method SetGUID and IsGUID
131   string value = "0e1c36e6-379b-4d90-ab3b-17a14310e648";
132   studyBuilder->SetGUID(so1, value);
133   CPPUNIT_ASSERT(studyBuilder->IsGUID(so1, value));
134
135   //Try to set invalid GUID
136   isRaised = false;
137   try {
138     studyBuilder->SetGUID(so1, "invalid GUID");
139   }
140   catch(...) {
141     isRaised = true;
142   }
143   CPPUNIT_ASSERT(isRaised);
144
145   //Check method UndoLimit (set/get)
146   studyBuilder->UndoLimit(10);
147   CPPUNIT_ASSERT(studyBuilder->UndoLimit() == 10);
148
149   //Check transactions methods: NewCommand, CommitCommand, AbortCommand, 
150   //HasOpenedCommand, Undo, Redo, GetAvailableUndos, GetAvailableRedos
151   _PTR(SObject) so4 = studyBuilder->NewObject(sco3);
152
153   CPPUNIT_ASSERT(so4);
154   studyBuilder->NewCommand();
155   CPPUNIT_ASSERT(studyBuilder->HasOpenCommand());
156   _PTR(AttributeName) an4 = studyBuilder->FindOrCreateAttribute(so4, "AttributeName");
157
158   CPPUNIT_ASSERT(an4);
159   an4->SetValue("command1");
160   studyBuilder->CommitCommand();
161   CPPUNIT_ASSERT(!studyBuilder->HasOpenCommand());
162   studyBuilder->NewCommand();
163   an4->SetValue("command2");
164   studyBuilder->AbortCommand();
165   CPPUNIT_ASSERT(an4->Value() == "command1");
166   studyBuilder->NewCommand();
167   an4->SetValue("command2");
168   studyBuilder->CommitCommand();
169   studyBuilder->Undo();
170   CPPUNIT_ASSERT(an4->Value() == "command1");
171   CPPUNIT_ASSERT(studyBuilder->GetAvailableRedos());
172   studyBuilder->Redo();
173   CPPUNIT_ASSERT(an4->Value() == "command2");
174   CPPUNIT_ASSERT(studyBuilder->GetAvailableUndos());
175
176   //Check method SetName
177   studyBuilder->SetName(so1, "new name");
178   CPPUNIT_ASSERT(so1->GetName() == "new name");
179
180   //Try to set empty Name
181   studyBuilder->SetName(so1, "");
182   CPPUNIT_ASSERT(so1->GetName() == "");
183
184   //Check method SetComment
185   studyBuilder->SetComment(so1, "new comment");
186   CPPUNIT_ASSERT(so1->GetComment() == "new comment");
187
188   //Check method empty Comment
189   studyBuilder->SetComment(so1, "");
190   CPPUNIT_ASSERT(so1->GetComment() == "");
191
192   //Try to set empty IOR
193   studyBuilder->SetIOR(so1, "");
194   CPPUNIT_ASSERT(so1->GetIOR() == "");
195
196   //Check method SetIOR
197   studyBuilder->SetIOR(so1, ior);
198   CPPUNIT_ASSERT(so1->GetIOR() == ior);
199
200   sm->Close(study);
201
202   //Check method LoadWith
203   _PTR(Study) study2 = sm->NewStudy("Study2");
204
205   SALOME_NamingService NS(_orb);
206   CORBA::Object_var obj = SALOME_LifeCycleCORBA(&NS).FindOrLoad_Component("SuperVisionContainer", "SUPERV");
207   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
208
209   MESSAGE("Created a new GEOM component");
210
211   SALOMEDS::Driver_var drv = SALOMEDS::Driver::_narrow(obj);
212   CPPUNIT_ASSERT(!CORBA::is_nil(drv));
213   _PTR(StudyBuilder) sb2 = study2->NewBuilder();
214   _PTR(SComponent) sco = sb2->NewComponent("SUPERV");
215   ior = _orb->object_to_string(drv);
216   sb2->DefineComponentInstance(sco, ior);
217
218   sm->SaveAs("srn_SALOMEDS_UnitTests.hdf", study2, false);
219   sm->Close(study2);
220
221   _PTR(Study) study3 = sm->Open("srn_SALOMEDS_UnitTests.hdf");
222   _PTR(StudyBuilder) sb3 = study3->NewBuilder();
223   _PTR(SComponent) aComp = study3->FindComponent("SUPERV");
224   CPPUNIT_ASSERT(aComp);
225
226   CORBA::Object_var obj2 = SALOME_LifeCycleCORBA(&NS).FindOrLoad_Component("SuperVisionContainer", "SUPERV");
227   CPPUNIT_ASSERT(!CORBA::is_nil(obj2));
228   SALOMEDS::Driver_var drv2 = SALOMEDS::Driver::_narrow(obj2);
229   ior = _orb->object_to_string(drv2);
230
231   isRaised = false;
232   try {
233     sb3->LoadWith(aComp, ior);
234   }
235   catch(...) {
236     isRaised = true;
237   }
238
239   CPPUNIT_ASSERT(!isRaised);
240
241   ior = "";
242   aComp->ComponentIOR(ior);
243   CPPUNIT_ASSERT(!ior.empty());
244
245   system("rm -f srn_SALOMEDS_UnitTests.hdf");
246
247   //Check method AddDirectory
248   _PTR(AttributeName) na1 = sb3->FindOrCreateAttribute(aComp, "AttributeName");
249   na1->SetValue("Component");
250
251   isRaised = false;
252   try {
253     sb3->AddDirectory("/Component/Dir1");
254   } catch(...) {
255     isRaised = true;
256   }
257
258   CPPUNIT_ASSERT(!isRaised);
259   _PTR(SObject) so5 = study3->FindObjectByPath("/Component/Dir1");
260   CPPUNIT_ASSERT(so5);
261
262   isRaised = false;
263   try {
264     sb3->AddDirectory("/Component/Dir1"); //Attempt to create the same directory
265   } catch(...) {
266     isRaised = true;
267   }
268   CPPUNIT_ASSERT(isRaised);
269
270   isRaised = false;
271   try {
272     sb3->AddDirectory("/MyComponent/Dir1"); //Attempt to create the invalid directory
273   } catch(...) {
274     isRaised = true;
275   }
276   CPPUNIT_ASSERT(isRaised);
277
278   sm->Close(study3);
279 }