mirror of
https://github.com/gpxstudio/gpx.studio.git
synced 2025-08-31 23:53:25 +00:00
fix extensions and attributes
This commit is contained in:
@@ -1,17 +1,17 @@
|
||||
import * as fs from 'fs';
|
||||
|
||||
import { parseGPX } from '../src/io';
|
||||
import { parseGPX, buildGPX } from '../src/io';
|
||||
|
||||
describe("Parsing tests", () => {
|
||||
describe("Parsing", () => {
|
||||
it("Simple", () => {
|
||||
const path = "test-data/simple.gpx";
|
||||
const data = fs.readFileSync(path, 'utf8');
|
||||
const result = parseGPX(data);
|
||||
|
||||
expect(result.creator).toBe("https://gpx.studio");
|
||||
expect(result.attributes.creator).toBe("https://gpx.studio");
|
||||
expect(result.metadata.name).toBe("simple");
|
||||
expect(result.metadata.author.name).toBe("gpx.studio");
|
||||
expect(result.metadata.author.link.href).toBe("https://gpx.studio");
|
||||
expect(result.metadata.author.link.attributes.href).toBe("https://gpx.studio");
|
||||
|
||||
expect(result.trk.length).toBe(1);
|
||||
|
||||
@@ -25,13 +25,14 @@ describe("Parsing tests", () => {
|
||||
|
||||
for (let i = 0; i < segment.trkpt.length; i++) {
|
||||
const point = segment.trkpt[i];
|
||||
expect(point).toHaveProperty('lat');
|
||||
expect(point).toHaveProperty('lon');
|
||||
expect(point).toHaveProperty('attributes');
|
||||
expect(point.attributes).toHaveProperty('lat');
|
||||
expect(point.attributes).toHaveProperty('lon');
|
||||
expect(point).toHaveProperty('ele');
|
||||
}
|
||||
|
||||
expect(segment.trkpt[0].lat).toBe(50.790867);
|
||||
expect(segment.trkpt[0].lon).toBe(4.404968);
|
||||
expect(segment.trkpt[0].attributes.lat).toBe(50.790867);
|
||||
expect(segment.trkpt[0].attributes.lon).toBe(4.404968);
|
||||
expect(segment.trkpt[0].ele).toBe(109.0);
|
||||
});
|
||||
|
||||
@@ -74,8 +75,8 @@ describe("Parsing tests", () => {
|
||||
expect(result.wpt.length).toBe(1);
|
||||
|
||||
const waypoint = result.wpt[0];
|
||||
expect(waypoint.lat).toBe(50.7836710064975);
|
||||
expect(waypoint.lon).toBe(4.410764082658738);
|
||||
expect(waypoint.attributes.lat).toBe(50.7836710064975);
|
||||
expect(waypoint.attributes.lon).toBe(4.410764082658738);
|
||||
expect(waypoint.ele).toBe(122.0);
|
||||
expect(waypoint.name).toBe("Waypoint");
|
||||
expect(waypoint.cmt).toBe("Comment");
|
||||
@@ -109,12 +110,12 @@ describe("Parsing tests", () => {
|
||||
|
||||
for (let i = 0; i < segment.trkpt.length; i++) {
|
||||
expect(segment.trkpt[i]).toHaveProperty('extensions');
|
||||
expect(segment.trkpt[i].extensions).toHaveProperty('TrackPointExtension');
|
||||
expect(segment.trkpt[i].extensions.TrackPointExtension).toHaveProperty('hr');
|
||||
expect(segment.trkpt[i].extensions).toHaveProperty('gpxtpx:TrackPointExtension');
|
||||
expect(segment.trkpt[i].extensions['gpxtpx:TrackPointExtension']).toHaveProperty('gpxtpx:hr');
|
||||
}
|
||||
|
||||
expect(segment.trkpt[0].extensions.TrackPointExtension.hr).toBe(150);
|
||||
expect(segment.trkpt[segment.trkpt.length - 1].extensions.TrackPointExtension.hr).toBe(160);
|
||||
expect(segment.trkpt[0].extensions['gpxtpx:TrackPointExtension']['gpxtpx:hr']).toBe(150);
|
||||
expect(segment.trkpt[segment.trkpt.length - 1].extensions['gpxtpx:TrackPointExtension']['gpxtpx:hr']).toBe(160);
|
||||
});
|
||||
|
||||
it("Cadence", () => {
|
||||
@@ -127,12 +128,12 @@ describe("Parsing tests", () => {
|
||||
|
||||
for (let i = 0; i < segment.trkpt.length; i++) {
|
||||
expect(segment.trkpt[i]).toHaveProperty('extensions');
|
||||
expect(segment.trkpt[i].extensions).toHaveProperty('TrackPointExtension');
|
||||
expect(segment.trkpt[i].extensions.TrackPointExtension).toHaveProperty('cad');
|
||||
expect(segment.trkpt[i].extensions).toHaveProperty('gpxtpx:TrackPointExtension');
|
||||
expect(segment.trkpt[i].extensions['gpxtpx:TrackPointExtension']).toHaveProperty('gpxtpx:cad');
|
||||
}
|
||||
|
||||
expect(segment.trkpt[0].extensions.TrackPointExtension.cad).toBe(80);
|
||||
expect(segment.trkpt[segment.trkpt.length - 1].extensions.TrackPointExtension.cad).toBe(90);
|
||||
expect(segment.trkpt[0].extensions['gpxtpx:TrackPointExtension']['gpxtpx:cad']).toBe(80);
|
||||
expect(segment.trkpt[segment.trkpt.length - 1].extensions['gpxtpx:TrackPointExtension']['gpxtpx:cad']).toBe(90);
|
||||
});
|
||||
|
||||
it("Temperature", () => {
|
||||
@@ -145,12 +146,12 @@ describe("Parsing tests", () => {
|
||||
|
||||
for (let i = 0; i < segment.trkpt.length; i++) {
|
||||
expect(segment.trkpt[i]).toHaveProperty('extensions');
|
||||
expect(segment.trkpt[i].extensions).toHaveProperty('TrackPointExtension');
|
||||
expect(segment.trkpt[i].extensions.TrackPointExtension).toHaveProperty('atemp');
|
||||
expect(segment.trkpt[i].extensions).toHaveProperty('gpxtpx:TrackPointExtension');
|
||||
expect(segment.trkpt[i].extensions['gpxtpx:TrackPointExtension']).toHaveProperty('gpxtpx:atemp');
|
||||
}
|
||||
|
||||
expect(segment.trkpt[0].extensions.TrackPointExtension.atemp).toBe(21);
|
||||
expect(segment.trkpt[segment.trkpt.length - 1].extensions.TrackPointExtension.atemp).toBe(22);
|
||||
expect(segment.trkpt[0].extensions['gpxtpx:TrackPointExtension']['gpxtpx:atemp']).toBe(21);
|
||||
expect(segment.trkpt[segment.trkpt.length - 1].extensions['gpxtpx:TrackPointExtension']['gpxtpx:atemp']).toBe(22);
|
||||
});
|
||||
|
||||
it("Power 1", () => {
|
||||
@@ -163,12 +164,12 @@ describe("Parsing tests", () => {
|
||||
|
||||
for (let i = 0; i < segment.trkpt.length; i++) {
|
||||
expect(segment.trkpt[i]).toHaveProperty('extensions');
|
||||
expect(segment.trkpt[i].extensions).toHaveProperty('PowerExtension');
|
||||
expect(segment.trkpt[i].extensions.PowerExtension).toHaveProperty('PowerInWatts');
|
||||
expect(segment.trkpt[i].extensions).toHaveProperty('gpxpx:PowerExtension');
|
||||
expect(segment.trkpt[i].extensions['gpxpx:PowerExtension']).toHaveProperty('gpxpx:PowerInWatts');
|
||||
}
|
||||
|
||||
expect(segment.trkpt[0].extensions.PowerExtension.PowerInWatts).toBe(200);
|
||||
expect(segment.trkpt[segment.trkpt.length - 1].extensions.PowerExtension.PowerInWatts).toBe(210);
|
||||
expect(segment.trkpt[0].extensions['gpxpx:PowerExtension']['gpxpx:PowerInWatts']).toBe(200);
|
||||
expect(segment.trkpt[segment.trkpt.length - 1].extensions['gpxpx:PowerExtension']['gpxpx:PowerInWatts']).toBe(210);
|
||||
});
|
||||
|
||||
it("Power 2", () => {
|
||||
@@ -181,12 +182,12 @@ describe("Parsing tests", () => {
|
||||
|
||||
for (let i = 0; i < segment.trkpt.length; i++) {
|
||||
expect(segment.trkpt[i]).toHaveProperty('extensions');
|
||||
expect(segment.trkpt[i].extensions).toHaveProperty('PowerExtension');
|
||||
expect(segment.trkpt[i].extensions.PowerExtension).toHaveProperty('PowerInWatts');
|
||||
expect(segment.trkpt[i].extensions).toHaveProperty('gpxpx:PowerExtension');
|
||||
expect(segment.trkpt[i].extensions['gpxpx:PowerExtension']).toHaveProperty('gpxpx:PowerInWatts');
|
||||
}
|
||||
|
||||
expect(segment.trkpt[0].extensions.PowerExtension.PowerInWatts).toBe(200);
|
||||
expect(segment.trkpt[segment.trkpt.length - 1].extensions.PowerExtension.PowerInWatts).toBe(210);
|
||||
expect(segment.trkpt[0].extensions['gpxpx:PowerExtension']['gpxpx:PowerInWatts']).toBe(200);
|
||||
expect(segment.trkpt[segment.trkpt.length - 1].extensions['gpxpx:PowerExtension']['gpxpx:PowerInWatts']).toBe(210);
|
||||
});
|
||||
|
||||
it("Surface", () => {
|
||||
@@ -199,13 +200,13 @@ describe("Parsing tests", () => {
|
||||
|
||||
for (let i = 0; i < segment.trkpt.length; i++) {
|
||||
expect(segment.trkpt[i]).toHaveProperty('extensions');
|
||||
expect(segment.trkpt[i].extensions).toHaveProperty('TrackPointExtension');
|
||||
expect(segment.trkpt[i].extensions.TrackPointExtension).toHaveProperty('Extensions');
|
||||
expect(segment.trkpt[i].extensions.TrackPointExtension.Extensions).toHaveProperty('surface');
|
||||
expect(segment.trkpt[i].extensions).toHaveProperty('gpxtpx:TrackPointExtension');
|
||||
expect(segment.trkpt[i].extensions['gpxtpx:TrackPointExtension']).toHaveProperty('gpxtpx:Extensions');
|
||||
expect(segment.trkpt[i].extensions['gpxtpx:TrackPointExtension']['gpxtpx:Extensions']).toHaveProperty('surface');
|
||||
}
|
||||
|
||||
expect(segment.trkpt[0].extensions.TrackPointExtension.Extensions.surface).toBe("asphalt");
|
||||
expect(segment.trkpt[segment.trkpt.length - 1].extensions.TrackPointExtension.Extensions.surface).toBe("cobblestone");
|
||||
expect(segment.trkpt[0].extensions['gpxtpx:TrackPointExtension']['gpxtpx:Extensions'].surface).toBe("asphalt");
|
||||
expect(segment.trkpt[segment.trkpt.length - 1].extensions['gpxtpx:TrackPointExtension']['gpxtpx:Extensions'].surface).toBe("cobblestone");
|
||||
});
|
||||
|
||||
it("Track style", () => {
|
||||
@@ -216,14 +217,148 @@ describe("Parsing tests", () => {
|
||||
const track = result.trk[0];
|
||||
|
||||
expect(track).toHaveProperty('extensions');
|
||||
expect(track.extensions).toHaveProperty('line');
|
||||
expect(track.extensions).toHaveProperty('gpx_style:line');
|
||||
|
||||
expect(track.extensions.line).toHaveProperty('color');
|
||||
expect(track.extensions.line).toHaveProperty('opacity');
|
||||
expect(track.extensions.line).toHaveProperty('weight');
|
||||
expect(track.extensions['gpx_style:line']).toHaveProperty('color');
|
||||
expect(track.extensions['gpx_style:line']).toHaveProperty('opacity');
|
||||
expect(track.extensions['gpx_style:line']).toHaveProperty('weight');
|
||||
|
||||
expect(track.extensions.line.color).toBe("2d3ee9");
|
||||
expect(track.extensions.line.opacity).toBe(0.5);
|
||||
expect(track.extensions.line.weight).toBe(5);
|
||||
expect(track.extensions['gpx_style:line'].color).toBe("2d3ee9");
|
||||
expect(track.extensions['gpx_style:line'].opacity).toBe(0.5);
|
||||
expect(track.extensions['gpx_style:line'].weight).toBe(5);
|
||||
});
|
||||
});
|
||||
|
||||
describe("Building", () => {
|
||||
it("Simple", () => {
|
||||
const path = "test-data/simple.gpx";
|
||||
const data = fs.readFileSync(path, 'utf8');
|
||||
const original = parseGPX(data);
|
||||
|
||||
const built = buildGPX(original);
|
||||
const rebuilt = parseGPX(built);
|
||||
|
||||
expect(rebuilt).toEqual(original);
|
||||
});
|
||||
|
||||
it("Multiple tracks", () => {
|
||||
const path = "test-data/with_tracks.gpx";
|
||||
const data = fs.readFileSync(path, 'utf8');
|
||||
const original = parseGPX(data);
|
||||
|
||||
const built = buildGPX(original);
|
||||
const rebuilt = parseGPX(built);
|
||||
|
||||
expect(rebuilt).toEqual(original);
|
||||
});
|
||||
|
||||
it("Multiple segments", () => {
|
||||
const path = "test-data/with_segments.gpx";
|
||||
const data = fs.readFileSync(path, 'utf8');
|
||||
const original = parseGPX(data);
|
||||
|
||||
const built = buildGPX(original);
|
||||
const rebuilt = parseGPX(built);
|
||||
|
||||
expect(rebuilt).toEqual(original);
|
||||
});
|
||||
|
||||
it("Waypoint", () => {
|
||||
const path = "test-data/with_waypoint.gpx";
|
||||
const data = fs.readFileSync(path, 'utf8');
|
||||
const original = parseGPX(data);
|
||||
|
||||
const built = buildGPX(original);
|
||||
const rebuilt = parseGPX(built);
|
||||
|
||||
expect(rebuilt).toEqual(original);
|
||||
});
|
||||
|
||||
it("Time", () => {
|
||||
const path = "test-data/with_time.gpx";
|
||||
const data = fs.readFileSync(path, 'utf8');
|
||||
const original = parseGPX(data);
|
||||
|
||||
const built = buildGPX(original);
|
||||
const rebuilt = parseGPX(built);
|
||||
|
||||
expect(rebuilt).toEqual(original);
|
||||
});
|
||||
|
||||
it("Heart rate", () => {
|
||||
const path = "test-data/with_hr.gpx";
|
||||
const data = fs.readFileSync(path, 'utf8');
|
||||
const original = parseGPX(data);
|
||||
|
||||
const built = buildGPX(original);
|
||||
const rebuilt = parseGPX(built);
|
||||
|
||||
expect(rebuilt).toEqual(original);
|
||||
});
|
||||
|
||||
it("Cadence", () => {
|
||||
const path = "test-data/with_cad.gpx";
|
||||
const data = fs.readFileSync(path, 'utf8');
|
||||
const original = parseGPX(data);
|
||||
|
||||
const built = buildGPX(original);
|
||||
const rebuilt = parseGPX(built);
|
||||
|
||||
expect(rebuilt).toEqual(original);
|
||||
});
|
||||
|
||||
it("Temperature", () => {
|
||||
const path = "test-data/with_temp.gpx";
|
||||
const data = fs.readFileSync(path, 'utf8');
|
||||
const original = parseGPX(data);
|
||||
|
||||
const built = buildGPX(original);
|
||||
const rebuilt = parseGPX(built);
|
||||
|
||||
expect(rebuilt).toEqual(original);
|
||||
});
|
||||
|
||||
it("Power 1", () => {
|
||||
const path = "test-data/with_power_1.gpx";
|
||||
const data = fs.readFileSync(path, 'utf8');
|
||||
const original = parseGPX(data);
|
||||
|
||||
const built = buildGPX(original);
|
||||
const rebuilt = parseGPX(built);
|
||||
|
||||
expect(rebuilt).toEqual(original);
|
||||
});
|
||||
|
||||
it("Power 2", () => {
|
||||
const path = "test-data/with_power_2.gpx";
|
||||
const data = fs.readFileSync(path, 'utf8');
|
||||
const original = parseGPX(data);
|
||||
|
||||
const built = buildGPX(original);
|
||||
const rebuilt = parseGPX(built);
|
||||
|
||||
expect(rebuilt).toEqual(original);
|
||||
});
|
||||
|
||||
it("Surface", () => {
|
||||
const path = "test-data/with_surface.gpx";
|
||||
const data = fs.readFileSync(path, 'utf8');
|
||||
const original = parseGPX(data);
|
||||
|
||||
const built = buildGPX(original);
|
||||
const rebuilt = parseGPX(built);
|
||||
|
||||
expect(rebuilt).toEqual(original);
|
||||
});
|
||||
|
||||
it("Track style", () => {
|
||||
const path = "test-data/with_style.gpx";
|
||||
const data = fs.readFileSync(path, 'utf8');
|
||||
const original = parseGPX(data);
|
||||
|
||||
const built = buildGPX(original);
|
||||
const rebuilt = parseGPX(built);
|
||||
|
||||
expect(rebuilt).toEqual(original);
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user