Skip to content

Commit

Permalink
Cache TrainingSession objects between tests (#71)
Browse files Browse the repository at this point in the history
This cuts the total time of full unit test runs down to about one third
of what it was (eg from ~12 minutes down to ~4 minutes). That's a
pretty huge saving! :D (wish I'd thought of it earlier!)
  • Loading branch information
pcolby committed Aug 23, 2016
1 parent c0072ca commit f8394e9
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 57 deletions.
136 changes: 79 additions & 57 deletions test/polar/v2/testtrainingsession.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,20 @@ void compare(const QDomDocument &a, const QDomDocument &b)

#undef XCOMPARE

polar::v2::TrainingSession * TestTrainingSession::getTrainingSession(const QString &baseName)
{
QMap<QString, polar::v2::TrainingSession *>::const_iterator iter = trainingSessions.find(baseName);
if (iter == trainingSessions.end()) {
polar::v2::TrainingSession * const session = new polar::v2::TrainingSession(baseName);
Q_CHECK_PTR(session);
iter = trainingSessions.insert(baseName, session);
}
iter.value()->setGpxOptions(0);
iter.value()->setHrmOptions(0);
iter.value()->setTcxOptions(0);
return iter.value();
}

void TestTrainingSession::initTestCase()
{
outputDirPath = QString::fromLatin1("%1/%2").arg(QDir::tempPath())
Expand All @@ -151,6 +165,14 @@ void TestTrainingSession::initTestCase()
}
}

void TestTrainingSession::cleanupTestCase()
{
foreach (polar::v2::TrainingSession * const session, trainingSessions) {
delete session;
}
trainingSessions.clear();
}

void TestTrainingSession::getOutputBaseFileName_data()
{
QTest::addColumn<QString>("input");
Expand Down Expand Up @@ -838,9 +860,9 @@ void TestTrainingSession::toGPX()
QFETCH(QByteArray, expected);

// Parse the route (protobuf) message.
polar::v2::TrainingSession session(baseName);
QVERIFY(session.parse());
QDomDocument gpx = session.toGPX(QDateTime::fromString(
polar::v2::TrainingSession * const session = getTrainingSession(baseName);
QVERIFY(session->isValid() || session->parse());
QDomDocument gpx = session->toGPX(QDateTime::fromString(
QLatin1String("2014-07-15T12:34:56Z"), Qt::ISODate));

// Write the result to an XML file for optional post-mortem investigations.
Expand Down Expand Up @@ -900,12 +922,12 @@ void TestTrainingSession::toGPX_AllExtensions()
QFETCH(QByteArray, expected);

// Parse the route (protobuf) message.
polar::v2::TrainingSession session(baseName);
QVERIFY(session.parse());
session.setGpxOption(polar::v2::TrainingSession::CluetrustGpxDataExtension);
session.setGpxOption(polar::v2::TrainingSession::GarminAccelerationExtension);
session.setGpxOption(polar::v2::TrainingSession::GarminTrackPointExtension);
QDomDocument gpx = session.toGPX(QDateTime::fromString(
polar::v2::TrainingSession * const session = getTrainingSession(baseName);
QVERIFY(session->isValid() || session->parse());
session->setGpxOption(polar::v2::TrainingSession::CluetrustGpxDataExtension);
session->setGpxOption(polar::v2::TrainingSession::GarminAccelerationExtension);
session->setGpxOption(polar::v2::TrainingSession::GarminTrackPointExtension);
QDomDocument gpx = session->toGPX(QDateTime::fromString(
QLatin1String("2014-07-15T12:34:56Z"), Qt::ISODate));

// Write the result to an XML file for optional post-mortem investigations.
Expand Down Expand Up @@ -968,10 +990,10 @@ void TestTrainingSession::toGPX_Cluetrust()
QFETCH(QByteArray, expected);

// Parse the route (protobuf) message.
polar::v2::TrainingSession session(baseName);
QVERIFY(session.parse());
session.setGpxOption(polar::v2::TrainingSession::CluetrustGpxDataExtension);
QDomDocument gpx = session.toGPX(QDateTime::fromString(
polar::v2::TrainingSession * const session = getTrainingSession(baseName);
QVERIFY(session->isValid() || session->parse());
session->setGpxOption(polar::v2::TrainingSession::CluetrustGpxDataExtension);
QDomDocument gpx = session->toGPX(QDateTime::fromString(
QLatin1String("2014-07-15T12:34:56Z"), Qt::ISODate));

// Write the result to an XML file for optional post-mortem investigations.
Expand Down Expand Up @@ -1059,10 +1081,10 @@ void TestTrainingSession::toGPX_GarminAcceleration()
QFETCH(QByteArray, expected);

// Parse the route (protobuf) message.
polar::v2::TrainingSession session(baseName);
QVERIFY(session.parse());
session.setGpxOption(polar::v2::TrainingSession::GarminAccelerationExtension);
QDomDocument gpx = session.toGPX(QDateTime::fromString(
polar::v2::TrainingSession * const session = getTrainingSession(baseName);
QVERIFY(session->isValid() || session->parse());
session->setGpxOption(polar::v2::TrainingSession::GarminAccelerationExtension);
QDomDocument gpx = session->toGPX(QDateTime::fromString(
QLatin1String("2014-07-15T12:34:56Z"), Qt::ISODate));

// Write the result to an XML file for optional post-mortem investigations.
Expand Down Expand Up @@ -1144,10 +1166,10 @@ void TestTrainingSession::toGPX_GarminTrackPoint()
QFETCH(QByteArray, expected);

// Parse the route (protobuf) message.
polar::v2::TrainingSession session(baseName);
QVERIFY(session.parse());
session.setGpxOption(polar::v2::TrainingSession::GarminTrackPointExtension);
QDomDocument gpx = session.toGPX(QDateTime::fromString(
polar::v2::TrainingSession * const session = getTrainingSession(baseName);
QVERIFY(session->isValid() || session->parse());
session->setGpxOption(polar::v2::TrainingSession::GarminTrackPointExtension);
QDomDocument gpx = session->toGPX(QDateTime::fromString(
QLatin1String("2014-07-15T12:34:56Z"), Qt::ISODate));

// Write the result to an XML file for optional post-mortem investigations.
Expand Down Expand Up @@ -1238,10 +1260,10 @@ void TestTrainingSession::toHRM()
qDebug() << baseName;

// Parse the route (protobuf) message.
polar::v2::TrainingSession session(baseName);
QVERIFY(session.parse());
session.setHrmOption(polar::v2::TrainingSession::LapNames, false);
const QStringList hrm = session.toHRM(false);
polar::v2::TrainingSession * const session = getTrainingSession(baseName);
QVERIFY(session->isValid() || session->parse());
session->setHrmOption(polar::v2::TrainingSession::LapNames, false);
const QStringList hrm = session->toHRM(false);

// Write the result to a text file for optional post-mortem investigations.
if (!outputDirPath.isNull()) {
Expand Down Expand Up @@ -1302,10 +1324,10 @@ void TestTrainingSession::toHRM_LapNames()
qDebug() << baseName;

// Parse the route (protobuf) message.
polar::v2::TrainingSession session(baseName);
QVERIFY(session.parse());
session.setHrmOption(polar::v2::TrainingSession::LapNames);
const QStringList hrm = session.toHRM(false);
polar::v2::TrainingSession * const session = getTrainingSession(baseName);
QVERIFY(session->isValid() || session->parse());
session->setHrmOption(polar::v2::TrainingSession::LapNames);
const QStringList hrm = session->toHRM(false);

// Write the result to a text file for optional post-mortem investigations.
if (!outputDirPath.isNull()) {
Expand Down Expand Up @@ -1366,10 +1388,10 @@ void TestTrainingSession::toHRM_LapNames_RR()
qDebug() << baseName;

// Parse the route (protobuf) message.
polar::v2::TrainingSession session(baseName);
QVERIFY(session.parse());
session.setHrmOption(polar::v2::TrainingSession::LapNames);
const QStringList hrm = session.toHRM(true);
polar::v2::TrainingSession * const session = getTrainingSession(baseName);
QVERIFY(session->isValid() || session->parse());
session->setHrmOption(polar::v2::TrainingSession::LapNames);
const QStringList hrm = session->toHRM(true);

// Write the result to a text file for optional post-mortem investigations.
if (!outputDirPath.isNull()) {
Expand Down Expand Up @@ -1430,10 +1452,10 @@ void TestTrainingSession::toHRM_RR()
qDebug() << baseName;

// Parse the route (protobuf) message.
polar::v2::TrainingSession session(baseName);
QVERIFY(session.parse());
session.setHrmOption(polar::v2::TrainingSession::LapNames, false);
const QStringList hrm = session.toHRM(true);
polar::v2::TrainingSession * const session = getTrainingSession(baseName);
QVERIFY(session->isValid() || session->parse());
session->setHrmOption(polar::v2::TrainingSession::LapNames, false);
const QStringList hrm = session->toHRM(true);

// Write the result to a text file for optional post-mortem investigations.
if (!outputDirPath.isNull()) {
Expand Down Expand Up @@ -1485,9 +1507,9 @@ void TestTrainingSession::toTCX()
QFETCH(QByteArray, expected);

// Parse the route (protobuf) message.
polar::v2::TrainingSession session(baseName);
QVERIFY(session.parse());
QDomDocument tcx = session.toTCX(QLatin1String("Jul 17 2014 21:02:38"));
polar::v2::TrainingSession * const session = getTrainingSession(baseName);
QVERIFY(session->isValid() || session->parse());
QDomDocument tcx = session->toTCX(QLatin1String("Jul 17 2014 21:02:38"));

// Write the result to an XML file for optional post-mortem investigations.
if (!outputDirPath.isNull()) {
Expand Down Expand Up @@ -1546,11 +1568,11 @@ void TestTrainingSession::toTCX_AllExtensions()
QFETCH(QByteArray, expected);

// Parse the route (protobuf) message.
polar::v2::TrainingSession session(baseName);
QVERIFY(session.parse());
session.setTcxOption(polar::v2::TrainingSession::GarminActivityExtension);
session.setTcxOption(polar::v2::TrainingSession::GarminCourseExtension);
QDomDocument tcx = session.toTCX(QLatin1String("Jul 17 2014 21:02:38"));
polar::v2::TrainingSession * const session = getTrainingSession(baseName);
QVERIFY(session->isValid() || session->parse());
session->setTcxOption(polar::v2::TrainingSession::GarminActivityExtension);
session->setTcxOption(polar::v2::TrainingSession::GarminCourseExtension);
QDomDocument tcx = session->toTCX(QLatin1String("Jul 17 2014 21:02:38"));

// Write the result to an XML file for optional post-mortem investigations.
if (!outputDirPath.isNull()) {
Expand Down Expand Up @@ -1612,10 +1634,10 @@ void TestTrainingSession::toTCX_GarminActivity()
QFETCH(QByteArray, expected);

// Parse the route (protobuf) message.
polar::v2::TrainingSession session(baseName);
QVERIFY(session.parse());
session.setTcxOption(polar::v2::TrainingSession::GarminActivityExtension);
QDomDocument tcx = session.toTCX(QLatin1String("Jul 17 2014 21:02:38"));
polar::v2::TrainingSession * const session = getTrainingSession(baseName);
QVERIFY(session->isValid() || session->parse());
session->setTcxOption(polar::v2::TrainingSession::GarminActivityExtension);
QDomDocument tcx = session->toTCX(QLatin1String("Jul 17 2014 21:02:38"));

// Write the result to an XML file for optional post-mortem investigations.
if (!outputDirPath.isNull()) {
Expand Down Expand Up @@ -1706,10 +1728,10 @@ void TestTrainingSession::toTCX_GarminCourse()
QFETCH(QByteArray, expected);

// Parse the route (protobuf) message.
polar::v2::TrainingSession session(baseName);
QVERIFY(session.parse());
session.setTcxOption(polar::v2::TrainingSession::GarminCourseExtension);
QDomDocument tcx = session.toTCX(QLatin1String("Jul 17 2014 21:02:38"));
polar::v2::TrainingSession * const session = getTrainingSession(baseName);
QVERIFY(session->isValid() || session->parse());
session->setTcxOption(polar::v2::TrainingSession::GarminCourseExtension);
QDomDocument tcx = session->toTCX(QLatin1String("Jul 17 2014 21:02:38"));

// Write the result to an XML file for optional post-mortem investigations.
if (!outputDirPath.isNull()) {
Expand Down Expand Up @@ -1785,10 +1807,10 @@ void TestTrainingSession::toTCX_UTC()
QFETCH(QByteArray, expected);

// Parse the route (protobuf) message.
polar::v2::TrainingSession session(baseName);
QVERIFY(session.parse());
session.setTcxOption(polar::v2::TrainingSession::ForceTcxUTC);
QDomDocument tcx = session.toTCX(QLatin1String("Jul 17 2014 21:02:38"));
polar::v2::TrainingSession * const session = getTrainingSession(baseName);
QVERIFY(session->isValid() || session->parse());
session->setTcxOption(polar::v2::TrainingSession::ForceTcxUTC);
QDomDocument tcx = session->toTCX(QLatin1String("Jul 17 2014 21:02:38"));

// Write the result to an XML file for optional post-mortem investigations.
if (!outputDirPath.isNull()) {
Expand Down
7 changes: 7 additions & 0 deletions test/polar/v2/testtrainingsession.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,23 @@
along with Bipolar. If not, see <http://www.gnu.org/licenses/>.
*/

#include <QMap>
#include <QObject>

namespace polar { namespace v2 { class TrainingSession; }}

class TestTrainingSession : public QObject {
Q_OBJECT

private:
QString outputDirPath;
QMap<QString, polar::v2::TrainingSession *> trainingSessions;

polar::v2::TrainingSession * getTrainingSession(const QString &baseName);

private slots:
void initTestCase();
void cleanupTestCase();

void getOutputBaseFileName_data();
void getOutputBaseFileName();
Expand Down

0 comments on commit f8394e9

Please sign in to comment.