1 var path = require('path');
2 var test = require('tape');
3 var resolve = require('../');
5 test('async foo', function (t) {
7 var dir = path.join(__dirname, 'resolver');
9 resolve('./foo', { basedir: dir }, function (err, res, pkg) {
11 t.equal(res, path.join(dir, 'foo.js'));
12 t.equal(pkg.name, 'resolve');
15 resolve('./foo.js', { basedir: dir }, function (err, res, pkg) {
17 t.equal(res, path.join(dir, 'foo.js'));
18 t.equal(pkg.name, 'resolve');
21 resolve('./foo', { basedir: dir, 'package': { main: 'resolver' } }, function (err, res, pkg) {
23 t.equal(res, path.join(dir, 'foo.js'));
24 t.equal(pkg.main, 'resolver');
27 resolve('./foo.js', { basedir: dir, 'package': { main: 'resolver' } }, function (err, res, pkg) {
29 t.equal(res, path.join(dir, 'foo.js'));
30 t.equal(pkg.main, 'resolver');
33 resolve('foo', { basedir: dir }, function (err) {
34 t.equal(err.message, "Cannot find module 'foo' from '" + path.resolve(dir) + "'");
35 t.equal(err.code, 'MODULE_NOT_FOUND');
39 test('bar', function (t) {
41 var dir = path.join(__dirname, 'resolver');
43 resolve('foo', { basedir: dir + '/bar' }, function (err, res, pkg) {
45 t.equal(res, path.join(dir, 'bar/node_modules/foo/index.js'));
46 t.equal(pkg, undefined);
49 resolve('foo', { basedir: dir + '/bar' }, function (err, res, pkg) {
51 t.equal(res, path.join(dir, 'bar/node_modules/foo/index.js'));
52 t.equal(pkg, undefined);
55 resolve('foo', { basedir: dir + '/bar', 'package': { main: 'bar' } }, function (err, res, pkg) {
57 t.equal(res, path.join(dir, 'bar/node_modules/foo/index.js'));
58 t.equal(pkg, undefined);
62 test('baz', function (t) {
64 var dir = path.join(__dirname, 'resolver');
66 resolve('./baz', { basedir: dir }, function (err, res, pkg) {
68 t.equal(res, path.join(dir, 'baz/quux.js'));
69 t.equal(pkg.main, 'quux.js');
72 resolve('./baz', { basedir: dir, 'package': { main: 'resolver' } }, function (err, res, pkg) {
74 t.equal(res, path.join(dir, 'baz/quux.js'));
75 t.equal(pkg.main, 'quux.js');
79 test('biz', function (t) {
81 var dir = path.join(__dirname, 'resolver/biz/node_modules');
83 resolve('./grux', { basedir: dir }, function (err, res, pkg) {
85 t.equal(res, path.join(dir, 'grux/index.js'));
86 t.equal(pkg, undefined);
89 resolve('./grux', { basedir: dir, 'package': { main: 'biz' } }, function (err, res, pkg) {
91 t.equal(res, path.join(dir, 'grux/index.js'));
92 t.equal(pkg.main, 'biz');
95 resolve('./garply', { basedir: dir }, function (err, res, pkg) {
97 t.equal(res, path.join(dir, 'garply/lib/index.js'));
98 t.equal(pkg.main, './lib');
101 resolve('./garply', { basedir: dir, 'package': { main: 'biz' } }, function (err, res, pkg) {
102 if (err) t.fail(err);
103 t.equal(res, path.join(dir, 'garply/lib/index.js'));
104 t.equal(pkg.main, './lib');
107 resolve('tiv', { basedir: dir + '/grux' }, function (err, res, pkg) {
108 if (err) t.fail(err);
109 t.equal(res, path.join(dir, 'tiv/index.js'));
110 t.equal(pkg, undefined);
113 resolve('tiv', { basedir: dir + '/grux', 'package': { main: 'grux' } }, function (err, res, pkg) {
114 if (err) t.fail(err);
115 t.equal(res, path.join(dir, 'tiv/index.js'));
116 t.equal(pkg, undefined);
119 resolve('tiv', { basedir: dir + '/garply' }, function (err, res, pkg) {
120 if (err) t.fail(err);
121 t.equal(res, path.join(dir, 'tiv/index.js'));
122 t.equal(pkg, undefined);
125 resolve('tiv', { basedir: dir + '/garply', 'package': { main: './lib' } }, function (err, res, pkg) {
126 if (err) t.fail(err);
127 t.equal(res, path.join(dir, 'tiv/index.js'));
128 t.equal(pkg, undefined);
131 resolve('grux', { basedir: dir + '/tiv' }, function (err, res, pkg) {
132 if (err) t.fail(err);
133 t.equal(res, path.join(dir, 'grux/index.js'));
134 t.equal(pkg, undefined);
137 resolve('grux', { basedir: dir + '/tiv', 'package': { main: 'tiv' } }, function (err, res, pkg) {
138 if (err) t.fail(err);
139 t.equal(res, path.join(dir, 'grux/index.js'));
140 t.equal(pkg, undefined);
143 resolve('garply', { basedir: dir + '/tiv' }, function (err, res, pkg) {
144 if (err) t.fail(err);
145 t.equal(res, path.join(dir, 'garply/lib/index.js'));
146 t.equal(pkg.main, './lib');
149 resolve('garply', { basedir: dir + '/tiv', 'package': { main: 'tiv' } }, function (err, res, pkg) {
150 if (err) t.fail(err);
151 t.equal(res, path.join(dir, 'garply/lib/index.js'));
152 t.equal(pkg.main, './lib');
156 test('quux', function (t) {
158 var dir = path.join(__dirname, 'resolver/quux');
160 resolve('./foo', { basedir: dir, 'package': { main: 'quux' } }, function (err, res, pkg) {
161 if (err) t.fail(err);
162 t.equal(res, path.join(dir, 'foo/index.js'));
163 t.equal(pkg.main, 'quux');
167 test('normalize', function (t) {
169 var dir = path.join(__dirname, 'resolver/biz/node_modules/grux');
171 resolve('../grux', { basedir: dir }, function (err, res, pkg) {
172 if (err) t.fail(err);
173 t.equal(res, path.join(dir, 'index.js'));
174 t.equal(pkg, undefined);
178 test('cup', function (t) {
180 var dir = path.join(__dirname, 'resolver');
182 resolve('./cup', { basedir: dir, extensions: ['.js', '.coffee'] }, function (err, res) {
183 if (err) t.fail(err);
184 t.equal(res, path.join(dir, 'cup.coffee'));
187 resolve('./cup.coffee', { basedir: dir }, function (err, res) {
188 if (err) t.fail(err);
189 t.equal(res, path.join(dir, 'cup.coffee'));
192 resolve('./cup', { basedir: dir, extensions: ['.js'] }, function (err, res) {
193 t.equal(err.message, "Cannot find module './cup' from '" + path.resolve(dir) + "'");
194 t.equal(err.code, 'MODULE_NOT_FOUND');
198 test('mug', function (t) {
200 var dir = path.join(__dirname, 'resolver');
202 resolve('./mug', { basedir: dir }, function (err, res) {
203 if (err) t.fail(err);
204 t.equal(res, path.join(dir, 'mug.js'));
207 resolve('./mug', { basedir: dir, extensions: ['.coffee', '.js'] }, function (err, res) {
208 if (err) t.fail(err);
209 t.equal(res, path.join(dir, '/mug.coffee'));
212 resolve('./mug', { basedir: dir, extensions: ['.js', '.coffee'] }, function (err, res) {
213 t.equal(res, path.join(dir, '/mug.js'));
217 test('other path', function (t) {
219 var resolverDir = path.join(__dirname, 'resolver');
220 var dir = path.join(resolverDir, 'bar');
221 var otherDir = path.join(resolverDir, 'other_path');
223 resolve('root', { basedir: dir, paths: [otherDir] }, function (err, res) {
224 if (err) t.fail(err);
225 t.equal(res, path.join(resolverDir, 'other_path/root.js'));
228 resolve('lib/other-lib', { basedir: dir, paths: [otherDir] }, function (err, res) {
229 if (err) t.fail(err);
230 t.equal(res, path.join(resolverDir, 'other_path/lib/other-lib.js'));
233 resolve('root', { basedir: dir }, function (err, res) {
234 t.equal(err.message, "Cannot find module 'root' from '" + path.resolve(dir) + "'");
235 t.equal(err.code, 'MODULE_NOT_FOUND');
238 resolve('zzz', { basedir: dir, paths: [otherDir] }, function (err, res) {
239 t.equal(err.message, "Cannot find module 'zzz' from '" + path.resolve(dir) + "'");
240 t.equal(err.code, 'MODULE_NOT_FOUND');
244 test('incorrect main', function (t) {
247 var resolverDir = path.join(__dirname, 'resolver');
248 var dir = path.join(resolverDir, 'incorrect_main');
250 resolve('./incorrect_main', { basedir: resolverDir }, function (err, res, pkg) {
251 if (err) t.fail(err);
252 t.equal(res, path.join(dir, 'index.js'));
256 test('without basedir', function (t) {
259 var dir = path.join(__dirname, 'resolver/without_basedir');
260 var tester = require(path.join(dir, 'main.js'));
262 tester(t, function (err, res, pkg) {
266 t.equal(res, path.join(dir, 'node_modules/mymodule.js'));
271 test('#25: node modules with the same name as node stdlib modules', function (t) {
274 var resolverDir = path.join(__dirname, 'resolver/punycode');
276 resolve('punycode', { basedir: resolverDir }, function (err, res, pkg) {
277 if (err) t.fail(err);
278 t.equal(res, path.join(resolverDir, 'node_modules/punycode/index.js'));