diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2017-02-21 17:23:19 -0800 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2017-02-21 18:22:56 -0800 |
commit | 3fef6ec31da786bde7f249dd9c07121944ddd9ee (patch) | |
tree | dc1d579f1072a6bf351935165cbafae20099ab7c | |
parent | c4976b505a2c4a1fe62610b3c875eac56957c924 (diff) | |
download | subsurface-3fef6ec31da786bde7f249dd9c07121944ddd9ee.tar.gz |
Simple test case for merging dives
We do some merging in a couple of the other tests as well, but the idea
is to have specific test cases that exercise our merge logic.
This one starts simple. Merge a dive with some valid info with a second
one that has less data filled. And then try it in both possible orders.
It shows a few potential problems.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r-- | dives/test47+48.xml | 22 | ||||
-rw-r--r-- | dives/test48.xml | 13 | ||||
-rw-r--r-- | tests/CMakeLists.txt | 2 | ||||
-rw-r--r-- | tests/testmerge.cpp | 61 | ||||
-rw-r--r-- | tests/testmerge.h | 14 |
5 files changed, 112 insertions, 0 deletions
diff --git a/dives/test47+48.xml b/dives/test47+48.xml new file mode 100644 index 000000000..aa4c129c0 --- /dev/null +++ b/dives/test47+48.xml @@ -0,0 +1,22 @@ +<divelog program='subsurface' version='3'> +<settings> +</settings> +<divesites> +<site uuid='15ae02d0' name='Test dive'> +</site> +</divesites> +<dives> +<dive number='1' tags='test' divesiteid='15ae02d0' date='2015-10-01' time='08:00:25' duration='46:00 min'> + <cylinder size='11.1 l' workpressure='207.0 bar' description='unknown' /> + <divecomputer model='do not care' date='2015-10-05' time='08:45:25'> + <depth max='13.716 m' mean='10.595 m' /> + <sample time='0:00 min' depth='0.0 m' /> + <sample time='0:36 min' depth='13.716 m' /> + <sample time='20:00 min' depth='13.716 m' /> + <sample time='42:00 min' depth='4.572 m' /> + <sample time='45:00 min' depth='4.572 m' /> + <sample time='46:00 min' depth='0.0 m' /> + </divecomputer> +</dive> +</dives> +</divelog> diff --git a/dives/test48.xml b/dives/test48.xml new file mode 100644 index 000000000..421325c4b --- /dev/null +++ b/dives/test48.xml @@ -0,0 +1,13 @@ +<divelog program='subsurface' version='3'> +<divesites> +<site uuid='15ae02d1'> +</site> +</divesites> +<dives> +<dive number='1' tags='test' divesiteid='15ae02d1' date='2015-10-01' time='08:00:25' duration='46:00 min'> + <divecomputer date='2015-10-05' time='08:45:25'> + <depth max='13.716 m' mean='10.595 m' /> + </divecomputer> +</dive> +</dives> +</divelog> diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 5106588d0..1aab4ab1c 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -21,6 +21,7 @@ TEST(TestRenumber testrenumber.cpp) TEST(TestGitStorage testgitstorage.cpp) TEST(TestPreferences testpreferences.cpp) TEST(TestPicture testpicture.cpp) +TEST(TestMerge testmerge.cpp) add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} @@ -35,4 +36,5 @@ add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} TestPreferences TestRenumber TestPicture + TestMerge ) diff --git a/tests/testmerge.cpp b/tests/testmerge.cpp new file mode 100644 index 000000000..05c88a88e --- /dev/null +++ b/tests/testmerge.cpp @@ -0,0 +1,61 @@ +#include "testmerge.h" +#include "core/dive.h" +#include "core/file.h" +#include "core/divelist.h" +#include <QTextStream> + +void TestMerge::initTestCase() +{ + /* we need to manually tell that the resource exists, because we are using it as library. */ + Q_INIT_RESOURCE(subsurface); +} + +void TestMerge::testMergeEmpty() +{ + /* + * check that we correctly merge mixed cylinder dives + */ + QCOMPARE(parse_file(SUBSURFACE_SOURCE "/dives/test47.xml"), 0); + process_dives(true, false); + QCOMPARE(parse_file(SUBSURFACE_SOURCE "/dives/test48.xml"), 0); + process_dives(true, false); + QCOMPARE(save_dives("./testmerge47+48.ssrf"), 0); + QFile org(SUBSURFACE_SOURCE "/dives/test47+48.xml"); + org.open(QFile::ReadOnly); + QFile out("./testmerge47+48.ssrf"); + out.open(QFile::ReadOnly); + QTextStream orgS(&org); + QTextStream outS(&out); + QStringList readin = orgS.readAll().split("\n"); + QStringList written = outS.readAll().split("\n"); + while(readin.size() && written.size()){ + QCOMPARE(readin.takeFirst(), written.takeFirst()); + } + clear_dive_file_data(); +} + +void TestMerge::testMergeBackwards() +{ + /* + * check that we correctly merge mixed cylinder dives + */ + QCOMPARE(parse_file(SUBSURFACE_SOURCE "/dives/test48.xml"), 0); + process_dives(true, false); + QCOMPARE(parse_file(SUBSURFACE_SOURCE "/dives/test47.xml"), 0); + process_dives(true, false); + QCOMPARE(save_dives("./testmerge47+48.ssrf"), 0); + QFile org(SUBSURFACE_SOURCE "/dives/test47+48.xml"); + org.open(QFile::ReadOnly); + QFile out("./testmerge47+48.ssrf"); + out.open(QFile::ReadOnly); + QTextStream orgS(&org); + QTextStream outS(&out); + QStringList readin = orgS.readAll().split("\n"); + QStringList written = outS.readAll().split("\n"); + while(readin.size() && written.size()){ + QCOMPARE(readin.takeFirst(), written.takeFirst()); + } + clear_dive_file_data(); +} + +QTEST_GUILESS_MAIN(TestMerge) diff --git a/tests/testmerge.h b/tests/testmerge.h new file mode 100644 index 000000000..771afc4db --- /dev/null +++ b/tests/testmerge.h @@ -0,0 +1,14 @@ +#ifndef TESTMERGE_H +#define TESTMERGE_H + +#include <QtTest> + +class TestMerge : public QObject{ + Q_OBJECT +private slots: + void initTestCase(); + void testMergeEmpty(); + void testMergeBackwards(); +}; + +#endif |