diff options
author | Miika Turkia <miika.turkia@gmail.com> | 2015-07-28 07:36:30 +0300 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2015-07-28 08:47:05 -0700 |
commit | 96b612941efdd8b65cc954217d80fb6d3724cabb (patch) | |
tree | 158dcf86b8ebf08c4b5f7081612bb533153aabe2 | |
parent | bd5fbce64ba53f7881495ea379d382959e51f778 (diff) | |
download | subsurface-96b612941efdd8b65cc954217d80fb6d3724cabb.tar.gz |
Test case: Seabear new format
This validates Seabear import from H3 and T1 dive computers that use new
CSV format to store the logs. The fields wary depending on the dive
mode, thus we need to parse the field configuration during import.
Signed-off-by: Miika Turkia <miika.turkia@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r-- | tests/testparse.cpp | 126 | ||||
-rw-r--r-- | tests/testparse.h | 2 |
2 files changed, 128 insertions, 0 deletions
diff --git a/tests/testparse.cpp b/tests/testparse.cpp index 21c9facf4..9288baf63 100644 --- a/tests/testparse.cpp +++ b/tests/testparse.cpp @@ -132,4 +132,130 @@ void TestParse::testParseCompareHUDCOutput() clear_dive_file_data(); } +void TestParse::testParseNewFormat() +{ + struct dive *dive; + QDir dir; + QStringList filter; + QString firstLine; + QStringList files; + + /* + * Set the directory location and file filter for H3 CSV files. + */ + + dir = QString::fromLatin1(SUBSURFACE_SOURCE "/dives"); + filter << "TestDiveSeabearH3*.csv"; + filter << "TestDiveSeabearT1*.csv"; + files = dir.entryList(filter, QDir::Files); + + /* + * Parse all files found matching the filter. + */ + + for (int i = 0; i < files.size(); ++i) { + QString delta; + QStringList currColumns; + QStringList headers; + QString file = QString::fromLatin1(SUBSURFACE_SOURCE "/dives/").append(files.at(i)); + QFile f(file); + + /* + * Parse the sample interval if available from CSV + * header. + */ + + f.open(QFile::ReadOnly); + while ((firstLine = f.readLine()).length() > 3 && !f.atEnd()) { + if (firstLine.contains("//Log interval: ")) + delta = firstLine.remove(QString::fromLatin1("//Log interval: ")).trimmed().remove(QString::fromLatin1(" s")); + } + firstLine = f.readLine().trimmed(); + + /* + * Parse the field configuration from the CSV header. + */ + + currColumns = firstLine.split(';'); + Q_FOREACH (QString columnText, currColumns) { + if (columnText == "Time") { + headers.append("Sample time"); + } else if (columnText == "Depth") { + headers.append("Sample depth"); + } else if (columnText == "Temperature") { + headers.append("Sample temperature"); + } else if (columnText == "NDT") { + headers.append("Sample NDL"); + } else if (columnText == "TTS") { + headers.append("Sample TTS"); + } else if (columnText == "pO2_1") { + headers.append("Sample sensor1 pO₂"); + } else if (columnText == "pO2_2") { + headers.append("Sample sensor2 pO₂"); + } else if (columnText == "pO2_3") { + headers.append("Sample sensor3 pO₂"); + } else if (columnText == "Ceiling") { + headers.append("Sample ceiling"); + } else if (columnText == "Tank pressure") { + headers.append("Sample pressure"); + } else { + // We do not know about this value + qDebug() << "Seabear import found an un-handled field: " << columnText; + headers.append(""); + } + f.close(); + } + + /* + * Validate the parsing routine returns success. + */ + + QCOMPARE(parse_seabear_csv_file(file.toUtf8().data(), + headers.indexOf(tr("Sample time")), + headers.indexOf(tr("Sample depth")), + headers.indexOf(tr("Sample temperature")), + headers.indexOf(tr("Sample pO₂")), + headers.indexOf(tr("Sample sensor1 pO₂")), + headers.indexOf(tr("Sample sensor2 pO₂")), + headers.indexOf(tr("Sample sensor3 pO₂")), + headers.indexOf(tr("Sample CNS")), + headers.indexOf(tr("Sample NDL")), + headers.indexOf(tr("Sample TTS")), + headers.indexOf(tr("Sample stopdepth")), + headers.indexOf(tr("Sample pressure")), + 2, + "csv", + 0, + delta.toUtf8().data(), + "" + ), 0); + + /* + * Set artificial but static dive times so the result + * can be compared to saved one. + */ + + dive = dive_table.dives[dive_table.nr - 1]; + dive->when = 1255152761 + 7200 * i; + dive->dc.when = 1255152761 + 7200 * i; + } + + fprintf(stderr, "number of dives %d \n", dive_table.nr); +} + +void TestParse::testParseCompareNewFormatOutput() +{ + QCOMPARE(save_dives("./testsbnewout.ssrf"), 0); + QFile org(SUBSURFACE_SOURCE "/dives/TestDiveSeabearNewFormat.xml"); + org.open(QFile::ReadOnly); + QFile out("./testsbnewout.ssrf"); + out.open(QFile::ReadOnly); + QTextStream orgS(&org); + QTextStream outS(&out); + QString readin = orgS.readAll(); + QString written = outS.readAll(); + QCOMPARE(readin, written); + clear_dive_file_data(); +} + QTEST_MAIN(TestParse) diff --git a/tests/testparse.h b/tests/testparse.h index ae6131090..53cc07afb 100644 --- a/tests/testparse.h +++ b/tests/testparse.h @@ -15,6 +15,8 @@ private slots: void testParseCompareDM4Output(); void testParseHUDC(); void testParseCompareHUDCOutput(); + void testParseNewFormat(); + void testParseCompareNewFormatOutput(); }; #endif |