summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Miika Turkia <miika.turkia@gmail.com>2015-07-28 07:36:30 +0300
committerGravatar Dirk Hohndel <dirk@hohndel.org>2015-07-28 08:47:05 -0700
commit96b612941efdd8b65cc954217d80fb6d3724cabb (patch)
tree158dcf86b8ebf08c4b5f7081612bb533153aabe2
parentbd5fbce64ba53f7881495ea379d382959e51f778 (diff)
downloadsubsurface-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.cpp126
-rw-r--r--tests/testparse.h2
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