1 // Copyright (C) 2007-2013 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/TestAssert.h>
23 #include <MEDMEM_Field.hxx>
24 #include <MEDMEM_MedFieldDriver.hxx>
26 // use this define to enable lines, execution of which leads to Segmentation Fault
27 //#define ENABLE_FAULTS
29 // use this define to enable CPPUNIT asserts and fails, showing bugs
30 //#define ENABLE_FORCED_FAILURES
33 * Check methods (17), defined in MEDMEM_MedFieldDriver22.hxx:
34 * template <class T> class MED_FIELD_DRIVER22 : public virtual MED_FIELD_DRIVER<T> {
35 * (+) MED_FIELD_DRIVER22();
36 * (+) template <class INTERLACING_TAG> MED_FIELD_DRIVER22(const string & fileName,
37 * FIELD<T, INTERLACING_TAG> * ptrField, MED_EN::med_mode_acces accessMode);
38 * (+) MED_FIELD_DRIVER22(const MED_FIELD_DRIVER22 & fieldDriver);
39 * (+) virtual ~MED_FIELD_DRIVER22();
40 * (+) void open() throw (MEDEXCEPTION);
43 * template <class T> class MED_FIELD_RDONLY_DRIVER : public virtual MED_FIELD_DRIVER22<T>,
44 * public virtual IMED_FIELD_RDONLY_DRIVER<T> {
45 * (+) MED_FIELD_RDONLY_DRIVER();
46 * (+) template <class INTERLACING_TAG> MED_FIELD_RDONLY_DRIVER
47 * (const string & fileName, FIELD<T, INTERLACING_TAG> * ptrField);
48 * (+) MED_FIELD_RDONLY_DRIVER(const MED_FIELD_RDONLY_DRIVER & fieldDriver);
49 * (+) virtual ~MED_FIELD_RDONLY_DRIVER();
50 * (+) void write(void) const throw (MEDEXCEPTION);
51 * (+) void read (void) throw (MEDEXCEPTION);
53 * template <class T> class MED_FIELD_WRONLY_DRIVER : public virtual MED_FIELD_DRIVER22<T>,
54 * public virtual IMED_FIELD_WRONLY_DRIVER<T> {
55 * (+) MED_FIELD_WRONLY_DRIVER();
56 * (+) template <class INTERLACING_TAG> MED_FIELD_WRONLY_DRIVER
57 * (const string & fileName, FIELD<T, INTERLACING_TAG> * ptrField);
58 * (+) MED_FIELD_WRONLY_DRIVER(const MED_FIELD_WRONLY_DRIVER & fieldDriver);
59 * (+) virtual ~MED_FIELD_WRONLY_DRIVER();
60 * (+) void write(void) const throw (MEDEXCEPTION);
61 * (+) void read (void) throw (MEDEXCEPTION);
63 * template <class T> class MED_FIELD_RDWR_DRIVER22 : public MED_FIELD_RDONLY_DRIVER<T>,
64 * public MED_FIELD_WRONLY_DRIVER<T>, public IMED_FIELD_RDWR_DRIVER<T> {
65 * (+) MED_FIELD_RDWR_DRIVER22();
66 * (+) template <class INTERLACING_TAG> MED_FIELD_RDWR_DRIVER22
67 * (const string & fileName, FIELD<T, INTERLACING_TAG> * ptrField);
68 * (+) MED_FIELD_RDWR_DRIVER22(const MED_FIELD_RDWR_DRIVER22 & fieldDriver);
69 * (+) ~MED_FIELD_RDWR_DRIVER22();
70 * (+) void write(void) const throw (MEDEXCEPTION);
71 * (+) void read (void) throw (MEDEXCEPTION);
74 void MEDMEMTest::testMedFieldDriver()
76 FIELD<int> *aField = new FIELD<int>();
77 FIELD<int> *aField_1 = new FIELD<int>();
78 FIELD<double> *aField_2 = new FIELD<double>();
79 string filename_rd = getResourceFile("pointe.med");
80 string filenameWithOutFileds = getResourceFile("mesh.med");
81 string filenameWithOutFileds_rdwr = makeTmpFile("mesh.med", filenameWithOutFileds);
82 string fileldnotexist = "anyfield";
83 string fieldname = "fieldnodeint";
84 string fieldname_cpy = fieldname + "_cpy";
85 string fileNotExist_rd = "notExist22.med";
86 string emptyfilename = "";
88 string filename_wr = makeTmpFile("myWrField_pointe22.med", filename_rd);
89 string fileNotExist_wr = "/path_not_exist/file_not_exist.med";
90 string emptyfile_wr = makeTmpFile("myWrField_pointe_empty22.med");
91 string other_file = getResourceFile("cube_hexa8.med");
92 string other_file_wr = makeTmpFile("myWRcube_hexa8.med", other_file);
94 string filename_rdwr = makeTmpFile("myRdWrField_pointe22.med", filename_rd);
95 string emptyfile_rdwr = makeTmpFile("myRdWrField_pointe_empty22.med");
96 string fieldnameDouble = "fieldnodedouble";
97 string fieldnameDouble_cpy = fieldnameDouble + "_cpy";
99 // To remove tmp files from disk
100 MEDMEMTest_TmpFilesRemover aRemover;
101 aRemover.Register(filename_wr);
102 aRemover.Register(emptyfile_wr);
103 aRemover.Register(other_file_wr);
104 aRemover.Register(filename_rdwr);
105 aRemover.Register(emptyfile_rdwr);
106 aRemover.Register(filenameWithOutFileds_rdwr);
108 //--------------------------Test READ ONLY part------------------------------//
110 /////////////////////////////////////
111 // TEST1: Open not existing file //
112 /////////////////////////////////////
114 //Creation Invalid Read Only MedFieldDriver22 (file not exist)
115 MED_FIELD_RDONLY_DRIVER<int> *aInvalidMedRdFieldDriver22_1 =
116 new MED_FIELD_RDONLY_DRIVER<int>(fileNotExist_rd, aField);
117 //Trying open not existing file
118 CPPUNIT_ASSERT_THROW(aInvalidMedRdFieldDriver22_1->open(), MEDEXCEPTION);
120 //////////////////////////////////////////////
121 // TEST2: Open file with empty file name ///
122 //////////////////////////////////////////////
124 //Creation Invalid Read Only MedFieldDriver22 (empty file name)
125 MED_FIELD_RDONLY_DRIVER<int> *aInvalidMedRdFieldDriver22_2 =
126 new MED_FIELD_RDONLY_DRIVER<int>(emptyfilename, aField);
127 //Trying file with empty name
128 CPPUNIT_ASSERT_THROW(aInvalidMedRdFieldDriver22_2->open(), MEDEXCEPTION);
130 /////////////////////////////////////////////////////
131 // TEST3: Reading field from file without fields //
132 /////////////////////////////////////////////////////
133 MED_FIELD_RDONLY_DRIVER<int> *aInvalidMedRdFieldDriver22_3 =
134 new MED_FIELD_RDONLY_DRIVER<int>(filenameWithOutFileds, aField);
135 aInvalidMedRdFieldDriver22_3->open();
136 aInvalidMedRdFieldDriver22_3->setFieldName(fieldname);
137 //Trying read field from file
138 CPPUNIT_ASSERT_THROW(aInvalidMedRdFieldDriver22_3->read(), MEDEXCEPTION);
139 aInvalidMedRdFieldDriver22_3->close();
141 ////////////////////////
142 // TEST4: Main test //
143 ////////////////////////
144 //Creation correct Read Only MedFieldDriver22
145 MED_FIELD_RDONLY_DRIVER<int> *aMedRdFieldDriver22 =
146 new MED_FIELD_RDONLY_DRIVER<int>(filename_rd, aField);
149 CPPUNIT_ASSERT(aMedRdFieldDriver22);
151 //Trying read field before open file
152 CPPUNIT_ASSERT_THROW(aMedRdFieldDriver22->read(),MEDEXCEPTION);
157 aMedRdFieldDriver22->open();
159 catch(MEDEXCEPTION &e)
161 CPPUNIT_FAIL(e.what());
165 CPPUNIT_FAIL("Unknown exception");
168 //#ifdef ENABLE_FORCED_FAILURES
169 //Trying open file secondary.
170 //CPPUNIT_ASSERT_THROW(aMedRdFieldDriver22->open(), MEDEXCEPTION);
171 CPPUNIT_ASSERT_NO_THROW(aMedRdFieldDriver22->open());
172 // (BUG) No exception in this case
175 //Trying read field form file if it name is empty
176 CPPUNIT_ASSERT_THROW(aMedRdFieldDriver22->read(), MEDEXCEPTION);
178 //Test setFieldName() and getFieldName()
181 aMedRdFieldDriver22->setFieldName(fileldnotexist);
183 catch(MEDEXCEPTION &e)
185 CPPUNIT_FAIL(e.what());
189 CPPUNIT_FAIL("Unknown exception");
191 CPPUNIT_ASSERT_EQUAL(fileldnotexist, aMedRdFieldDriver22->getFieldName());
193 //Trying read not existing field from file
194 CPPUNIT_ASSERT_THROW(aMedRdFieldDriver22->read(), MEDEXCEPTION);
197 aMedRdFieldDriver22->setFieldName(fieldname);
200 aMedRdFieldDriver22->read();
202 catch(MEDEXCEPTION &e)
204 CPPUNIT_FAIL(e.what());
208 CPPUNIT_FAIL("Unknown exception");
211 //Test write() method for READ ONLY driver
212 CPPUNIT_ASSERT_THROW(aMedRdFieldDriver22->write(), MEDEXCEPTION);
214 //Test close() method
217 aMedRdFieldDriver22->close();
219 catch(MEDEXCEPTION &e)
221 CPPUNIT_FAIL(e.what());
225 CPPUNIT_FAIL("Unknown exception");
228 //Default constructor
229 MED_FIELD_RDONLY_DRIVER<int> aMedRdFieldDriver22Cpy_1;
231 //Test (void operator =) defined in GENDRIVER class in MEDMEM_GenDriver.hxx
232 aMedRdFieldDriver22Cpy_1 = *aMedRdFieldDriver22;
234 //Test (bool operator ==) defined GENDRIVER class in MEDMEM_GenDriver.hxx
235 CPPUNIT_ASSERT(aMedRdFieldDriver22Cpy_1 == *aMedRdFieldDriver22);
237 //Test copy constructorg
238 MED_FIELD_RDONLY_DRIVER<int> aMedRdFieldDriver22Cpy_2 (*aMedRdFieldDriver22);
239 CPPUNIT_ASSERT_EQUAL(aMedRdFieldDriver22Cpy_2, *aMedRdFieldDriver22);
241 //Test (friend ostream & operator <<) defined GENDRIVER class in MEDMEM_GenDriver.hxx
242 ostringstream rostr1, rostr2;
243 rostr1<<aMedRdFieldDriver22Cpy_1;
244 rostr2<<aMedRdFieldDriver22Cpy_2;
245 CPPUNIT_ASSERT(rostr1.str() != "");
246 CPPUNIT_ASSERT(rostr1.str() == rostr2.str());
249 //--------------------------Test WRITE ONLY part------------------------------//
251 /////////////////////////////////////
252 // TEST1: Open not existing file //
253 /////////////////////////////////////
255 //Creation Invalid Write Only MedFieldDriver22 (file not exist)
256 MED_FIELD_WRONLY_DRIVER<int> *aInvalidMedWrFieldDriver22_1 =
257 new MED_FIELD_WRONLY_DRIVER<int>(fileNotExist_wr, aField_1);
258 //Trying open not existing file
259 CPPUNIT_ASSERT_THROW(aInvalidMedWrFieldDriver22_1->open(), MEDEXCEPTION);
261 /////////////////////////////////////////////
262 // TEST2: Open file with empty file name //
263 /////////////////////////////////////////////
264 //Creation Invalid Write Only MedFieldDriver22 (empty file name)
265 MED_FIELD_WRONLY_DRIVER<int> *aInvalidMedWrFieldDriver22_2 =
266 new MED_FIELD_WRONLY_DRIVER<int>(emptyfilename, aField_1);
267 //Trying open not existing file and file with empty name
268 CPPUNIT_ASSERT_THROW(aInvalidMedWrFieldDriver22_2->open(), MEDEXCEPTION);
270 ///////////////////////////////////////////////////////
271 // TEST3: Writing field in empty file without mesh //
272 ///////////////////////////////////////////////////////
273 //Creation Invalid Write Only MedFieldDriver22
274 MED_FIELD_WRONLY_DRIVER<int> *aInvalidMedWrFieldDriver22_3 =
275 new MED_FIELD_WRONLY_DRIVER<int>(emptyfile_wr, aField);
277 aInvalidMedWrFieldDriver22_3->open();
278 //#ifdef ENABLE_FORCED_FAILURES
279 //CPPUNIT_ASSERT_THROW(aInvalidMedWrFieldDriver22_3->write(), MEDEXCEPTION);
280 CPPUNIT_ASSERT_NO_THROW(aInvalidMedWrFieldDriver22_3->write());
281 //(Bug) No Exception in this case
282 aInvalidMedWrFieldDriver22_3->close();
285 //////////////////////////////////////////////
286 // TEST4: Writing field in the other file //
287 //////////////////////////////////////////////
289 //Creation Invalid Write Only MedFieldDriver22
290 MED_FIELD_WRONLY_DRIVER<int> *aInvalidMedWrFieldDriver22_4 =
291 new MED_FIELD_WRONLY_DRIVER<int>(other_file_wr, aField);
292 aInvalidMedWrFieldDriver22_4->open();
293 //#ifdef ENABLE_FORCED_FAILURES
294 //CPPUNIT_ASSERT_THROW(aInvalidMedWrFieldDriver22_4->write(), MEDEXCEPTION);
295 CPPUNIT_ASSERT_NO_THROW(aInvalidMedWrFieldDriver22_4->write());
296 //(Bug) No Exception in this case
299 ////////////////////////
300 // TEST5: Main test //
301 ////////////////////////
303 //Creation correct Write Only MedFieldDriver22
304 MED_FIELD_WRONLY_DRIVER<int> *aMedWrFieldDriver22 =
305 new MED_FIELD_WRONLY_DRIVER<int>(filename_wr, aField);
308 CPPUNIT_ASSERT(aMedWrFieldDriver22);
310 //Trying write field before open file
311 //#ifdef ENABLE_FORCED_FAILURES
312 CPPUNIT_ASSERT_THROW(aMedWrFieldDriver22->write(),MEDEXCEPTION);
313 // (BUG) No exception in this case
319 aMedWrFieldDriver22->open();
321 catch(MEDEXCEPTION &e)
323 CPPUNIT_FAIL(e.what());
327 CPPUNIT_FAIL("Unknown exception");
330 //#ifdef ENABLE_FORCED_FAILURES
331 //Trying open file secondary.
332 //CPPUNIT_ASSERT_THROW(aMedWrFieldDriver22->open(), MEDEXCEPTION);
333 CPPUNIT_ASSERT_NO_THROW(aMedWrFieldDriver22->open());
334 // (BUG) No exception in this case
337 //Test setFieldName() and getFieldName
338 aField->setName(fieldname_cpy);
341 aMedWrFieldDriver22->setFieldName(fieldname_cpy);
343 catch(MEDEXCEPTION &e)
345 CPPUNIT_FAIL(e.what());
349 CPPUNIT_FAIL("Unknown exception");
351 CPPUNIT_ASSERT_EQUAL(fieldname_cpy, aMedWrFieldDriver22->getFieldName());
353 //Test write() method
356 aMedWrFieldDriver22->write();
358 catch(MEDEXCEPTION &e)
360 CPPUNIT_FAIL(e.what());
364 CPPUNIT_FAIL("Unknown exception");
367 //Test read() method for Write only part
368 CPPUNIT_ASSERT_THROW(aMedWrFieldDriver22->read(),MEDEXCEPTION);
370 //Test close() method
373 aMedWrFieldDriver22->close();
375 catch(MEDEXCEPTION &e)
377 CPPUNIT_FAIL(e.what());
381 CPPUNIT_FAIL("Unknown exception");
384 //Default constructor
385 MED_FIELD_WRONLY_DRIVER<int> aMedWrFieldDriver22Cpy_1;
387 //Test (void operator =) defined in GENDRIVER class
388 aMedWrFieldDriver22Cpy_1 = *aMedWrFieldDriver22;
390 //Test (bool operator ==) defined in GENDRIVER class
391 CPPUNIT_ASSERT(aMedWrFieldDriver22Cpy_1.GENDRIVER::operator==(*aMedWrFieldDriver22));
393 //Test copy constructor
394 MED_FIELD_WRONLY_DRIVER<int> aMedWrFieldDriver22Cpy_2 (*aMedWrFieldDriver22);
395 CPPUNIT_ASSERT_EQUAL(aMedWrFieldDriver22Cpy_2, *aMedWrFieldDriver22);
397 //Test (friend ostream & operator <<) defined GENDRIVER class in MEDMEM_GenDriver.hxx
398 ostringstream wostr1, wostr2;
399 wostr1 << aMedWrFieldDriver22Cpy_1;
400 wostr2 << aMedWrFieldDriver22Cpy_2;
401 CPPUNIT_ASSERT(wostr1.str() != "");
402 CPPUNIT_ASSERT(wostr1.str() == wostr2.str());
405 //--------------------------Test READ/WRITE part------------------------------//
407 /////////////////////////////////////
408 // TEST1: Open not existing file //
409 /////////////////////////////////////
411 //Creation Invalid Read/Write MedFieldDriver22 (file not exist)
412 MED_FIELD_RDWR_DRIVER<int> *aInvalidMedRdWrFieldDriver22_1 =
413 new MED_FIELD_RDWR_DRIVER<int>(fileNotExist_wr, aField_1);
414 //Trying open not existing file
415 CPPUNIT_ASSERT_THROW(aInvalidMedRdWrFieldDriver22_1->open(), MEDEXCEPTION);
417 /////////////////////////////////////////////
418 // TEST2: Open file with empty file name //
419 /////////////////////////////////////////////
420 //Creation Invalid Read/Write MedFieldDriver22 (empty file name)
421 MED_FIELD_RDWR_DRIVER<int> *aInvalidMedRdWrFieldDriver22_2 =
422 new MED_FIELD_RDWR_DRIVER<int>(emptyfilename, aField_1);
423 //Trying open not existing file and file with empty name
424 CPPUNIT_ASSERT_THROW(aInvalidMedRdWrFieldDriver22_2->open(), MEDEXCEPTION);
426 /////////////////////////////////////////////////////
427 // TEST3: Reading field from file without fields //
428 /////////////////////////////////////////////////////
429 MED_FIELD_RDWR_DRIVER<int> *aInvalidMedRdWrFieldDriver22_3 =
430 new MED_FIELD_RDWR_DRIVER<int>(filenameWithOutFileds_rdwr, aField_1);
431 aInvalidMedRdWrFieldDriver22_3->open();
432 aInvalidMedRdWrFieldDriver22_3->setFieldName(fieldname);
433 //Trying read field from file
434 CPPUNIT_ASSERT_THROW(aInvalidMedRdWrFieldDriver22_3->read(), MEDEXCEPTION);
435 aInvalidMedRdWrFieldDriver22_3->close();
437 ///////////////////////////////////////////////////////
438 // TEST4: Writing field in empty file without mesh //
439 ///////////////////////////////////////////////////////
441 //Creation Invalid Read/Write MedFieldDriver22
442 MED_FIELD_RDWR_DRIVER<int> *aInvalidMedRdWrFieldDriver22_4 =
443 new MED_FIELD_RDWR_DRIVER<int>(emptyfile_rdwr, aField);
445 aInvalidMedRdWrFieldDriver22_4->open();
446 //#ifdef ENABLE_FORCED_FAILURES
447 // CPPUNIT_ASSERT_THROW(aInvalidMedRdWrFieldDriver22_4->write(), MEDEXCEPTION);
448 // (BUG) No exception in this case
451 //////////////////////////////////////////////
452 // TEST6: Writing field in the other file //
453 //////////////////////////////////////////////
455 //Creation Invalid Read/Write MedFieldDriver22
456 MED_FIELD_RDWR_DRIVER<int> *aInvalidMedRdWrFieldDriver22_5 =
457 new MED_FIELD_RDWR_DRIVER<int>(other_file_wr, aField);
458 aInvalidMedRdWrFieldDriver22_5->open();
459 //#ifdef ENABLE_FORCED_FAILURES
460 //CPPUNIT_ASSERT_THROW(aInvalidMedRdWrFieldDriver22_5->write(), MEDEXCEPTION);
461 // (BUG) No exception in this case
464 ////////////////////////
465 // TEST7: Main test //
466 ////////////////////////
468 //Creation correct Read/Write MedFieldDriver22
469 MED_FIELD_RDWR_DRIVER<double> *aMedRdWrFieldDriver22 =
470 new MED_FIELD_RDWR_DRIVER<double>(filename_rdwr, aField_2);
473 CPPUNIT_ASSERT(aMedRdWrFieldDriver22);
475 //Trying read/write field before open file
476 CPPUNIT_ASSERT_THROW(aMedRdWrFieldDriver22->read(),MEDEXCEPTION);
477 CPPUNIT_ASSERT_THROW(aMedRdWrFieldDriver22->write(),MEDEXCEPTION);
482 aMedRdWrFieldDriver22->open();
484 catch(MEDEXCEPTION &e)
486 CPPUNIT_FAIL(e.what());
490 CPPUNIT_FAIL("Unknown exception");
493 //#ifdef ENABLE_FORCED_FAILURES
494 //Trying open file secondary.
495 //CPPUNIT_ASSERT_THROW(aMedRdWrFieldDriver22->open(), MEDEXCEPTION);
496 CPPUNIT_ASSERT_NO_THROW(aMedRdWrFieldDriver22->open());
497 // (BUG) No exception in this case
500 //Trying read field from file if field name is empty
501 CPPUNIT_ASSERT_THROW(aMedRdFieldDriver22->read(), MEDEXCEPTION);
503 //Test setFieldName() and getFieldName
506 aMedRdWrFieldDriver22->setFieldName(fileldnotexist);
508 catch(MEDEXCEPTION &e)
510 CPPUNIT_FAIL(e.what());
514 CPPUNIT_FAIL("Unknown exception");
516 CPPUNIT_ASSERT_EQUAL(fileldnotexist, aMedRdWrFieldDriver22->getFieldName());
518 //Trying read not existing field from file
519 CPPUNIT_ASSERT_THROW(aMedRdWrFieldDriver22->read(), MEDEXCEPTION);
522 aMedRdWrFieldDriver22->setFieldName(fieldnameDouble);
525 aMedRdWrFieldDriver22->read();
527 catch(MEDEXCEPTION &e)
529 CPPUNIT_FAIL(e.what());
533 CPPUNIT_FAIL("Unknown exception");
536 //Trying write field in the file with empty name
537 aField_2->setName(emptyfilename);
538 aMedRdWrFieldDriver22->setFieldName(emptyfilename);
539 CPPUNIT_ASSERT_THROW(aMedRdWrFieldDriver22->write(), MEDEXCEPTION);
541 //Test write() method
542 aField_2->setName(fieldnameDouble_cpy);
543 aMedRdWrFieldDriver22->setFieldName(fieldnameDouble_cpy);
546 aMedRdWrFieldDriver22->write();
548 catch(MEDEXCEPTION &e)
550 CPPUNIT_FAIL(e.what());
554 CPPUNIT_FAIL("Unknown exception");
557 //Test close() method
560 aMedRdWrFieldDriver22->close();
562 catch(MEDEXCEPTION &e)
564 CPPUNIT_FAIL(e.what());
568 CPPUNIT_FAIL("Unknown exception");
571 //Default constructor
572 MED_FIELD_RDWR_DRIVER<double> aMedRdWrFieldDriver22Cpy_1;
574 //Test (void operator =) defined in GENDRIVER class
575 aMedRdWrFieldDriver22Cpy_1 = *aMedRdWrFieldDriver22;
577 //Test (bool operator ==) defined in GENDRIVER class
578 CPPUNIT_ASSERT(aMedRdWrFieldDriver22Cpy_1.GENDRIVER::operator==(*aMedRdWrFieldDriver22));
580 //Test copy constructor
581 MED_FIELD_RDWR_DRIVER<double> aMedRdWrFieldDriver22Cpy_2 (*aMedRdWrFieldDriver22);
582 CPPUNIT_ASSERT_EQUAL(aMedRdWrFieldDriver22Cpy_2, *aMedRdWrFieldDriver22);
584 //Test (friend ostream & operator <<) defined GENDRIVER class in MEDMEM_GenDriver.hxx
585 ostringstream rwostr1, rwostr2;
586 rwostr1 << aMedRdWrFieldDriver22Cpy_1;
587 rwostr2 << aMedRdWrFieldDriver22Cpy_2;
588 CPPUNIT_ASSERT(rwostr1.str() != "");
589 CPPUNIT_ASSERT(rwostr1.str() == rwostr2.str());
591 ///////////////////////////////////////////////////////////////////////////////////
592 // Test for the issue 0021211. Check that a support of partial field
593 // (group or family) is restored at reading
595 string filenameRDWR = makeTmpFile("filenameRDWR.med");
596 aRemover.Register(filenameRDWR);
598 MESH* mesh = new MESH(MED_DRIVER, filenameWithOutFileds, "Mesh 1");
599 mesh->setName("UniqueMeshName");
600 //mesh->setMeshDimension(3); need to make mdump work on 2D mesh in 3D space
602 FAMILY* family = const_cast<FAMILY*>( mesh->getFamily( MED_EDGE, 1 ));
603 family->setName( healName( family->getName() ));
605 // mesh is 2D, make a field on the 1st FAMILY of segments
606 FIELD<double>* field = new FIELD<double>( family, /*NumberOfComponents=*/1);
607 field->setName( "FieldOnFamily");
608 field->setComponentsNames(&fileldnotexist);
609 field->setComponentsDescriptions(&fileldnotexist);
610 field->setMEDComponentsUnits(&fileldnotexist);
611 double* vals = const_cast<double*>( field->getValue() );
612 const int nbVals = family->getNumberOfElements( MED_ALL_ELEMENTS );
613 for ( int i = 0; i < nbVals; ++i ) vals[i] = i;
615 // store the mesh and the field in a file
616 int drv = mesh->addDriver( MED_DRIVER, filenameRDWR, mesh->getName() );
617 CPPUNIT_ASSERT_NO_THROW( mesh->write(drv) );
618 drv = field->addDriver( MED_DRIVER, filenameRDWR, field->getName() );
619 CPPUNIT_ASSERT_NO_THROW( field->write(drv) );
621 // Check 1) read the field back and check it's support
622 string familyName = family->getName();
623 const SUPPORT* supOnAll = mesh->getSupportOnAll( family->getEntity() );
624 FIELD<double>* field2 =
625 new FIELD<double>( supOnAll, MED_DRIVER, filenameRDWR, field->getName());
626 const SUPPORT* support2 = field2->getSupport();
627 CPPUNIT_ASSERT( support2 == family );
628 CPPUNIT_ASSERT_EQUAL( familyName, support2->getName() ); // name must not change
630 // Check 2) if a support with name corresponding to a profile is not found,
631 // the new SUPPORT must not have name "SupportOnAll_MED_entity"
632 ((FAMILY*)family)->setName("setName");
633 FIELD<double>* field3 =
634 new FIELD<double>( supOnAll, MED_DRIVER, filenameRDWR, field->getName());
635 const SUPPORT* support3 = field3->getSupport();
636 CPPUNIT_ASSERT( support3 != family );
637 CPPUNIT_ASSERT( support3->getName() != supOnAll->getName());
640 field->removeReference();
641 field2->removeReference();
642 field3->removeReference();
643 mesh->removeReference();
645 // End Test for the issue 0021211
646 ///////////////////////////////////////////////////////////////////////////////////
649 aField->removeReference();
650 aField_1->removeReference();
651 aField_2->removeReference();
653 delete aInvalidMedRdFieldDriver22_1;
654 delete aInvalidMedRdFieldDriver22_2;
655 delete aInvalidMedRdFieldDriver22_3;
656 delete aMedRdFieldDriver22;
658 delete aInvalidMedWrFieldDriver22_1;
659 delete aInvalidMedWrFieldDriver22_2;
660 delete aInvalidMedWrFieldDriver22_3;
661 delete aInvalidMedWrFieldDriver22_4;
662 delete aMedWrFieldDriver22;
664 delete aInvalidMedRdWrFieldDriver22_1;
665 delete aInvalidMedRdWrFieldDriver22_2;
666 delete aInvalidMedRdWrFieldDriver22_3;
667 delete aInvalidMedRdWrFieldDriver22_4;
668 delete aInvalidMedRdWrFieldDriver22_5;
669 delete aMedRdWrFieldDriver22;