2 #undef HYDROGUI_EXPORTS
4 #include <test_HYDROGUI_ZLevelsModel.h>
5 #include <HYDROData_Document.h>
6 #include <HYDROGUI_ZLevelsModel.h>
8 Handle_HYDROData_Document GetDocument()
10 return HYDROData_Document::Document( 0 );
13 HYDROGUI_ZLevelsModel::Object2VisibleList CreateTestObjects( int theObjCount )
15 HYDROGUI_ZLevelsModel::Object2VisibleList anObjects;
17 for( int i=0; i<theObjCount; i++ )
19 Handle_HYDROData_Entity anObj = GetDocument()->CreateObject( KIND_IMMERSIBLE_ZONE );
21 std::string aName = " ";
23 anObj->SetName( QString::fromStdString( aName ) );
25 bool isVisible = i%2==0;
27 anObjects.append( HYDROGUI_ZLevelsModel::Object2Visible( anObj, isVisible ) );
32 std::string test_HYDROGUI_ZLevelsModel::GetObjects( HYDROGUI_ZLevelsModel* theModel ) const
34 std::string anObjects;
35 for( int i=0, n=theModel->myObjects.size(); i<n; i++ )
37 std::string anObjName = theModel->myObjects[i].first->GetName().toStdString();
38 if( theModel->isObjectVisible( i ) )
39 anObjName = "*" + anObjName;
42 anObjects += anObjName;
48 Test move up algorithm.
50 void test_HYDROGUI_ZLevelsModel::testMoveUp()
52 HYDROGUI_ZLevelsModel* aModel = new HYDROGUI_ZLevelsModel();
53 aModel->setObjects( CreateTestObjects( 6 ) );
54 const HYDROGUI_ZLevelsModel::OpType anUp = HYDROGUI_ZLevelsModel::Up;
56 // 0. Check the initial state
57 CPPUNIT_ASSERT_EQUAL( std::string( "*A, B, *C, D, *E, F" ), GetObjects( aModel ) );
59 // 1. [ *A ] / ALL OBJECTS
60 aModel->move( QList<int>() << 0, anUp, false );
61 CPPUNIT_ASSERT_EQUAL( std::string( "*A, B, *C, D, *E, F" ), GetObjects( aModel ) );
63 // 2. [ *A, B ] / ALL OBJECTS
64 aModel->move( QList<int>() << 0 << 1, anUp, false );
65 CPPUNIT_ASSERT_EQUAL( std::string( "*A, B, *C, D, *E, F" ), GetObjects( aModel ) );
67 // 3. [ *A, *C ] / ALL OBJECTS
68 aModel->move( QList<int>() << 0 << 2, anUp, false );
69 CPPUNIT_ASSERT_EQUAL( std::string( "*A, B, *C, D, *E, F" ), GetObjects( aModel ) );
71 // 4. [ *A, F ] / ALL OBJECTS
72 aModel->move( QList<int>() << 0 << 5, anUp, false );
73 CPPUNIT_ASSERT_EQUAL( std::string( "*A, B, *C, D, *E, F" ), GetObjects( aModel ) );
75 // 5. [ F ] X 6 times / ALL OBJECTS
76 aModel->move( QList<int>() << 5, anUp, false );
77 CPPUNIT_ASSERT_EQUAL( std::string( "*A, B, *C, D, F, *E" ), GetObjects( aModel ) );
78 aModel->move( QList<int>() << 4, anUp, false );
79 CPPUNIT_ASSERT_EQUAL( std::string( "*A, B, *C, F, D, *E" ), GetObjects( aModel ) );
80 aModel->move( QList<int>() << 3, anUp, false );
81 CPPUNIT_ASSERT_EQUAL( std::string( "*A, B, F, *C, D, *E" ), GetObjects( aModel ) );
82 aModel->move( QList<int>() << 2, anUp, false );
83 CPPUNIT_ASSERT_EQUAL( std::string( "*A, F, B, *C, D, *E" ), GetObjects( aModel ) );
84 aModel->move( QList<int>() << 1, anUp, false );
85 CPPUNIT_ASSERT_EQUAL( std::string( "F, *A, B, *C, D, *E" ), GetObjects( aModel ) );
86 aModel->move( QList<int>() << 0, anUp, false );
87 CPPUNIT_ASSERT_EQUAL( std::string( "F, *A, B, *C, D, *E" ), GetObjects( aModel ) );
89 // 6. [ *A, B ] / ALL OBJECTS
90 aModel->move( QList<int>() << 1 << 2, anUp, false );
91 CPPUNIT_ASSERT_EQUAL( std::string( "*A, B, F, *C, D, *E" ), GetObjects( aModel ) );
93 // 7. [ B, *C, *E ] / ALL OBJECTS
94 aModel->move( QList<int>() << 1 << 3 << 5, anUp, false );
95 CPPUNIT_ASSERT_EQUAL( std::string( "B, *A, *C, F, *E, D" ), GetObjects( aModel ) );
97 // 8. [ *A, *C, F, *E, D ] / ALL OBJECTS
98 aModel->move( QList<int>() << 1 << 2 << 3 << 4 << 5, anUp, false );
99 CPPUNIT_ASSERT_EQUAL( std::string( "*A, *C, F, *E, D, B" ), GetObjects( aModel ) );
101 // 9. [ *E ] / VISIBLE OBJECTS
102 aModel->move( QList<int>() << 3, anUp, true );
103 CPPUNIT_ASSERT_EQUAL( std::string( "*A, *E, *C, F, D, B" ), GetObjects( aModel ) );
105 // 10. [ *E, *C ] / VISIBLE OBJECTS
106 aModel->move( QList<int>() << 1 << 2, anUp, true );
107 CPPUNIT_ASSERT_EQUAL( std::string( "*E, *C, *A, F, D, B" ), GetObjects( aModel ) );
109 // 11. [ *A, F ] / ALL OBJECTS
110 aModel->move( QList<int>() << 2 << 3, anUp, false );
111 CPPUNIT_ASSERT_EQUAL( std::string( "*E, *A, F, *C, D, B" ), GetObjects( aModel ) );
113 // 12. [ *A, *C ] / VISIBLE OBJECTS
114 aModel->move( QList<int>() << 1 << 3, anUp, true );
115 CPPUNIT_ASSERT_EQUAL( std::string( "*A, *C, *E, F, D, B" ), GetObjects( aModel ) );
117 // 13. [] / ALL OBJECTS
118 aModel->move( QList<int>(), anUp, false );
119 CPPUNIT_ASSERT_EQUAL( std::string( "*A, *C, *E, F, D, B"), GetObjects( aModel ) );
121 // 14. [ *A, *C, *E, F, D, B ] / ALL OBJECTS
122 aModel->move( QList<int>() << 0 << 1 << 2 << 3 << 4 << 5, anUp, false );
123 CPPUNIT_ASSERT_EQUAL( std::string( "*A, *C, *E, F, D, B"), GetObjects( aModel ) );
129 Test move on top algorithm.
131 void test_HYDROGUI_ZLevelsModel::testMoveOnTop()
133 HYDROGUI_ZLevelsModel* aModel = new HYDROGUI_ZLevelsModel();
134 aModel->setObjects( CreateTestObjects( 6 ) );
135 const HYDROGUI_ZLevelsModel::OpType aTop = HYDROGUI_ZLevelsModel::Top;
137 // 0. Check the initial state
138 CPPUNIT_ASSERT_EQUAL( std::string( "*A, B, *C, D, *E, F" ), GetObjects( aModel ) );
140 // 1. [ *A ] / ALL OBJECTS
141 aModel->move( QList<int>() << 0, aTop, false );
142 CPPUNIT_ASSERT_EQUAL( std::string( "*A, B, *C, D, *E, F" ), GetObjects( aModel ) );
144 // 2. [ *A ] / VISIBLE OBJECTS
145 aModel->move( QList<int>() << 0, aTop, true );
146 CPPUNIT_ASSERT_EQUAL( std::string( "*A, B, *C, D, *E, F" ), GetObjects( aModel ) );
148 // 3. [ F ] / ALL OBJECTS
149 aModel->move( QList<int>() << 5, aTop, false );
150 CPPUNIT_ASSERT_EQUAL( std::string( "F, *A, B, *C, D, *E" ), GetObjects( aModel ) );
152 // 4. [ *E ] / VISIBLE OBJECTS
153 aModel->move( QList<int>() << 5, aTop, true );
154 CPPUNIT_ASSERT_EQUAL( std::string( "*E, F, *A, B, *C, D" ), GetObjects( aModel ) );
156 // 5. [ *E, F ] / ALL OBJECTS
157 aModel->move( QList<int>() << 0 << 1, aTop, false );
158 CPPUNIT_ASSERT_EQUAL( std::string( "*E, F, *A, B, *C, D" ), GetObjects( aModel ) );
160 // 6. [ *E, *A ] / ALL OBJECTS
161 aModel->move( QList<int>() << 0 << 2, aTop, false );
162 CPPUNIT_ASSERT_EQUAL( std::string( "*E, *A, F, B, *C, D" ), GetObjects( aModel ) );
164 // 7. [ *A, F, *C ] / ALL OBJECTS
165 aModel->move( QList<int>() << 1 << 2 << 4, aTop, false );
166 CPPUNIT_ASSERT_EQUAL( std::string( "*A, F, *C, *E, B, D" ), GetObjects( aModel ) );
168 // 8. [ F, *C, *E, B, D ] / ALL OBJECTS
169 aModel->move( QList<int>() << 1 << 2 << 3 << 4 << 5, aTop, false );
170 CPPUNIT_ASSERT_EQUAL( std::string( "F, *C, *E, B, D, *A" ), GetObjects( aModel ) );
172 // 9. [] / ALL OBJECTS
173 aModel->move( QList<int>(), aTop, false );
174 CPPUNIT_ASSERT_EQUAL( std::string( "F, *C, *E, B, D, *A" ), GetObjects( aModel ) );
176 // 10. [*F, *C, *E, B, D, *A] / ALL OBJECTS
177 aModel->move( QList<int>() << 0 << 1 << 2 << 3 << 4 << 5, aTop, false );
178 CPPUNIT_ASSERT_EQUAL( std::string( "F, *C, *E, B, D, *A" ), GetObjects( aModel ) );
184 Test move down algorithm.
186 void test_HYDROGUI_ZLevelsModel::testMoveDown()
188 HYDROGUI_ZLevelsModel* aModel = new HYDROGUI_ZLevelsModel();
189 aModel->setObjects( CreateTestObjects( 6 ) );
190 const HYDROGUI_ZLevelsModel::OpType aDown = HYDROGUI_ZLevelsModel::Down;
192 // 0. Check the initial state
193 CPPUNIT_ASSERT_EQUAL( std::string( "*A, B, *C, D, *E, F" ), GetObjects( aModel ) );
195 // 1. [ F ] / ALL OBJECTS
196 aModel->move( QList<int>() << 5, aDown, false );
197 CPPUNIT_ASSERT_EQUAL( std::string( "*A, B, *C, D, *E, F" ), GetObjects( aModel ) );
199 // 2. [ *E, F ] / ALL OBJECTS
200 aModel->move( QList<int>() << 4 << 5, aDown, false );
201 CPPUNIT_ASSERT_EQUAL( std::string( "*A, B, *C, D, *E, F" ), GetObjects( aModel ) );
203 // 3. [ D, F ] / ALL OBJECTS
204 aModel->move( QList<int>() << 3 << 5, aDown, false );
205 CPPUNIT_ASSERT_EQUAL( std::string( "*A, B, *C, D, *E, F" ), GetObjects( aModel ) );
207 // 4. [ *A, F ] / ALL OBJECTS
208 aModel->move( QList<int>() << 0 << 5, aDown, false );
209 CPPUNIT_ASSERT_EQUAL( std::string( "*A, B, *C, D, *E, F" ), GetObjects( aModel ) );
211 // 5. [ *A ] X 6 times / ALL OBJECTS
212 aModel->move( QList<int>() << 0, aDown, false );
213 CPPUNIT_ASSERT_EQUAL( std::string( "B, *A, *C, D, *E, F" ), GetObjects( aModel ) );
214 aModel->move( QList<int>() << 1, aDown, false );
215 CPPUNIT_ASSERT_EQUAL( std::string( "B, *C, *A, D, *E, F" ), GetObjects( aModel ) );
216 aModel->move( QList<int>() << 2, aDown, false );
217 CPPUNIT_ASSERT_EQUAL( std::string( "B, *C, D, *A, *E, F" ), GetObjects( aModel ) );
218 aModel->move( QList<int>() << 3, aDown, false );
219 CPPUNIT_ASSERT_EQUAL( std::string( "B, *C, D, *E, *A, F" ), GetObjects( aModel ) );
220 aModel->move( QList<int>() << 4, aDown, false );
221 CPPUNIT_ASSERT_EQUAL( std::string( "B, *C, D, *E, F, *A" ), GetObjects( aModel ) );
222 aModel->move( QList<int>() << 5, aDown, false );
223 CPPUNIT_ASSERT_EQUAL( std::string( "B, *C, D, *E, F, *A" ), GetObjects( aModel ) );
225 // 6. [ *E, *F ] / ALL OBJECTS
226 aModel->move( QList<int>() << 3 << 4, aDown, false );
227 CPPUNIT_ASSERT_EQUAL( std::string( "B, *C, D, *A, *E, F" ), GetObjects( aModel ) );
229 // 7. [ B, D, *E ] / ALL OBJECTS
230 aModel->move( QList<int>() << 0 << 2 << 4, aDown, false );
231 CPPUNIT_ASSERT_EQUAL( std::string( "*C, B, *A, D, F, *E" ), GetObjects( aModel ) );
233 // 8. [ *C, B, *A, D, F ] / ALL OBJECTS
234 aModel->move( QList<int>() << 0 << 1 << 2 << 3 << 4, aDown, false );
235 CPPUNIT_ASSERT_EQUAL( std::string( "*E, *C, B, *A, D, F" ), GetObjects( aModel ) );
237 // 9. [ *C ] / VISIBLE OBJECTS
238 aModel->move( QList<int>() << 1, aDown, true );
239 CPPUNIT_ASSERT_EQUAL( std::string( "*E, B, *A, *C, D, F" ), GetObjects( aModel ) );
241 // 10. [ *E, *A ] / VISIBLE OBJECTS
242 aModel->move( QList<int>() << 0 << 2, aDown, true );
243 CPPUNIT_ASSERT_EQUAL( std::string( "B, *C, *E, *A, D, F" ), GetObjects( aModel ) );
245 // 11. [ *E, *A ] / VISIBLE OBJECTS
246 aModel->move( QList<int>() << 2 << 3, aDown, true );
247 CPPUNIT_ASSERT_EQUAL( std::string( "B, *C, *E, *A, D, F" ), GetObjects( aModel ) );
249 // 12. [ *C, *E, *A ] / VISIBLE OBJECTS
250 aModel->move( QList<int>() << 1 << 2 << 3, aDown, true );
251 CPPUNIT_ASSERT_EQUAL( std::string( "B, *C, *E, *A, D, F" ), GetObjects( aModel ) );
253 // 13. [] / ALL OBJECTS
254 aModel->move( QList<int>(), aDown, false );
255 CPPUNIT_ASSERT_EQUAL( std::string( "B, *C, *E, *A, D, F"), GetObjects( aModel ) );
257 // 14. [ B, *C, *E, *A, D, F ] / ALL OBJECTS
258 aModel->move( QList<int>() << 0 << 1 << 2 << 3 << 4 << 5, aDown, false );
259 CPPUNIT_ASSERT_EQUAL( std::string( "B, *C, *E, *A, D, F"), GetObjects( aModel ) );
265 Test move on bottom algorithm.
267 void test_HYDROGUI_ZLevelsModel::testMoveOnBottom()
269 HYDROGUI_ZLevelsModel* aModel = new HYDROGUI_ZLevelsModel();
270 aModel->setObjects( CreateTestObjects( 6 ) );
271 const HYDROGUI_ZLevelsModel::OpType aBottom = HYDROGUI_ZLevelsModel::Bottom;
273 // 0. Check the initial state
274 CPPUNIT_ASSERT_EQUAL( std::string( "*A, B, *C, D, *E, F" ), GetObjects( aModel ) );
276 // 1. [ F ] / ALL OBJECTS
277 aModel->move( QList<int>() << 5, aBottom, false );
278 CPPUNIT_ASSERT_EQUAL( std::string( "*A, B, *C, D, *E, F" ), GetObjects( aModel ) );
280 // 2. [ F ] / VISIBLE OBJECTS
281 aModel->move( QList<int>() << 5, aBottom, true );
282 CPPUNIT_ASSERT_EQUAL( std::string( "*A, B, *C, D, *E, F" ), GetObjects( aModel ) );
284 // 3. [ *A ] / ALL OBJECTS
285 aModel->move( QList<int>() << 0, aBottom, false );
286 CPPUNIT_ASSERT_EQUAL( std::string( "B, *C, D, *E, F, *A" ), GetObjects( aModel ) );
288 // 4. [ *C ] / VISIBLE OBJECTS
289 aModel->move( QList<int>() << 1, aBottom, true );
290 CPPUNIT_ASSERT_EQUAL( std::string( "B, D, *E, F, *A, *C" ), GetObjects( aModel ) );
292 // 5. [ B, D ] / ALL OBJECTS
293 aModel->move( QList<int>() << 0 << 1, aBottom, false );
294 CPPUNIT_ASSERT_EQUAL( std::string( "*E, F, *A, *C, B, D" ), GetObjects( aModel ) );
296 // 6. [ *C, *D ] / ALL OBJECTS
297 aModel->move( QList<int>() << 3 << 5, aBottom, false );
298 CPPUNIT_ASSERT_EQUAL( std::string( "*E, F, *A, B, *C, D" ), GetObjects( aModel ) );
300 // 7. [ *E, *A, *C ] / ALL OBJECTS
301 aModel->move( QList<int>() << 0 << 2 << 4, aBottom, false );
302 CPPUNIT_ASSERT_EQUAL( std::string( "F, B, D, *E, *A, *C" ), GetObjects( aModel ) );
304 // 8. [ B, D, *E, *A ] / ALL OBJECTS
305 aModel->move( QList<int>() << 1 << 2 << 3 << 4 , aBottom, false );
306 CPPUNIT_ASSERT_EQUAL( std::string( "F, *C, B, D, *E, *A" ), GetObjects( aModel ) );
308 // 9. [] / ALL OBJECTS
309 aModel->move( QList<int>(), aBottom, false );
310 CPPUNIT_ASSERT_EQUAL( std::string( "F, *C, B, D, *E, *A" ), GetObjects( aModel ) );
312 // 10. [F, *C, B, D, *E, *A] / ALL OBJECTS
313 aModel->move( QList<int>() << 0 << 1 << 2 << 3 << 4 << 5, aBottom, false );
314 CPPUNIT_ASSERT_EQUAL( std::string( "F, *C, B, D, *E, *A" ), GetObjects( aModel ) );
320 Test drag and drop algorithm.
322 void test_HYDROGUI_ZLevelsModel::testDragAndDrop()
324 HYDROGUI_ZLevelsModel* aModel = new HYDROGUI_ZLevelsModel();
325 aModel->setObjects( CreateTestObjects( 8 ) );
326 const HYDROGUI_ZLevelsModel::OpType aDnD = HYDROGUI_ZLevelsModel::DragAndDrop;
328 // 0. Check the initial state
329 std::string anInitialState = std::string( "*A, B, *C, D, *E, F, *G, H" );
330 CPPUNIT_ASSERT_EQUAL( anInitialState, GetObjects( aModel ) );
332 // 1. [] -> B ( i=1 )
333 bool aRes = aModel->move( QList<int>(), aDnD, false, 1 );
334 CPPUNIT_ASSERT_EQUAL( false, aRes );
335 CPPUNIT_ASSERT_EQUAL( anInitialState, GetObjects( aModel ) );
337 // 2. ALL -> B ( i=1 )
339 anAll << 0 << 1 << 2 << 3 << 4 << 5 << 6 << 7;
340 aRes = aModel->move( anAll, aDnD, false, 1 );
341 CPPUNIT_ASSERT_EQUAL( false, aRes );
342 CPPUNIT_ASSERT_EQUAL( anInitialState, GetObjects( aModel ) );
344 // 3. [D, *E, *G] -> D : drop item is among dragged items ( at the beginning )
345 aRes = aModel->move( QList<int>() << 3 << 4 << 6, aDnD, false, 3 );
346 CPPUNIT_ASSERT_EQUAL( false, aRes );
347 CPPUNIT_ASSERT_EQUAL( anInitialState, GetObjects( aModel ) );
349 // 4. [D, *E, *G] -> *E : drop item is among dragged items ( in the middle )
350 aRes = aModel->move( QList<int>() << 3 << 4 << 6, aDnD, false, 4 );
351 CPPUNIT_ASSERT_EQUAL( false, aRes );
352 CPPUNIT_ASSERT_EQUAL( anInitialState, GetObjects( aModel ) );
354 // 5. [D, *E, *G] -> *G : drop item is among dragged items ( at the end )
355 aRes = aModel->move( QList<int>() << 3 << 4 << 6, aDnD, false, 6 );
356 CPPUNIT_ASSERT_EQUAL( false, aRes );
357 CPPUNIT_ASSERT_EQUAL( anInitialState, GetObjects( aModel ) );
359 // 6. [D, *E, *G] -> -1 : drop item index is out of range ( less than zero )
360 aRes = aModel->move( QList<int>() << 3 << 4 << 6, aDnD, false, -1 );
361 CPPUNIT_ASSERT_EQUAL( false, aRes );
362 CPPUNIT_ASSERT_EQUAL( anInitialState, GetObjects( aModel ) );
364 // 7. [D, *E, *G] -> -1 : drop item index is out of range ( more than than (list length - 1) )
365 aRes = aModel->move( QList<int>() << 3 << 4 << 6, aDnD, false, 8 );
366 CPPUNIT_ASSERT_EQUAL( false, aRes );
367 CPPUNIT_ASSERT_EQUAL( anInitialState, GetObjects( aModel ) );
369 // 8. [D, *E, *G] -> B ( i = 1 )
370 aRes = aModel->move( QList<int>() << 3 << 4 << 6, aDnD, false, 1 );
371 CPPUNIT_ASSERT_EQUAL( true, aRes );
372 CPPUNIT_ASSERT_EQUAL( std::string( "*A, D, *E, *G, B, *C, F, H" ), GetObjects( aModel ) );
375 aRes = aModel->move( QList<int>() << 2 << 6, aDnD, false, 3 );
376 CPPUNIT_ASSERT_EQUAL( true, aRes );
377 CPPUNIT_ASSERT_EQUAL( std::string( "*A, D, *E, F, *G, B, *C, H" ), GetObjects( aModel ) );
379 // 10. [*E, F, *G] -> *A
380 aRes = aModel->move( QList<int>() << 2 << 3 << 4, aDnD, false, 0 );
381 CPPUNIT_ASSERT_EQUAL( true, aRes );
382 CPPUNIT_ASSERT_EQUAL( std::string( "*E, F, *G, *A, D, B, *C, H" ), GetObjects( aModel ) );
384 // 11. [*G, D, *C, H] -> B
385 aRes = aModel->move( QList<int>() << 2 << 4 << 6 << 7, aDnD, false, 5 );
386 CPPUNIT_ASSERT_EQUAL( true, aRes );
387 CPPUNIT_ASSERT_EQUAL( std::string( "*E, F, *A, *G, D, *C, H, B" ), GetObjects( aModel ) );
389 // 12. [F, *A, *G, D, *C, H, B] -> *E
390 QList<int> anAllWithoutFirst;
391 anAllWithoutFirst << 1 << 2 << 3 << 4 << 5 << 6 << 7;
392 aRes = aModel->move( anAllWithoutFirst, aDnD, false, 0 );
393 CPPUNIT_ASSERT_EQUAL( true, aRes );
394 CPPUNIT_ASSERT_EQUAL( std::string( "F, *A, *G, D, *C, H, B, *E" ), GetObjects( aModel ) );
396 // 13. [*A, *G] -> D : no changes
397 aRes = aModel->move( QList<int>() << 1 << 2, aDnD, false, 3 );
398 CPPUNIT_ASSERT_EQUAL( true, aRes );
399 CPPUNIT_ASSERT_EQUAL( std::string( "F, *A, *G, D, *C, H, B, *E" ), GetObjects( aModel ) );
402 aRes = aModel->move( QList<int>() << 0 << 2, aDnD, false, 3 );
403 CPPUNIT_ASSERT_EQUAL( true, aRes );
404 CPPUNIT_ASSERT_EQUAL( std::string( "*A, F, *G, D, *C, H, B, *E" ), GetObjects( aModel ) );
406 // 15. [*A, *G, *C, H, *E] -> D
407 aRes = aModel->move( QList<int>() << 0 << 2 << 4 << 5 << 7, aDnD, false, 3 );
408 CPPUNIT_ASSERT_EQUAL( true, aRes );
409 CPPUNIT_ASSERT_EQUAL( std::string( "F, *A, *G, *C, H, *E, D, B" ), GetObjects( aModel ) );