Salome HOME
merge from branch BR_V5_DEV
[modules/yacs.git] / src / SALOMEDS / Test / SALOMEDSTest_UseCase.cxx
1 //  Copyright (C) 2007-2008  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.
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  * Check all methods of SALOMEDS_UseCaseBuilder and UseCaseIterator
24  * Use code of SALOMEDS_UseCaseBuilder.cxx and SALOMEDS_UseCaseIterator.cxx
25  */
26
27 #define SALOMEDS_ALL_TESTS
28
29 void SALOMEDSTest::testUseCase()
30 {
31   //Create or find the Study manager
32   _PTR(StudyManager) sm ( new SALOMEDS_StudyManager(_sm) );
33   CPPUNIT_ASSERT(sm);
34
35   //Create a new study
36   _PTR(Study) study = sm->NewStudy("TestSObject");
37   CPPUNIT_ASSERT(study);
38
39   //Create Study Builder
40   _PTR(StudyBuilder) studyBuilder = study->NewBuilder();
41   CPPUNIT_ASSERT(studyBuilder);
42
43   //Create a new UseCaseBuilder
44   _PTR(UseCaseBuilder) builder = study->GetUseCaseBuilder();
45   CPPUNIT_ASSERT(builder);
46
47   //Check method AddUseCase
48   _PTR(SObject) root1 = builder->AddUseCase("UseCase_1");
49   _PTR(SObject) root2 = builder->AddUseCase("UseCase_2");
50   CPPUNIT_ASSERT(root1 && root2);
51
52   //Check method SetCurrentObject
53   builder->SetCurrentObject(root1);
54
55   //Check method GetCurrentObject
56   CPPUNIT_ASSERT(builder->GetCurrentObject() && builder->GetCurrentObject()->GetID() == root1->GetID());
57
58   //Check method SetRootCurrent
59   CPPUNIT_ASSERT(builder->SetRootCurrent());
60   CPPUNIT_ASSERT(builder->GetCurrentObject()->GetID() == "0:2"); //Root in UseCases is always placed at label 0:2
61
62   //Check method IsUseCase
63   CPPUNIT_ASSERT(builder->IsUseCase(root1) && builder->IsUseCase(root2));
64
65   //Check method SetName
66   builder->SetName("A root use case");
67
68   //Check method GetName
69   CPPUNIT_ASSERT(builder->GetName() == "A root use case");
70
71 #ifdef SALOMEDS_ALL_TESTS
72   //Check method GetUseCaseIterator
73   builder->SetRootCurrent();
74   _PTR(SObject) nullObject;
75   _PTR(UseCaseIterator) root_it = builder->GetUseCaseIterator(nullObject); //The iterator on all UseCases
76   root_it->Init(false); //Only the first level
77   CPPUNIT_ASSERT(root_it->More());
78   CPPUNIT_ASSERT(root_it->Value()->GetID() == root1->GetID());
79   root_it->Next();
80   CPPUNIT_ASSERT(root_it->More());
81   CPPUNIT_ASSERT(root_it->Value()->GetID() == root2->GetID());
82   root_it->Next();
83   CPPUNIT_ASSERT(!root_it->More());
84 #else
85   cout << endl << "THE TEST IS NOT COMPLETE !!!" << endl;
86 #endif
87
88   builder->SetCurrentObject(root1);
89   _PTR(UseCaseIterator) it = builder->GetUseCaseIterator(root1); //The iterator on the given UseCase
90
91   //Check method Append
92   _PTR(SObject) so1 = study->CreateObjectID("0:1:1");
93   _PTR(SObject) so2 = study->CreateObjectID("0:1:2");
94   CPPUNIT_ASSERT(builder->Append(so1));
95
96   //Check methods Init, More, Next and Value of UseCaseIterator
97   it->Init(false);
98   CPPUNIT_ASSERT(it->More());
99   CPPUNIT_ASSERT(it->Value()->GetID() == so1->GetID());
100   it->Next();
101   CPPUNIT_ASSERT(!it->More());
102
103   //Check method AppendTo
104   CPPUNIT_ASSERT(builder->AppendTo(so1, so2));
105
106   //Check method HasChildren
107   CPPUNIT_ASSERT(builder->HasChildren(so1));
108   CPPUNIT_ASSERT(!builder->HasChildren(so2));
109
110   //Check method Init of UseCaseIterator
111   it->Init(false); //Only the first level
112   CPPUNIT_ASSERT(it->More());
113   CPPUNIT_ASSERT(it->Value()->GetID() == so1->GetID());
114   it->Next();
115   CPPUNIT_ASSERT(!it->More());
116
117   it->Init(true); //All levels
118   CPPUNIT_ASSERT(it->More());
119   CPPUNIT_ASSERT(it->Value()->GetID() == so1->GetID());
120   it->Next();
121   CPPUNIT_ASSERT(it->More());
122   CPPUNIT_ASSERT(it->Value()->GetID() == so2->GetID());
123   it->Next();
124   CPPUNIT_ASSERT(!it->More());
125
126   //Check method Remove
127   CPPUNIT_ASSERT(builder->Remove(so2));
128   it->Init(true);
129   CPPUNIT_ASSERT(it->More());
130   CPPUNIT_ASSERT(it->Value()->GetID() == so1->GetID());
131   it->Next();
132   CPPUNIT_ASSERT(!it->More());
133
134   CPPUNIT_ASSERT(builder->Append(so2));
135
136   //Check method InsertBefore
137   CPPUNIT_ASSERT(builder->InsertBefore(so2, so1));
138
139   it->Init(false);
140   CPPUNIT_ASSERT(it->More());
141   CPPUNIT_ASSERT(it->Value()->GetID() == so2->GetID());
142   it->Next();
143   CPPUNIT_ASSERT(it->More());
144   CPPUNIT_ASSERT(it->Value()->GetID() == so1->GetID());
145
146   sm->Close(study);
147 }
148 #undef SALOMEDS_ALL_TESTS
149
150