osrm.js
Version:
REST client for the OSRM server API
159 lines (137 loc) • 4.82 kB
JavaScript
var test = require('tape'),
OSRM = require('../src/osrm');
var testStreet = [13.333086, 52.4224];
var testCoords = [[13.438640,52.519930], [13.415852,52.513191]];
var traceCoordinates = [[13.393252,52.542648], [13.394780,52.543079], [13.397389,52.542107]];
var traceTimestamps = [1424684612, 1424684616, 1424684620];
test('contructor', function(t) {
t.plan(3);
t.throws(function() {new OSRM([1, 2, 3]); });
t.doesNotThrow(function() {new OSRM({url: "http://127.0.0.1:5000", profile: "bicycle", timeout: 2000});});
t.doesNotThrow(function() {new OSRM("http://127.0.0.1:5000");});
});
test('request', function(t) {
t.plan(10);
var osrm = new OSRM();
osrm.request('/route/v1/driving/13.438640,52.519930;13.415852,52.513191', function(error, response) {
t.notOk(error);
t.ok(response.waypoints);
t.ok(response.routes);
t.ok(response.routes[0].geometry);
t.ok(response.routes[0].distance > 0);
t.ok(response.routes[0].duration > 0);
t.ok(response.routes[0].legs);
t.equal(response.routes[0].legs.length, 1);
t.ok(response.routes[0].legs[0].duration > 0);
t.ok(response.routes[0].legs[0].distance > 0);
});
});
test('nearest', function(t) {
t.plan(2);
var osrm = new OSRM();
osrm.nearest({coordinates: [testStreet]}, function(error, response) {
t.notOk(error);
t.ok(response.waypoints);
});
});
test('route with default parameters', function(t) {
t.plan(10);
var osrm = new OSRM();
osrm.route({coordinates: testCoords}, function(error, response) {
t.notOk(error);
t.ok(response.waypoints);
t.ok(response.routes);
t.ok(response.routes[0].geometry);
t.ok(response.routes[0].distance > 0);
t.ok(response.routes[0].duration > 0);
t.ok(response.routes[0].legs);
t.equal(response.routes[0].legs.length, 1);
t.ok(response.routes[0].legs[0].duration > 0);
t.ok(response.routes[0].legs[0].distance > 0);
});
});
test('route with steps', function(t) {
t.plan(11);
var osrm = new OSRM();
osrm.route({coordinates: testCoords, steps: true}, function(error, response) {
t.notOk(error);
t.ok(response.waypoints);
t.ok(response.routes);
t.ok(response.routes[0].geometry);
t.ok(response.routes[0].distance > 0);
t.ok(response.routes[0].duration > 0);
t.ok(response.routes[0].legs);
t.equal(response.routes[0].legs.length, 1);
t.ok(response.routes[0].legs[0].duration > 0);
t.ok(response.routes[0].legs[0].distance > 0);
// at leats arrive + depart
t.ok(response.routes[0].legs[0].steps.length >= 2);
});
});
test('match', function(t) {
t.plan(12);
var osrm = new OSRM();
osrm.match({coordinates: traceCoordinates}, function(error, response) {
t.notOk(error);
t.equal(response.code, "Ok");
t.ok(response.matchings);
t.ok(response.matchings.length > 0);
t.ok(response.tracepoints);
var reference_locations = [[13.393224, 52.542684], [13.394739, 52.543067], [13.397412, 52.542075]];
response.tracepoints.forEach(function (tp, index) {
t.ok(tp);
t.deepEqual(tp.location, reference_locations[index]);
});
t.ok(response.matchings[0].confidence !== undefined);
});
});
test('match with timestamps and classification', function(t) {
t.plan(12);
var osrm = new OSRM();
osrm.match({coordinates: traceCoordinates, timestamps: traceTimestamps}, function(error, response) {
t.notOk(error);
t.equal(response.code, "Ok");
t.ok(response.matchings);
t.ok(response.matchings.length > 0);
t.ok(response.tracepoints);
var reference_locations = [[13.393224, 52.542684], [13.394739, 52.543067], [13.397412, 52.542075]];
response.tracepoints.forEach(function (tp, index) {
t.ok(tp);
t.deepEqual(tp.location, reference_locations[index]);
});
t.ok(response.matchings[0].confidence !== undefined);
});
});
test('table', function(t) {
t.plan(7);
var osrm = new OSRM();
osrm.table({coordinates: testCoords}, function(error, response) {
t.notOk(error);
t.equal(response.code, "Ok");
t.ok(response.durations);
t.equal(response.durations.length, 2);
t.equal(response.durations[0].length, 2);
t.equal(response.durations[0][0], 0);
t.equal(response.durations[1][1], 0);
});
});
test('trip', function(t) {
t.plan(4);
var osrm = new OSRM();
osrm.trip({coordinates: testCoords}, function(error, response) {
t.notOk(error);
t.equal(response.code, "Ok");
t.ok(response.waypoints);
t.ok(response.trips);
});
});
test('tile', function(assert) {
assert.plan(2);
var osrm = new OSRM();
osrm.tile([17603, 10747, 15], function(err, result) {
assert.ifError(err);
var reference = 38768.;
var ratio = Math.round(Math.abs(1 - result.length / reference) * 100);
assert.ok(ratio < 10);
});
});