X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDRO_tests%2Ftest_HYDROData_ShapeFile.cxx;h=752811948dccf863a0a47f3764804645e97f23c3;hb=58bb6b7459bebeeb089c9ed486c4683a8bae7288;hp=0edbb4578fdeda846948664a41c2c8aab231d468;hpb=6157337f0cd2502aa22545265ebbc797d631c887;p=modules%2Fhydro.git diff --git a/src/HYDRO_tests/test_HYDROData_ShapeFile.cxx b/src/HYDRO_tests/test_HYDROData_ShapeFile.cxx index 0edbb457..75281194 100644 --- a/src/HYDRO_tests/test_HYDROData_ShapeFile.cxx +++ b/src/HYDRO_tests/test_HYDROData_ShapeFile.cxx @@ -21,7 +21,30 @@ #include #include -const QString REF_PATH = qgetenv( "HYDRO_REFERENCE_DATA" ); +const QString REF_PATH = qgetenv( "HYDRO_ROOT_DIR" ) + "/bin/salome/test"; + +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() { @@ -36,7 +59,7 @@ void test_HYDROData_ShapeFile::test_NbFieldsDbf() { QString aDBFPath = REF_PATH + "/cyprus_natural.dbf"; HYDROData_ShapeFile aSHPFile; - aSHPFile.DBF_OpenDBF(aDBFPath); + CPPUNIT_ASSERT_EQUAL(true, aSHPFile.DBF_OpenDBF(aDBFPath)); int NbF = aSHPFile.DBF_GetNbFields(); CPPUNIT_ASSERT_EQUAL( 2, NbF ); aSHPFile.DBF_CloseDBF(); @@ -46,7 +69,7 @@ void test_HYDROData_ShapeFile::test_FieldListDbf() { QString aDBFPath = REF_PATH + "/cyprus_natural.dbf"; HYDROData_ShapeFile aSHPFile; - aSHPFile.DBF_OpenDBF(aDBFPath); + CPPUNIT_ASSERT_EQUAL(true, aSHPFile.DBF_OpenDBF(aDBFPath)); QStringList FL = aSHPFile.DBF_GetFieldList(); CPPUNIT_ASSERT_EQUAL(true, "NAME" == FL[0]); @@ -58,7 +81,7 @@ void test_HYDROData_ShapeFile::test_FieldTypeListDbf() { QString aDBFPath = REF_PATH + "/cyprus_natural.dbf"; HYDROData_ShapeFile aSHPFile; - aSHPFile.DBF_OpenDBF(aDBFPath); + CPPUNIT_ASSERT_EQUAL(true, aSHPFile.DBF_OpenDBF(aDBFPath)); std::vector FTVect; aSHPFile.DBF_GetFieldTypeList(FTVect); @@ -67,5 +90,154 @@ void test_HYDROData_ShapeFile::test_FieldTypeListDbf() aSHPFile.DBF_CloseDBF(); } +void test_HYDROData_ShapeFile::test_NbRecordsDbf() +{ + QString aDBFPath = REF_PATH + "/cyprus_natural.dbf"; + HYDROData_ShapeFile aSHPFile; + CPPUNIT_ASSERT_EQUAL(true, aSHPFile.DBF_OpenDBF(aDBFPath)); + int NbR = aSHPFile.DBF_GetNbRecords(); + CPPUNIT_ASSERT_EQUAL( 268, NbR ); + aSHPFile.DBF_CloseDBF(); +} + +void test_HYDROData_ShapeFile::test_GetAttrListIndex() +{ + { //cyprus_natural + QString aDBFPath = REF_PATH + "/cyprus_natural.dbf"; + HYDROData_ShapeFile aSHPFile; + CPPUNIT_ASSERT_EQUAL(true, aSHPFile.DBF_OpenDBF(aDBFPath)); + std::vector theAttrV; + aSHPFile.DBF_GetAttributeList(0, theAttrV ); //get all records take from the first field + + //Check Values + + //Non-null attr + CPPUNIT_ASSERT_EQUAL( 268, (int)theAttrV.size() ); + CPPUNIT_ASSERT_EQUAL( true, std::string("Ovgos Dam") == theAttrV[22].myRawValue); + CPPUNIT_ASSERT_EQUAL( true, QString("Ovgos Dam") == theAttrV[22].myStrVal); + CPPUNIT_ASSERT_EQUAL( false, theAttrV[22].myIsNull); + CPPUNIT_ASSERT_EQUAL( HYDROData_ShapeFile::DBF_FieldType_String, theAttrV[22].myFieldType); + + //Null attr + CPPUNIT_ASSERT_EQUAL( true, theAttrV[35].myIsNull); + CPPUNIT_ASSERT_EQUAL( true, theAttrV[35].myRawValue.empty()); + CPPUNIT_ASSERT_EQUAL( HYDROData_ShapeFile::DBF_FieldType_String, theAttrV[35].myFieldType); + + theAttrV.clear(); + aSHPFile.DBF_GetAttributeList(1, theAttrV ); //second field + CPPUNIT_ASSERT_EQUAL( 268, (int)theAttrV.size() ); + CPPUNIT_ASSERT_EQUAL( true, std::string("water") == theAttrV[3].myRawValue); + CPPUNIT_ASSERT_EQUAL( true, QString("water") == theAttrV[3].myStrVal); + CPPUNIT_ASSERT_EQUAL( false, theAttrV[3].myIsNull); + CPPUNIT_ASSERT_EQUAL( HYDROData_ShapeFile::DBF_FieldType_String, theAttrV[3].myFieldType); + + aSHPFile.DBF_CloseDBF(); + } + { //CLC06 + QString aDBFPath = REF_PATH + "/CLC06.dbf"; + HYDROData_ShapeFile aSHPFile; + CPPUNIT_ASSERT_EQUAL (true, aSHPFile.DBF_OpenDBF(aDBFPath)); + std::vector theAttrV; + + aSHPFile.DBF_GetAttributeList(0, theAttrV ); + CPPUNIT_ASSERT_EQUAL( 3269, (int)theAttrV.size() ); + CPPUNIT_ASSERT_EQUAL( true, std::string("FR-184045") == theAttrV[2].myRawValue); + CPPUNIT_ASSERT_EQUAL( true, QString("FR-184045") == theAttrV[2].myStrVal); + CPPUNIT_ASSERT_EQUAL( false, theAttrV[2].myIsNull); + CPPUNIT_ASSERT_EQUAL( HYDROData_ShapeFile::DBF_FieldType_String, theAttrV[2].myFieldType); + // + theAttrV.clear(); + 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( 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_PATH + "/temp_dbf1.dbf"; + QString refFN = REF_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_PATH + "/temp_dbf2.dbf"; + QString refFN = REF_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_PATH + "/temp_dbf3.dbf"; + QString refFN = REF_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())); + } + +}