Some simple test for file parsing

With no V2 question shown
- parsing fails when a V2 file is loaded
- parsing succeeds when a V3 file is loaded
- import of CSV file succeeds

With V2 question shown
- parsing succeeds when a V2 file is loaded

Finally compare the output of reading in the various files with reference
output included in the sources.

My guess is that this test might be a bit fragile, but hey, it's a start.

(reminder: the tests only get built when using cmake)

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2015-03-10 14:27:14 -07:00
parent f4f791ffbd
commit b47d8d5992
6 changed files with 7610 additions and 0 deletions

View file

@ -152,6 +152,7 @@ SET(SUBSURFACE_CORE_LIB_SRCS
devicedetails.cpp
configuredivecomputer.cpp
configuredivecomputerthreads.cpp
divesitehelpers.cpp
)
#the interface, in C++
@ -265,6 +266,9 @@ MACRO(test NAME FILE)
ENDMACRO()
ENABLE_TESTING()
ADD_DEFINITIONS(-DSUBSURFACE_SOURCE="${CMAKE_SOURCE_DIR}")
ADD_DEFINITIONS(-g)
test(TestUnitConversion testunitconversion.cpp)
test(TestProfile testprofile.cpp)
test(TestGpsCoords testgpscoords.cpp)
test(TestParse testparse.cpp)

5022
dives/test40-42.xml Normal file

File diff suppressed because it is too large Load diff

6
dives/test41.csv Normal file
View file

@ -0,0 +1,6 @@
#Nr date time duration maxdepth avgdepth
1 10/1/13 10:34 45:00 18 9
2 10/1/13 12:13 41:00 16.2 8.2
3 10/1/14 10:02 48:00 13.3 9.1
4 10/1/14 14:19 34:00 24.9 12.1
1 #Nr date time duration maxdepth avgdepth
2 1 10/1/13 10:34 45:00 18 9
3 2 10/1/13 12:13 41:00 16.2 8.2
4 3 10/1/14 10:02 48:00 13.3 9.1
5 4 10/1/14 14:19 34:00 24.9 12.1

2505
dives/test42.xml Normal file

File diff suppressed because it is too large Load diff

57
tests/testparse.cpp Normal file
View file

@ -0,0 +1,57 @@
#include "testparse.h"
#include "dive.h"
#include <QTextStream>
void TestParse::testParseCSV()
{
// some basic file parsing tests
//
// even with the V2 question not shown, CSV import should work
v2_question_shown = false;
verbose = 1;
QCOMPARE(parse_manual_file(SUBSURFACE_SOURCE "/dives/test41.csv",
0, // tab separator
0, // metric units
1, // mm/dd/yyyy
2, // min:sec
0, 1, 2, 3, -1, -1, 4, -1, // Dive #, date, time, duration, maxdepth, avgdepth
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), 0);
fprintf(stderr, "number of dives %d \n", dive_table.nr);
}
void TestParse::testParseV2NoQuestion()
{
// but parsing of a V2 file should fail
v2_question_shown = false;
QCOMPARE(parse_file(SUBSURFACE_SOURCE "/dives/test40.xml"), -1);
}
void TestParse::testParseV3()
{
// while parsing of a V3 files should succeed
v2_question_shown = false;
QCOMPARE(parse_file(SUBSURFACE_SOURCE "/dives/test42.xml"), 0);
}
void TestParse::testParseV2YesQuestion()
{
// once we claim to have shown the V2 question, parsing the V2 file should work as well
v2_question_shown = true;
QCOMPARE(parse_file(SUBSURFACE_SOURCE "/dives/test40.xml"), 0);
}
void TestParse::testParseCompareOutput()
{
QCOMPARE(save_dives("./testout.ssrf"), 0);
QFile org(SUBSURFACE_SOURCE "/dives/test40-42.xml");
org.open(QFile::ReadOnly);
QFile out("./testout.ssrf");
out.open(QFile::ReadOnly);
QTextStream orgS(&org);
QTextStream outS(&out);
QString readin = orgS.readAll();
QString written = outS.readAll();
QCOMPARE(readin, written);
}
QTEST_MAIN(TestParse)

16
tests/testparse.h Normal file
View file

@ -0,0 +1,16 @@
#ifndef TESTPARSE_H
#define TESTPARSE_H
#include <QtTest>
class TestParse : public QObject{
Q_OBJECT
private slots:
void testParseCSV();
void testParseV2NoQuestion();
void testParseV2YesQuestion();
void testParseV3();
void testParseCompareOutput();
};
#endif