1 // Copyright (C) 2006 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
2 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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.
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.
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
18 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 #include "MEDMEMTest.hxx"
21 #include <cppunit/TestAssert.h>
23 #include <MEDMEM_Compatibility21_22.hxx>
24 #include <MEDMEM_MedMedDriver22.hxx>
25 #include <MEDMEM_Med.hxx>
27 // use this define to enable lines, execution of which leads to Segmentation Fault
28 //#define ENABLE_FAULTS
30 // use this define to enable CPPUNIT asserts and fails, showing bugs
31 #define ENABLE_FORCED_FAILURES
34 using namespace MEDMEM;
35 using namespace MED_EN;
38 * Check methods (21), defined in MEDMEM_MedMedDriver22.hxx:
39 * class MED_MED_DRIVER22 : public virtual MED_MED_DRIVER {
40 * (+) MED_MED_DRIVER22();
41 * (+) MED_MED_DRIVER22(const string & fileName, MED * const ptrMed);
42 * (+) MED_MED_DRIVER22(const string & fileName, MED * const ptrMed,
43 * MED_EN::med_mode_acces accessMode);
44 * (+) MED_MED_DRIVER22(const MED_MED_DRIVER22 & driver);
45 * (+) virtual ~MED_MED_DRIVER22();
46 * (+) void open() throw (MEDEXCEPTION);
48 * (+) virtual void write (void) const;
49 * (+) virtual void writeFrom (void) const;
50 * (+) virtual void read (void);
51 * (+) virtual void readFileStruct (void);
53 * class MED_MED_RDONLY_DRIVER22 : public virtual IMED_MED_RDONLY_DRIVER,
54 * public virtual MED_MED_DRIVER22 {
55 * (+) MED_MED_RDONLY_DRIVER22();
56 * (+) MED_MED_RDONLY_DRIVER22(const string & fileName, MED * const ptrMed);
57 * (+) MED_MED_RDONLY_DRIVER22(const MED_MED_RDONLY_DRIVER22 & driver);
58 * (+) virtual ~MED_MED_RDONLY_DRIVER22();
59 * (+) void write (void) const throw (MEDEXCEPTION);
60 * (+) void writeFrom (void) const throw (MEDEXCEPTION);
61 * (+) void read (void) throw (MEDEXCEPTION);
62 * (+) void readFileStruct (void) throw (MEDEXCEPTION);
64 * class MED_MED_WRONLY_DRIVER22 : public virtual IMED_MED_WRONLY_DRIVER,
65 * public virtual MED_MED_DRIVER22 {
66 * (+) MED_MED_WRONLY_DRIVER22();
67 * (+) MED_MED_WRONLY_DRIVER22(const string & fileName, MED * const ptrMed);
68 * (+) MED_MED_WRONLY_DRIVER22(const MED_MED_WRONLY_DRIVER22 & driver);
69 * (+) virtual ~MED_MED_WRONLY_DRIVER22();
70 * (+) void write (void) const throw (MEDEXCEPTION);
71 * (+) void writeFrom (void) const throw (MEDEXCEPTION);
72 * (+) void read (void) throw (MEDEXCEPTION);
73 * (+) void readFileStruct (void) throw (MEDEXCEPTION);
75 * class MED_MED_RDWR_DRIVER22 : public virtual MED_MED_RDONLY_DRIVER22,
76 * public virtual MED_MED_WRONLY_DRIVER22,
77 * public virtual IMED_MED_RDWR_DRIVER {
78 * (+) MED_MED_RDWR_DRIVER22();
79 * (+) MED_MED_RDWR_DRIVER22(const string & fileName, MED * const ptrMed);
80 * (+) MED_MED_RDWR_DRIVER22(const MED_MED_RDWR_DRIVER22 & driver);
81 * (+) ~MED_MED_RDWR_DRIVER22();
82 * (+) void write (void) const throw (MEDEXCEPTION);
83 * (+) void writeFrom (void) const throw (MEDEXCEPTION);
84 * (+) void read (void) throw (MEDEXCEPTION);
85 * (+) void readFileStruct (void) throw (MEDEXCEPTION);
88 void MEDMEMTest::testMedMedDriver22() {
89 MED *aMed = new MED();
90 string data_dir = getenv("DATA_DIR");
91 string tmp_dir = getenv("TMP");
95 string filename_rd = data_dir + "/MedFiles/pointe_import22.med";
96 string emptyfilename = "";
97 string filename_wr = tmp_dir + "/myMedWr_pointe22.med";
98 string fileNotExistsName_rd = "notExists.med";
99 string fileNotExistsName_wr = "/path_not_exists/file_not_exists.med";
100 string filename_rdwr = tmp_dir + "/myMedRdWr_pointe22.med";
101 string fcopy = "cp " + filename_rd + " " + filename_rdwr;
103 // To remove tmp files from disk
104 MEDMEMTest_TmpFilesRemover aRemover;
105 aRemover.Register(filename_wr);
106 aRemover.Register(filename_rdwr);
108 //Copy file in the TMP dir for testing READ/WRITE case
109 system(fcopy.data());
111 //-------------------------------Test READ_ONLY part-------------------------------------------------------
112 //Creation incorrect Med_Med read only driver (file is not exist)
113 MED_MED_RDONLY_DRIVER22 *aInvalidMedMedRdDriver22 = new MED_MED_RDONLY_DRIVER22(fileNotExistsName_rd, aMed);
115 //Trying open not existing file
116 CPPUNIT_ASSERT_THROW(aInvalidMedMedRdDriver22->open(),MEDEXCEPTION);
118 //Creation incorrect Med_Med read only driver (with empty file name)
119 MED_MED_RDONLY_DRIVER22 *aInvalidMedMedRdDriver22_1 = new MED_MED_RDONLY_DRIVER22(emptyfilename, aMed);
121 //Trying open file with empty name
122 CPPUNIT_ASSERT_THROW(aInvalidMedMedRdDriver22_1->open(),MEDEXCEPTION);
125 //Creation a correct Med_Med read only driver (normal constructor)
126 MED_MED_RDONLY_DRIVER22 *aMedMedRdDriver22 = new MED_MED_RDONLY_DRIVER22(filename_rd, aMed);
129 CPPUNIT_ASSERT(aMedMedRdDriver22);
131 //Trying read mesh from file, if file is not open
132 #ifdef ENABLE_FORCED_FAILURES
133 CPPUNIT_ASSERT_THROW(aMedMedRdDriver22->read(), MEDEXCEPTION);
134 // (BUG) No exception in this case.
137 CPPUNIT_ASSERT_THROW(aMedMedRdDriver22->readFileStruct(),MEDEXCEPTION);
142 aMedMedRdDriver22->open();
144 catch(MEDEXCEPTION &e)
146 CPPUNIT_FAIL(e.what());
150 CPPUNIT_FAIL("Unknown exception");
153 //Trying open() file twice
154 #ifdef ENABLE_FORCED_FAILURES
155 CPPUNIT_ASSERT_THROW(aMedMedRdDriver22->open(),MEDEXCEPTION);
156 //(BUG) No exception in this case.
162 aMedMedRdDriver22->read();
164 catch(MEDEXCEPTION &e)
166 CPPUNIT_FAIL(e.what());
170 CPPUNIT_FAIL("Unknown exception");
176 aMedMedRdDriver22->readFileStruct();
178 catch(MEDEXCEPTION &e)
180 CPPUNIT_FAIL(e.what());
184 CPPUNIT_FAIL("Unknown exception");
187 //Test write() and WriteFrom() methods for READ_ONLY part
188 CPPUNIT_ASSERT_THROW(aMedMedRdDriver22->write(), MEDEXCEPTION);
189 CPPUNIT_ASSERT_THROW(aMedMedRdDriver22->writeFrom(), MEDEXCEPTION);
192 CPPUNIT_ASSERT(aMed);
194 //Test close() method
197 aMedMedRdDriver22->close();
199 catch(MEDEXCEPTION &e)
201 CPPUNIT_FAIL(e.what());
205 CPPUNIT_FAIL("Unknown exception");
208 //Default constructor
209 MED_MED_RDONLY_DRIVER22 aMedMedRdDriver22Cpy_1;
211 //Test (void operator =) defined in GENDRIVER class
212 //aMedMedRdDriver22Cpy_1 = *aMedMedRdDriver22;
214 //Test copy constructor
216 MED_MED_RDONLY_DRIVER22 aMedMedRdDriver22Cpy_2 (*aMedMedRdDriver22);
217 // (BUG) => Segmentation fault, because _concreteMedDrv is NULL
219 //CPPUNIT_ASSERT_EQUAL(aMedMedRdDriver22Cpy_2, *aMedMedRdDriver22);
221 //Test (bool operator ==) defined in GENDRIVER class in MEDMEM_GenDriver.hxx
222 //CPPUNIT_ASSERT(aMedMedRdDriver22Cpy_2.GENDRIVER::operator==(*aMedMedRdDriver22));
224 //Test (friend ostream & operator <<) defined GENDRIVER class
225 //ostringstream rwostr1, rwostr2;
226 //rwostr1<<aMedMedRdDriver22Cpy_1;
227 //rwostr2<<aMedMedRdDriver22Cpy_2;
228 //CPPUNIT_ASSERT(rwostr1.str() != "");
229 //CPPUNIT_ASSERT(rwostr1.str() == rwostr2.str());
231 //-------------------------------Test WRITE_ONLY part-------------------------------------------------------
232 //Creation incorrect Med_Med write only driver (file is not exist)
233 MED_MED_WRONLY_DRIVER22 *aInvalidMedMedWrDriver22 = new MED_MED_WRONLY_DRIVER22(fileNotExistsName_wr, aMed);
235 //Trying open not existing file
236 CPPUNIT_ASSERT_THROW(aInvalidMedMedWrDriver22->open(),MEDEXCEPTION);
238 //Creation incorrect Med_Med write only driver (with empty file name)
239 MED_MED_WRONLY_DRIVER22 *aInvalidMedMedWrDriver22_1 = new MED_MED_WRONLY_DRIVER22(emptyfilename, aMed);
241 //Trying open file with empty name
242 CPPUNIT_ASSERT_THROW(aInvalidMedMedWrDriver22_1->open(),MEDEXCEPTION);
245 //Creation a correct Med_Med write only driver (normal constructor)
246 MED_MED_WRONLY_DRIVER22 *aMedMedWrDriver22 = new MED_MED_WRONLY_DRIVER22(filename_wr, aMed);
249 CPPUNIT_ASSERT(aMedMedWrDriver22);
252 //Trying write mesh to file, if file is not open
253 #ifdef ENABLE_FORCED_FAILURES
254 CPPUNIT_ASSERT_THROW(aMedMedWrDriver22->writeFrom(),MEDEXCEPTION);
255 // (BUG) No exception in this case
259 CPPUNIT_ASSERT_THROW(aMedMedWrDriver22->write(), MEDEXCEPTION);
260 //(BUG) => Segmentation fault
266 aMedMedWrDriver22->open();
268 catch(MEDEXCEPTION &e)
270 CPPUNIT_FAIL(e.what());
274 CPPUNIT_FAIL("Unknown exception");
277 //Trying open() file twice
278 #ifdef ENABLE_FORCED_FAILURES
279 CPPUNIT_ASSERT_THROW(aMedMedWrDriver22->open(),MEDEXCEPTION);
280 //(BUG) No exception in this case.
283 //Test writeFrom() method
286 aMedMedWrDriver22->writeFrom();
288 catch(MEDEXCEPTION &e)
290 CPPUNIT_FAIL(e.what());
294 CPPUNIT_FAIL("Unknown exception");
298 //Test write() method
301 aMedMedWrDriver22->write();
303 catch(MEDEXCEPTION &e)
305 CPPUNIT_FAIL(e.what());
309 CPPUNIT_FAIL("Unknown exception");
311 // (BUG) => terminate called after throwing an instance of 'std::length_error'
312 // what(): basic_string::_S_create
318 aMedMedWrDriver22->close();
320 catch(MEDEXCEPTION &e)
322 CPPUNIT_FAIL(e.what());
326 CPPUNIT_FAIL("Unknown exception");
329 //Default constructor
330 MED_MED_WRONLY_DRIVER22 aMedMedWrDriver22Cpy_1;
332 //Test (void operator =) defined in GENDRIVER class
333 //aMedMedWrDriver22Cpy_1 = *aMedMedWrDriver22;
335 //Test copy constructor
337 MED_MED_WRONLY_DRIVER22 aMedMedWrDriver22Cpy_2 (*aMedMedWrDriver22);
338 // (BUG) => Segmentation fault
340 //CPPUNIT_ASSERT_EQUAL(aMedMedWrDriver22Cpy_2, *aMedMedWrDriver22);
342 //Test (bool operator ==) defined in GENDRIVER class
343 //CPPUNIT_ASSERT(aMedMedWrDriver22Cpy_2.GENDRIVER::operator==(*aMedMedWrDriver22));
345 //Test (friend ostream & operator <<) defined GENDRIVER class
346 //ostringstream rwostr1, rwostr2;
347 //rwostr1<<aMedMedWrDriver22Cpy_1;
348 //rwostr2<<aMedMedWrDriver22Cpy_2;
349 //CPPUNIT_ASSERT(rwostr1.str() != "");
350 //CPPUNIT_ASSERT(rwostr1.str() == rwostr2.str());
353 //-------------------------------Test READ/WRITE part-------------------------------------------------------
354 //Creation incorrect Med_Med read/write driver (file is not exist)
355 MED_MED_RDWR_DRIVER22 *aInvalidMedMedRdWrDriver22 = new MED_MED_RDWR_DRIVER22(fileNotExistsName_wr, aMed);
357 //Trying open not existing file
358 CPPUNIT_ASSERT_THROW(aInvalidMedMedRdWrDriver22->open(),MEDEXCEPTION);
360 //Creation incorrect Med_Med read/write driver (with empty file name)
361 MED_MED_RDWR_DRIVER22 *aInvalidMedMedRdWrDriver22_1 = new MED_MED_RDWR_DRIVER22(emptyfilename, aMed);
363 //Trying open file with empty name
364 CPPUNIT_ASSERT_THROW(aInvalidMedMedRdWrDriver22_1->open(),MEDEXCEPTION);
367 //Creation a correct Med_Med read/write driver (normal constructor)
368 MED_MED_RDWR_DRIVER22 *aMedMedRdWrDriver22 = new MED_MED_RDWR_DRIVER22(filename_rdwr, aMed);
371 CPPUNIT_ASSERT(aMedMedRdWrDriver22);
373 //Trying read MED from file if it is not open
374 #ifdef ENABLE_FORCED_FAILURES
375 CPPUNIT_ASSERT_THROW(aMedMedRdDriver22->read(), MEDEXCEPTION);
376 // (BUG) No exception in this case.
379 CPPUNIT_ASSERT_THROW(aMedMedRdDriver22->readFileStruct(),MEDEXCEPTION);
381 //Trying write mesh to file, if file is not open
382 #ifdef ENABLE_FORCED_FAILURES
383 CPPUNIT_ASSERT_THROW(aMedMedRdWrDriver22->writeFrom(),MEDEXCEPTION);
384 // (BUG) => No exception in this case
388 CPPUNIT_ASSERT_THROW(aMedMedRdWrDriver22->write(), MEDEXCEPTION);
395 aMedMedRdWrDriver22->open();
397 catch(MEDEXCEPTION &e)
399 CPPUNIT_FAIL(e.what());
403 CPPUNIT_FAIL("Unknown exception");
406 //Trying open() file twice
407 #ifdef ENABLE_FORCED_FAILURES
408 CPPUNIT_ASSERT_THROW(aMedMedRdWrDriver22->open(),MEDEXCEPTION);
409 //(BUG) No exception in this case.
412 //Test readFileStruct() method
415 aMedMedRdWrDriver22->readFileStruct();
417 catch(MEDEXCEPTION &e)
419 CPPUNIT_FAIL(e.what());
423 CPPUNIT_FAIL("Unknown exception");
429 aMedMedRdWrDriver22->read();
431 catch(MEDEXCEPTION &e)
433 CPPUNIT_FAIL(e.what());
437 CPPUNIT_FAIL("Unknown exception");
440 //Test writeFrom() method
443 aMedMedRdWrDriver22->writeFrom();
445 catch(MEDEXCEPTION &e)
447 CPPUNIT_FAIL(e.what());
451 CPPUNIT_FAIL("Unknown exception");
455 //Test write() method
458 aMedMedRdWrDriver22->write();
460 catch(MEDEXCEPTION &e)
462 CPPUNIT_FAIL(e.what());
466 CPPUNIT_FAIL("Unknown exception");
470 //Test close() method
473 aMedMedRdWrDriver22->close();
475 catch(MEDEXCEPTION &e)
477 CPPUNIT_FAIL(e.what());
481 CPPUNIT_FAIL("Unknown exception");
484 //Default constructor
485 MED_MED_RDWR_DRIVER22 aMedMedRdWrDriver22Cpy_1;
487 //Test copy constructor
489 MED_MED_RDWR_DRIVER22 aMedMedRdWrDriver22Cpy_2 (*aMedMedRdWrDriver22);
490 // (BUG) => Segmentation fault
492 //CPPUNIT_ASSERT_EQUAL(aMedMedRdWrDriver22Cpy_2, *aMedMedRdWrDriver22);
494 //Test (bool operator ==) defined in GENDRIVER class
495 //CPPUNIT_ASSERT(aMedMedRdWrDriver22Cpy_2.GENDRIVER::operator==(*aMedMedRdWrDriver22));
497 //Test (friend ostream & operator <<) defined GENDRIVER class in MEDMEM_GenDriver.hxx
498 //ostringstream rwostr1, rwostr2;
499 //rwostr1<<aMedMedRdWrDriver22Cpy_1;
500 //rwostr2<<aMedMedRdWrDriver22Cpy_2;
501 //CPPUNIT_ASSERT(rwostr1.str() != "");
502 //CPPUNIT_ASSERT(rwostr1.str() == rwostr2.str());
506 delete aInvalidMedMedRdDriver22;
507 delete aInvalidMedMedRdDriver22_1;
508 delete aMedMedRdDriver22;
510 delete aInvalidMedMedWrDriver22;
511 delete aInvalidMedMedWrDriver22_1;
512 delete aMedMedWrDriver22;
514 delete aInvalidMedMedRdWrDriver22;
515 delete aInvalidMedMedRdWrDriver22_1;
516 delete aMedMedRdWrDriver22;