Skip to content

Commit f9c2d86

Browse files
committed
Fixed incorrect reading of track segments and track points
1 parent f67c8f1 commit f9c2d86

File tree

2 files changed

+28
-5
lines changed

2 files changed

+28
-5
lines changed

Sources/RCGPX/Internal/GPXTrack+Internals.swift

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,17 @@ extension GPXTrack: GPXElement {
2424
gpxDescription = xml["desc"].value
2525

2626
segments = try xml
27-
.all(withValue: Segment.xmlTag)?
27+
.children
28+
.filter { $0.name == Segment.xmlTag }
2829
.map { try Segment(xml: $0) }
29-
?? []
3030
}
3131

3232
var xmlElement: AEXMLElement {
3333
let element = AEXMLElement(name: Self.xmlTag)
3434
element.addChild(name: "name", value: name)
35-
element.addChild(name: "desc", value: gpxDescription)
35+
if let desc = gpxDescription {
36+
element.addChild(name: "desc", value: desc)
37+
}
3638
element.addChildren(segments.map(\.xmlElement))
3739
return element
3840
}
@@ -46,7 +48,7 @@ extension GPXTrack.Segment: GPXElement {
4648
}
4749

4850
init(xml: AEXMLElement) throws {
49-
let pointChildren = xml.all(withValue: GPXTrack.Point.xmlTag) ?? []
51+
let pointChildren = xml.children.filter { $0.name == GPXTrack.Point.xmlTag }
5052
trackPoints = try pointChildren.map { try GPXTrack.Point(xml: $0) }
5153
}
5254

Tests/RCGPXTests/RCGPXTests.swift

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,37 @@
3636
XCTAssertEqual(gpxWpt.elevation ?? 0.0, knownTraits.elev, accuracy: 0.0001)
3737
}
3838

39-
//Tracks
39+
//Tracks (number of segments)
4040
let knownTracks: [String : Int] = [
4141
"Barrett Spur 1" : 2,
4242
"Barrett Spur 2" : 3
4343
]
44+
let trackPointCounts: [String : Int] = [
45+
"Barrett Spur 1" : 99,
46+
"Barrett Spur 2" : 98
47+
]
4448
let trackNamesKnown = Set(knownTracks.keys)
4549
let trackNamesFound = Set(document.tracks.map(\.name))
4650
XCTAssertEqual(trackNamesKnown, trackNamesFound)
4751

52+
// Segments
53+
for foundTrack in document.tracks {
54+
XCTAssertEqual(knownTracks[foundTrack.name], foundTrack.segments.count)
55+
XCTAssertEqual(trackPointCounts[foundTrack.name], foundTrack.allTrackPoints().count)
56+
}
57+
58+
}
59+
60+
func testGpxWriting() throws {
61+
guard let document = getTestDocument(name: "GPSVisSample") else {
62+
XCTFail("Oh no! Can't open GPSVisSample file")
63+
return
64+
}
65+
66+
let gpxString = document.gpxString()
67+
print(gpxString)
4868
}
69+
4970
}
5071

5172
//MARK: Helper Functions

0 commit comments

Comments
 (0)