summaryrefslogtreecommitdiff
path: root/ride/parser_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'ride/parser_test.go')
-rw-r--r--ride/parser_test.go42
1 files changed, 42 insertions, 0 deletions
diff --git a/ride/parser_test.go b/ride/parser_test.go
index 96c837e..c2d6719 100644
--- a/ride/parser_test.go
+++ b/ride/parser_test.go
@@ -11,6 +11,7 @@ import (
const parserTestGPXPrefix = `<?xml version="1.0"?><gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1"><trk><trkseg>`
const parserTestGPXSuffix = `</trkseg></trk></gpx>`
+const parserTestGPXMetricsPrefix = `<?xml version="1.0"?><gpx xmlns="http://www.topografix.com/GPX/1/1" xmlns:gpxtpx="http://www.garmin.com/xmlschemas/TrackPointExtension/v1" version="1.1"><trk><trkseg>`
func TestGPXRideParserSkipsStationaryPoints(t *testing.T) {
data := parserTestGPXPrefix +
@@ -44,3 +45,44 @@ func TestGPXRideParserRejectsEmptyTrack(t *testing.T) {
require.Error(t, err)
assert.Equal(t, "ride has no track points", err.Error())
}
+
+func TestGPXRideParserReadsGarminMetrics(t *testing.T) {
+ data := parserTestGPXMetricsPrefix +
+ `<trkpt lat="43.0" lon="5.0"><ele>100</ele><extensions><gpxtpx:TrackPointExtension><gpxtpx:hr>90</gpxtpx:hr><gpxtpx:cad>70</gpxtpx:cad><gpxtpx:watts>200</gpxtpx:watts></gpxtpx:TrackPointExtension></extensions></trkpt>` +
+ `<trkpt lat="43.0" lon="5.0"><ele>101</ele><extensions><gpxtpx:TrackPointExtension><gpxtpx:hr>91</gpxtpx:hr><gpxtpx:cad>71</gpxtpx:cad><gpxtpx:watts>201</gpxtpx:watts></gpxtpx:TrackPointExtension></extensions></trkpt>` +
+ `<trkpt lat="43.001" lon="5.001"><ele>102</ele><extensions><gpxtpx:TrackPointExtension><gpxtpx:hr>92</gpxtpx:hr><gpxtpx:cad>72</gpxtpx:cad><gpxtpx:watts>202</gpxtpx:watts></gpxtpx:TrackPointExtension></extensions></trkpt>` +
+ parserTestGPXSuffix
+
+ parsed, err := (ride.GPXRideParser{}).Parse(strings.NewReader(data))
+ require.NoError(t, err)
+ assert.Equal(t, 2, parsed.Len())
+
+ heartRate, found := parsed.HeartRateBpm(1)
+ require.True(t, found)
+ assert.Equal(t, 92.0, heartRate)
+ cadence, found := parsed.CadenceRpm(1)
+ require.True(t, found)
+ assert.Equal(t, 72.0, cadence)
+ power, found := parsed.PowerW(1)
+ require.True(t, found)
+ assert.Equal(t, 202.0, power)
+}
+
+func TestGPXRideParserDropsIncompleteMetricColumn(t *testing.T) {
+ data := parserTestGPXMetricsPrefix +
+ `<trkpt lat="43.0" lon="5.0"><ele>100</ele><extensions><gpxtpx:TrackPointExtension><gpxtpx:hr>90</gpxtpx:hr><gpxtpx:cad>70</gpxtpx:cad><gpxtpx:watts>200</gpxtpx:watts></gpxtpx:TrackPointExtension></extensions></trkpt>` +
+ `<trkpt lat="43.001" lon="5.001"><ele>102</ele><extensions><gpxtpx:TrackPointExtension><gpxtpx:hr>92</gpxtpx:hr><gpxtpx:watts>0</gpxtpx:watts></gpxtpx:TrackPointExtension></extensions></trkpt>` +
+ parserTestGPXSuffix
+
+ parsed, err := (ride.GPXRideParser{}).Parse(strings.NewReader(data))
+ require.NoError(t, err)
+
+ _, found := parsed.CadenceRpm(0)
+ assert.False(t, found)
+ heartRate, found := parsed.HeartRateBpm(1)
+ require.True(t, found)
+ assert.Equal(t, 92.0, heartRate)
+ power, found := parsed.PowerW(1)
+ require.True(t, found)
+ assert.Equal(t, 0.0, power)
+}