text: 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');
      });
  });
  