Initial commit
[yaffs-website] / node_modules / resolve / test / mock.js
1 var path = require('path');
2 var test = require('tape');
3 var resolve = require('../');
4
5 test('mock', function (t) {
6     t.plan(8);
7
8     var files = {};
9     files[path.resolve('/foo/bar/baz.js')] = 'beep';
10
11     function opts(basedir) {
12         return {
13             basedir: path.resolve(basedir),
14             isFile: function (file, cb) {
15                 cb(null, Object.prototype.hasOwnProperty.call(files, path.resolve(file)));
16             },
17             readFile: function (file, cb) {
18                 cb(null, files[path.resolve(file)]);
19             }
20         };
21     }
22
23     resolve('./baz', opts('/foo/bar'), function (err, res, pkg) {
24         if (err) return t.fail(err);
25         t.equal(res, path.resolve('/foo/bar/baz.js'));
26         t.equal(pkg, undefined);
27     });
28
29     resolve('./baz.js', opts('/foo/bar'), function (err, res, pkg) {
30         if (err) return t.fail(err);
31         t.equal(res, path.resolve('/foo/bar/baz.js'));
32         t.equal(pkg, undefined);
33     });
34
35     resolve('baz', opts('/foo/bar'), function (err, res) {
36         t.equal(err.message, "Cannot find module 'baz' from '" + path.resolve('/foo/bar') + "'");
37         t.equal(err.code, 'MODULE_NOT_FOUND');
38     });
39
40     resolve('../baz', opts('/foo/bar'), function (err, res) {
41         t.equal(err.message, "Cannot find module '../baz' from '" + path.resolve('/foo/bar') + "'");
42         t.equal(err.code, 'MODULE_NOT_FOUND');
43     });
44 });
45
46 test('mock from package', function (t) {
47     t.plan(8);
48
49     var files = {};
50     files[path.resolve('/foo/bar/baz.js')] = 'beep';
51
52     function opts(basedir) {
53         return {
54             basedir: path.resolve(basedir),
55             isFile: function (file, cb) {
56                 cb(null, Object.prototype.hasOwnProperty.call(files, file));
57             },
58             'package': { main: 'bar' },
59             readFile: function (file, cb) {
60                 cb(null, files[file]);
61             }
62         };
63     }
64
65     resolve('./baz', opts('/foo/bar'), function (err, res, pkg) {
66         if (err) return t.fail(err);
67         t.equal(res, path.resolve('/foo/bar/baz.js'));
68         t.equal(pkg && pkg.main, 'bar');
69     });
70
71     resolve('./baz.js', opts('/foo/bar'), function (err, res, pkg) {
72         if (err) return t.fail(err);
73         t.equal(res, path.resolve('/foo/bar/baz.js'));
74         t.equal(pkg && pkg.main, 'bar');
75     });
76
77     resolve('baz', opts('/foo/bar'), function (err, res) {
78         t.equal(err.message, "Cannot find module 'baz' from '" + path.resolve('/foo/bar') + "'");
79         t.equal(err.code, 'MODULE_NOT_FOUND');
80     });
81
82     resolve('../baz', opts('/foo/bar'), function (err, res) {
83         t.equal(err.message, "Cannot find module '../baz' from '" + path.resolve('/foo/bar') + "'");
84         t.equal(err.code, 'MODULE_NOT_FOUND');
85     });
86 });
87
88 test('mock package', function (t) {
89     t.plan(2);
90
91     var files = {};
92     files[path.resolve('/foo/node_modules/bar/baz.js')] = 'beep';
93     files[path.resolve('/foo/node_modules/bar/package.json')] = JSON.stringify({
94         main: './baz.js'
95     });
96
97     function opts(basedir) {
98         return {
99             basedir: path.resolve(basedir),
100             isFile: function (file, cb) {
101                 cb(null, Object.prototype.hasOwnProperty.call(files, path.resolve(file)));
102             },
103             readFile: function (file, cb) {
104                 cb(null, files[path.resolve(file)]);
105             }
106         };
107     }
108
109     resolve('bar', opts('/foo'), function (err, res, pkg) {
110         if (err) return t.fail(err);
111         t.equal(res, path.resolve('/foo/node_modules/bar/baz.js'));
112         t.equal(pkg && pkg.main, './baz.js');
113     });
114 });
115
116 test('mock package from package', function (t) {
117     t.plan(2);
118
119     var files = {};
120     files[path.resolve('/foo/node_modules/bar/baz.js')] = 'beep';
121     files[path.resolve('/foo/node_modules/bar/package.json')] = JSON.stringify({
122         main: './baz.js'
123     });
124
125     function opts(basedir) {
126         return {
127             basedir: path.resolve(basedir),
128             isFile: function (file, cb) {
129                 cb(null, Object.prototype.hasOwnProperty.call(files, path.resolve(file)));
130             },
131             'package': { main: 'bar' },
132             readFile: function (file, cb) {
133                 cb(null, files[path.resolve(file)]);
134             }
135         };
136     }
137
138     resolve('bar', opts('/foo'), function (err, res, pkg) {
139         if (err) return t.fail(err);
140         t.equal(res, path.resolve('/foo/node_modules/bar/baz.js'));
141         t.equal(pkg && pkg.main, './baz.js');
142     });
143 });