diff --git a/features/step_definitions/matching.js b/features/step_definitions/matching.js index 441d37400..5ab745d6e 100644 --- a/features/step_definitions/matching.js +++ b/features/step_definitions/matching.js @@ -47,12 +47,12 @@ module.exports = function () { if (headers.has('route')) { if (json.matchings.length != 1) throw new Error('*** Checking route only supported for matchings with one subtrace'); - route = this.wayList(json.matchings[0].instructions); + route = this.wayList(json.matchings[0]); } if (headers.has('duration')) { if (json.matchings.length != 1) throw new Error('*** Checking duration only supported for matchings with one subtrace'); - duration = json.matchings[0].route_summary.total_time; + duration = json.matchings[0].duration; } } diff --git a/features/step_definitions/routability.js b/features/step_definitions/routability.js index b23cffafe..a93ee29bb 100644 --- a/features/step_definitions/routability.js +++ b/features/step_definitions/routability.js @@ -66,13 +66,13 @@ module.exports = function () { r.query = this.query; r.json = JSON.parse(body); - r.status = r.json.status === 200 ? 'x' : null; + r.status = res.statusCode === 200 ? 'x' : null; if (r.status) { - r.route = this.wayList(r.json.route_instructions); + r.route = this.wayList(r.json.routes[0]); if (r.route === util.format('w%d', i)) { - r.time = r.json.route_summary.total_time; - r.distance = r.json.route_summary.total_distance; + r.time = r.json.routes[0].duration; + r.distance = r.json.routes[0].distance; r.speed = r.time > 0 ? parseInt(3.6 * r.distance / r.time) : null; } else { r.status = null; @@ -96,15 +96,23 @@ module.exports = function () { }); result.bothw = {}; - ['status', 'time', 'distance', 'speed'].forEach((key) => { + + var sq = d3.queue(); + + var parseRes = (key, scb) => { if (result.forw[key] === result.backw[key]) { result.bothw[key] = result.forw[key]; } else { result.bothw[key] = 'diff'; } + scb(); + } + + ['status', 'time', 'distance', 'speed'].forEach((key) => { + sq.defer(parseRes, key); }); - cb(null, result); + sq.awaitAll(() => { cb(null, result); }); }); }; }; diff --git a/features/support/data.js b/features/support/data.js index c215397a4..abef54c9b 100644 --- a/features/support/data.js +++ b/features/support/data.js @@ -94,13 +94,13 @@ module.exports = function () { q.awaitAll(callback); }; - var ensureDecimal = (i) => { + this.ensureDecimal = (i) => { if (parseInt(i) === i) return i.toFixed(1); else return i; }; this.tableCoordToLonLat = (ci, ri) => { - return [this.origin[0] + ci * this.zoom, this.origin[1] - ri * this.zoom].map(ensureDecimal); + return [this.origin[0] + ci * this.zoom, this.origin[1] - ri * this.zoom].map(this.ensureDecimal); }; this.addOSMNode = (name, lon, lat, id) => { diff --git a/features/support/exception_classes.js b/features/support/exception_classes.js index 609e92914..bb5e62dbc 100644 --- a/features/support/exception_classes.js +++ b/features/support/exception_classes.js @@ -1,6 +1,7 @@ 'use strict'; var util = require('util'); +var path = require('path'); var fs = require('fs'); var OSRMError = class extends Error { @@ -23,8 +24,8 @@ var OSRMError = class extends Error { }); } - logTail (path, n, callback) { - var expanded = path.resolve(this.TEST_FOLDER, path); + logTail (logPath, n, callback) { + var expanded = path.resolve(this.TEST_FOLDER, logPath); fs.exists(expanded, (exists) => { if (exists) { fs.readFile(expanded, (err, data) => { diff --git a/features/support/route.js b/features/support/route.js index 01d3eb312..172cda58f 100644 --- a/features/support/route.js +++ b/features/support/route.js @@ -34,7 +34,7 @@ module.exports = function () { }; var encodeWaypoints = (waypoints) => { - return waypoints.map(w => [w.lon, w.lat].join(',')); + return waypoints.map(w => [w.lon, w.lat].map(this.ensureDecimal).join(',')); }; this.requestRoute = (waypoints, bearings, userParams, callback) => { @@ -43,7 +43,7 @@ module.exports = function () { var defaults = { output: 'json', steps: 'true', - alternative: 'false' + alternatives: 'false' }, params = this.overwriteParams(defaults, userParams), encodedWaypoints = encodeWaypoints(waypoints); @@ -108,18 +108,19 @@ module.exports = function () { return this.requestPath('match', params, callback); }; - this.extractInstructionList = (instructions, index, postfix) => { + this.extractInstructionList = (instructions, keyFinder, postfix) => { postfix = postfix || null; if (instructions) { - return instructions.filter(r => r[0].toString() !== this.DESTINATION_REACHED.toString()) - .map(r => r[index]) - .map(r => (isNaN(parseInt(r)) && (!r || r == '')) ? '""' : '' + r + (postfix || '')) + return Array.prototype.concat.apply([], + instructions.legs.map(l => l.steps)) + .filter(s => s.maneuver.type !== 'arrive') + .map(keyFinder) .join(','); } }; this.wayList = (instructions) => { - return this.extractInstructionList(instructions, 1); + return this.extractInstructionList(instructions, s => s.name); }; this.compassList = (instructions) => { diff --git a/features/support/shared_steps.js b/features/support/shared_steps.js index d7e244cf5..591192f53 100644 --- a/features/support/shared_steps.js +++ b/features/support/shared_steps.js @@ -39,13 +39,13 @@ module.exports = function () { var hasRoute = json.status === 200; if (hasRoute) { - instructions = this.wayList(json.route_instructions); - bearings = this.bearingList(json.route_instructions); - compasses = this.compassList(json.route_instructions); - turns = this.turnList(json.route_instructions); - modes = this.modeList(json.route_instructions); - times = this.timeList(json.route_instructions); - distances = this.distanceList(json.route_instructions); + instructions = this.wayList(json.routes[0]); + bearings = this.bearingList(json.routes[0]); + compasses = this.compassList(json.routes[0]); + turns = this.turnList(json.routes[0]); + modes = this.modeList(json.routes[0]); + times = this.timeList(json.routes[0]); + distances = this.distanceList(json.routes[0]); } if (headers.has('status')) { @@ -81,8 +81,8 @@ module.exports = function () { this.wayList(json.alternative_instructions[0]) : ''; } - var distance = hasRoute && json.route_summary.total_distance, - time = hasRoute && json.route_summary.total_time; + var distance = hasRoute && json.routes[0].distance, + time = hasRoute && json.routes[0].duration; if (headers.has('distance')) { if (row.distance.length) {