X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDRO_tests%2Ftest_HYDROData_ShapeFile.cxx;h=b4007ceaab6b03cbaab3386bb72d37b7f12274aa;hb=ac056ee3c8e228f5b79eca9bad0fec624c595b1b;hp=035d69144e9866b89f469abae4fabeff1e892ec4;hpb=fdfbecc502e984321f7e660d64e6031df35e26c2;p=modules%2Fhydro.git diff --git a/src/HYDRO_tests/test_HYDROData_ShapeFile.cxx b/src/HYDRO_tests/test_HYDROData_ShapeFile.cxx index 035d6914..b4007cea 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/HYDRO"; + +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() { @@ -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 @@ -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_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())); + } + +} +