1 // Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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.
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.
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
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 #include "MEDMEMTest.hxx"
23 #include <cppunit/TestAssert.h>
25 #include <MEDMEM_Compatibility21_22.hxx>
26 #include <MEDMEM_MedMedDriver21.hxx>
27 #include <MEDMEM_Med.hxx>
29 // use this define to enable lines, execution of which leads to Segmentation Fault
30 //#define ENABLE_FAULTS
32 // use this define to enable CPPUNIT asserts and fails, showing bugs
33 //#define ENABLE_FORCED_FAILURES
36 using namespace MEDMEM;
37 using namespace MED_EN;
40 * Check methods (21), defined in MEDMEM_MedMedDriver21.hxx:
41 * class MED_MED_DRIVER21 : public virtual MED_MED_DRIVER {
42 * (+) MED_MED_DRIVER21();
43 * (+) MED_MED_DRIVER21(const string & fileName, MED * const ptrMed);
44 * (+) MED_MED_DRIVER21(const string & fileName, MED * const ptrMed,
45 * MED_EN::med_mode_acces accessMode);
46 * (+) MED_MED_DRIVER21(const MED_MED_DRIVER21 & driver);
47 * (+) virtual ~MED_MED_DRIVER21();
48 * (+) void open() throw (MEDEXCEPTION);
50 * (+) virtual void write (void) const;
51 * (+) virtual void writeFrom (void) const;
52 * (+) virtual void read (void);
53 * (+) virtual void readFileStruct (void);
55 * class MED_MED_RDONLY_DRIVER21 : public virtual IMED_MED_RDONLY_DRIVER,
56 * public virtual MED_MED_DRIVER21 {
57 * (+) MED_MED_RDONLY_DRIVER21();
58 * (+) MED_MED_RDONLY_DRIVER21(const string & fileName, MED * const ptrMed);
59 * (+) MED_MED_RDONLY_DRIVER21(const MED_MED_RDONLY_DRIVER21 & driver);
60 * (+) virtual ~MED_MED_RDONLY_DRIVER21();
61 * (+) void write (void) const throw (MEDEXCEPTION);
62 * (+) void writeFrom (void) const throw (MEDEXCEPTION);
63 * (+) void read (void) throw (MEDEXCEPTION);
64 * (+) void readFileStruct (void) throw (MEDEXCEPTION);
66 * class MED_MED_WRONLY_DRIVER21 : public virtual IMED_MED_WRONLY_DRIVER,
67 * public virtual MED_MED_DRIVER21 {
68 * (+) MED_MED_WRONLY_DRIVER21();
69 * (+) MED_MED_WRONLY_DRIVER21(const string & fileName, MED * const ptrMed);
70 * (+) MED_MED_WRONLY_DRIVER21(const MED_MED_WRONLY_DRIVER21 & driver);
71 * (+) virtual ~MED_MED_WRONLY_DRIVER21();
72 * (+) void write (void) const throw (MEDEXCEPTION);
73 * (+) void writeFrom (void) const throw (MEDEXCEPTION);
74 * (+) void read (void) throw (MEDEXCEPTION);
75 * (+) void readFileStruct (void) throw (MEDEXCEPTION);
77 * class MED_MED_RDWR_DRIVER21 : public MED_MED_RDONLY_DRIVER21,
78 * public MED_MED_WRONLY_DRIVER21,
79 * public IMED_MED_RDWR_DRIVER {
80 * (+) MED_MED_RDWR_DRIVER21();
81 * (+) MED_MED_RDWR_DRIVER21(const string & fileName, MED * const ptrMed);
82 * (+) MED_MED_RDWR_DRIVER21(const MED_MED_RDWR_DRIVER21 & driver);
83 * (+) ~MED_MED_RDWR_DRIVER21();
84 * (+) void write (void) const throw (MEDEXCEPTION);
85 * (+) void writeFrom (void) const throw (MEDEXCEPTION);
86 * (+) void read (void) throw (MEDEXCEPTION);
87 * (+) void readFileStruct (void) throw (MEDEXCEPTION);
90 void MEDMEMTest::testMedMedDriver21() {
91 MED *aMed = new MED();
92 string data_dir = getenv("MED_ROOT_DIR");
93 string tmp_dir = getenv("TMP") ? getenv("TMP") : "/tmp";
97 string filename_rd = data_dir + "/share/salome/resources/med/pointe.med";
98 string emptyfilename = "";
99 string filename_wr = tmp_dir + "/myMedWr_pointe21.med";
100 string fileNotExistsName_rd = "notExists.med";
101 string fileNotExistsName_wr = "/path_not_exists/file_not_exists.med";
102 string filename_rdwr = tmp_dir + "/myMedRdWr_pointe21.med";
103 string fcopy = "cp " + filename_rd + " " + filename_rdwr;
105 // To remove tmp files from disk
106 MEDMEMTest_TmpFilesRemover aRemover;
107 aRemover.Register(filename_wr);
108 aRemover.Register(filename_rdwr);
110 //Copy file in the TMP dir for testing READ/WRITE case
111 system(fcopy.data());
113 //-------------------------------Test READ_ONLY part-------------------------------------------------------
114 //Creation incorrect Med_Med read only driver (file is not exist)
115 MED_MED_RDONLY_DRIVER21 *aInvalidMedMedRdDriver21 = new MED_MED_RDONLY_DRIVER21(fileNotExistsName_rd, aMed);
117 //Trying open not existing file
118 CPPUNIT_ASSERT_THROW(aInvalidMedMedRdDriver21->open(),MEDEXCEPTION);
120 //Creation incorrect Med_Med read only driver (with empty file name)
121 MED_MED_RDONLY_DRIVER21 *aInvalidMedMedRdDriver21_1 = new MED_MED_RDONLY_DRIVER21(emptyfilename, aMed);
123 //Trying open file with empty name
124 CPPUNIT_ASSERT_THROW(aInvalidMedMedRdDriver21_1->open(),MEDEXCEPTION);
127 //Creation a correct Med_Med read only driver (normal constructor)
128 MED_MED_RDONLY_DRIVER21 *aMedMedRdDriver21 = new MED_MED_RDONLY_DRIVER21(filename_rd, aMed);
131 CPPUNIT_ASSERT(aMedMedRdDriver21);
133 //Trying read mesh from file, if file is not open
134 // !!!!!!!! Med driver does NOT NEED open() before read() but only before readFileStruct() !!!!
135 //#ifdef ENABLE_FORCED_FAILURES
136 //CPPUNIT_ASSERT_THROW(aMedMedRdDriver21->read(), MEDEXCEPTION);
137 //CPPUNIT_ASSERT_NO_THROW(aMedMedRdDriver21->read());
138 // (BUG) No exception in this case.
139 // so here everything is read
142 CPPUNIT_ASSERT_THROW(aMedMedRdDriver21->readFileStruct(),MEDEXCEPTION);
147 aMedMedRdDriver21->open();
149 catch(MEDEXCEPTION &e)
151 CPPUNIT_FAIL(e.what());
155 CPPUNIT_FAIL("Unknown exception");
158 //Trying open() file twice
159 //#ifdef ENABLE_FORCED_FAILURES
160 //CPPUNIT_ASSERT_THROW(aMedMedRdDriver21->open(),MEDEXCEPTION);
161 CPPUNIT_ASSERT_NO_THROW(aMedMedRdDriver21->open());
162 //(BUG) No exception in this case.
168 aMedMedRdDriver21->read();
170 catch(MEDEXCEPTION &e)
172 CPPUNIT_FAIL(e.what());
176 CPPUNIT_FAIL("Unknown exception");
182 aMedMedRdDriver21->readFileStruct();
184 catch(MEDEXCEPTION &e)
186 CPPUNIT_FAIL(e.what());
190 CPPUNIT_FAIL("Unknown exception");
193 //Test write() and WriteFrom() methods for READ_ONLY part
194 CPPUNIT_ASSERT_THROW(aMedMedRdDriver21->write(), MEDEXCEPTION);
195 CPPUNIT_ASSERT_THROW(aMedMedRdDriver21->writeFrom(), MEDEXCEPTION);
198 CPPUNIT_ASSERT(aMed);
200 //Test close() method
203 aMedMedRdDriver21->close();
205 catch(MEDEXCEPTION &e)
207 CPPUNIT_FAIL(e.what());
211 CPPUNIT_FAIL("Unknown exception");
214 //Default constructor
215 MED_MED_RDONLY_DRIVER21 aMedMedRdDriver21Cpy_1;
217 //Test (void operator =) defined in GENDRIVER class
218 //aMedMedRdDriver21Cpy_1 = *aMedMedRdDriver21;
220 //Test copy constructor
221 //#ifdef ENABLE_FAULTS
222 MED_MED_RDONLY_DRIVER21 aMedMedRdDriver21Cpy_2 (*aMedMedRdDriver21);
223 // (BUG) => Segmentation fault, because _concreteMedDrv is NULL
224 // Process terminating with default action of signal 11 (SIGSEGV)
225 // Access not within mapped region at address 0x0
226 // at 0x34881A7A: MEDMEM::MED_MED_DRIVER::MED_MED_DRIVER(MEDMEM::MED_MED_DRIVER const&) (MEDMEM_MedMedDriver.cxx:56)
227 // by 0x34A07786: MEDMEM::MED_MED_RDONLY_DRIVER21::MED_MED_RDONLY_DRIVER21(MEDMEM::MED_MED_RDONLY_DRIVER21 const&) (MEDMEM_MedMedDriver21.cxx:179)
228 // by 0x343A02AD: MEDMEMTest::testMedMedDriver21() (MEDMEMTest_MedMedDriver21.cxx:219)
231 //CPPUNIT_ASSERT_EQUAL(aMedMedRdDriver21Cpy_2, *aMedMedRdDriver21);
233 //Test (bool operator ==) defined in GENDRIVER class in MEDMEM_GenDriver.hxx
234 //CPPUNIT_ASSERT(aMedMedRdDriver21Cpy_2.GENDRIVER::operator==(*aMedMedRdDriver21));
236 //Test (friend ostream & operator <<) defined GENDRIVER class
237 //ostringstream rwostr1, rwostr2;
238 //rwostr1<<aMedMedRdDriver21Cpy_1;
239 //rwostr2<<aMedMedRdDriver21Cpy_2;
240 //CPPUNIT_ASSERT(rwostr1.str() != "");
241 //CPPUNIT_ASSERT(rwostr1.str() == rwostr2.str());
243 //-------------------------------Test WRITE_ONLY part-------------------------------------------------------
244 //Creation incorrect Med_Med write only driver (file is not exist)
245 MED_MED_WRONLY_DRIVER21 *aInvalidMedMedWrDriver21 = new MED_MED_WRONLY_DRIVER21(fileNotExistsName_wr, aMed);
247 //Trying open not existing file
248 CPPUNIT_ASSERT_THROW(aInvalidMedMedWrDriver21->open(),MEDEXCEPTION);
250 //Creation incorrect Med_Med write only driver (with empty file name)
251 MED_MED_WRONLY_DRIVER21 *aInvalidMedMedWrDriver21_1 = new MED_MED_WRONLY_DRIVER21(emptyfilename, aMed);
253 //Trying open file with empty name
254 CPPUNIT_ASSERT_THROW(aInvalidMedMedWrDriver21_1->open(),MEDEXCEPTION);
257 //Creation a correct Med_Med write only driver (normal constructor)
258 MED_MED_WRONLY_DRIVER21 *aMedMedWrDriver21 = new MED_MED_WRONLY_DRIVER21(filename_wr, aMed);
261 CPPUNIT_ASSERT(aMedMedWrDriver21);
264 //Trying write mesh to file, if file is not open
265 // !!!!!!!! Med driver does NOT NEED open() before neither writeFrom() nor before write() !!!!
266 //#ifdef ENABLE_FORCED_FAILURES
267 //CPPUNIT_ASSERT_THROW(aMedMedWrDriver21->writeFrom(),MEDEXCEPTION);
268 // (BUG) No exception in this case
271 //#ifdef ENABLE_FAULTS
272 //CPPUNIT_ASSERT_THROW(aMedMedWrDriver21->write(), MEDEXCEPTION);
273 //(BUG) => Segmentation fault
280 aMedMedWrDriver21->open();
282 catch(MEDEXCEPTION &e)
284 CPPUNIT_FAIL(e.what());
288 CPPUNIT_FAIL("Unknown exception");
291 //Trying open() file twice
292 //#ifdef ENABLE_FORCED_FAILURES
293 CPPUNIT_ASSERT_NO_THROW(aMedMedWrDriver21->open());
294 //(BUG) No exception in this case.
297 //Test writeFrom() method
300 aMedMedWrDriver21->writeFrom();
302 catch(MEDEXCEPTION &e)
304 CPPUNIT_FAIL(e.what());
308 CPPUNIT_FAIL("Unknown exception");
311 //#ifdef ENABLE_FAULTS
312 //Test write() method
315 aMedMedWrDriver21->write();
317 catch(MEDEXCEPTION &e)
319 CPPUNIT_FAIL(e.what());
323 CPPUNIT_FAIL("Unknown exception");
325 // (BUG) => terminate called after throwing an instance of 'std::length_error'
326 // what(): basic_string::_S_create
332 aMedMedWrDriver21->close();
334 catch(MEDEXCEPTION &e)
336 CPPUNIT_FAIL(e.what());
340 CPPUNIT_FAIL("Unknown exception");
343 //Default constructor
344 MED_MED_WRONLY_DRIVER21 aMedMedWrDriver21Cpy_1;
346 //Test (void operator =) defined in GENDRIVER class
347 //aMedMedWrDriver21Cpy_1 = *aMedMedWrDriver21;
349 //Test copy constructor
350 //#ifdef ENABLE_FAULTS
351 MED_MED_WRONLY_DRIVER21 aMedMedWrDriver21Cpy_2 (*aMedMedWrDriver21);
352 // (BUG) => Segmentation fault
354 //CPPUNIT_ASSERT_EQUAL(aMedMedWrDriver21Cpy_2, *aMedMedWrDriver21);
356 //Test (bool operator ==) defined in GENDRIVER class
357 //CPPUNIT_ASSERT(aMedMedWrDriver21Cpy_2.GENDRIVER::operator==(*aMedMedWrDriver21));
359 //Test (friend ostream & operator <<) defined GENDRIVER class
360 //ostringstream rwostr1, rwostr2;
361 //rwostr1<<aMedMedWrDriver21Cpy_1;
362 //rwostr2<<aMedMedWrDriver21Cpy_2;
363 //CPPUNIT_ASSERT(rwostr1.str() != "");
364 //CPPUNIT_ASSERT(rwostr1.str() == rwostr2.str());
367 //-------------------------------Test READ/WRITE part-------------------------------------------------------
368 //Creation incorrect Med_Med read/write driver (file is not exist)
369 MED_MED_RDWR_DRIVER21 *aInvalidMedMedRdWrDriver21 = new MED_MED_RDWR_DRIVER21(fileNotExistsName_wr, aMed);
371 //Trying open not existing file
372 CPPUNIT_ASSERT_THROW(aInvalidMedMedRdWrDriver21->open(),MEDEXCEPTION);
374 //Creation incorrect Med_Med read/write driver (with empty file name)
375 MED_MED_RDWR_DRIVER21 *aInvalidMedMedRdWrDriver21_1 = new MED_MED_RDWR_DRIVER21(emptyfilename, aMed);
377 //Trying open file with empty name
378 CPPUNIT_ASSERT_THROW(aInvalidMedMedRdWrDriver21_1->open(),MEDEXCEPTION);
381 //Creation a correct Med_Med read/write driver (normal constructor)
382 MED_MED_RDWR_DRIVER21 *aMedMedRdWrDriver21 = new MED_MED_RDWR_DRIVER21(filename_rdwr, aMed);
385 CPPUNIT_ASSERT(aMedMedRdWrDriver21);
387 //Trying read MED from file if it is not open
388 // !!!!!!!! Med driver does NOT NEED open() before read() but only before readFileStruct() !!!!
389 //#ifdef ENABLE_FORCED_FAILURES
390 //CPPUNIT_ASSERT_THROW(aMedMedRdWrDriver21->read(), MEDEXCEPTION);
391 // (BUG) No exception in this case.
394 CPPUNIT_ASSERT_THROW(aMedMedRdWrDriver21->readFileStruct(),MEDEXCEPTION);
396 //Trying write mesh to file, if file is not open
397 // !!!!!!!! Med driver does NOT NEED open() before writeFrom() but only before write() !!!!
398 //#ifdef ENABLE_FORCED_FAILURES
399 //CPPUNIT_ASSERT_THROW(aMedMedRdWrDriver21->writeFrom(),MEDEXCEPTION);
400 CPPUNIT_ASSERT_NO_THROW(aMedMedRdWrDriver21->writeFrom());
401 // (BUG) => No exception in this case
404 //#ifdef ENABLE_FAULTS
405 // !!!!!!! It does not throught since nothing has been yet read, so no attempts to write
406 //CPPUNIT_ASSERT_THROW(aMedMedRdWrDriver21->write(),MEDEXCEPTION);
407 CPPUNIT_ASSERT_NO_THROW(aMedMedRdWrDriver21->write());
414 aMedMedRdWrDriver21->open();
416 catch(MEDEXCEPTION &e)
418 CPPUNIT_FAIL(e.what());
422 CPPUNIT_FAIL("Unknown exception");
425 //Trying open() file twice
426 //!!!! do not make troubles for the user
427 //#ifdef ENABLE_FORCED_FAILURES
428 //CPPUNIT_ASSERT_THROW(aMedMedRdWrDriver21->open(),MEDEXCEPTION);
429 //(BUG) No exception in this case.
432 //Test readFileStruct() method
435 aMedMedRdWrDriver21->readFileStruct();
437 catch(MEDEXCEPTION &e)
439 CPPUNIT_FAIL(e.what());
443 CPPUNIT_FAIL("Unknown exception");
449 aMedMedRdWrDriver21->read();
451 catch(MEDEXCEPTION &e)
453 CPPUNIT_FAIL(e.what());
457 CPPUNIT_FAIL("Unknown exception");
460 //Test writeFrom() method
463 aMedMedRdWrDriver21->writeFrom();
465 catch(MEDEXCEPTION &e)
467 CPPUNIT_FAIL(e.what());
471 CPPUNIT_FAIL("Unknown exception");
474 //#ifdef ENABLE_FAULTS
475 //Test write() method
478 aMedMedRdWrDriver21->write();
480 catch(MEDEXCEPTION &e)
482 CPPUNIT_FAIL(e.what());
486 CPPUNIT_FAIL("Unknown exception");
490 //Test close() method
493 aMedMedRdWrDriver21->close();
495 catch(MEDEXCEPTION &e)
497 CPPUNIT_FAIL(e.what());
501 CPPUNIT_FAIL("Unknown exception");
504 //Default constructor
505 MED_MED_RDWR_DRIVER21 aMedMedRdWrDriver21Cpy_1;
507 //Test copy constructor
508 //#ifdef ENABLE_FAULTS
509 MED_MED_RDWR_DRIVER21 aMedMedRdWrDriver21Cpy_2 (*aMedMedRdWrDriver21);
510 // (BUG) => Segmentation fault
512 //CPPUNIT_ASSERT_EQUAL(aMedMedRdWrDriver21Cpy_2, *aMedMedRdWrDriver21);
514 //Test (bool operator ==) defined in GENDRIVER class
515 //CPPUNIT_ASSERT(aMedMedRdWrDriver21Cpy_2.GENDRIVER::operator==(*aMedMedRdWrDriver21));
517 //Test (friend ostream & operator <<) defined GENDRIVER class in MEDMEM_GenDriver.hxx
518 //ostringstream rwostr1, rwostr2;
519 //rwostr1<<aMedMedRdWrDriver21Cpy_1;
520 //rwostr2<<aMedMedRdWrDriver21Cpy_2;
521 //CPPUNIT_ASSERT(rwostr1.str() != "");
522 //CPPUNIT_ASSERT(rwostr1.str() == rwostr2.str());
526 delete aInvalidMedMedRdDriver21;
527 delete aInvalidMedMedRdDriver21_1;
528 delete aMedMedRdDriver21;
530 delete aInvalidMedMedWrDriver21;
531 delete aInvalidMedMedWrDriver21_1;
532 delete aMedMedWrDriver21;
534 delete aInvalidMedMedRdWrDriver21;
535 delete aInvalidMedMedRdWrDriver21_1;
536 delete aMedMedRdWrDriver21;