diff --git a/lib/mbtiles.js b/lib/mbtiles.js index 22bcd43..fc7f3cf 100644 --- a/lib/mbtiles.js +++ b/lib/mbtiles.js @@ -4,9 +4,14 @@ var _ = require('underscore'), crypto = require('crypto'), zlib = require('zlib'), path = require('path'), + url = require('url'), sm = new (require('sphericalmercator')), sqlite3 = require('sqlite3'); +function noop(err) { + if (err) throw err; +} + // MBTiles // ------- // MBTiles class for doing common operations (schema setup, tile reading, @@ -18,6 +23,9 @@ module.exports = MBTiles; // - callback: Will be called when the resources have been acquired // or acquisition failed. function MBTiles(uri, callback) { + if (typeof callback !== 'function') callback = noop; + if (typeof uri === 'string') uri = url.parse(uri); + this.filename = uri.pathname; this.db = new sqlite3.cached.Database(uri.pathname, function(err) { if (err) return callback(err); @@ -27,6 +35,10 @@ function MBTiles(uri, callback) { // Finds all mbtiles file in the filepath and returns their tilesource URI. MBTiles.list = function(filepath, callback) { + if (typeof callback !== 'function') { + throw new Error('Callback required as second argument'); + } + filepath = path.resolve(filepath); fs.readdir(filepath, function(err, files) { if (err) return callback(err); @@ -41,6 +53,10 @@ MBTiles.list = function(filepath, callback) { // Finds an mbtiles file with the given ID in the filepath and returns a // tilesource URI. MBTiles.findID = function(filepath, id, callback) { + if (typeof callback !== 'function') { + throw new Error('Callback required as third argument'); + } + filepath = path.resolve(filepath); var file = path.join(filepath, id + '.mbtiles'); fs.stat(file, function(err, stats) { @@ -52,6 +68,10 @@ MBTiles.findID = function(filepath, id, callback) { // Retrieve the schema of the current mbtiles database and inform the caller of // whether the specified table exists. MBTiles.prototype.exists = function(table, callback) { + if (typeof callback !== 'function') { + throw new Error('Callback required as second argument'); + } + if (this.schema) { return callback(null, _(this.schema).include(table)); } else { @@ -71,6 +91,10 @@ MBTiles.prototype.exists = function(table, callback) { // DB integrity check. MBTiles.prototype.integrity = function(callback) { + if (typeof callback !== 'function') { + throw new Error('Callback required as first argument'); + } + this.db.get('PRAGMA quick_check(1)', function(err, row) { if (!(row && row.integrity_check && row.integrity_check === 'ok')) { callback(new Error('Corrupted database.')); @@ -84,6 +108,10 @@ MBTiles.prototype.integrity = function(callback) { // Sets the synchronous flag to OFF for (much) faster inserts. // See http://www.sqlite3.org/pragma.html#pragma_synchronous MBTiles.prototype.setup = function(callback) { + if (typeof callback !== 'function') { + throw new Error('Callback required as second argument'); + } + fs.readFile(__dirname + '/schema.sql', 'utf8', function(err, sql) { if (err) return callback(err); this.db.serialize(function() { @@ -100,6 +128,8 @@ MBTiles.prototype.setup = function(callback) { // has key/value pairs as a hash corresponding to column name and row value. // - `callback` Function. MBTiles.prototype.insert = function(table, objects, callback) { + if (typeof callback !== 'function') callback = noop; + if (!objects.length) return callback(null); var keys = _(objects[0]).keys(); var placeholders = []; @@ -120,6 +150,8 @@ MBTiles.prototype.insert = function(table, objects, callback) { // - @param {Object} metadata key, value hash of metadata to be inserted. // - @param {Function} callback MBTiles.prototype.insertMetadata = function(data, callback) { + if (typeof callback !== 'function') callback = noop; + var metadata = _(data).map(function(value, key) { return { name: key, value: value}; }); @@ -168,6 +200,8 @@ MBTiles.prototype.insertTiles = function(data, callback) { // be an object of the form { z: z, x: x, y: y, data: [Image buffer], keys: [] }. // - @param {Function} callback MBTiles.prototype.insertGrids = function(data, callback) { + if (typeof callback !== 'function') callback = noop; + var that = this, map = [], grids = [], @@ -221,6 +255,8 @@ MBTiles.prototype.insertGrids = function(data, callback) { // - @param {Object} tile tile object to be inserted. // - @param {Function} callback MBTiles.prototype.insertGridTiles = function(map, callback) { + if (typeof callback !== 'function') callback = noop; + var stmt = this.db.prepare('UPDATE OR REPLACE map SET grid_id = ? WHERE ' + ' zoom_level = ? AND tile_column = ? AND tile_row = ?'); @@ -243,6 +279,8 @@ MBTiles.prototype.insertGridTiles = function(map, callback) { // - @param {Number} z tile z coordinate. // - @param {Function} callback MBTiles.prototype.getTile = function(x, y, z, callback) { + if (typeof callback !== 'function') callback = noop; + var mbtiles = this; this.db.get('SELECT tile_data FROM tiles WHERE ' + 'zoom_level = ? AND tile_column = ? AND tile_row = ?', @@ -261,6 +299,8 @@ MBTiles.prototype.getTile = function(x, y, z, callback) { // - @param {Number} z tile z coordinate // - @param {Function} callback MBTiles.prototype.getGrid = function(x, y, z, callback) { + if (typeof callback !== 'function') callback = noop; + var that = this; Step( function() { @@ -276,7 +316,9 @@ MBTiles.prototype.getGrid = function(x, y, z, callback) { ); }, function(err, row, rows) { - if ((!row || !row.grid) || (err && err.errno == 1)) return callback('Grid does not exist'); + if ((!row || !row.grid) || (err && err.errno == 1)) { + return callback(new Error('Grid does not exist')); + } if (err) return callback(err); try { @@ -301,6 +343,8 @@ MBTiles.prototype.getGrid = function(x, y, z, callback) { // // - @param {Function} callback MBTiles.prototype.metadata = function(key, callback) { + if (typeof callback !== 'function') callback = noop; + this.db.get('SELECT value FROM metadata WHERE name = ?', key, function(err, row) { @@ -314,6 +358,8 @@ MBTiles.prototype.metadata = function(key, callback) { // performing fallback queries if certain keys (like `bounds`, `minzoom`, // `maxzoom`) have not been provided. MBTiles.prototype.getInfo = function(callback) { + if (typeof callback !== 'function') callback = noop; + var that = this; var info = {}; info.basename = path.basename(that.filename); diff --git a/test/online.test.js b/test/online.test.js deleted file mode 100644 index 0b0b4b3..0000000 --- a/test/online.test.js +++ /dev/null @@ -1,61 +0,0 @@ -var assert = require('assert'); -var MBTiles = require('..').MBTiles; - -var fixture = __dirname + '/fixtures/online.mbtiles'; - -exports['get online metadata'] = function(beforeExit) { - var completion = {}; - - var mbtiles = new MBTiles(fixture); - mbtiles.metadata('name', function(err, value) { if (err) throw err; completion.name = value; }); - mbtiles.metadata('type', function(err, value) { if (err) throw err; completion.type = value; }); - mbtiles.metadata('description', function(err, value) { if (err) throw err; completion.description = value; }); - mbtiles.metadata('version', function(err, value) { if (err) throw err; completion.version = value; }); - mbtiles.metadata('formatter', function(err, value) { if (err) throw err; completion.formatter = value; }); - mbtiles.metadata('bounds', function(err, value) { if (err) throw err; completion.bounds = value; }); - mbtiles.metadata('online', function(err, value) { if (err) throw err; completion.online = value; }); - mbtiles.metadata('invalid', function(err, value) { completion.invalid = err.message; }); - - beforeExit(function() { - assert.deepEqual(completion, { - name: 'MapQuest streets', - type: 'baselayer', - description: 'MapQuest’s OpenStreetMap based street level tiles.', - version: '1.0.0', - formatter: null, - bounds: '-180,-90,180,90', - online: 'http://otile1.mqcdn.com/tiles/1.0.0/osm/%z/%x/%y.png', - invalid: 'Key does not exist' - }); - }); -}; - - -exports['get online tiles'] = function(beforeExit) { - var status = { - success: 0, - error: 0 - }; - - var mbtiles = new MBTiles(fixture); - - mbtiles.db.serialize(function() { - mbtiles.db.run("DELETE FROM map"); - mbtiles.db.run("DELETE FROM images"); - }); - - mbtiles.tile(0, 0, 0, function(err, tile) { - if (err) throw new Error(err); - status.success++; - }); - - mbtiles.tile(0, 0, 18, function(err, tile) { - if (err) throw new Error(err); - status.success++; - }); - - beforeExit(function() { - assert.equal(status.success, 2); - assert.equal(status.error, 0); - }); -}; \ No newline at end of file diff --git a/test/read.test.js b/test/read.test.js index 911567d..b16a00b 100644 --- a/test/read.test.js +++ b/test/read.test.js @@ -1,6 +1,6 @@ var fs = require('fs'); var assert = require('assert'); -var MBTiles = require('..').MBTiles; +var MBTiles = require('..'); var fixtures = { plain_1: __dirname + '/fixtures/plain_1.mbtiles', @@ -36,6 +36,7 @@ exports['get metadata'] = function(beforeExit) { function yieldsError(status, error, msg) { return function(err) { + assert.ok(err); assert.equal(err.message, msg); status[error]++; }; @@ -51,7 +52,7 @@ exports['get tiles'] = function(beforeExit) { fs.readdirSync(__dirname + '/fixtures/images/').forEach(function(file) { var coords = file.match(/^plain_1_(\d+)_(\d+)_(\d+).png$/); if (coords) { - mbtiles.tile(coords[1] | 0, coords[2] | 0, coords[3] | 0, function(err, tile) { + mbtiles.getTile(coords[1] | 0, coords[2] | 0, coords[3] | 0, function(err, tile) { if (err) throw err; assert.deepEqual(tile, fs.readFileSync(__dirname + '/fixtures/images/' + file)); status.success++; @@ -59,13 +60,13 @@ exports['get tiles'] = function(beforeExit) { } }); - mbtiles.tile(1, 0, 0, yieldsError(status, 'error', 'Tile does not exist')); - mbtiles.tile(0, 0, -1, yieldsError(status, 'error', 'Tile does not exist')); - mbtiles.tile(0, -1, 0, yieldsError(status, 'error', 'Tile does not exist')); - mbtiles.tile(1, 8, 3, yieldsError(status, 'error', 'Tile does not exist')); - mbtiles.tile(-3, 0, 2, yieldsError(status, 'error', 'Tile does not exist')); - mbtiles.tile(2, 3, 18, yieldsError(status, 'error', 'Tile does not exist')); - mbtiles.tile(0, 0, 4, yieldsError(status, 'error', 'Tile does not exist')); + mbtiles.getTile(1, 0, 0, yieldsError(status, 'error', 'Tile does not exist')); + mbtiles.getTile(0, 0, -1, yieldsError(status, 'error', 'Tile does not exist')); + mbtiles.getTile(0, -1, 0, yieldsError(status, 'error', 'Tile does not exist')); + mbtiles.getTile(1, 8, 3, yieldsError(status, 'error', 'Tile does not exist')); + mbtiles.getTile(-3, 0, 2, yieldsError(status, 'error', 'Tile does not exist')); + mbtiles.getTile(2, 3, 18, yieldsError(status, 'error', 'Tile does not exist')); + mbtiles.getTile(0, 0, 4, yieldsError(status, 'error', 'Tile does not exist')); beforeExit(function() { assert.equal(status.success, 285); @@ -83,7 +84,7 @@ exports['get grids'] = function(beforeExit) { fs.readdirSync(__dirname + '/fixtures/grids/').forEach(function(file) { var coords = file.match(/^plain_2_(\d+)_(\d+)_(\d+).json$/); if (coords) { - mbtiles.grid(coords[1] | 0, coords[2] | 0, coords[3] | 0, function(err, grid) { + mbtiles.getGrid(coords[1] | 0, coords[2] | 0, coords[3] | 0, function(err, grid) { if (err) throw err; assert.deepEqual(JSON.stringify(grid), fs.readFileSync(__dirname + '/fixtures/grids/' + file, 'utf8')); status.success++; @@ -91,21 +92,21 @@ exports['get grids'] = function(beforeExit) { } }); - mbtiles.grid(1, 0, 0, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(0, 0, -1, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(0, -1, 0, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(1, 8, 3, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(-3, 0, 2, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(2, 3, 18, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(0, 0, 4, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(1, 0, 0, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(0, 0, -1, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(0, -1, 0, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(1, 8, 3, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(-3, 0, 2, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(2, 3, 18, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(0, 0, 4, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(3, 8, 4, yieldsError(status, 'error', 'Grid is invalid')); - mbtiles.grid(4, 8, 4, yieldsError(status, 'error', 'Grid is invalid')); - mbtiles.grid(5, 8, 4, yieldsError(status, 'error', 'Grid is invalid')); - mbtiles.grid(13, 4, 4, yieldsError(status, 'error', 'Grid is invalid')); - mbtiles.grid(0, 14, 4, yieldsError(status, 'error', 'Grid is invalid')); - mbtiles.grid(0, 7, 3, yieldsError(status, 'error', 'Grid is invalid')); - mbtiles.grid(6, 2, 3, yieldsError(status, 'error', 'Grid is invalid')); + mbtiles.getGrid(3, 8, 4, yieldsError(status, 'error', 'Grid is invalid')); + mbtiles.getGrid(4, 8, 4, yieldsError(status, 'error', 'Grid is invalid')); + mbtiles.getGrid(5, 8, 4, yieldsError(status, 'error', 'Grid is invalid')); + mbtiles.getGrid(13, 4, 4, yieldsError(status, 'error', 'Grid is invalid')); + mbtiles.getGrid(0, 14, 4, yieldsError(status, 'error', 'Grid is invalid')); + mbtiles.getGrid(0, 7, 3, yieldsError(status, 'error', 'Grid is invalid')); + mbtiles.getGrid(6, 2, 3, yieldsError(status, 'error', 'Grid is invalid')); beforeExit(function() { assert.equal(status.success, 241); @@ -121,20 +122,20 @@ exports['get grids from file without interaction'] = function(beforeExit) { }; var mbtiles = new MBTiles(fixtures.plain_1); - mbtiles.grid(1, 0, 0, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(0, 0, -1, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(0, -1, 0, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(1, 8, 3, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(-3, 0, 2, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(2, 3, 18, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(0, 0, 4, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(3, 8, 4, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(4, 8, 4, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(5, 8, 4, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(13, 4, 4, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(0, 14, 4, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(0, 7, 3, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(6, 2, 3, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(1, 0, 0, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(0, 0, -1, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(0, -1, 0, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(1, 8, 3, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(-3, 0, 2, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(2, 3, 18, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(0, 0, 4, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(3, 8, 4, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(4, 8, 4, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(5, 8, 4, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(13, 4, 4, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(0, 14, 4, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(0, 7, 3, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(6, 2, 3, yieldsError(status, 'error', 'Grid does not exist')); beforeExit(function() { assert.equal(status.success, 0); @@ -152,7 +153,7 @@ exports['get grids with different schema'] = function(beforeExit) { fs.readdirSync(__dirname + '/fixtures/grids/').forEach(function(file) { var coords = file.match(/^plain_2_(\d+)_(\d+)_(\d+).json$/); if (coords) { - mbtiles.grid(coords[1] | 0, coords[2] | 0, coords[3] | 0, function(err, grid) { + mbtiles.getGrid(coords[1] | 0, coords[2] | 0, coords[3] | 0, function(err, grid) { if (err) throw err; assert.deepEqual(JSON.stringify(grid), fs.readFileSync(__dirname + '/fixtures/grids/' + file, 'utf8')); status.success++; @@ -160,21 +161,21 @@ exports['get grids with different schema'] = function(beforeExit) { } }); - mbtiles.grid(1, 0, 0, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(0, 0, -1, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(0, -1, 0, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(1, 8, 3, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(-3, 0, 2, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(2, 3, 18, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(0, 0, 4, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(1, 0, 0, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(0, 0, -1, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(0, -1, 0, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(1, 8, 3, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(-3, 0, 2, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(2, 3, 18, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(0, 0, 4, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(3, 8, 4, yieldsError(status, 'error', 'Grid is invalid')); - mbtiles.grid(4, 8, 4, yieldsError(status, 'error', 'Grid is invalid')); - mbtiles.grid(5, 8, 4, yieldsError(status, 'error', 'Grid is invalid')); - mbtiles.grid(13, 4, 4, yieldsError(status, 'error', 'Grid is invalid')); - mbtiles.grid(0, 14, 4, yieldsError(status, 'error', 'Grid is invalid')); - mbtiles.grid(0, 7, 3, yieldsError(status, 'error', 'Grid is invalid')); - mbtiles.grid(6, 2, 3, yieldsError(status, 'error', 'Grid is invalid')); + mbtiles.getGrid(3, 8, 4, yieldsError(status, 'error', 'Grid is invalid')); + mbtiles.getGrid(4, 8, 4, yieldsError(status, 'error', 'Grid is invalid')); + mbtiles.getGrid(5, 8, 4, yieldsError(status, 'error', 'Grid is invalid')); + mbtiles.getGrid(13, 4, 4, yieldsError(status, 'error', 'Grid is invalid')); + mbtiles.getGrid(0, 14, 4, yieldsError(status, 'error', 'Grid is invalid')); + mbtiles.getGrid(0, 7, 3, yieldsError(status, 'error', 'Grid is invalid')); + mbtiles.getGrid(6, 2, 3, yieldsError(status, 'error', 'Grid is invalid')); beforeExit(function() { assert.equal(status.success, 241); @@ -190,20 +191,20 @@ exports['get grids from file without interaction'] = function(beforeExit) { }; var mbtiles = new MBTiles(fixtures.plain_1); - mbtiles.grid(1, 0, 0, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(0, 0, -1, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(0, -1, 0, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(1, 8, 3, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(-3, 0, 2, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(2, 3, 18, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(0, 0, 4, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(3, 8, 4, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(4, 8, 4, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(5, 8, 4, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(13, 4, 4, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(0, 14, 4, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(0, 7, 3, yieldsError(status, 'error', 'Grid does not exist')); - mbtiles.grid(6, 2, 3, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(1, 0, 0, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(0, 0, -1, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(0, -1, 0, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(1, 8, 3, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(-3, 0, 2, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(2, 3, 18, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(0, 0, 4, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(3, 8, 4, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(4, 8, 4, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(5, 8, 4, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(13, 4, 4, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(0, 14, 4, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(0, 7, 3, yieldsError(status, 'error', 'Grid does not exist')); + mbtiles.getGrid(6, 2, 3, yieldsError(status, 'error', 'Grid does not exist')); beforeExit(function() { assert.equal(status.success, 0); diff --git a/test/write.test.js b/test/write.test.js index c8d3cf7..f1f2e7c 100644 --- a/test/write.test.js +++ b/test/write.test.js @@ -1,6 +1,6 @@ var fs = require('fs'); var assert = require('assert'); -var MBTiles = require('..').MBTiles; +var MBTiles = require('..'); var fixtureDir = __dirname + '/fixtures/output';