Skip to content

Commit

Permalink
Add tests for the Garmin Course Extension (#47)
Browse files Browse the repository at this point in the history
This includes the CourseExtensionv1.xsd schema verbatim from
http://www8.garmin.com/xmlschemas/CourseExtensionv1.xsd
  • Loading branch information
pcolby committed Jan 5, 2015
1 parent b565850 commit 5c64b46
Show file tree
Hide file tree
Showing 9 changed files with 128 additions and 9 deletions.
25 changes: 25 additions & 0 deletions test/polar/v2/schemata/CourseExtensionv1.xsd
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns="http://www.garmin.com/xmlschemas/CourseExtension/v1" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:cx1="http://www.garmin.com/xmlschemas/CourseExtension/v1" targetNamespace="http://www.garmin.com/xmlschemas/CourseExtension/v1"
elementFormDefault="qualified">
<xsd:element name="CX" type="CourseLapExtension_t"/>
<xsd:complexType name="CourseLapExtension_t">
<xsd:sequence>
<xsd:element name="AvgWatts" type="xsd:unsignedShort" minOccurs="0"/>
<xsd:element name="Extensions" type="Extensions_t" minOccurs="0">
<xsd:annotation>
<xsd:documentation>You can extend Training Center by adding your own elements from another schema here.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Extensions_t">
<xsd:sequence>
<xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
<xsd:annotation>
<xsd:documentation>You can extend Training Center by adding your own elements from another schema here.</xsd:documentation>
</xsd:annotation>
</xsd:any>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<TrainingCenterDatabase xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd">
<TrainingCenterDatabase xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd" xmlns:cx1="http://www.garmin.com/xmlschemas/CourseExtension/v1">
<Author xsi:type="Application_t">
<Name>Bipolar</Name>
<Build>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<TrainingCenterDatabase xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd">
<TrainingCenterDatabase xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd" xmlns:cx1="http://www.garmin.com/xmlschemas/CourseExtension/v1">
<Activities>
<Activity Sport="Running">
<Id>2014-07-13T07:26:23+10:00</Id>
Expand Down Expand Up @@ -21666,6 +21666,7 @@
</HeartRateBpm>
</Trackpoint>
</Track>
<Extensions/>
</Lap>
<Lap StartTime="2014-07-13T07:56:27+10:00">
<TotalTimeSeconds>1492.25</TotalTimeSeconds>
Expand Down Expand Up @@ -39598,6 +39599,7 @@
</HeartRateBpm>
</Trackpoint>
</Track>
<Extensions/>
</Lap>
<Lap StartTime="2014-07-13T08:21:20+10:00">
<TotalTimeSeconds>227.5</TotalTimeSeconds>
Expand Down Expand Up @@ -42338,6 +42340,7 @@
</HeartRateBpm>
</Trackpoint>
</Track>
<Extensions/>
</Lap>
<Lap StartTime="2014-07-13T08:25:07+10:00">
<TotalTimeSeconds>1561.62</TotalTimeSeconds>
Expand Down Expand Up @@ -61098,6 +61101,7 @@
</HeartRateBpm>
</Trackpoint>
</Track>
<Extensions/>
</Lap>
<Lap StartTime="2014-07-13T08:51:09+10:00">
<TotalTimeSeconds>153.5</TotalTimeSeconds>
Expand Down Expand Up @@ -62950,6 +62954,7 @@
</HeartRateBpm>
</Trackpoint>
</Track>
<Extensions/>
</Lap>
</Activity>
</Activities>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<TrainingCenterDatabase xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd">
<TrainingCenterDatabase xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd" xmlns:cx1="http://www.garmin.com/xmlschemas/CourseExtension/v1">
<Activities>
<Activity Sport="Other">
<Id>2014-07-18T07:48:56+10:00</Id>
Expand Down Expand Up @@ -46608,6 +46608,7 @@
</HeartRateBpm>
</Trackpoint>
</Track>
<Extensions/>
</Lap>
</Activity>
</Activities>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<TrainingCenterDatabase xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd">
<TrainingCenterDatabase xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd" xmlns:cx1="http://www.garmin.com/xmlschemas/CourseExtension/v1">
<Author xsi:type="Application_t">
<Name>Bipolar</Name>
<Build>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<TrainingCenterDatabase xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd">
<TrainingCenterDatabase xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd" xmlns:cx1="http://www.garmin.com/xmlschemas/CourseExtension/v1">
<Activities>
<Activity Sport="Running">
<Id>2014-08-07T17:25:01+10:00</Id>
Expand Down Expand Up @@ -3125,6 +3125,7 @@
<Cadence>84</Cadence>
</Trackpoint>
</Track>
<Extensions/>
</Lap>
<Lap StartTime="2014-08-07T17:29:00+10:00">
<TotalTimeSeconds>242</TotalTimeSeconds>
Expand Down Expand Up @@ -6288,6 +6289,7 @@
<Cadence>82</Cadence>
</Trackpoint>
</Track>
<Extensions/>
</Lap>
<Lap StartTime="2014-08-07T17:33:02+10:00">
<TotalTimeSeconds>237.5</TotalTimeSeconds>
Expand Down Expand Up @@ -9399,6 +9401,7 @@
<Cadence>83</Cadence>
</Trackpoint>
</Track>
<Extensions/>
</Lap>
<Lap StartTime="2014-08-07T17:37:00+10:00">
<TotalTimeSeconds>175</TotalTimeSeconds>
Expand Down Expand Up @@ -11691,6 +11694,7 @@
<Cadence>86</Cadence>
</Trackpoint>
</Track>
<Extensions/>
</Lap>
<Lap StartTime="2014-08-07T17:39:55+10:00">
<TotalTimeSeconds>264.5</TotalTimeSeconds>
Expand Down Expand Up @@ -15140,6 +15144,7 @@
<Cadence>82</Cadence>
</Trackpoint>
</Track>
<Extensions/>
</Lap>
<Lap StartTime="2014-08-07T17:44:19+10:00">
<TotalTimeSeconds>257.5</TotalTimeSeconds>
Expand Down Expand Up @@ -18511,6 +18516,7 @@
<Cadence>83</Cadence>
</Trackpoint>
</Track>
<Extensions/>
</Lap>
<Lap StartTime="2014-08-07T17:48:37+10:00">
<TotalTimeSeconds>186</TotalTimeSeconds>
Expand Down Expand Up @@ -20946,6 +20952,7 @@
<Cadence>84</Cadence>
</Trackpoint>
</Track>
<Extensions/>
</Lap>
<Lap StartTime="2014-08-07T17:51:43+10:00">
<TotalTimeSeconds>269.5</TotalTimeSeconds>
Expand Down Expand Up @@ -24460,6 +24467,7 @@
<Cadence>82</Cadence>
</Trackpoint>
</Track>
<Extensions/>
</Lap>
<Lap StartTime="2014-08-07T17:56:12+10:00">
<TotalTimeSeconds>234.5</TotalTimeSeconds>
Expand Down Expand Up @@ -27532,6 +27540,7 @@
<Cadence>83</Cadence>
</Trackpoint>
</Track>
<Extensions/>
</Lap>
<Lap StartTime="2014-08-07T18:00:07+10:00">
<TotalTimeSeconds>25.125</TotalTimeSeconds>
Expand Down Expand Up @@ -27866,6 +27875,7 @@
<Cadence>0</Cadence>
</Trackpoint>
</Track>
<Extensions/>
</Lap>
</Activity>
</Activities>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<TrainingCenterDatabase xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd">
<TrainingCenterDatabase xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd" xmlns:cx1="http://www.garmin.com/xmlschemas/CourseExtension/v1">
<Activities>
<Activity Sport="Biking">
<Id>2014-12-29T12:58:44+01:00</Id>
Expand Down Expand Up @@ -187,6 +187,7 @@
<Cadence>26</Cadence>
</Trackpoint>
</Track>
<Extensions/>
</Lap>
</Activity>
</Activities>
Expand Down
78 changes: 78 additions & 0 deletions test/polar/v2/testtrainingsession.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1490,6 +1490,84 @@ void TestTrainingSession::toTCX_GarminActivity()
}
}

void TestTrainingSession::toTCX_GarminCourse_data()
{
QTest::addColumn<QString>("baseName");
QTest::addColumn<QByteArray>("expected");

#define LOAD_TEST_DATA(name) { \
QFile expectedFile(QFINDTESTDATA("testdata/" name ".garmin-course.tcx")); \
QString baseName(expectedFile.fileName()); \
baseName.chop(18); \
expectedFile.open(QIODevice::ReadOnly); \
QTest::newRow(name) << baseName << expectedFile.readAll(); \
}

LOAD_TEST_DATA("training-sessions-1");
LOAD_TEST_DATA("training-sessions-2");
LOAD_TEST_DATA("training-sessions-19401412");
LOAD_TEST_DATA("training-sessions-19946380");
LOAD_TEST_DATA("training-sessions-22165267");
LOAD_TEST_DATA("training-sessions-42261903");

#undef LOAD_TEST_DATA
}

void TestTrainingSession::toTCX_GarminCourse()
{
QFETCH(QString, baseName);
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"));

// Write the result to an XML file for optional post-mortem investigations.
#ifdef Q_OS_WIN
QFile file(QString::fromLatin1("polar/v2/testdata/%1.result.garmin-course.tcx")
#else
QFile file(QString::fromLatin1("../polar/v2/testdata/%1.result.garmin-course.tcx")
#endif
.arg(QString::fromLatin1(QTest::currentDataTag())));
if (file.open(QIODevice::WriteOnly|QIODevice::Truncate)) {
file.write(tcx.toByteArray(2));
}
file.close();

// Compare the generated document against the expected result.
QDomDocument expectedDoc;
expectedDoc.setContent(expected);
compare(tcx, expectedDoc);

// Validate the generated document against the relevant XML schema.
tcx.documentElement().removeAttribute(QLatin1String("xsi:schemaLocation"));
{ // The base TCX V2 schema.
QFile xsd(QFINDTESTDATA("schemata/TrainingCenterDatabasev2.xsd"));
QVERIFY(xsd.open(QIODevice::ReadOnly));
QXmlSchema schema;
QVERIFY(schema.load(&xsd, QUrl::fromLocalFile(xsd.fileName())));
QXmlSchemaValidator validator(schema);
QVERIFY(validator.validate(tcx.toByteArray()));
}

{ // The Garmin Course Extension V1 schema's CX elements.
const QDomNodeList cxNodes = tcx.elementsByTagName(QLatin1String("CX"));
QFile xsd(QFINDTESTDATA("schemata/CourseExtensionv1.xsd"));
QVERIFY(xsd.open(QIODevice::ReadOnly));
QXmlSchema schema;
QVERIFY(schema.load(&xsd, QUrl::fromLocalFile(xsd.fileName())));
QXmlSchemaValidator validator(schema);
for (int index = 0; index < cxNodes.length(); ++index) {
QByteArray byteArray;
QTextStream stream(&byteArray);
stream << cxNodes.at(index);
QVERIFY(validator.validate(byteArray));
}
}
}

void TestTrainingSession::toTCX_UTC_data()
{
QTest::addColumn<QString>("baseName");
Expand Down
5 changes: 2 additions & 3 deletions test/polar/v2/testtrainingsession.h
Original file line number Diff line number Diff line change
Expand Up @@ -92,9 +92,8 @@ private slots:
void toTCX_GarminActivity_data();
void toTCX_GarminActivity();

/// @todo Include Garmin Course Extension tests.
//void toTCX_GarminCourse_data();
//void toTCX_GarminCourse();
void toTCX_GarminCourse_data();
void toTCX_GarminCourse();

void toTCX_UTC_data();
void toTCX_UTC();
Expand Down

0 comments on commit 5c64b46

Please sign in to comment.