1 var path = require('path');
2 var test = require('tape');
3 var resolve = require('../');
5 test('async foo', function (t) {
7 var dir = __dirname + '/resolver';
9 resolve('./foo', { basedir : dir }, function (err, res, pkg) {
11 t.equal(res, dir + '/foo.js');
12 t.equal(pkg.name, 'resolve');
15 resolve('./foo.js', { basedir : dir }, function (err, res, pkg) {
17 t.equal(res, 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, 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, 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) + "'");
38 test('bar', function (t) {
40 var dir = __dirname + '/resolver';
42 resolve('foo', { basedir : dir + '/bar' }, function (err, res, pkg) {
44 t.equal(res, dir + '/bar/node_modules/foo/index.js');
45 t.equal(pkg, undefined);
48 resolve('foo', { basedir : dir + '/bar' }, function (err, res, pkg) {
50 t.equal(res, dir + '/bar/node_modules/foo/index.js');
51 t.equal(pkg, undefined);
54 resolve('foo', { basedir : dir + '/bar', package: { main: 'bar' } }, function (err, res, pkg) {
56 t.equal(res, dir + '/bar/node_modules/foo/index.js');
57 t.equal(pkg, undefined);
61 test('baz', function (t) {
63 var dir = __dirname + '/resolver';
65 resolve('./baz', { basedir : dir }, function (err, res, pkg) {
67 t.equal(res, dir + '/baz/quux.js');
68 t.equal(pkg.main, 'quux.js');
71 resolve('./baz', { basedir : dir, package: { main: 'resolver' } }, function (err, res, pkg) {
73 t.equal(res, dir + '/baz/quux.js');
74 t.equal(pkg.main, 'quux.js');
78 test('biz', function (t) {
80 var dir = __dirname + '/resolver/biz/node_modules';
82 resolve('./grux', { basedir : dir }, function (err, res, pkg) {
84 t.equal(res, dir + '/grux/index.js');
85 t.equal(pkg, undefined);
88 resolve('./grux', { basedir : dir, package: { main: 'biz' } }, function (err, res, pkg) {
90 t.equal(res, dir + '/grux/index.js');
91 t.equal(pkg.main, 'biz');
94 resolve('./garply', { basedir : dir }, function (err, res, pkg) {
96 t.equal(res, dir + '/garply/lib/index.js');
97 t.equal(pkg.main, './lib');
100 resolve('./garply', { basedir : dir, package: { main: 'biz' } }, function (err, res, pkg) {
101 if (err) t.fail(err);
102 t.equal(res, dir + '/garply/lib/index.js');
103 t.equal(pkg.main, './lib');
106 resolve('tiv', { basedir : dir + '/grux' }, function (err, res, pkg) {
107 if (err) t.fail(err);
108 t.equal(res, dir + '/tiv/index.js');
109 t.equal(pkg, undefined);
112 resolve('tiv', { basedir : dir + '/grux', package: { main: 'grux' } }, function (err, res, pkg) {
113 if (err) t.fail(err);
114 t.equal(res, dir + '/tiv/index.js');
115 t.equal(pkg, undefined);
118 resolve('tiv', { basedir : dir + '/garply' }, function (err, res, pkg) {
119 if (err) t.fail(err);
120 t.equal(res, dir + '/tiv/index.js');
121 t.equal(pkg, undefined);
124 resolve('tiv', { basedir : dir + '/garply', package: { main: './lib' } }, function (err, res, pkg) {
125 if (err) t.fail(err);
126 t.equal(res, dir + '/tiv/index.js');
127 t.equal(pkg, undefined);
130 resolve('grux', { basedir : dir + '/tiv' }, function (err, res, pkg) {
131 if (err) t.fail(err);
132 t.equal(res, dir + '/grux/index.js');
133 t.equal(pkg, undefined);
136 resolve('grux', { basedir : dir + '/tiv', package: { main: 'tiv' } }, function (err, res, pkg) {
137 if (err) t.fail(err);
138 t.equal(res, dir + '/grux/index.js');
139 t.equal(pkg, undefined);
142 resolve('garply', { basedir : dir + '/tiv' }, function (err, res, pkg) {
143 if (err) t.fail(err);
144 t.equal(res, dir + '/garply/lib/index.js');
145 t.equal(pkg.main, './lib');
148 resolve('garply', { basedir : dir + '/tiv', package: { main: 'tiv' } }, function (err, res, pkg) {
149 if (err) t.fail(err);
150 t.equal(res, dir + '/garply/lib/index.js');
151 t.equal(pkg.main, './lib');
155 test('quux', function (t) {
157 var dir = __dirname + '/resolver/quux';
159 resolve('./foo', { basedir : dir, package: { main: 'quux' } }, function (err, res, pkg) {
160 if (err) t.fail(err);
161 t.equal(res, dir + '/foo/index.js');
162 t.equal(pkg.main, 'quux');
166 test('normalize', function (t) {
168 var dir = __dirname + '/resolver/biz/node_modules/grux';
170 resolve('../grux', { basedir : dir }, function (err, res, pkg) {
171 if (err) t.fail(err);
172 t.equal(res, dir + '/index.js');
173 t.equal(pkg, undefined);
177 test('cup', function (t) {
179 var dir = __dirname + '/resolver';
181 resolve('./cup', { basedir : dir, extensions : [ '.js', '.coffee' ] },
182 function (err, res) {
183 if (err) t.fail(err);
184 t.equal(res, dir + '/cup.coffee');
187 resolve('./cup.coffee', { basedir : dir }, function (err, res) {
188 if (err) t.fail(err);
189 t.equal(res, dir + '/cup.coffee');
192 resolve('./cup', { basedir : dir, extensions : [ '.js' ] },
193 function (err, res) {
194 t.equal(err.message, "Cannot find module './cup' from '" + path.resolve(dir) + "'");
198 test('mug', function (t) {
200 var dir = __dirname + '/resolver';
202 resolve('./mug', { basedir : dir }, function (err, res) {
203 if (err) t.fail(err);
204 t.equal(res, dir + '/mug.js');
207 resolve('./mug', { basedir : dir, extensions : [ '.coffee', '.js' ] },
208 function (err, res) {
209 if (err) t.fail(err);
210 t.equal(res, dir + '/mug.coffee');
213 resolve('./mug', { basedir : dir, extensions : [ '.js', '.coffee' ] },
214 function (err, res) {
215 t.equal(res, dir + '/mug.js');
219 test('other path', function (t) {
221 var resolverDir = __dirname + '/resolver';
222 var dir = resolverDir + '/bar';
223 var otherDir = resolverDir + '/other_path';
225 resolve('root', { basedir : dir, paths: [otherDir] }, function (err, res) {
226 if (err) t.fail(err);
227 t.equal(res, resolverDir + '/other_path/root.js');
230 resolve('lib/other-lib', { basedir : dir, paths: [otherDir] },
231 function (err, res) {
232 if (err) t.fail(err);
233 t.equal(res, resolverDir + '/other_path/lib/other-lib.js');
236 resolve('root', { basedir : dir, }, function (err, res) {
237 t.equal(err.message, "Cannot find module 'root' from '" + path.resolve(dir) + "'");
240 resolve('zzz', { basedir : dir, paths: [otherDir] }, function (err, res) {
241 t.equal(err.message, "Cannot find module 'zzz' from '" + path.resolve(dir) + "'");
245 test('incorrect main', function (t) {
248 var resolverDir = __dirname + '/resolver';
249 var dir = resolverDir + '/incorrect_main';
251 resolve('./incorrect_main', { basedir : resolverDir }, function (err, res, pkg) {
252 if (err) t.fail(err);
253 t.equal(res, dir + '/index.js');
257 test('without basedir', function (t) {
260 var dir = __dirname + '/resolver/without_basedir';
261 var tester = require(dir + '/main.js');
263 tester(t, function (err, res, pkg){
267 t.equal(res, dir + '/node_modules/mymodule.js');
272 test('#25: node modules with the same name as node stdlib modules', function (t) {
275 var resolverDir = __dirname + '/resolver/punycode';
277 resolve('punycode', { basedir : resolverDir }, function (err, res, pkg) {
278 if (err) t.fail(err);
279 t.equal(res, resolverDir + '/node_modules/punycode/index.js');