diff options
Diffstat (limited to 'ride/parser_test.go')
| -rw-r--r-- | ride/parser_test.go | 42 |
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) +} |