Merge pull request #41 from mapbox/tape

Tape
This commit is contained in:
Young Hahn
2014-09-30 09:20:36 -07:00
9 changed files with 105 additions and 132 deletions
+7 -2
View File
@@ -1,7 +1,6 @@
environment: environment:
matrix: matrix:
- nodejs_version: 0.10 - nodejs_version: 0.10
- nodejs_version: 0.11
platform: platform:
- x86 - x86
@@ -12,4 +11,10 @@ install:
- node --version - node --version
- npm --version - npm --version
- npm install - npm install
- npm test - npm test
build: OFF
test: OFF
test_script: OFF
deploy: OFF
+2 -2
View File
@@ -28,12 +28,12 @@
"sphericalmercator": "~1.0.1" "sphericalmercator": "~1.0.1"
}, },
"devDependencies": { "devDependencies": {
"mocha": "~1.8.2" "tape": "~3.0.0"
}, },
"engines": { "engines": {
"node": ">= 0.10.0" "node": ">= 0.10.0"
}, },
"scripts": { "scripts": {
"test": "./node_modules/.bin/mocha" "test": "tape test/*.js"
} }
} }
+10 -12
View File
@@ -1,32 +1,30 @@
require('sqlite3').verbose(); require('sqlite3').verbose();
var tape = require('tape');
var fs = require('fs'); var fs = require('fs');
var assert = require('assert');
var MBTiles = require('..'); var MBTiles = require('..');
var fixtureDir = __dirname + '/fixtures/output'; var fixtureDir = __dirname + '/fixtures/output';
var image = fs.readFileSync(__dirname + '/fixtures/images/plain_1_0_0_0.png'); var image = fs.readFileSync(__dirname + '/fixtures/images/plain_1_0_0_0.png');
describe('write', function() { tape('setup', function(assert) {
before(function(done) {
// Recreate output directory to remove previous tests. // Recreate output directory to remove previous tests.
try { fs.unlinkSync(fixtureDir + '/commit_1.mbtiles'); } catch(err) {} try { fs.unlinkSync(fixtureDir + '/commit_1.mbtiles'); } catch(err) {}
try { fs.mkdirSync(fixtureDir, 0755); } catch(err) {} try { fs.mkdirSync(fixtureDir, 0755); } catch(err) {}
done(); assert.end();
}); });
it('test mbtiles commit lock', function(done) { tape('test mbtiles commit lock', function(assert) {
var remaining = 10; var remaining = 10;
new MBTiles('mbtiles://' + fixtureDir + '/commit_1.mbtiles?batch=1', function(err, mbtiles) { new MBTiles('mbtiles://' + fixtureDir + '/commit_1.mbtiles?batch=1', function(err, mbtiles) {
assert.ifError(err); assert.ifError(err, 'new MBTiles');
mbtiles.startWriting(function(err) { mbtiles.startWriting(function(err) {
assert.ifError(err); assert.ifError(err, 'startWriting');
for (var i = 0; i < remaining; i++) mbtiles.putTile(0,0,0,image,putcb); for (var i = 0; i < remaining; i++) mbtiles.putTile(0,0,0,image,putcb);
assert.equal(mbtiles._committing, true); assert.equal(mbtiles._committing, true, 'Sets committing lock');
assert.equal(mbtiles._events.commit.length, 19); assert.equal(mbtiles._events.commit.length, 19, 'Queues commits');
}); });
}); });
function putcb(err) { function putcb(err) {
assert.ifError(err); assert.ifError(err, 'putTile');
if (!--remaining) done(); if (!--remaining) assert.end();
} }
}); });
});
+37 -42
View File
@@ -1,9 +1,7 @@
var fs = require('fs'); var fs = require('fs');
var assert = require('assert');
var util = require('util'); var util = require('util');
var MBTiles = require('..'); var MBTiles = require('..');
var tape = require('tape');
describe('geocoder (carmen) API', function() {
var expected = { var expected = {
bounds: '-141.005548666451,41.6690855919108,-52.615930948992,83.1161164353916', bounds: '-141.005548666451,41.6690855919108,-52.615930948992,83.1161164353916',
@@ -14,50 +12,32 @@ var expected = {
search: 'Canada, CA' search: 'Canada, CA'
}; };
var tmp = '/tmp/mbtiles-test-' + (+new Date).toString(16); var tmp = require('os').tmpdir() + '/mbtiles-test-' + (+new Date).toString(16);
var index; var index;
var from; var from;
var to; var to;
before(function() { try { fs.mkdirSync(tmp); } catch(err) { throw err; }
try { fs.mkdirSync(tmp); } catch(err) { throw err; }
tape('setup', function(assert) {
index = new MBTiles(__dirname + '/fixtures/geocoder_data.mbtiles', assert.end);
}); });
before(function(done) { tape('setup', function(assert) {
index = new MBTiles(__dirname + '/fixtures/geocoder_data.mbtiles', done); from = new MBTiles(__dirname + '/fixtures/geocoder_legacy.mbtiles', assert.end);
}); });
before(function(done) { tape('setup', function(assert) {
from = new MBTiles(__dirname + '/fixtures/geocoder_legacy.mbtiles', done); to = new MBTiles(tmp + '/indexed.mbtiles', assert.end);
});
before(function(done) {
to = new MBTiles(tmp + '/indexed.mbtiles', done);
}); });
after(function(done) { tape('getGeocoderData', function(assert) {
this.timeout(5000);
index.close(function(err) {
if (err) throw err;
from.close(function(err) {
if (err) throw err;
to.close(function(err) {
if (err) throw err;
try { fs.unlinkSync(tmp + '/indexed.mbtiles'); } catch(err) { throw err; }
try { fs.rmdirSync(tmp); } catch(err) { throw err; }
done();
});
});
});
});
it('getGeocoderData', function(done) {
index.getGeocoderData('term', 0, function(err, buffer) { index.getGeocoderData('term', 0, function(err, buffer) {
assert.ifError(err); assert.ifError(err);
assert.equal(3891, buffer.length); assert.equal(3891, buffer.length);
done(); assert.end();
}); });
}); });
it('putGeocoderData', function(done) { tape('putGeocoderData', function(assert) {
this.timeout(5000);
to.startWriting(function(err) { to.startWriting(function(err) {
assert.ifError(err); assert.ifError(err);
to.putGeocoderData('term', 0, new Buffer('asdf'), function(err) { to.putGeocoderData('term', 0, new Buffer('asdf'), function(err) {
@@ -67,14 +47,14 @@ it('putGeocoderData', function(done) {
to.getGeocoderData('term', 0, function(err, buffer) { to.getGeocoderData('term', 0, function(err, buffer) {
assert.ifError(err); assert.ifError(err);
assert.deepEqual('asdf', buffer.toString()); assert.deepEqual('asdf', buffer.toString());
done(); assert.end();
}); });
}); });
}); });
}); });
}); });
it('getIndexableDocs', function(done) { tape('getIndexableDocs', function(assert) {
from.getIndexableDocs({ limit: 10 }, function(err, docs, pointer) { from.getIndexableDocs({ limit: 10 }, function(err, docs, pointer) {
assert.ifError(err); assert.ifError(err);
assert.equal(docs.length, 10); assert.equal(docs.length, 10);
@@ -113,30 +93,30 @@ it('getIndexableDocs', function(done) {
_zxy: [ '4/0/8' ], _zxy: [ '4/0/8' ],
_center: [ -170.73, -14.318 ] _center: [ -170.73, -14.318 ]
}); });
done(); assert.end();
}); });
}); });
}); });
it('geocoderCentroid ABW', function(done) { tape('geocoderCentroid ABW', function(assert) {
from.geocoderCentroid('ABW', ['4/4/7'], function(err, center) { from.geocoderCentroid('ABW', ['4/4/7'], function(err, center) {
assert.ifError(err); assert.ifError(err);
assert.equal(parseFloat(center[0].toFixed(10)), -70.3125); assert.equal(parseFloat(center[0].toFixed(10)), -70.3125);
assert.equal(parseFloat(center[1].toFixed(10)), 12.5545635286); assert.equal(parseFloat(center[1].toFixed(10)), 12.5545635286);
done(); assert.end();
}); });
}); });
it('geocoderCentroid ASM', function(done) { tape('geocoderCentroid ASM', function(assert) {
from.geocoderCentroid('ASM', ['4/0/8'], function(err, center) { from.geocoderCentroid('ASM', ['4/0/8'], function(err, center) {
assert.ifError(err); assert.ifError(err);
assert.equal(parseFloat(center[0].toFixed(10)), -170.859375); assert.equal(parseFloat(center[0].toFixed(10)), -170.859375);
assert.equal(parseFloat(center[1].toFixed(10)), -14.2643830876); assert.equal(parseFloat(center[1].toFixed(10)), -14.2643830876);
done(); assert.end();
}); });
}); });
it('geocoderCentroid USA', function(done) { tape('geocoderCentroid USA', function(assert) {
from.geocoderCentroid('USA', [ from.geocoderCentroid('USA', [
'4/0/7', '4/0/7',
'4/0/6', '4/0/6',
@@ -160,8 +140,23 @@ it('geocoderCentroid USA', function(done) {
assert.ifError(err); assert.ifError(err);
assert.equal(parseFloat(center[0].toFixed(10)), -118.828125); assert.equal(parseFloat(center[0].toFixed(10)), -118.828125);
assert.equal(parseFloat(center[1].toFixed(10)), 46.0732306254); assert.equal(parseFloat(center[1].toFixed(10)), 46.0732306254);
done(); assert.end();
}); });
}); });
tape('cleanup', function(assert) {
index.close(function(err) {
if (err) throw err;
from.close(function(err) {
if (err) throw err;
to.close(function(err) {
if (err) throw err;
try { fs.unlinkSync(tmp + '/indexed.mbtiles'); } catch(err) { throw err; }
try { fs.rmdirSync(tmp); } catch(err) { throw err; }
assert.end();
});
});
});
}); });
+7 -13
View File
@@ -1,19 +1,16 @@
require('sqlite3').verbose(); require('sqlite3').verbose();
var fs = require('fs'); var fs = require('fs');
var tape = require('tape');
var MBTiles = require('..'); var MBTiles = require('..');
var assert = require('assert');
var fixtures = { var fixtures = {
plain_1: __dirname + '/fixtures/plain_1.mbtiles', plain_1: __dirname + '/fixtures/plain_1.mbtiles',
empty: __dirname + '/fixtures/empty.mbtiles' empty: __dirname + '/fixtures/empty.mbtiles'
}; };
describe('info', function() { try { fs.unlinkSync(fixtures.empty); } catch (err) {}
before(function(done) {
try { fs.unlinkSync(fixtures.empty); } catch (err) {} tape('get metadata', function(assert) {
done();
});
it('get metadata', function(done) {
new MBTiles(fixtures.plain_1, function(err, mbtiles) { new MBTiles(fixtures.plain_1, function(err, mbtiles) {
assert.ifError(err); assert.ifError(err);
@@ -39,13 +36,11 @@ describe('info', function() {
basename: 'plain_1.mbtiles' basename: 'plain_1.mbtiles'
}, data); }, data);
done(); assert.end();
}); });
}); });
}); });
it('get/put metadata from empty file', function(done) { tape('get/put metadata from empty file', function(assert) {
this.timeout(10e3);
var info = { var info = {
version: '1.0.0', version: '1.0.0',
level1: { level2: 'property' }, level1: { level2: 'property' },
@@ -91,7 +86,7 @@ describe('info', function() {
custom: [ 'custom list' ] custom: [ 'custom list' ]
}, data); }, data);
done(); assert.end();
}); });
}); });
}); });
@@ -100,4 +95,3 @@ describe('info', function() {
}); });
}); });
}); });
});
+5 -10
View File
@@ -1,23 +1,18 @@
require('sqlite3').verbose(); require('sqlite3').verbose();
var fs = require('fs'); var fs = require('fs');
var tape = require('tape');
var MBTiles = require('..'); var MBTiles = require('..');
var assert = require('assert');
var fixtures = { var fixtures = {
doesnotexist: __dirname + '/doesnotexist' doesnotexist: __dirname + '/doesnotexist'
}; };
describe('list', function() { try { fs.unlinkSync(fixtures.doesnotexist); } catch (err) {}
before(function(done) {
try { fs.unlinkSync(fixtures.doesnotexist); } catch (err) {} tape('list', function(assert) {
done();
});
it('list', function(done) {
MBTiles.list(fixtures.doesnotexist, function(err, list) { MBTiles.list(fixtures.doesnotexist, function(err, list) {
assert.ifError(err); assert.ifError(err);
assert.deepEqual(list, {}); assert.deepEqual(list, {});
done(); assert.end();
}); });
}); });
});
+24 -27
View File
@@ -2,7 +2,7 @@ require('sqlite3').verbose();
var fs = require('fs'); var fs = require('fs');
var MBTiles = require('..'); var MBTiles = require('..');
var assert = require('assert'); var tape = require('tape');
var fixtures = { var fixtures = {
plain_1: __dirname + '/fixtures/plain_1.mbtiles', plain_1: __dirname + '/fixtures/plain_1.mbtiles',
@@ -22,17 +22,14 @@ function yieldsError(assert, error, msg, callback) {
}; };
} }
describe('read', function() {
var loaded = {}; var loaded = {};
before(function(done) { try { fs.unlinkSync(fixtures.non_existent); } catch (err) {}
try { fs.unlinkSync(fixtures.non_existent); } catch (err) {}
done(); tape('setup', function(assert) {
});
before(function(done) {
var queue = Object.keys(fixtures); var queue = Object.keys(fixtures);
var load = function() { var load = function() {
if (!queue.length) return done(); if (!queue.length) return assert.end();
var key = queue.shift(); var key = queue.shift();
new MBTiles(fixtures[key], function(err, mbtiles) { new MBTiles(fixtures[key], function(err, mbtiles) {
if (err) throw err; if (err) throw err;
@@ -50,18 +47,18 @@ describe('read', function() {
// Flip Y coordinate because file names are TMS, but .getTile() expects XYZ. // Flip Y coordinate because file names are TMS, but .getTile() expects XYZ.
coords = [ coords[3], coords[1], coords[2] ]; coords = [ coords[3], coords[1], coords[2] ];
coords[2] = Math.pow(2, coords[0]) - 1 - coords[2]; coords[2] = Math.pow(2, coords[0]) - 1 - coords[2];
it('tile ' + coords.join('/'), function(done) { tape('tile ' + coords.join('/'), function(assert) {
loaded.plain_1.getTile(coords[0] | 0, coords[1] | 0, coords[2] | 0, function(err, tile, headers) { loaded.plain_1.getTile(coords[0] | 0, coords[1] | 0, coords[2] | 0, function(err, tile, headers) {
if (err) throw err; if (err) throw err;
assert.deepEqual(tile, fs.readFileSync(__dirname + '/fixtures/images/' + file)); assert.deepEqual(tile, fs.readFileSync(__dirname + '/fixtures/images/' + file));
assert.equal(headers['Content-Type'], 'image/png'); assert.equal(headers['Content-Type'], 'image/png');
assert.ok(!isNaN(Date.parse(headers['Last-Modified']))); assert.ok(!isNaN(Date.parse(headers['Last-Modified'])));
assert.ok(/\d+-\d+/.test(headers['ETag'])); assert.ok(/\d+-\d+/.test(headers['ETag']));
done(); assert.end();
}); });
}); });
it('grid ' + coords.join('/'), function(done) { tape('grid ' + coords.join('/'), function(assert) {
loaded.plain_1.getGrid(coords[0] | 0, coords[1] | 0, coords[2] | 0, yieldsError(assert, 'error', 'Grid does not exist', done)); loaded.plain_1.getGrid(coords[0] | 0, coords[1] | 0, coords[2] | 0, yieldsError(assert, 'error', 'Grid does not exist', assert.end));
}); });
}); });
[ [0,1,0], [ [0,1,0],
@@ -72,8 +69,8 @@ describe('read', function() {
[18,2,262140], [18,2,262140],
[4,0,15] [4,0,15]
].forEach(function(coords) { ].forEach(function(coords) {
it('tile ' + coords.join('/'), function(done) { tape('tile ' + coords.join('/'), function(assert) {
loaded.plain_1.getTile(coords[0], coords[1], coords[2], yieldsError(assert, 'error', 'Tile does not exist', done)); loaded.plain_1.getTile(coords[0], coords[1], coords[2], yieldsError(assert, 'error', 'Tile does not exist', assert.end));
}); });
}); });
@@ -84,24 +81,24 @@ describe('read', function() {
// Flip Y coordinate because file names are TMS, but .getTile() expects XYZ. // Flip Y coordinate because file names are TMS, but .getTile() expects XYZ.
coords = [ coords[3], coords[1], coords[2] ]; coords = [ coords[3], coords[1], coords[2] ];
coords[2] = Math.pow(2, coords[0]) - 1 - coords[2]; coords[2] = Math.pow(2, coords[0]) - 1 - coords[2];
it('grid ' + coords.join('/'), function(done) { tape('grid ' + coords.join('/'), function(assert) {
loaded.plain_2.getGrid(coords[0] | 0, coords[1] | 0, coords[2] | 0, function(err, grid, headers) { loaded.plain_2.getGrid(coords[0] | 0, coords[1] | 0, coords[2] | 0, function(err, grid, headers) {
if (err) throw err; if (err) throw err;
assert.deepEqual(JSON.stringify(grid), fs.readFileSync(__dirname + '/fixtures/grids/' + file, 'utf8')); assert.deepEqual(JSON.stringify(grid), fs.readFileSync(__dirname + '/fixtures/grids/' + file, 'utf8'));
assert.equal(headers['Content-Type'], 'text/javascript'); assert.equal(headers['Content-Type'], 'text/javascript');
assert.ok(!isNaN(Date.parse(headers['Last-Modified']))); assert.ok(!isNaN(Date.parse(headers['Last-Modified'])));
assert.ok(/\d+-\d+/.test(headers['ETag'])); assert.ok(/\d+-\d+/.test(headers['ETag']));
done(); assert.end();
}); });
}); });
it('grid alt ' + coords.join('/'), function(done) { tape('grid alt ' + coords.join('/'), function(assert) {
loaded.plain_4.getGrid(coords[0] | 0, coords[1] | 0, coords[2] | 0, function(err, grid, headers) { loaded.plain_4.getGrid(coords[0] | 0, coords[1] | 0, coords[2] | 0, function(err, grid, headers) {
if (err) throw err; if (err) throw err;
assert.deepEqual(JSON.stringify(grid), fs.readFileSync(__dirname + '/fixtures/grids/' + file, 'utf8')); assert.deepEqual(JSON.stringify(grid), fs.readFileSync(__dirname + '/fixtures/grids/' + file, 'utf8'));
assert.equal(headers['Content-Type'], 'text/javascript'); assert.equal(headers['Content-Type'], 'text/javascript');
assert.ok(!isNaN(Date.parse(headers['Last-Modified']))); assert.ok(!isNaN(Date.parse(headers['Last-Modified'])));
assert.ok(/\d+-\d+/.test(headers['ETag'])); assert.ok(/\d+-\d+/.test(headers['ETag']));
done(); assert.end();
}); });
}); });
}); });
@@ -113,11 +110,11 @@ describe('read', function() {
[18,2,262140], [18,2,262140],
[4,0,15] [4,0,15]
].forEach(function(coords) { ].forEach(function(coords) {
it('grid ' + coords.join('/'), function(done) { tape('grid ' + coords.join('/'), function(assert) {
loaded.plain_2.getGrid(coords[0], coords[1], coords[2], yieldsError(assert, 'error', 'Grid does not exist', done)); loaded.plain_2.getGrid(coords[0], coords[1], coords[2], yieldsError(assert, 'error', 'Grid does not exist', assert.end));
}); });
it('grid alt ' + coords.join('/'), function(done) { tape('grid alt ' + coords.join('/'), function(assert) {
loaded.plain_4.getGrid(coords[0], coords[1], coords[2], yieldsError(assert, 'error', 'Grid does not exist', done)); loaded.plain_4.getGrid(coords[0], coords[1], coords[2], yieldsError(assert, 'error', 'Grid does not exist', assert.end));
}); });
}); });
[ [0,1,0], [ [0,1,0],
@@ -135,11 +132,11 @@ describe('read', function() {
[3,0,7], [3,0,7],
[3,6,2] [3,6,2]
].forEach(function(coords) { ].forEach(function(coords) {
it('dne ' + coords.join('/'), function(done) { tape('dne ' + coords.join('/'), function(assert) {
loaded.non_existent.getTile(coords[0], coords[1], coords[2], yieldsError(assert, 'error', 'Tile does not exist', done)); loaded.non_existent.getTile(coords[0], coords[1], coords[2], yieldsError(assert, 'error', 'Tile does not exist', assert.end));
}); });
it('corrupt ' + coords.join('/'), function(done) { tape('corrupt ' + coords.join('/'), function(assert) {
loaded.corrupt.getTile(coords[0], coords[1], coords[2], yieldsError(assert, 'error', 'SQLITE_CORRUPT: database disk image is malformed', done)); loaded.corrupt.getTile(coords[0], coords[1], coords[2], yieldsError(assert, 'error', 'SQLITE_CORRUPT: database disk image is malformed', assert.end));
}); });
}); });
});
+6 -12
View File
@@ -1,20 +1,15 @@
require('sqlite3').verbose(); require('sqlite3').verbose();
var fs = require('fs'); var fs = require('fs');
var assert = require('assert'); var tape = require('tape');
var MBTiles = require('..'); var MBTiles = require('..');
var fixtureDir = __dirname + '/fixtures/output'; var fixtureDir = __dirname + '/fixtures/output';
describe('write', function() { // Recreate output directory to remove previous tests.
before(function(done) { try { fs.unlinkSync(fixtureDir + '/write_1.mbtiles'); } catch(err) {}
// Recreate output directory to remove previous tests. try { fs.mkdirSync(fixtureDir, 0755); } catch(err) {}
try { fs.unlinkSync(fixtureDir + '/write_1.mbtiles'); } catch(err) {}
try { fs.mkdirSync(fixtureDir, 0755); } catch(err) {}
done();
});
it('test mbtiles file creation', function(done) {
this.timeout(20e3);
tape('test mbtiles file creation', function(assert) {
var completed = { written: 0, read: 0 }; var completed = { written: 0, read: 0 };
new MBTiles(fixtureDir + '/write_1.mbtiles', function(err, mbtiles) { new MBTiles(fixtureDir + '/write_1.mbtiles', function(err, mbtiles) {
completed.open = true; completed.open = true;
@@ -58,11 +53,10 @@ describe('write', function() {
if (err) throw err; if (err) throw err;
assert.deepEqual(tile, fs.readFileSync(__dirname + '/fixtures/images/' + file)); assert.deepEqual(tile, fs.readFileSync(__dirname + '/fixtures/images/' + file));
completed.read++; completed.read++;
if (completed.read === 285) done(); if (completed.read === 285) assert.end();
}); });
} }
}); });
} }
}); });
}); });
});
+7 -12
View File
@@ -1,19 +1,15 @@
require('sqlite3').verbose(); require('sqlite3').verbose();
var fs = require('fs'); var fs = require('fs');
var assert = require('assert'); var tape = require('tape');
var MBTiles = require('..'); var MBTiles = require('..');
var fixtureDir = __dirname + '/fixtures/output'; var fixtureDir = __dirname + '/fixtures/output';
describe('write grids', function() { // Recreate output directory to remove previous tests.
before(function(done) { try { fs.unlinkSync(fixtureDir + '/write_2.mbtiles'); } catch(err) {}
// Recreate output directory to remove previous tests. try { fs.mkdirSync(fixtureDir, 0755); } catch(err) {}
try { fs.unlinkSync(fixtureDir + '/write_2.mbtiles'); } catch(err) {}
try { fs.mkdirSync(fixtureDir, 0755); } catch(err) {} tape('test mbtiles file creation', function(assert) {
done();
});
it('test mbtiles file creation', function(done) {
this.timeout(20e3);
var completed = { written: 0, read: 0 }; var completed = { written: 0, read: 0 };
new MBTiles(fixtureDir + '/write_2.mbtiles', function(err, mbtiles) { new MBTiles(fixtureDir + '/write_2.mbtiles', function(err, mbtiles) {
completed.open = true; completed.open = true;
@@ -57,11 +53,10 @@ describe('write grids', function() {
if (err) throw err; if (err) throw err;
assert.deepEqual(JSON.stringify(grid), fs.readFileSync(__dirname + '/fixtures/grids/' + file, 'utf8')); assert.deepEqual(JSON.stringify(grid), fs.readFileSync(__dirname + '/fixtures/grids/' + file, 'utf8'));
completed.read++; completed.read++;
if (completed.read === 241) done(); if (completed.read === 241) assert.end();
}); });
} }
}); });
} }
}); });
}); });
});