From 13ed2ef9360adb7a5a5f25bf36e295116338aaa3 Mon Sep 17 00:00:00 2001 From: Paul Bienkowski Date: Sat, 21 Nov 2020 22:46:18 +0100 Subject: [PATCH] fix: correctly detect dollar hack if there is no dollar at the end, also fix the tests --- logic/_tracks_testdata.js | 6 +++++- logic/tracks.js | 4 ++-- logic/tracks.test.js | 31 ++++++++++++++++--------------- 3 files changed, 23 insertions(+), 18 deletions(-) diff --git a/logic/_tracks_testdata.js b/logic/_tracks_testdata.js index 053df70..e9d3880 100644 --- a/logic/_tracks_testdata.js +++ b/logic/_tracks_testdata.js @@ -350,4 +350,8 @@ Date;Time;Millis;Comment;Latitude;Longitude;Altitude;Course;Speed;HDOP;Satellite 18.11.2020;16:06:16;1282037;;48.723109;9.093963;498;247.62;0;1.01;7;3.74;5;89;20;;0;0;58;49;0;;;31;;7290;44;;;66;;7277;80;;;101;;;128;;;148;;7213;164;;;183;;6901;202;10902;;223;;7060;242;2257;;258;;7057;277;2124;;293;;7045;313;1201;;328;;;361;2137;;371;;6931;396;2055;;407;;6910;432;1201;;442;;;468;2042;;478;;6961;503;1201;;513;;;548;12669;;568;;6909;590;;;617;;7063;636;;;656;;7148;672;;;691;;6777;707;;;727;;6903;747;11631;;767;;;793;1174;;803;;7283;828;;;856;;;889;9154;;908;;7489;929;9129;;943;;7430;965;14679;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; `; -module.exports = { test1, test2 }; +const test3 = `Date;Time;Millis;Comment;Latitude;Longitude;Altitude;Course;Speed;HDOP;Satellites;BatteryLevel;Left;Right;Confirmed;Marked;Invalid;InsidePrivacyArea;Factor;Measurements;Tms1;Lus1;Rus1;Tms2;Lus2;Rus2;Tms3;Lus3;Rus3;Tms4;Lus4;Rus4;Tms5;Lus5;Rus5;Tms6;Lus6;Rus6;Tms7;Lus7;Rus7;Tms8;Lus8;Rus8;Tms9;Lus9;Rus9;Tms10;Lus10;Rus10;Tms11;Lus11;Rus11;Tms12;Lus12;Rus12;Tms13;Lus13;Rus13;Tms14;Lus14;Rus14;Tms15;Lus15;Rus15;Tms16;Lus16;Rus16;Tms17;Lus17;Rus17;Tms18;Lus18;Rus18;Tms19;Lus19;Rus19;Tms20;Lus20;Rus20;Tms21;Lus21;Rus21;Tms22;Lus22;Rus22;Tms23;Lus23;Rus23;Tms24;Lus24;Rus24;Tms25;Lus25;Rus25;Tms26;Lus26;Rus26;Tms27;Lus27;Rus27;Tms28;Lus28;Rus28;Tms29;Lus29;Rus29;Tms30;Lus30;Rus30;Tms31;Lus31;Rus31;Tms32;Lus32;Rus32;Tms33;Lus33;Rus33;Tms34;Lus34;Rus34;Tms35;Lus35;Rus35;Tms36;Lus36;Rus36;Tms37;Lus37;Rus37;Tms38;Lus38;Rus38;Tms39;Lus39;Rus39;Tms40;Lus40;Rus40;Tms41;Lus41;Rus41;Tms42;Lus42;Rus42;Tms43;Lus43;Rus43;Tms44;Lus44;Rus44;Tms45;Lus45;Rus45;Tms46;Lus46;Rus46;Tms47;Lus47;Rus47;Tms48;Lus48;Rus48;Tms49;Lus49;Rus49;Tms50;Lus50;Rus50;Tms51;Lus51;Rus51;Tms52;Lus52;Rus52;Tms53;Lus53;Rus53;Tms54;Lus54;Rus54;Tms55;Lus55;Rus55;Tms56;Lus56;Rus56;Tms57;Lus57;Rus57;Tms58;Lus58;Rus58;Tms59;Lus59;Rus59;Tms60;Lus60;Rus60; +21.11.2020;14:27:00;66890;;;;;;;3.83;4;3.99;;286;0;;0;0;58;5;0;;;41;;18355;67;;;87;;18374;113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +`; + +module.exports = { test1, test2, test3 }; diff --git a/logic/tracks.js b/logic/tracks.js index 55eb6bd..d1e1ce5 100644 --- a/logic/tracks.js +++ b/logic/tracks.js @@ -54,7 +54,7 @@ function _parseString(token) { function replaceDollarNewlinesHack(body) { // see if we are using the hack with $ as newlines, replace them for the csv parser - if (body.endsWith('$')) { + if (body.endsWith('$') || /insidePrivacyArea;\$/.test(body)) { return body.replace(/\$/g, '\n'); } @@ -257,4 +257,4 @@ function* parseObsver2(body) { } } -module.exports = { addPointsToTrack, detectFormat, parseObsver1, parseObsver2 }; +module.exports = { addPointsToTrack, detectFormat, parseObsver1, parseObsver2, replaceDollarNewlinesHack }; diff --git a/logic/tracks.test.js b/logic/tracks.test.js index 5eba701..93d996e 100644 --- a/logic/tracks.test.js +++ b/logic/tracks.test.js @@ -1,7 +1,7 @@ -const { addPointsToTrack, parseObsver1, detectFormat, parseObsver2 } = require('./tracks'); +const { addPointsToTrack, parseObsver1, detectFormat, parseObsver2, replaceDollarNewlinesHack } = require('./tracks'); const TrackInfo = require('./TrackInfo'); -const { test1, test2 } = require('./_tracks_testdata'); +const { test1, test2, test3 } = require('./_tracks_testdata'); describe('addPointsToTrack', () => { it('is a function', () => { @@ -16,33 +16,33 @@ describe('addPointsToTrack', () => { expect(points[0]).toEqual({ date: '12.07.2020', time: '09:02:59', - latitude: 0, - longitude: 0, + latitude: null, + longitude: null, course: 0, speed: 0, - d1: '255', - d2: '255', - flag: '0', - private: '0', + d1: null, + d2: null, + flag: 0, + private: false, }); }); }); describe('parseObsver1', () => { it('can parse sample data', () => { - const points = Array.from(parseObsver1(test1)); + const points = Array.from(parseObsver1(replaceDollarNewlinesHack(test1))); expect(points).toHaveLength(324); expect(points[0]).toEqual({ date: '12.07.2020', time: '09:02:59', - latitude: 0, - longitude: 0, + latitude: null, + longitude: null, course: 0, speed: 0, - d1: '255', - d2: '255', - flag: '0', - private: '0', + d1: null, + d2: null, + flag: 0, + private: false, }); }); }); @@ -87,6 +87,7 @@ describe('detectFormat', () => { it('detects format 2', () => { expect(detectFormat(test2)).toBe(2); + expect(detectFormat(test3)).toBe(2); }); it('detects invalid format', () => {