Initial commit
[yaffs-website] / node_modules / resolve / test / node-modules-paths.js
1 var test = require('tape');
2 var path = require('path');
3 var parse = path.parse || require('path-parse');
4 var keys = require('object-keys');
5
6 var nodeModulesPaths = require('../lib/node-modules-paths');
7
8 var verifyDirs = function verifyDirs(t, start, dirs, moduleDirectories, paths) {
9     moduleDirectories = [].concat(moduleDirectories || 'node_modules');
10     if (!paths) { paths = []; }
11
12     var foundModuleDirs = {};
13     var uniqueDirs = {};
14     var parsedDirs = {};
15     for (var i = 0; i < dirs.length; ++i) {
16         var parsed = parse(dirs[i]);
17         if (!foundModuleDirs[parsed.base]) { foundModuleDirs[parsed.base] = 0; }
18         foundModuleDirs[parsed.base] += 1;
19         parsedDirs[parsed.dir] = true;
20         uniqueDirs[dirs[i]] = true;
21     }
22     t.equal(keys(parsedDirs).length >= start.split(path.sep).length, true, 'there are >= dirs than "start" has');
23     var foundModuleDirNames = keys(foundModuleDirs);
24     t.deepEqual(foundModuleDirNames, moduleDirectories.concat(paths), 'all desired module dirs were found');
25     t.equal(keys(uniqueDirs).length, dirs.length, 'all dirs provided were unique');
26
27     var counts = {};
28     for (var j = 0; j < foundModuleDirNames.length; ++j) {
29         counts[foundModuleDirs[j]] = true;
30     }
31     t.equal(keys(counts).length, 1, 'all found module directories had the same count');
32 };
33
34 test('node-modules-paths', function (t) {
35     t.test('no options', function (t) {
36         var start = path.join(__dirname, 'resolver');
37         var dirs = nodeModulesPaths(start);
38
39         verifyDirs(t, start, dirs);
40
41         t.end();
42     });
43
44     t.test('empty options', function (t) {
45         var start = path.join(__dirname, 'resolver');
46         var dirs = nodeModulesPaths(start, {});
47
48         verifyDirs(t, start, dirs);
49
50         t.end();
51     });
52
53     t.test('with paths option', function (t) {
54         var start = path.join(__dirname, 'resolver');
55         var paths = ['a', 'b'];
56         var dirs = nodeModulesPaths(start, { paths: paths });
57
58         verifyDirs(t, start, dirs, null, paths);
59
60         t.end();
61     });
62
63     t.test('with moduleDirectory option', function (t) {
64         var start = path.join(__dirname, 'resolver');
65         var moduleDirectory = 'not node modules';
66         var dirs = nodeModulesPaths(start, { moduleDirectory: moduleDirectory });
67
68         verifyDirs(t, start, dirs, moduleDirectory);
69
70         t.end();
71     });
72
73     t.test('with 1 moduleDirectory and paths options', function (t) {
74         var start = path.join(__dirname, 'resolver');
75         var paths = ['a', 'b'];
76         var moduleDirectory = 'not node modules';
77         var dirs = nodeModulesPaths(start, { paths: paths, moduleDirectory: moduleDirectory });
78
79         verifyDirs(t, start, dirs, moduleDirectory, paths);
80
81         t.end();
82     });
83
84     t.test('with 1+ moduleDirectory and paths options', function (t) {
85         var start = path.join(__dirname, 'resolver');
86         var paths = ['a', 'b'];
87         var moduleDirectories = ['not node modules', 'other modules'];
88         var dirs = nodeModulesPaths(start, { paths: paths, moduleDirectory: moduleDirectories });
89
90         verifyDirs(t, start, dirs, moduleDirectories, paths);
91
92         t.end();
93     });
94 });