+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<HYDROData_ShapeFile::DBF_AttrValue> 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<HYDROData_ShapeFile::DBF_AttrValue> 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<HYDROData_ShapeFile::DBF_AttrValue> 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<HYDROData_ShapeFile::DBF_AttrValue> 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);