107 lines
3.5 KiB
JavaScript
107 lines
3.5 KiB
JavaScript
BR = {};
|
|
BR.conf = {};
|
|
$ = require('jquery');
|
|
require('leaflet');
|
|
turf = require('@turf/turf');
|
|
require('../../js/Browser.js');
|
|
require('../../js/control/Export.js');
|
|
const fs = require('fs');
|
|
|
|
const indexHtmlString = fs.readFileSync('index.html', 'utf8');
|
|
const indexHtml = new DOMParser().parseFromString(indexHtmlString, 'text/html');
|
|
|
|
// &lonlats=8.467712,49.488117;8.469354,49.488394;8.470556,49.488946;8.469982,49.489176 + turnInstructionMode=2
|
|
const segments = require('./data/segments.json');
|
|
const brouterTotal = require('./data/brouterTotal.json');
|
|
|
|
// resolve intended/accepted differences before comparing
|
|
function adopt(total, brouterTotal) {
|
|
// BRouter total aggregates messages over segments, client total does not,
|
|
// but that's Ok, so just fix for the test comparison
|
|
const messages = total.features[0].properties.messages;
|
|
const message = messages[4].slice();
|
|
messages[4] = message;
|
|
message[3] = (+message[3] + +messages[2][3] + +messages[3][3]).toString();
|
|
message[6] = (+message[6] + +messages[2][6] + +messages[3][6]).toString();
|
|
messages.splice(2, 2);
|
|
|
|
// fix minor float rounding difference
|
|
total.features[0].properties.times[6] = 28.833; // 28.832
|
|
|
|
total.features[0].properties.name = brouterTotal.features[0].properties.name;
|
|
}
|
|
|
|
let track;
|
|
const getLngCoord = (i) => track.features[i].geometry.coordinates[0];
|
|
const getProperty = (i, p) => track.features[i].properties[p];
|
|
|
|
beforeEach(() => {
|
|
document.body = indexHtml.body.cloneNode(true);
|
|
|
|
track = turf.featureCollection([
|
|
turf.lineString([
|
|
[0, 0],
|
|
[1, 1],
|
|
[2, 2],
|
|
]),
|
|
]);
|
|
});
|
|
|
|
test('total track', () => {
|
|
const segmentsString = JSON.stringify(segments, null, 2);
|
|
let total = BR.Export._concatTotalTrack(segments);
|
|
adopt(total, brouterTotal);
|
|
expect(total).toEqual(brouterTotal);
|
|
|
|
// test original segments are not modified
|
|
expect(JSON.stringify(segments, null, 2)).toEqual(segmentsString);
|
|
|
|
// should be repeatable
|
|
total = BR.Export._concatTotalTrack(segments);
|
|
adopt(total, brouterTotal);
|
|
expect(total).toEqual(brouterTotal);
|
|
});
|
|
|
|
test('include route points', () => {
|
|
const latLngs = [L.latLng(0, 0), L.latLng(1, 1), L.latLng(2, 2)];
|
|
const exportRoute = new BR.Export();
|
|
|
|
exportRoute.update(latLngs, null);
|
|
exportRoute._addRouteWaypoints(track);
|
|
|
|
expect(track.features[0].geometry.type).toEqual('LineString');
|
|
expect(getLngCoord(1)).toEqual(0);
|
|
expect(getLngCoord(2)).toEqual(1);
|
|
expect(getLngCoord(3)).toEqual(2);
|
|
expect(getProperty(1, 'name')).toEqual('from');
|
|
expect(getProperty(2, 'name')).toEqual('via1');
|
|
expect(getProperty(3, 'name')).toEqual('to');
|
|
expect(getProperty(1, 'type')).toEqual('from');
|
|
expect(getProperty(2, 'type')).toEqual('via');
|
|
expect(getProperty(3, 'type')).toEqual('to');
|
|
});
|
|
|
|
test('pois', () => {
|
|
const markers = [
|
|
{
|
|
latlng: L.latLng(1, 1),
|
|
name: 'poi 1',
|
|
},
|
|
{
|
|
latlng: L.latLng(2, 2),
|
|
name: 'poi 2',
|
|
},
|
|
];
|
|
const pois = { getMarkers: () => markers };
|
|
const exportRoute = new BR.Export(null, pois, null);
|
|
|
|
exportRoute._addPois(track);
|
|
|
|
expect(track.features[0].geometry.type).toEqual('LineString');
|
|
expect(getLngCoord(1)).toEqual(1);
|
|
expect(getLngCoord(2)).toEqual(2);
|
|
expect(getProperty(1, 'name')).toEqual('poi 1');
|
|
expect(getProperty(2, 'name')).toEqual('poi 2');
|
|
expect(getProperty(1, 'type')).toEqual('poi');
|
|
expect(getProperty(2, 'type')).toEqual('poi');
|
|
});
|