From 4cf1dcc173b4618c1b3aa8c6a4f3b22d8a09ea65 Mon Sep 17 00:00:00 2001 From: Young Hahn Date: Fri, 12 Jul 2013 04:22:00 -0400 Subject: [PATCH] Switch tests to mocha. --- lib/mbtiles.js | 2 +- package.json | 4 +- test/info.test.js | 152 ++++++++---------- test/list.test.js | 26 +-- test/read.test.js | 337 +++++++++++++-------------------------- test/reloading.test.js | 107 ------------- test/write.test.js | 112 +++++++------ test/write_grids.test.js | 114 +++++++------ 8 files changed, 303 insertions(+), 551 deletions(-) delete mode 100644 test/reloading.test.js diff --git a/lib/mbtiles.js b/lib/mbtiles.js index 701d904..596ddb4 100644 --- a/lib/mbtiles.js +++ b/lib/mbtiles.js @@ -164,7 +164,7 @@ MBTiles.prototype.getTile = function(z, x, y, callback) { 'zoom_level = ? AND tile_column = ? AND tile_row = ?', z, x, y, function(err, row) { - if (!row || (err && err.errno == 1)) { + if ((!err && !row) || (err && err.errno == 1)) { return callback(new Error('Tile does not exist')); } else if (err) { return callback(err); diff --git a/package.json b/package.json index 77595f9..6bc4138 100644 --- a/package.json +++ b/package.json @@ -36,12 +36,12 @@ "sphericalmercator": "~1.0.1" }, "devDependencies": { - "expresso": "~0.9.0" + "mocha": "~1.8.2" }, "engines": { "node": ">= 0.6.0" }, "scripts": { - "test": "expresso" + "test": "mocha" } } diff --git a/test/info.test.js b/test/info.test.js index c6467b2..1e3596c 100644 --- a/test/info.test.js +++ b/test/info.test.js @@ -1,98 +1,89 @@ process.env.NODE_ENV = 'test'; var fs = require('fs'); -var Step = require('step'); var MBTiles = require('..'); - +var assert = require('assert'); var fixtures = { plain_1: __dirname + '/fixtures/plain_1.mbtiles', empty: __dirname + '/fixtures/empty.mbtiles' }; -try { fs.unlink(fixtures.empty); } catch (err) {} - - -exports['get metadata'] = function(beforeExit, assert) { - var completed = false; - - new MBTiles(fixtures.plain_1, function(err, mbtiles) { - if (err) throw err; - - mbtiles.getInfo(function(err, data) { - completed = true; - if (err) throw err; - - assert.deepEqual({ - name: 'plain_1', - description: 'demo description', - version: '1.0.3', - scheme: 'tms', - minzoom: 0, - maxzoom: 4, - formatter: null, - center: [ 0, 7.500000001278025, 2 ], - bounds: [ -179.9999999749438, -69.99999999526695, 179.9999999749438, 84.99999999782301 ], - - // These aren't part of TileJSON, but exist in an MBTiles file. - filesize: 561152, - type: 'baselayer', - id: 'plain_1', - basename: 'plain_1.mbtiles' - }, data); - }) +describe('info', function() { + before(function(done) { + try { fs.unlinkSync(fixtures.empty); } catch (err) {} + done(); }); + it('get metadata', function(done) { + new MBTiles(fixtures.plain_1, function(err, mbtiles) { + assert.ifError(err); - beforeExit(function() { - assert.ok(completed); + mbtiles.getInfo(function(err, data) { + assert.ifError(err); + + assert.deepEqual({ + name: 'plain_1', + description: 'demo description', + version: '1.0.3', + scheme: 'tms', + minzoom: 0, + maxzoom: 4, + formatter: null, + center: [ 0, 7.500000001278025, 2 ], + bounds: [ -179.9999999749438, -69.99999999526695, 179.9999999749438, 84.99999999782301 ], + + // These aren't part of TileJSON, but exist in an MBTiles file. + filesize: 561152, + type: 'baselayer', + id: 'plain_1', + basename: 'plain_1.mbtiles' + }, data); + + done(); + }); + }); }); -}; + it('get/put metadata from empty file', function(done) { + this.timeout(5e3); -exports['get/put metadata from empty file'] = function(beforeExit, assert) { - var completion = {}; + new MBTiles(fixtures.empty, function(err, mbtiles) { + assert.ifError(err); - new MBTiles(fixtures.empty, function(err, mbtiles) { - if (err) throw err; - completion.open = true; + mbtiles.getInfo(function(err, data) { + assert.ifError(err); - mbtiles.getInfo(function(err, data) { - if (err) throw err; - completion.info = true; + assert.deepEqual({ + basename: "empty.mbtiles", + filesize: 0, + id: "empty", + scheme: "tms" + }, data); - assert.deepEqual({ - basename: "empty.mbtiles", - filesize: 0, - id: "empty", - scheme: "tms" - }, data); + mbtiles.putInfo({ version: '1.0.0' }, function(err) { + assert.ok(err); + assert.equal(err.message, 'MBTiles not in write mode'); - mbtiles.putInfo({ version: '1.0.0' }, function(err) { - assert.ok(err); - assert.equal(err.message, 'MBTiles not in write mode'); - completion.putFail = true; + mbtiles.startWriting(function(err) { + assert.ifError(err); - mbtiles.startWriting(function(err) { - if (err) throw err; - completion.startWriting = true; + mbtiles.putInfo({ version: '1.0.0' }, function(err) { + assert.ifError(err); - mbtiles.putInfo({ version: '1.0.0' }, function(err) { - if (err) throw err; - completion.written = true; + mbtiles.stopWriting(function(err) { + assert.ifError(err); - mbtiles.stopWriting(function(err) { - if (err) throw err; - completion.stopWriting = true; + mbtiles.getInfo(function(err, data) { + assert.ifError(err); - mbtiles.getInfo(function(err, data) { - if (err) throw err; - completion.updatedInfo = true; + assert.deepEqual({ + basename: "empty.mbtiles", + filesize: 0, + id: "empty", + scheme: "tms", + version: "1.0.0" + }, data); - assert.deepEqual({ - basename: "empty.mbtiles", - filesize: 0, - id: "empty", - scheme: "tms", - version: "1.0.0" - }, data); + done(); + }); }); }); }); @@ -100,17 +91,4 @@ exports['get/put metadata from empty file'] = function(beforeExit, assert) { }); }); }); - - beforeExit(function() { - assert.deepEqual(completion, { - info: true, - open: true, - putFail: true, - startWriting: true, - stopWriting: true, - updatedInfo: true, - written: true - }); - }); -}; - +}); diff --git a/test/list.test.js b/test/list.test.js index 845f142..0b2382b 100644 --- a/test/list.test.js +++ b/test/list.test.js @@ -1,23 +1,23 @@ process.env.NODE_ENV = 'test'; var fs = require('fs'); -var Step = require('step'); var MBTiles = require('..'); - +var assert = require('assert'); var fixtures = { doesnotexist: __dirname + '/doesnotexist' }; -try { fs.unlink(fixtures.doesnotexist); } catch (err) {} - - -exports['list'] = function(beforeExit, assert) { - var completed = false; beforeExit(function() { assert.ok(completed); }); - - MBTiles.list(fixtures.doesnotexist, function(err, list) { - completed = true; - assert.equal(err, null); - assert.deepEqual(list, {}); +describe('list', function() { + before(function(done) { + try { fs.unlinkSync(fixtures.doesnotexist); } catch (err) {} + done(); }); -}; + it('list', function(done) { + MBTiles.list(fixtures.doesnotexist, function(err, list) { + assert.ifError(err); + assert.deepEqual(list, {}); + done(); + }); + }); +}); diff --git a/test/read.test.js b/test/read.test.js index b0f4ac5..73920f7 100644 --- a/test/read.test.js +++ b/test/read.test.js @@ -2,7 +2,7 @@ process.env.NODE_ENV = 'test'; var fs = require('fs'); var MBTiles = require('..'); - +var assert = require('assert'); var fixtures = { plain_1: __dirname + '/fixtures/plain_1.mbtiles', @@ -13,244 +13,133 @@ var fixtures = { corrupt: __dirname + '/fixtures/corrupt.mbtiles' }; -try { fs.unlink(fixtures.non_existent); } catch (err) {} - -function yieldsError(assert, status, error, msg) { +function yieldsError(assert, error, msg, callback) { return function(err) { assert.ok(err); var re = new RegExp( "^" + msg, "i"); assert.ok(err.message.match(re)); - status[error]++; + if (callback) callback(); }; } +describe('read', function() { + var loaded = {}; -exports['get tiles'] = function(beforeExit, assert) { - var status = { - success: 0, - error: 0 - }; + before(function(done) { + try { fs.unlinkSync(fixtures.non_existent); } catch (err) {} + done(); + }); + before(function(done) { + var queue = Object.keys(fixtures); + var load = function() { + if (!queue.length) return done(); + var key = queue.shift(); + new MBTiles(fixtures[key], function(err, mbtiles) { + if (err) throw err; + loaded[key] = mbtiles; + load(); + }); + }; + load(); + }); - new MBTiles(fixtures.plain_1, function(err, mbtiles) { - if (err) throw err; - fs.readdirSync(__dirname + '/fixtures/images/').forEach(function(file) { - var coords = file.match(/^plain_1_(\d+)_(\d+)_(\d+).png$/); - if (coords) { - // Flip Y coordinate because file names are TMS, but .getTile() expects XYZ. - coords[2] = Math.pow(2, coords[3]) - 1 - coords[2]; - mbtiles.getTile(coords[3] | 0, coords[1] | 0, coords[2] | 0, function(err, tile, headers) { - if (err) throw err; - assert.deepEqual(tile, fs.readFileSync(__dirname + '/fixtures/images/' + file)); - assert.equal(headers['Content-Type'], 'image/png'); - assert.ok(!isNaN(Date.parse(headers['Last-Modified']))); - assert.ok(/\d+-\d+/.test(headers['ETag'])); - status.success++; - }); - } + fs.readdirSync(__dirname + '/fixtures/images/').forEach(function(file) { + var coords = file.match(/^plain_1_(\d+)_(\d+)_(\d+).png$/); + if (!coords) return; + + // Flip Y coordinate because file names are TMS, but .getTile() expects XYZ. + coords = [ coords[3], coords[1], coords[2] ]; + coords[2] = Math.pow(2, coords[0]) - 1 - coords[2]; + it('tile ' + coords.join('/'), function(done) { + loaded.plain_1.getTile(coords[0] | 0, coords[1] | 0, coords[2] | 0, function(err, tile, headers) { + if (err) throw err; + assert.deepEqual(tile, fs.readFileSync(__dirname + '/fixtures/images/' + file)); + assert.equal(headers['Content-Type'], 'image/png'); + assert.ok(!isNaN(Date.parse(headers['Last-Modified']))); + assert.ok(/\d+-\d+/.test(headers['ETag'])); + done(); + }); }); - - mbtiles.getTile(0, 1, 0, yieldsError(assert, status, 'error', 'Tile does not exist')); - mbtiles.getTile(-1, 0, 0, yieldsError(assert, status, 'error', 'Tile does not exist')); - mbtiles.getTile(0, 0, 1, yieldsError(assert, status, 'error', 'Tile does not exist')); - mbtiles.getTile(3, 1, -1, yieldsError(assert, status, 'error', 'Tile does not exist')); - mbtiles.getTile(2, -3, 3, yieldsError(assert, status, 'error', 'Tile does not exist')); - mbtiles.getTile(18, 2, 262140, yieldsError(assert, status, 'error', 'Tile does not exist')); - mbtiles.getTile(4, 0, 15, yieldsError(assert, status, 'error', 'Tile does not exist')); - }); - - - beforeExit(function() { - assert.equal(status.success, 285); - assert.equal(status.error, 7); - }); -}; - -exports['get grids'] = function(beforeExit, assert) { - var status = { - success: 0, - error: 0 - }; - - new MBTiles(fixtures.plain_2, function(err, mbtiles) { - if (err) throw err; - fs.readdirSync(__dirname + '/fixtures/grids/').forEach(function(file) { - var coords = file.match(/^plain_2_(\d+)_(\d+)_(\d+).json$/); - if (coords) { - // Flip Y coordinate because file names are TMS, but .getTile() expects XYZ. - coords[2] = Math.pow(2, coords[3]) - 1 - coords[2]; - mbtiles.getGrid(coords[3] | 0, coords[1] | 0, coords[2] | 0, function(err, grid, headers) { - if (err) throw err; - assert.deepEqual(JSON.stringify(grid), fs.readFileSync(__dirname + '/fixtures/grids/' + file, 'utf8')); - assert.equal(headers['Content-Type'], 'text/javascript'); - assert.ok(!isNaN(Date.parse(headers['Last-Modified']))); - assert.ok(/\d+-\d+/.test(headers['ETag'])); - status.success++; - }); - } + it('grid ' + coords.join('/'), function(done) { + loaded.plain_1.getGrid(coords[0] | 0, coords[1] | 0, coords[2] | 0, yieldsError(assert, 'error', 'Grid does not exist', done)); }); - - mbtiles.getGrid(0, 1, 0, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(-1, 0, 0, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(0, 0, 1, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(3, 1, -1, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(2, -3, 3, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(18, 2, 262140, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(4, 0, 15, yieldsError(assert, status, 'error', 'Grid does not exist')); }); - - - beforeExit(function() { - assert.equal(status.success, 241); - assert.equal(status.error, 7); - }); -}; - - -exports['get grids from file without interaction'] = function(beforeExit, assert) { - var status = { - success: 0, - error: 0 - }; - - new MBTiles(fixtures.plain_1, function(err, mbtiles) { - if (err) throw err; - mbtiles.getGrid(0, 1, 0, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(-1, 0, 0, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(0, 0, -1, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(3, 1, 8, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(2, -3, 0, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(18, 2, 3, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(4, 0, 0, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(4, 3, 8, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(4, 4, 8, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(4, 5, 8, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(4, 13, 4, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(4, 0, 14, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(3, 0, 7, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(3, 6, 2, yieldsError(assert, status, 'error', 'Grid does not exist')); - }); - - beforeExit(function() { - assert.equal(status.success, 0); - assert.equal(status.error, 14); - }); -}; - -exports['get grids with different schema'] = function(beforeExit, assert) { - var status = { - success: 0, - error: 0 - }; - - new MBTiles(fixtures.plain_4, function(err, mbtiles) { - if (err) throw err; - fs.readdirSync(__dirname + '/fixtures/grids/').forEach(function(file) { - var coords = file.match(/^plain_2_(\d+)_(\d+)_(\d+).json$/); - if (coords) { - // Flip Y coordinate because file names are TMS, but .getTile() expects XYZ. - coords[2] = Math.pow(2, coords[3]) - 1 - coords[2]; - mbtiles.getGrid(coords[3] | 0, coords[1] | 0, coords[2] | 0, function(err, grid) { - if (err) throw err; - assert.deepEqual(JSON.stringify(grid), fs.readFileSync(__dirname + '/fixtures/grids/' + file, 'utf8')); - status.success++; - }); - } + [ [0,1,0], + [-1,0,0], + [0,0,1], + [3,1,-1], + [2,-3,3], + [18,2,262140], + [4,0,15] + ].forEach(function(coords) { + it('tile ' + coords.join('/'), function(done) { + loaded.plain_1.getTile(coords[0], coords[1], coords[2], yieldsError(assert, 'error', 'Tile does not exist', done)); }); - - mbtiles.getGrid(0, 1, 0, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(-1, 0, 0, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(0, 0, 1, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(3, 1, -1, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(2, -3, 3, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(18, 2, 262140, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(4, 0, 15, yieldsError(assert, status, 'error', 'Grid does not exist')); }); - beforeExit(function() { - assert.equal(status.success, 241); - assert.equal(status.error, 7); + fs.readdirSync(__dirname + '/fixtures/grids/').forEach(function(file) { + var coords = file.match(/^plain_2_(\d+)_(\d+)_(\d+).json$/); + if (!coords) return; + + // Flip Y coordinate because file names are TMS, but .getTile() expects XYZ. + coords = [ coords[3], coords[1], coords[2] ]; + coords[2] = Math.pow(2, coords[0]) - 1 - coords[2]; + it('grid ' + coords.join('/'), function(done) { + loaded.plain_2.getGrid(coords[0] | 0, coords[1] | 0, coords[2] | 0, function(err, grid, headers) { + if (err) throw err; + assert.deepEqual(JSON.stringify(grid), fs.readFileSync(__dirname + '/fixtures/grids/' + file, 'utf8')); + assert.equal(headers['Content-Type'], 'text/javascript'); + assert.ok(!isNaN(Date.parse(headers['Last-Modified']))); + assert.ok(/\d+-\d+/.test(headers['ETag'])); + done(); + }); + }); + it('grid alt ' + coords.join('/'), function(done) { + loaded.plain_4.getGrid(coords[0] | 0, coords[1] | 0, coords[2] | 0, function(err, grid, headers) { + if (err) throw err; + assert.deepEqual(JSON.stringify(grid), fs.readFileSync(__dirname + '/fixtures/grids/' + file, 'utf8')); + assert.equal(headers['Content-Type'], 'text/javascript'); + assert.ok(!isNaN(Date.parse(headers['Last-Modified']))); + assert.ok(/\d+-\d+/.test(headers['ETag'])); + done(); + }); + }); }); -}; - - -exports['get grids from file without interaction'] = function(beforeExit, assert) { - var status = { - success: 0, - error: 0 - }; - - new MBTiles(fixtures.plain_1, function(err, mbtiles) { - if (err) throw err; - mbtiles.getGrid(0, 1, 0, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(-1, 0, 0, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(0, 0, -1, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(3, 1, 8, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(2, -3, 0, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(18, 2, 3, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(4, 0, 0, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(4, 3, 8, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(4, 4, 8, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(4, 5, 8, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(4, 13, 4, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(4, 0, 14, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(3, 0, 7, yieldsError(assert, status, 'error', 'Grid does not exist')); - mbtiles.getGrid(3, 6, 2, yieldsError(assert, status, 'error', 'Grid does not exist')); + [ [0,1,0], + [-1,0,0], + [0,0,1], + [3,1,-1], + [2,-3,3], + [18,2,262140], + [4,0,15] + ].forEach(function(coords) { + it('grid ' + coords.join('/'), function(done) { + loaded.plain_2.getGrid(coords[0], coords[1], coords[2], yieldsError(assert, 'error', 'Grid does not exist', done)); + }); + it('grid alt ' + coords.join('/'), function(done) { + loaded.plain_4.getGrid(coords[0], coords[1], coords[2], yieldsError(assert, 'error', 'Grid does not exist', done)); + }); }); - - beforeExit(function() { - assert.equal(status.success, 0); - assert.equal(status.error, 14); + [ [0,1,0], + [-1,0,0], + [0,0,-1], + [3,1,8], + [2,-3,0], + [18,2,3], + [4,0,0], + [4,3,8], + [4,4,8], + [4,5,8], + [4,13,4], + [4,0,14], + [3,0,7], + [3,6,2] + ].forEach(function(coords) { + it('dne ' + coords.join('/'), function(done) { + loaded.non_existent.getTile(coords[0], coords[1], coords[2], yieldsError(assert, 'error', 'Tile does not exist', done)); + }); + it('corrupt ' + coords.join('/'), function(done) { + loaded.corrupt.getTile(coords[0], coords[1], coords[2], yieldsError(assert, 'error', 'SQLITE_CORRUPT: database disk image is malformed', done)); + }); }); -}; - -exports['get tiles from non-existent file'] = function(beforeExit, assert) { - var status = { - success: 0, - error: 0 - }; - - new MBTiles(fixtures.non_existent, function(err, mbtiles) { - if (err) throw err; - mbtiles.getTile(0, 1, 0, yieldsError(assert, status, 'error', 'Tile does not exist')); - mbtiles.getTile(-1, 0, 0, yieldsError(assert, status, 'error', 'Tile does not exist')); - mbtiles.getTile(0, 0, -1, yieldsError(assert, status, 'error', 'Tile does not exist')); - mbtiles.getTile(3, 1, 8, yieldsError(assert, status, 'error', 'Tile does not exist')); - mbtiles.getTile(2, -3, 0, yieldsError(assert, status, 'error', 'Tile does not exist')); - mbtiles.getTile(18, 2, 3, yieldsError(assert, status, 'error', 'Tile does not exist')); - mbtiles.getTile(4, 0, 0, yieldsError(assert, status, 'error', 'Tile does not exist')); - mbtiles.getTile(4, 3, 8, yieldsError(assert, status, 'error', 'Tile does not exist')); - mbtiles.getTile(4, 4, 8, yieldsError(assert, status, 'error', 'Tile does not exist')); - mbtiles.getTile(4, 5, 8, yieldsError(assert, status, 'error', 'Tile does not exist')); - mbtiles.getTile(4, 13, 4, yieldsError(assert, status, 'error', 'Tile does not exist')); - mbtiles.getTile(4, 0, 14, yieldsError(assert, status, 'error', 'Tile does not exist')); - mbtiles.getTile(3, 0, 7, yieldsError(assert, status, 'error', 'Tile does not exist')); - mbtiles.getTile(3, 6, 2, yieldsError(assert, status, 'error', 'Tile does not exist')); - }); - - beforeExit(function() { - assert.equal(status.success, 0); - assert.equal(status.error, 14); - }); -}; - -exports['get tiles from corrupt file'] = function(beforeExit, assert) { - var status = { - success: 0, - error: 0 - }; - var error; - new MBTiles(fixtures.corrupt, function(err, mbtiles) { - error = err; - }); - - beforeExit(function() { - assert.throws( - function() { - throw err; - }, - Error - ); - }); -}; - - +}); diff --git a/test/reloading.test.js b/test/reloading.test.js deleted file mode 100644 index ae46856..0000000 --- a/test/reloading.test.js +++ /dev/null @@ -1,107 +0,0 @@ -process.env.NODE_ENV = 'test'; - -var fs = require('fs'); -var MBTiles = require('..'); - -var fixtureDir = __dirname + '/fixtures/output'; -var fixtures = { - source: __dirname + '/fixtures/plain_1.mbtiles', - destination: fixtureDir + '/write_3.mbtiles' -}; - -// Load entire database as buffer. -var file = fs.readFileSync(fixtures.source); - -// Recreate output directory to remove previous tests. -try { fs.unlinkSync(fixtures.destination); } catch(err) {} -try { fs.mkdirSync(fixtureDir, 0755); } catch(err) {} - -exports['test file reloading during copying'] = function(beforeExit, assert) { - var completed = false; - var status = { - success: 0, - error: 0 - }; - - var tiles = [ - [ 0, 0, 0 ], - [ 1, 0, 1 ], - [ 4, 0, 5 ], - [ 4, 0, 4 ], - [ 1, 0, 0 ], - [ 3, 6, 3 ], - [ 4, 8, 6 ], - [ 4, 9, 1 ], - [ 4, 9, 10 ], - [ 4, 9, 7 ], - [ 4, 9, 6 ] - ]; - - var fd = fs.openSync(fixtures.destination, 'w'); - // Start copying the file. Write first 100 KB and last 100 KB, then wait. - fs.writeSync(fd, file, 0, 100000, 0); - fs.writeSync(fd, file, 461152, 100000, 461152); - - function writeRest() { - setTimeout(function() { - fs.writeSync(fd, file, 100000, 461152, 100000); - fs.closeSync(fd); - - setTimeout(function() { - new MBTiles(fixtures.destination, function(err, mbtiles) { - var returned = 0; - tiles.forEach(function(c) { - mbtiles.getTile(c[0], c[1], c[2], function(err, tile) { - if (err) assert.ok(false, "Couldn't load tile " + c[0] + '/' + c[1] + '/' + c[2]); - else status.success++; - }); - }); - }); - - }, 2000); - }, 1000); - } - - // Try reading. - new MBTiles(fixtures.destination, function(err, mbtiles) { - if (err) throw err; - mbtiles.getInfo(function(err, data) { - completed = true; - if (err) throw err; - - assert.deepEqual({ - name: 'plain_1', - description: 'demo description', - version: '1.0.3', - scheme: 'tms', - minzoom: 0, - maxzoom: 4, - formatter: null, - center: [ 0, 7.500000001278025, 2 ], - bounds: [ -179.9999999749438, -69.99999999526695, 179.9999999749438, 84.99999999782301 ], - - // These aren't part of TileJSON, but exist in an MBTiles file. - filesize: 561152, - type: 'baselayer', - id: 'write_3', - basename: 'write_3.mbtiles' - }, data); - }); - - var returned = 0; - tiles.forEach(function(c) { - mbtiles.getTile(c[0], c[1], c[2], function(err, tile) { - if (++returned === tiles.length) writeRest(); - if (err) status.error++; - else assert.ok(false, "Could unexpectedly load tile " + c[0] + '/' + c[1] + '/' + c[2]); - }); - }); - }); - - - beforeExit(function() { - assert.ok(completed); - assert.equal(status.error, 11); - assert.equal(status.success, 11); - }); -}; diff --git a/test/write.test.js b/test/write.test.js index bfc2666..22634b8 100644 --- a/test/write.test.js +++ b/test/write.test.js @@ -3,70 +3,66 @@ process.env.NODE_ENV = 'test'; var fs = require('fs'); var assert = require('assert'); var MBTiles = require('..'); - var fixtureDir = __dirname + '/fixtures/output'; -// Recreate output directory to remove previous tests. -try { fs.unlinkSync(fixtureDir + '/write_1.mbtiles'); } catch(err) {} -try { fs.mkdirSync(fixtureDir, 0755); } catch(err) {} +describe('write', function() { + before(function(done) { + // Recreate output directory to remove previous tests. + 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); -exports['test mbtiles file creation'] = function(beforeExit, assert) { - var completed = { written: 0, read: 0 }; - new MBTiles(fixtureDir + '/write_1.mbtiles', function(err, mbtiles) { - completed.open = true; - if (err) throw err; - - mbtiles.startWriting(function(err) { - completed.started = true; + var completed = { written: 0, read: 0 }; + new MBTiles(fixtureDir + '/write_1.mbtiles', function(err, mbtiles) { + completed.open = true; if (err) throw err; - fs.readdirSync(__dirname + '/fixtures/images/').forEach(insertTile); - }); - - function insertTile(file) { - var coords = file.match(/^plain_1_(\d+)_(\d+)_(\d+).png$/); - if (!coords) return; - - // Flip Y coordinate because file names are TMS, but .putTile() expects XYZ. - coords[2] = Math.pow(2, coords[3]) - 1 - coords[2]; - - var tile = fs.readFileSync(__dirname + '/fixtures/images/' + file); - mbtiles.putTile(coords[3] | 0, coords[1] | 0, coords[2] | 0, tile, function(err) { + mbtiles.startWriting(function(err) { + completed.started = true; if (err) throw err; - completed.written++; - if (completed.written === 285) { - mbtiles.stopWriting(function(err) { - completed.stopped = true; - if (err) throw err; - verifyWritten(); - }); - } - }); - } - function verifyWritten() { - fs.readdirSync(__dirname + '/fixtures/images/').forEach(function(file) { + fs.readdirSync(__dirname + '/fixtures/images/').forEach(insertTile); + }); + + function insertTile(file) { var coords = file.match(/^plain_1_(\d+)_(\d+)_(\d+).png$/); - if (coords) { - // Flip Y coordinate because file names are TMS, but .getTile() expects XYZ. - coords[2] = Math.pow(2, coords[3]) - 1 - coords[2]; - mbtiles.getTile(coords[3] | 0, coords[1] | 0, coords[2] | 0, function(err, tile) { - if (err) throw err; - assert.deepEqual(tile, fs.readFileSync(__dirname + '/fixtures/images/' + file)); - completed.read++; - }); - } - }); - } - }); + if (!coords) return; - beforeExit(function() { - assert.deepEqual({ - open: true, - started: true, - written: 285, - read: 285, - stopped: true - }, completed); - }) -}; + // Flip Y coordinate because file names are TMS, but .putTile() expects XYZ. + coords[2] = Math.pow(2, coords[3]) - 1 - coords[2]; + + var tile = fs.readFileSync(__dirname + '/fixtures/images/' + file); + mbtiles.putTile(coords[3] | 0, coords[1] | 0, coords[2] | 0, tile, function(err) { + if (err) throw err; + completed.written++; + if (completed.written === 285) { + mbtiles.stopWriting(function(err) { + completed.stopped = true; + if (err) throw err; + verifyWritten(); + }); + } + }); + } + + function verifyWritten() { + fs.readdirSync(__dirname + '/fixtures/images/').forEach(function(file) { + var coords = file.match(/^plain_1_(\d+)_(\d+)_(\d+).png$/); + if (coords) { + // Flip Y coordinate because file names are TMS, but .getTile() expects XYZ. + coords[2] = Math.pow(2, coords[3]) - 1 - coords[2]; + mbtiles.getTile(coords[3] | 0, coords[1] | 0, coords[2] | 0, function(err, tile) { + if (err) throw err; + assert.deepEqual(tile, fs.readFileSync(__dirname + '/fixtures/images/' + file)); + completed.read++; + if (completed.read === 285) done(); + }); + } + }); + } + }); + }); +}); diff --git a/test/write_grids.test.js b/test/write_grids.test.js index a7a453e..7ebded4 100644 --- a/test/write_grids.test.js +++ b/test/write_grids.test.js @@ -1,71 +1,67 @@ process.env.NODE_ENV = 'test'; var fs = require('fs'); +var assert = require('assert'); var MBTiles = require('..'); - var fixtureDir = __dirname + '/fixtures/output'; -// Recreate output directory to remove previous tests. -try { fs.unlinkSync(fixtureDir + '/write_2.mbtiles'); } catch(err) {} -try { fs.mkdirSync(fixtureDir, 0755); } catch(err) {} - -exports['test mbtiles file creation'] = function(beforeExit, assert) { - var completed = { written: 0, read: 0 }; - new MBTiles(fixtureDir + '/write_2.mbtiles', function(err, mbtiles) { - completed.open = true; - if (err) throw err; - - mbtiles.startWriting(function(err) { - completed.started = true; +describe('write grids', function() { + before(function(done) { + // Recreate output directory to remove previous tests. + try { fs.unlinkSync(fixtureDir + '/write_2.mbtiles'); } catch(err) {} + try { fs.mkdirSync(fixtureDir, 0755); } catch(err) {} + done(); + }); + it('test mbtiles file creation', function(done) { + this.timeout(20e3); + var completed = { written: 0, read: 0 }; + new MBTiles(fixtureDir + '/write_2.mbtiles', function(err, mbtiles) { + completed.open = true; if (err) throw err; - fs.readdirSync(__dirname + '/fixtures/grids/').forEach(insertGrid); - }); - - function insertGrid(file) { - var coords = file.match(/^plain_2_(\d+)_(\d+)_(\d+).json$/); - if (!coords) return; - - // Flip Y coordinate because file names are TMS, but .putGrid() expects XYZ. - coords[2] = Math.pow(2, coords[3]) - 1 - coords[2]; - - var grid = fs.readFileSync(__dirname + '/fixtures/grids/' + file, 'utf8'); - mbtiles.putGrid(coords[3] | 0, coords[1] | 0, coords[2] | 0, JSON.parse(grid), function(err) { + mbtiles.startWriting(function(err) { + completed.started = true; if (err) throw err; - completed.written++; - if (completed.written === 241) { - mbtiles.stopWriting(function(err) { - completed.stopped = true; - if (err) throw err; - verifyWritten(); - }); - } - }); - } - function verifyWritten() { - fs.readdirSync(__dirname + '/fixtures/grids/').forEach(function(file) { + fs.readdirSync(__dirname + '/fixtures/grids/').forEach(insertGrid); + }); + + function insertGrid(file) { var coords = file.match(/^plain_2_(\d+)_(\d+)_(\d+).json$/); - if (coords) { - // Flip Y coordinate because file names are TMS, but .getTile() expects XYZ. - coords[2] = Math.pow(2, coords[3]) - 1 - coords[2]; - mbtiles.getGrid(coords[3] | 0, coords[1] | 0, coords[2] | 0, function(err, grid) { - if (err) throw err; - assert.deepEqual(JSON.stringify(grid), fs.readFileSync(__dirname + '/fixtures/grids/' + file, 'utf8')); - completed.read++; - }); - } - }); - } - }); + if (!coords) return; - beforeExit(function() { - assert.deepEqual({ - open: true, - started: true, - written: 241, - read: 241, - stopped: true - }, completed); - }) -}; + // Flip Y coordinate because file names are TMS, but .putGrid() expects XYZ. + coords[2] = Math.pow(2, coords[3]) - 1 - coords[2]; + + var grid = fs.readFileSync(__dirname + '/fixtures/grids/' + file, 'utf8'); + mbtiles.putGrid(coords[3] | 0, coords[1] | 0, coords[2] | 0, JSON.parse(grid), function(err) { + if (err) throw err; + completed.written++; + if (completed.written === 241) { + mbtiles.stopWriting(function(err) { + completed.stopped = true; + if (err) throw err; + verifyWritten(); + }); + } + }); + } + + function verifyWritten() { + fs.readdirSync(__dirname + '/fixtures/grids/').forEach(function(file) { + var coords = file.match(/^plain_2_(\d+)_(\d+)_(\d+).json$/); + if (coords) { + // Flip Y coordinate because file names are TMS, but .getTile() expects XYZ. + coords[2] = Math.pow(2, coords[3]) - 1 - coords[2]; + mbtiles.getGrid(coords[3] | 0, coords[1] | 0, coords[2] | 0, function(err, grid) { + if (err) throw err; + assert.deepEqual(JSON.stringify(grid), fs.readFileSync(__dirname + '/fixtures/grids/' + file, 'utf8')); + completed.read++; + if (completed.read === 241) done(); + }); + } + }); + } + }); + }); +});