X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDRO_tests%2Ftest_HYDROData_ShapeFile.cxx;h=de1a1289958d5250b2ea130596f7313b6026b6cf;hb=3bece499e83cc9ca95536228c7f6740030e9d5d8;hp=035d69144e9866b89f469abae4fabeff1e892ec4;hpb=aaf4ecf52eae47da4da3cfa523672526787018f8;p=modules%2Fhydro.git diff --git a/src/HYDRO_tests/test_HYDROData_ShapeFile.cxx b/src/HYDRO_tests/test_HYDROData_ShapeFile.cxx index 035d6914..de1a1289 100644 --- a/src/HYDRO_tests/test_HYDROData_ShapeFile.cxx +++ b/src/HYDRO_tests/test_HYDROData_ShapeFile.cxx @@ -21,11 +21,34 @@ #include #include -const QString REF_PATH = qgetenv( "HYDRO_REFERENCE_DATA" ); +extern QString REF_DATA_PATH; + +bool test_HYDROData_ShapeFile::compare_two_files(const QString& File1, const QString& File2) +{ + FILE *fp1, *fp2; + fp1 = fopen(File1.toStdString().c_str(), "r"); + fp2 = fopen(File2.toStdString().c_str(), "r"); + CPPUNIT_ASSERT(fp1); + CPPUNIT_ASSERT(fp2); + char ch1, ch2; + while (((ch1 = fgetc(fp1)) != EOF) &&((ch2 = fgetc(fp2)) != EOF)) + { + if (!ch1 == ch2) + { + fclose(fp1); + fclose(fp2); + return false; + } + } + + fclose(fp1); + fclose(fp2); + return true; +} void test_HYDROData_ShapeFile::test_openDbf() { - QString aDBFPath = REF_PATH + "/cyprus_natural.dbf"; + QString aDBFPath = REF_DATA_PATH + "/cyprus_natural.dbf"; HYDROData_ShapeFile aSHPFile; bool Stat = aSHPFile.DBF_OpenDBF(aDBFPath); CPPUNIT_ASSERT_EQUAL( true, Stat ); @@ -34,7 +57,7 @@ void test_HYDROData_ShapeFile::test_openDbf() void test_HYDROData_ShapeFile::test_NbFieldsDbf() { - QString aDBFPath = REF_PATH + "/cyprus_natural.dbf"; + QString aDBFPath = REF_DATA_PATH + "/cyprus_natural.dbf"; HYDROData_ShapeFile aSHPFile; CPPUNIT_ASSERT_EQUAL(true, aSHPFile.DBF_OpenDBF(aDBFPath)); int NbF = aSHPFile.DBF_GetNbFields(); @@ -44,7 +67,7 @@ void test_HYDROData_ShapeFile::test_NbFieldsDbf() void test_HYDROData_ShapeFile::test_FieldListDbf() { - QString aDBFPath = REF_PATH + "/cyprus_natural.dbf"; + QString aDBFPath = REF_DATA_PATH + "/cyprus_natural.dbf"; HYDROData_ShapeFile aSHPFile; CPPUNIT_ASSERT_EQUAL(true, aSHPFile.DBF_OpenDBF(aDBFPath)); @@ -56,7 +79,7 @@ void test_HYDROData_ShapeFile::test_FieldListDbf() void test_HYDROData_ShapeFile::test_FieldTypeListDbf() { - QString aDBFPath = REF_PATH + "/cyprus_natural.dbf"; + QString aDBFPath = REF_DATA_PATH + "/cyprus_natural.dbf"; HYDROData_ShapeFile aSHPFile; CPPUNIT_ASSERT_EQUAL(true, aSHPFile.DBF_OpenDBF(aDBFPath)); @@ -69,7 +92,7 @@ void test_HYDROData_ShapeFile::test_FieldTypeListDbf() void test_HYDROData_ShapeFile::test_NbRecordsDbf() { - QString aDBFPath = REF_PATH + "/cyprus_natural.dbf"; + QString aDBFPath = REF_DATA_PATH + "/cyprus_natural.dbf"; HYDROData_ShapeFile aSHPFile; CPPUNIT_ASSERT_EQUAL(true, aSHPFile.DBF_OpenDBF(aDBFPath)); int NbR = aSHPFile.DBF_GetNbRecords(); @@ -80,7 +103,7 @@ void test_HYDROData_ShapeFile::test_NbRecordsDbf() void test_HYDROData_ShapeFile::test_GetAttrListIndex() { { //cyprus_natural - QString aDBFPath = REF_PATH + "/cyprus_natural.dbf"; + QString aDBFPath = REF_DATA_PATH + "/cyprus_natural.dbf"; HYDROData_ShapeFile aSHPFile; CPPUNIT_ASSERT_EQUAL(true, aSHPFile.DBF_OpenDBF(aDBFPath)); std::vector theAttrV; @@ -98,7 +121,7 @@ void test_HYDROData_ShapeFile::test_GetAttrListIndex() //Null attr CPPUNIT_ASSERT_EQUAL( true, theAttrV[35].myIsNull); CPPUNIT_ASSERT_EQUAL( true, theAttrV[35].myRawValue.empty()); - CPPUNIT_ASSERT_EQUAL( HYDROData_ShapeFile::DBF_FieldType_None, theAttrV[35].myFieldType); + CPPUNIT_ASSERT_EQUAL( HYDROData_ShapeFile::DBF_FieldType_String, theAttrV[35].myFieldType); theAttrV.clear(); aSHPFile.DBF_GetAttributeList(1, theAttrV ); //second field @@ -111,7 +134,7 @@ void test_HYDROData_ShapeFile::test_GetAttrListIndex() aSHPFile.DBF_CloseDBF(); } { //CLC06 - QString aDBFPath = REF_PATH + "/CLC06.dbf"; + QString aDBFPath = REF_DATA_PATH + "/CLC06.dbf"; HYDROData_ShapeFile aSHPFile; CPPUNIT_ASSERT_EQUAL (true, aSHPFile.DBF_OpenDBF(aDBFPath)); std::vector theAttrV; @@ -127,10 +150,94 @@ void test_HYDROData_ShapeFile::test_GetAttrListIndex() aSHPFile.DBF_GetAttributeList(2, theAttrV ); CPPUNIT_ASSERT_EQUAL( 3269, (int)theAttrV.size() ); CPPUNIT_ASSERT_EQUAL( true, std::string("6621.1654324936000000000000000000") == theAttrV[2].myRawValue); - CPPUNIT_ASSERT_EQUAL( true, QString("6621.1654324935998375") == theAttrV[2].myStrVal); + CPPUNIT_ASSERT_EQUAL( 6621.1654324935998375, theAttrV[2].myDoubleVal); CPPUNIT_ASSERT_EQUAL( false, theAttrV[2].myIsNull); CPPUNIT_ASSERT_EQUAL( HYDROData_ShapeFile::DBF_FieldType_Double, theAttrV[2].myFieldType); aSHPFile.DBF_CloseDBF(); } } + + +void test_HYDROData_ShapeFile::test_DbfWrite() +{ + { + HYDROData_ShapeFile aSHPFile; + QString tempFN = REF_DATA_PATH + "/temp_dbf1.dbf"; + QString refFN = REF_DATA_PATH + "/ref_dbf1.dbf"; + std::vector theAttrV; + HYDROData_ShapeFile::DBF_AttrValue theAttr1; + theAttr1.myFieldType = HYDROData_ShapeFile::DBF_FieldType_String; + theAttr1.myIsNull = false; + theAttr1.myRawValue = "test_value1"; + theAttr1.myStrVal = "test_value1"; + theAttrV.push_back(theAttr1); + HYDROData_ShapeFile::DBF_AttrValue theAttr2; + theAttr2.myFieldType = HYDROData_ShapeFile::DBF_FieldType_String; + theAttr2.myIsNull = false; + theAttr2.myRawValue = "test_value2"; + theAttr2.myStrVal = "test_value2"; + theAttrV.push_back(theAttr2); + // + CPPUNIT_ASSERT(aSHPFile.DBF_WriteFieldAndValues(tempFN, "test_field_name", HYDROData_ShapeFile::DBF_FieldType_String, theAttrV, true)); + + CPPUNIT_ASSERT(compare_two_files(tempFN, refFN)); + CPPUNIT_ASSERT_EQUAL( 0, remove (tempFN.toStdString().c_str())); + } + + { + HYDROData_ShapeFile aSHPFile; + QString tempFN = REF_DATA_PATH + "/temp_dbf2.dbf"; + QString refFN = REF_DATA_PATH + "/ref_dbf2.dbf"; + std::vector theAttrV; + HYDROData_ShapeFile::DBF_AttrValue theAttr1; + theAttr1.myFieldType = HYDROData_ShapeFile::DBF_FieldType_String; + theAttr1.myIsNull = false; + theAttr1.myRawValue = "test_value1"; + theAttr1.myStrVal = "test_value1"; + theAttrV.push_back(theAttr1); + + HYDROData_ShapeFile::DBF_AttrValue theAttr2; + theAttr2.myIsNull = false; + theAttr2.myRawValue = "test_value_K"; + theAttr2.myStrVal = "test_value_K"; + theAttr2.myFieldType = HYDROData_ShapeFile::DBF_FieldType_String; + for (int ii = 0; ii < 100; ii++) + theAttrV.push_back(theAttr2); + + HYDROData_ShapeFile::DBF_AttrValue theAttr3; + theAttr3.myIsNull = true; + theAttr3.myFieldType = HYDROData_ShapeFile::DBF_FieldType_String; + for (int ii = 0; ii < 100; ii++) + theAttrV.push_back(theAttr3); + // + CPPUNIT_ASSERT(aSHPFile.DBF_WriteFieldAndValues(tempFN, "test_field_name", HYDROData_ShapeFile::DBF_FieldType_String, theAttrV, true)); + + CPPUNIT_ASSERT(compare_two_files(tempFN, refFN)); + CPPUNIT_ASSERT_EQUAL( 0, remove (tempFN.toStdString().c_str())); + } + + { + HYDROData_ShapeFile aSHPFile; + QString tempFN = REF_DATA_PATH + "/temp_dbf3.dbf"; + QString refFN = REF_DATA_PATH + "/ref_dbf3.dbf"; + std::vector theAttrV; + HYDROData_ShapeFile::DBF_AttrValue theAttr1; + theAttr1.myFieldType = HYDROData_ShapeFile::DBF_FieldType_Integer; + theAttr1.myIsNull = false; + + for (int ii = 0; ii < 100; ii++) + { + theAttr1.myIntVal = ii; + theAttrV.push_back(theAttr1); + } + + // + CPPUNIT_ASSERT(aSHPFile.DBF_WriteFieldAndValues(tempFN, "test_field_name", HYDROData_ShapeFile::DBF_FieldType_Integer, theAttrV, false)); + + CPPUNIT_ASSERT(compare_two_files(tempFN, refFN)); + CPPUNIT_ASSERT_EQUAL( 0, remove (tempFN.toStdString().c_str())); + } + +} +