var test = require('tape'); var resolve = require('../'); test('mock', function (t) { t.plan(6); var files = { '/foo/bar/baz.js' : 'beep' }; function opts (basedir) { return { basedir : basedir, isFile : function (file, cb) { cb(null, files.hasOwnProperty(file)); }, readFile : function (file, cb) { cb(null, files[file]); } } } resolve('./baz', opts('/foo/bar'), function (err, res, pkg) { if (err) t.fail(err); t.equal(res, '/foo/bar/baz.js'); t.equal(pkg, undefined); }); resolve('./baz.js', opts('/foo/bar'), function (err, res, pkg) { if (err) t.fail(err); t.equal(res, '/foo/bar/baz.js'); t.equal(pkg, undefined); }); resolve('baz', opts('/foo/bar'), function (err, res) { t.equal(err.message, "Cannot find module 'baz' from '/foo/bar'"); }); resolve('../baz', opts('/foo/bar'), function (err, res) { t.equal(err.message, "Cannot find module '../baz' from '/foo/bar'"); }); }); test('mock from package', function (t) { t.plan(6); var files = { '/foo/bar/baz.js' : 'beep' }; function opts (basedir) { return { basedir : basedir, package : { main: 'bar' }, isFile : function (file, cb) { cb(null, files.hasOwnProperty(file)); }, readFile : function (file, cb) { cb(null, files[file]); } } } resolve('./baz', opts('/foo/bar'), function (err, res, pkg) { if (err) t.fail(err); t.equal(res, '/foo/bar/baz.js'); t.equal(pkg.main, 'bar'); }); resolve('./baz.js', opts('/foo/bar'), function (err, res, pkg) { if (err) t.fail(err); t.equal(res, '/foo/bar/baz.js'); t.equal(pkg.main, 'bar'); }); resolve('baz', opts('/foo/bar'), function (err, res) { t.equal(err.message, "Cannot find module 'baz' from '/foo/bar'"); }); resolve('../baz', opts('/foo/bar'), function (err, res) { t.equal(err.message, "Cannot find module '../baz' from '/foo/bar'"); }); }); test('mock package', function (t) { t.plan(2); var files = { '/foo/node_modules/bar/baz.js' : 'beep', '/foo/node_modules/bar/package.json' : JSON.stringify({ main : './baz.js' }) }; function opts (basedir) { return { basedir : basedir, isFile : function (file, cb) { cb(null, files.hasOwnProperty(file)); }, readFile : function (file, cb) { cb(null, files[file]); } } } resolve('bar', opts('/foo'), function (err, res, pkg) { if (err) t.fail(err); t.equal(res, '/foo/node_modules/bar/baz.js'); t.equal(pkg.main, './baz.js'); }); }); test('mock package from package', function (t) { t.plan(2); var files = { '/foo/node_modules/bar/baz.js' : 'beep', '/foo/node_modules/bar/package.json' : JSON.stringify({ main : './baz.js' }) }; function opts (basedir) { return { basedir : basedir, package : { main: 'bar' }, isFile : function (file, cb) { cb(null, files.hasOwnProperty(file)); }, readFile : function (file, cb) { cb(null, files[file]); } } } resolve('bar', opts('/foo'), function (err, res, pkg) { if (err) t.fail(err); t.equal(res, '/foo/node_modules/bar/baz.js'); t.equal(pkg.main, './baz.js'); }); });