1 // Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 #include "MEDMEMTest.hxx"
21 #include <cppunit/Message.h>
22 #include <cppunit/TestAssert.h>
24 #include "MEDMEM_DriverFactory.hxx"
25 #include "MEDMEM_Field.hxx"
26 #include "MEDMEM_GenDriver.hxx"
27 #include "MEDMEM_GibiMeshDriver.hxx"
28 #include "MEDMEM_MedFieldDriver.hxx"
29 #include "MEDMEM_MedMeshDriver.hxx"
30 #include "MEDMEM_Mesh.hxx"
31 #include "MEDMEM_PorflowMeshDriver.hxx"
32 #include "MEDMEM_STRING.hxx"
33 #include "MEDMEM_Support.hxx"
34 #include "MEDMEM_VtkFieldDriver.hxx"
35 #include "MEDMEM_VtkMedDriver.hxx"
36 #include "MEDMEM_VtkMeshDriver.hxx"
41 // use this define to enable lines, execution of which leads to Segmentation Fault
42 //#define ENABLE_FAULTS
44 // use this define to enable CPPUNIT asserts and fails, showing bugs
45 //#define ENABLE_FORCED_FAILURES
48 using namespace MEDMEM;
50 // #9: MEDMEM_DriverFactory.hxx } MEDMEMTest_DriverFactory.cxx
53 * Check methods (7), defined in MEDMEM_DriverFactory.hxx:
54 * namespace DRIVERFACTORY {
55 * (+) driverTypes deduceDriverTypeFromFileName(const std::string & fileName);
57 * (+) GENDRIVER * buildDriverForMesh (driverTypes driverType, const std::string & fileName,
58 * MESH *mesh, const string & driverName,
59 * MED_EN::med_mode_acces access);
60 * (+) template<class T, class INTERLACING_TAG>
61 * GENDRIVER * buildDriverForField(driverTypes driverType, const std::string & fileName,
62 * FIELD<T,INTERLACING_TAG> *fielde,
63 * MED_EN::med_mode_acces access);
65 * (+) GENDRIVER * buildMeshDriverFromFile (const string & fileName, MESH * ptrMesh,
66 * MED_EN::med_mode_acces access);
67 * (+) template<class T, class INTERLACING_TAG>
68 * GENDRIVER * buildFieldDriverFromFile(const string & fileName,
69 * FIELD<T,INTERLACING_TAG> * ptrField,
70 * MED_EN::med_mode_acces access);
72 * (+) GENDRIVER * buildConcreteMedDriverForMesh(const std::string & fileName, MESH *mesh,
73 * const string & driverName,
74 * MED_EN::med_mode_acces access,
75 * MED_EN::medFileVersion version);
76 * (+) template<class T, class INTERLACING_TAG>
77 * GENDRIVER * buildConcreteMedDriverForField(const std::string & fileName,
78 * FIELD<T,INTERLACING_TAG> *fielde,
79 * MED_EN::med_mode_acces access,
80 * MED_EN::medFileVersion version);
83 void MEDMEMTest::testDriverFactory()
85 ///////////////////////////////////////////////////////////////////////
86 // Test 1: getMedFileVersionForWriting & setMedFileVersionForWriting //
87 ///////////////////////////////////////////////////////////////////////
91 //////////////////////////////////////////////////////////////////////////
92 // Test 1b: getVtkBinaryFormatForWriting & setVtkBinaryFormatForWriting //
93 //////////////////////////////////////////////////////////////////////////
95 // save current format
96 bool wasBinary = DRIVERFACTORY::getVtkBinaryFormatForWriting();
98 // check changing format
99 DRIVERFACTORY::setVtkBinaryFormatForWriting( !wasBinary );
100 CPPUNIT_ASSERT(DRIVERFACTORY::getVtkBinaryFormatForWriting() == !wasBinary);
102 // restore default version preference
103 DRIVERFACTORY::setVtkBinaryFormatForWriting(wasBinary);
105 //////////////////////////////////////////
106 // Test 2: deduceDriverTypeFromFileName //
107 //////////////////////////////////////////
108 CPPUNIT_ASSERT(DRIVERFACTORY::deduceDriverTypeFromFileName("test.med") == MED_DRIVER);
109 CPPUNIT_ASSERT(DRIVERFACTORY::deduceDriverTypeFromFileName("t.st.sauve") == GIBI_DRIVER);
110 CPPUNIT_ASSERT(DRIVERFACTORY::deduceDriverTypeFromFileName("t.st.sauv") == GIBI_DRIVER);
111 CPPUNIT_ASSERT(DRIVERFACTORY::deduceDriverTypeFromFileName("t.st.cnc") == PORFLOW_DRIVER);
112 CPPUNIT_ASSERT(DRIVERFACTORY::deduceDriverTypeFromFileName("t.st.inp") == PORFLOW_DRIVER);
113 CPPUNIT_ASSERT(DRIVERFACTORY::deduceDriverTypeFromFileName("t.st.xyz") == PORFLOW_DRIVER);
114 CPPUNIT_ASSERT(DRIVERFACTORY::deduceDriverTypeFromFileName("t.st.vtk") == VTK_DRIVER);
115 CPPUNIT_ASSERT(DRIVERFACTORY::deduceDriverTypeFromFileName("t_st_med") == NO_DRIVER);
116 CPPUNIT_ASSERT(DRIVERFACTORY::deduceDriverTypeFromFileName("t.st.med1") == NO_DRIVER);
118 ////////////////////////////////////////////////////////
119 // Test building drivers for different types of files //
120 ////////////////////////////////////////////////////////
121 GENDRIVER * aDriver = NULL;
123 ///////////////////////////////
124 // Test 3: buildDriverForMed //
125 ///////////////////////////////
129 ////////////////////////////////
130 // Test 4: buildDriverForMesh //
131 ////////////////////////////////
137 aDriver = DRIVERFACTORY::buildDriverForMesh
138 (MED_DRIVER, "anyfile", mesh, "my driver name", MED_EN::RDONLY);
139 CPPUNIT_ASSERT(aDriver->getFileName() == "anyfile");
140 CPPUNIT_ASSERT(aDriver->getAccessMode() == MED_EN::RDONLY);
143 MED_MESH_RDONLY_DRIVER * aMedRDriverForMesh = dynamic_cast<MED_MESH_RDONLY_DRIVER *> (aDriver);
144 CPPUNIT_ASSERT(aMedRDriverForMesh);
145 CPPUNIT_ASSERT(aMedRDriverForMesh->getMeshName() == "my driver name");
148 delete aDriver; aDriver=0;
151 aDriver = DRIVERFACTORY::buildDriverForMesh
152 (MED_DRIVER, "anyfile", mesh, "my driver name", MED_EN::WRONLY);
153 CPPUNIT_ASSERT(aDriver->getFileName() == "anyfile");
154 CPPUNIT_ASSERT(aDriver->getAccessMode() == MED_EN::WRONLY);
156 MED_MESH_WRONLY_DRIVER * aMedWDriverForMesh = dynamic_cast<MED_MESH_WRONLY_DRIVER *> (aDriver);
157 CPPUNIT_ASSERT(aMedWDriverForMesh);
158 CPPUNIT_ASSERT(aMedWDriverForMesh->getMeshName() == "my driver name");
160 delete aDriver; aDriver=0;
163 aDriver = DRIVERFACTORY::buildDriverForMesh
164 (MED_DRIVER, "anyfile", mesh, "my driver name", MED_EN::RDWR);
165 CPPUNIT_ASSERT(aDriver->getFileName() == "anyfile");
166 CPPUNIT_ASSERT(aDriver->getAccessMode() == MED_EN::RDWR);
168 MED_MESH_RDWR_DRIVER * aMedRWDriverForMesh = dynamic_cast<MED_MESH_RDWR_DRIVER *> (aDriver);
169 CPPUNIT_ASSERT(aMedRWDriverForMesh);
170 CPPUNIT_ASSERT(aMedRWDriverForMesh->getMeshName() == "my driver name");
172 delete aDriver; aDriver=0;
177 aDriver = DRIVERFACTORY::buildDriverForMesh
178 (GIBI_DRIVER, "anyfile", mesh, "my driver name", MED_EN::RDONLY);
179 CPPUNIT_ASSERT(aDriver->getFileName() == "anyfile");
180 CPPUNIT_ASSERT(aDriver->getAccessMode() == MED_EN::RDONLY);
182 GIBI_MESH_RDONLY_DRIVER * aGibiDriverForMesh = dynamic_cast<GIBI_MESH_RDONLY_DRIVER *> (aDriver);
183 CPPUNIT_ASSERT(aGibiDriverForMesh);
185 delete aDriver; aDriver=0;
188 aDriver = DRIVERFACTORY::buildDriverForMesh
189 (GIBI_DRIVER, "anyfile", mesh, "my driver name", MED_EN::WRONLY);
190 CPPUNIT_ASSERT(aDriver->getFileName() == "anyfile");
191 CPPUNIT_ASSERT(aDriver->getAccessMode() == MED_EN::WRONLY);
193 GIBI_MESH_WRONLY_DRIVER * aGibiWRDriverForMesh = dynamic_cast<GIBI_MESH_WRONLY_DRIVER*>(aDriver);
194 CPPUNIT_ASSERT(aGibiWRDriverForMesh);
195 delete aDriver; aDriver=0;
198 aDriver = DRIVERFACTORY::buildDriverForMesh
199 (GIBI_DRIVER, "anyfile", mesh, "my driver name", MED_EN::RDWR);
200 CPPUNIT_ASSERT(aDriver->getFileName() == "anyfile");
201 CPPUNIT_ASSERT(aDriver->getAccessMode() == MED_EN::RDWR);
203 GIBI_MESH_RDWR_DRIVER * aGibiRWDriverForMesh = dynamic_cast<GIBI_MESH_RDWR_DRIVER*>(aDriver);
204 CPPUNIT_ASSERT(aGibiRWDriverForMesh);
205 delete aDriver; aDriver=0;
207 // 4.3: PORFLOW_DRIVER
210 aDriver = DRIVERFACTORY::buildDriverForMesh
211 (PORFLOW_DRIVER, "anyfile", mesh, "my driver name", MED_EN::RDONLY);
212 CPPUNIT_ASSERT(aDriver->getFileName() == "anyfile");
213 CPPUNIT_ASSERT(aDriver->getAccessMode() == MED_EN::RDONLY);
215 PORFLOW_MESH_RDONLY_DRIVER * aPorflowDriverForMesh = dynamic_cast<PORFLOW_MESH_RDONLY_DRIVER *> (aDriver);
216 CPPUNIT_ASSERT(aPorflowDriverForMesh);
218 delete aDriver; aDriver=0;
221 CPPUNIT_ASSERT_THROW(DRIVERFACTORY::buildDriverForMesh(PORFLOW_DRIVER, "anyfile", mesh,
222 "my driver name", MED_EN::WRONLY),
225 CPPUNIT_ASSERT_THROW(DRIVERFACTORY::buildDriverForMesh(PORFLOW_DRIVER, "anyfile", mesh,
226 "my driver name", MED_EN::RDWR),
232 CPPUNIT_ASSERT_THROW(DRIVERFACTORY::buildDriverForMesh(VTK_DRIVER, "anyfile", mesh,
233 "my driver name", MED_EN::RDONLY),
237 aDriver = DRIVERFACTORY::buildDriverForMesh
238 (VTK_DRIVER, "anyfile", mesh, "my driver name", MED_EN::WRONLY);
239 CPPUNIT_ASSERT(aDriver->getFileName() == "anyfile");
240 CPPUNIT_ASSERT(aDriver->getAccessMode() == MED_EN::WRONLY);
242 VTK_MESH_DRIVER * aVtkDriverForMesh = dynamic_cast<VTK_MESH_DRIVER *> (aDriver);
243 CPPUNIT_ASSERT(aVtkDriverForMesh);
245 delete aDriver; aDriver=0;
248 aDriver = DRIVERFACTORY::buildDriverForMesh
249 (VTK_DRIVER, "anyfile", mesh, "my driver name", MED_EN::RDWR);
250 CPPUNIT_ASSERT(aDriver->getFileName() == "anyfile");
251 // next string is commented by skl since VTK driver is
252 // created without mode
253 //CPPUNIT_ASSERT(aDriver->getAccessMode() == MED_EN::RDWR);
255 aVtkDriverForMesh = dynamic_cast<VTK_MESH_DRIVER *> (aDriver);
256 CPPUNIT_ASSERT(aVtkDriverForMesh);
258 delete aDriver; aDriver=0;
261 CPPUNIT_ASSERT_THROW(DRIVERFACTORY::buildDriverForMesh(ASCII_DRIVER, "anyfile", mesh,
262 "my driver name", MED_EN::RDONLY),
266 CPPUNIT_ASSERT_THROW(DRIVERFACTORY::buildDriverForMesh(NO_DRIVER, "anyfile", mesh,
267 "my driver name", MED_EN::RDONLY),
270 /////////////////////////////////
271 // Test 5: buildDriverForField //
272 /////////////////////////////////
273 FIELD<double> *field=new FIELD<double>();
278 aDriver = DRIVERFACTORY::buildDriverForField(MED_DRIVER, "anyfile", field, MED_EN::RDONLY);
279 CPPUNIT_ASSERT(aDriver->getFileName() == "anyfile");
280 CPPUNIT_ASSERT(aDriver->getAccessMode() == MED_EN::RDONLY);
282 MED_FIELD_RDONLY_DRIVER<double> * aMedRDriverForField =
283 dynamic_cast<MED_FIELD_RDONLY_DRIVER<double> *> (aDriver);
284 CPPUNIT_ASSERT(aMedRDriverForField);
286 delete aDriver; aDriver=0;
289 aDriver = DRIVERFACTORY::buildDriverForField(MED_DRIVER, "anyfile", field, MED_EN::WRONLY);
290 CPPUNIT_ASSERT(aDriver->getFileName() == "anyfile");
291 CPPUNIT_ASSERT(aDriver->getAccessMode() == MED_EN::WRONLY);
293 MED_FIELD_WRONLY_DRIVER<double> * aMedWDriverForField =
294 dynamic_cast<MED_FIELD_WRONLY_DRIVER<double> *> (aDriver);
295 CPPUNIT_ASSERT(aMedWDriverForField);
297 delete aDriver; aDriver=0;
300 aDriver = DRIVERFACTORY::buildDriverForField(MED_DRIVER, "anyfile", field, MED_EN::RDWR);
301 CPPUNIT_ASSERT(aDriver->getFileName() == "anyfile");
302 CPPUNIT_ASSERT_EQUAL(MED_EN::RDWR,aDriver->getAccessMode());
304 MED_FIELD_RDWR_DRIVER<double> * aMedRWDriverForField =
305 dynamic_cast<MED_FIELD_RDWR_DRIVER<double> *> (aDriver);
306 CPPUNIT_ASSERT(aMedRWDriverForField);
308 delete aDriver; aDriver=0;
313 CPPUNIT_ASSERT_THROW(DRIVERFACTORY::buildDriverForField(GIBI_DRIVER, "anyfile", field, MED_EN::RDONLY),
316 CPPUNIT_ASSERT_THROW(DRIVERFACTORY::buildDriverForField(GIBI_DRIVER, "anyfile", field, MED_EN::WRONLY),
319 CPPUNIT_ASSERT_THROW(DRIVERFACTORY::buildDriverForField(GIBI_DRIVER, "anyfile", field, MED_EN::RDWR),
322 // 5.3: PORFLOW_DRIVER
325 CPPUNIT_ASSERT_THROW(DRIVERFACTORY::buildDriverForField(PORFLOW_DRIVER, "anyfile",
326 field, MED_EN::RDONLY),
329 CPPUNIT_ASSERT_THROW(DRIVERFACTORY::buildDriverForField(PORFLOW_DRIVER, "anyfile",
330 field, MED_EN::WRONLY),
333 CPPUNIT_ASSERT_THROW(DRIVERFACTORY::buildDriverForField(PORFLOW_DRIVER, "anyfile",
334 field, MED_EN::RDWR),
340 CPPUNIT_ASSERT_THROW(DRIVERFACTORY::buildDriverForField(VTK_DRIVER, "anyfile", field, MED_EN::RDONLY),
344 aDriver = DRIVERFACTORY::buildDriverForField(VTK_DRIVER, "anyfile", field, MED_EN::WRONLY);
345 CPPUNIT_ASSERT(aDriver->getFileName() == "anyfile");
346 CPPUNIT_ASSERT(aDriver->getAccessMode() == MED_EN::WRONLY);
348 VTK_FIELD_DRIVER<double> * aVtkDriverForField = dynamic_cast<VTK_FIELD_DRIVER<double> *> (aDriver);
349 CPPUNIT_ASSERT(aVtkDriverForField);
351 delete aDriver; aDriver=0;
354 aDriver = DRIVERFACTORY::buildDriverForField(VTK_DRIVER, "anyfile", field, MED_EN::RDWR);
355 CPPUNIT_ASSERT(aDriver->getFileName() == "anyfile");
356 // next string is commented by skl since VTK driver is
357 // created without mode
358 //CPPUNIT_ASSERT(aDriver->getAccessMode() == MED_EN::RDWR);
360 aVtkDriverForField = dynamic_cast<VTK_FIELD_DRIVER<double> *> (aDriver);
361 CPPUNIT_ASSERT(aVtkDriverForField);
363 delete aDriver; aDriver=0;
368 CPPUNIT_ASSERT_THROW(DRIVERFACTORY::buildDriverForField(ASCII_DRIVER, "anyfile", field, MED_EN::RDONLY),
371 CPPUNIT_ASSERT_THROW(DRIVERFACTORY::buildDriverForField(ASCII_DRIVER, "anyfile", field, MED_EN::RDWR),
375 // it throws on empty field
376 CPPUNIT_ASSERT_THROW(DRIVERFACTORY::buildDriverForField(ASCII_DRIVER, "anyfile", field, MED_EN::WRONLY),
379 // now try with valid field
380 string filename = getResourceFile("pointe.med");
381 string meshname = "maa1";
382 string fieldname = "fieldcelldoublescalar";
383 FIELD<double> * aField1 = new FIELD<double>(MED_DRIVER, filename, fieldname);
384 const SUPPORT * aSupport = aField1->getSupport();
385 MESH * aMesh = new MESH (MED_DRIVER, filename, aSupport->getMeshName());
386 aSupport->setMesh(aMesh);
388 aDriver = DRIVERFACTORY::buildDriverForField(ASCII_DRIVER, "anyfile", aField1, MED_EN::WRONLY);
389 CPPUNIT_ASSERT(aDriver->getFileName() == "anyfile");
390 CPPUNIT_ASSERT(aDriver->getAccessMode() == MED_EN::WRONLY);
397 ASCII_FIELD_DRIVER<double> * anAsciiDriverForField =
398 dynamic_cast<ASCII_FIELD_DRIVER<double> *> (aDriver);
399 CPPUNIT_ASSERT(anAsciiDriverForField);
401 delete aDriver; aDriver=0;
403 aField1->removeReference();
404 aMesh->removeReference();
407 CPPUNIT_ASSERT_THROW(DRIVERFACTORY::buildDriverForField(NO_DRIVER, "anyfile", field, MED_EN::RDONLY),
410 ////////////////////////////////////
411 // Test 6: buildMedDriverFromFile //
412 ////////////////////////////////////
413 string aFileName1 = getResourceFile("pointe.med");
414 string aFileName2 = getResourceFile("polyedres.med");
415 medFileVersion version1, version2;
418 version1 = getMedFileVersion(aFileName1);
419 } catch (MEDEXCEPTION & ex) {
420 version1 = MED_EN::V22;
424 version2 = getMedFileVersion(aFileName2);
425 } catch (MEDEXCEPTION & ex) {
426 version2 = MED_EN::V22;
429 // 6.1. Med file V2.1
430 string aFileName21 = aFileName1;
431 if (version1 == MED_EN::V21 || version2 == MED_EN::V21) {
432 if (version1 == MED_EN::V22)
433 aFileName21 = aFileName2;
437 // // 6.2. Med file V2.2
438 string aFileName22 = aFileName2;
439 if (version2 == MED_EN::V22 || version1 == MED_EN::V22) {
440 if (version2 == MED_EN::V21)
441 aFileName22 = aFileName1;
445 /////////////////////////////////////
446 // Test 7: buildMeshDriverFromFile //
447 /////////////////////////////////////
449 // 7.1. Med file V2.1
450 if (version1 == MED_EN::V21 || version2 == MED_EN::V21) {
454 // 7.2. Med file V2.2
455 if (version2 == MED_EN::V22 || version1 == MED_EN::V22) {
457 aDriver = DRIVERFACTORY::buildMeshDriverFromFile(aFileName22, mesh, MED_EN::RDONLY);
458 CPPUNIT_ASSERT(aDriver->getFileName() == aFileName22);
459 CPPUNIT_ASSERT(aDriver->getAccessMode() == MED_EN::RDONLY);
461 MED_MESH_RDONLY_DRIVER * aMeshRDriverForMed22 = dynamic_cast<MED_MESH_RDONLY_DRIVER *> (aDriver);
462 CPPUNIT_ASSERT(aMeshRDriverForMed22);
464 delete aDriver; aDriver=0;
467 aDriver = DRIVERFACTORY::buildMeshDriverFromFile(aFileName22, mesh, MED_EN::WRONLY);
468 CPPUNIT_ASSERT(aDriver->getFileName() == aFileName22);
469 CPPUNIT_ASSERT(aDriver->getAccessMode() == MED_EN::WRONLY);
471 MED_MESH_WRONLY_DRIVER * aMeshWDriverForMed22 = dynamic_cast<MED_MESH_WRONLY_DRIVER *> (aDriver);
472 CPPUNIT_ASSERT(aMeshWDriverForMed22);
474 delete aDriver; aDriver=0;
477 aDriver = DRIVERFACTORY::buildMeshDriverFromFile(aFileName22, mesh, MED_EN::RDWR);
478 CPPUNIT_ASSERT(aDriver->getFileName() == aFileName22);
479 CPPUNIT_ASSERT(aDriver->getAccessMode() == MED_EN::RDWR);
481 MED_MESH_RDWR_DRIVER * aMeshRWDriverForMed22 = dynamic_cast<MED_MESH_RDWR_DRIVER *> (aDriver);
482 CPPUNIT_ASSERT(aMeshRWDriverForMed22);
484 delete aDriver; aDriver=0;
487 //////////////////////////////////////
488 // Test 8: buildFieldDriverFromFile //
489 //////////////////////////////////////
491 // 8.1. Med file V2.1
492 if (version1 == MED_EN::V21 || version2 == MED_EN::V21) {
494 aDriver = DRIVERFACTORY::buildFieldDriverFromFile(aFileName21, field, MED_EN::RDONLY);
495 CPPUNIT_ASSERT(aDriver->getFileName() == aFileName21);
496 CPPUNIT_ASSERT(aDriver->getAccessMode() == MED_EN::RDONLY);
498 delete aDriver; aDriver=0;
501 aDriver = DRIVERFACTORY::buildFieldDriverFromFile(aFileName21, field, MED_EN::WRONLY);
502 CPPUNIT_ASSERT(aDriver->getFileName() == aFileName21);
503 CPPUNIT_ASSERT(aDriver->getAccessMode() == MED_EN::WRONLY);
505 delete aDriver; aDriver=0;
508 aDriver = DRIVERFACTORY::buildFieldDriverFromFile(aFileName21, field, MED_EN::RDWR);
509 CPPUNIT_ASSERT(aDriver->getFileName() == aFileName21);
510 CPPUNIT_ASSERT(aDriver->getAccessMode() == MED_EN::RDWR); // see MEDMEM_define.hxx
512 delete aDriver; aDriver=0;
515 // 8.2. Med file V2.2
516 if (version2 == MED_EN::V22 || version1 == MED_EN::V22) {
518 aDriver = DRIVERFACTORY::buildFieldDriverFromFile(aFileName22, field, MED_EN::RDONLY);
519 CPPUNIT_ASSERT(aDriver->getFileName() == aFileName22);
520 CPPUNIT_ASSERT(aDriver->getAccessMode() == MED_EN::RDONLY);
522 MED_FIELD_RDONLY_DRIVER<double> * aFieldRDriverForMed22 =
523 dynamic_cast<MED_FIELD_RDONLY_DRIVER<double> *> (aDriver);
524 CPPUNIT_ASSERT(aFieldRDriverForMed22);
526 delete aDriver; aDriver=0;
529 aDriver = DRIVERFACTORY::buildFieldDriverFromFile(aFileName22, field, MED_EN::WRONLY);
530 CPPUNIT_ASSERT(aDriver->getFileName() == aFileName22);
531 CPPUNIT_ASSERT(aDriver->getAccessMode() == MED_EN::WRONLY);
533 MED_FIELD_WRONLY_DRIVER<double> * aFieldWDriverForMed22 =
534 dynamic_cast<MED_FIELD_WRONLY_DRIVER<double> *> (aDriver);
535 CPPUNIT_ASSERT(aFieldWDriverForMed22);
537 delete aDriver; aDriver=0;
540 aDriver = DRIVERFACTORY::buildFieldDriverFromFile(aFileName22, field, MED_EN::RDWR);
541 CPPUNIT_ASSERT(aDriver->getFileName() == aFileName22);
542 CPPUNIT_ASSERT(aDriver->getAccessMode() == MED_EN::RDWR); // see MEDMEM_define.hxx
544 MED_FIELD_RDWR_DRIVER<double> * aFieldRWDriverForMed22 =
545 dynamic_cast<MED_FIELD_RDWR_DRIVER<double> *> (aDriver);
546 CPPUNIT_ASSERT(aFieldRWDriverForMed22);
548 delete aDriver; aDriver=0;
551 ///////////////////////////////////////////
552 // Test 9: buildConcreteMedDriverForMesh //
553 ///////////////////////////////////////////
558 CPPUNIT_ASSERT_THROW(aDriver = DRIVERFACTORY::buildConcreteMedDriverForMesh("anyfile", mesh, "my driver name",
559 MED_EN::RDONLY, MED_EN::V21),
561 delete aDriver; aDriver=0;
564 CPPUNIT_ASSERT_THROW(aDriver = DRIVERFACTORY::buildConcreteMedDriverForMesh("anyfile", mesh, "my driver name",
565 MED_EN::WRONLY, MED_EN::V21),
568 delete aDriver; aDriver=0;
571 CPPUNIT_ASSERT_THROW(aDriver = DRIVERFACTORY::buildConcreteMedDriverForMesh("anyfile", mesh, "my driver name",
572 MED_EN::RDWR, MED_EN::V21),
575 delete aDriver; aDriver=0;
580 aDriver = DRIVERFACTORY::buildConcreteMedDriverForMesh("anyfile", mesh, "my driver name",
581 MED_EN::RDONLY, MED_EN::V22);
582 CPPUNIT_ASSERT(aDriver->getFileName() == "anyfile");
583 CPPUNIT_ASSERT(aDriver->getAccessMode() == MED_EN::RDONLY);
585 MED_MESH_RDONLY_DRIVER * aMeshRDriverForMed22 = dynamic_cast<MED_MESH_RDONLY_DRIVER *> (aDriver);
586 CPPUNIT_ASSERT(aMeshRDriverForMed22);
587 CPPUNIT_ASSERT(aMeshRDriverForMed22->getMeshName() == "my driver name");
589 delete aDriver; aDriver=0;
592 aDriver = DRIVERFACTORY::buildConcreteMedDriverForMesh("anyfile", mesh, "my driver name",
593 MED_EN::WRONLY, MED_EN::V22);
594 CPPUNIT_ASSERT(aDriver->getFileName() == "anyfile");
595 CPPUNIT_ASSERT(aDriver->getAccessMode() == MED_EN::WRONLY);
597 MED_MESH_WRONLY_DRIVER * aMeshWDriverForMed22 = dynamic_cast<MED_MESH_WRONLY_DRIVER *> (aDriver);
598 CPPUNIT_ASSERT(aMeshWDriverForMed22);
599 CPPUNIT_ASSERT(aMeshWDriverForMed22->getMeshName() == "my driver name");
601 delete aDriver; aDriver=0;
604 aDriver = DRIVERFACTORY::buildConcreteMedDriverForMesh("anyfile", mesh, "my driver name",
605 MED_EN::RDWR, MED_EN::V22);
606 CPPUNIT_ASSERT(aDriver->getFileName() == "anyfile");
607 CPPUNIT_ASSERT(aDriver->getAccessMode() == MED_EN::RDWR);
609 MED_MESH_RDWR_DRIVER * aMeshRWDriverForMed22 = dynamic_cast<MED_MESH_RDWR_DRIVER *> (aDriver);
610 CPPUNIT_ASSERT(aMeshRWDriverForMed22);
611 CPPUNIT_ASSERT(aMeshRWDriverForMed22->getMeshName() == "my driver name");
612 mesh->removeReference();
613 delete aDriver; aDriver=0;
615 /////////////////////////////////////////////
616 // Test 10: buildConcreteMedDriverForField //
617 /////////////////////////////////////////////
622 CPPUNIT_ASSERT_THROW(aDriver = DRIVERFACTORY::buildConcreteMedDriverForField("anyfile", field, MED_EN::RDONLY, MED_EN::V21),
624 delete aDriver; aDriver=0;
627 CPPUNIT_ASSERT_THROW(aDriver = DRIVERFACTORY::buildConcreteMedDriverForField("anyfile", field, MED_EN::WRONLY, MED_EN::V21),
629 delete aDriver; aDriver=0;
632 CPPUNIT_ASSERT_THROW(aDriver = DRIVERFACTORY::buildConcreteMedDriverForField("anyfile", field, MED_EN::RDWR, MED_EN::V21), MED_EXCEPTION);
633 delete aDriver; aDriver=0;
638 aDriver = DRIVERFACTORY::buildConcreteMedDriverForField("anyfile", field, MED_EN::RDONLY, MED_EN::V22);
639 CPPUNIT_ASSERT(aDriver->getFileName() == "anyfile");
640 CPPUNIT_ASSERT(aDriver->getAccessMode() == MED_EN::RDONLY);
642 MED_FIELD_RDONLY_DRIVER<double> * aFieldRDriverForMed22 =
643 dynamic_cast<MED_FIELD_RDONLY_DRIVER<double> *> (aDriver);
644 CPPUNIT_ASSERT(aFieldRDriverForMed22);
646 delete aDriver; aDriver=0;
649 aDriver = DRIVERFACTORY::buildConcreteMedDriverForField("anyfile", field, MED_EN::WRONLY, MED_EN::V22);
650 CPPUNIT_ASSERT(aDriver->getFileName() == "anyfile");
651 CPPUNIT_ASSERT(aDriver->getAccessMode() == MED_EN::WRONLY);
653 MED_FIELD_WRONLY_DRIVER<double> * aFieldWDriverForMed22 =
654 dynamic_cast<MED_FIELD_WRONLY_DRIVER<double> *> (aDriver);
655 CPPUNIT_ASSERT(aFieldWDriverForMed22);
657 delete aDriver; aDriver=0;
660 aDriver = DRIVERFACTORY::buildConcreteMedDriverForField("anyfile", field, MED_EN::RDWR, MED_EN::V22);
661 field->removeReference();
662 CPPUNIT_ASSERT(aDriver->getFileName() == "anyfile");
663 CPPUNIT_ASSERT(aDriver->getAccessMode() == MED_EN::RDWR); // see MEDMEM_define.hxx
665 MED_FIELD_RDWR_DRIVER<double> * aFieldRWDriverForMed22 =
666 dynamic_cast<MED_FIELD_RDWR_DRIVER<double> *> (aDriver);
667 CPPUNIT_ASSERT(aFieldRWDriverForMed22);
669 delete aDriver; aDriver=0;