/
test.js
142 lines (124 loc) · 4.51 KB
/
test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import test from 'ava';
import WebpackDependencyStats from '..';
import denodeify from 'denodeify';
import path from 'path';
import _ from 'lodash';
const webpack = denodeify(require('webpack'));
function getErrorMessage(cb) {
try {
cb();
} catch(e) {
return e.message;
}
}
let stats;
test.before(async t => {
stats = await webpack(require('./fixtures/demo/webpack.config.js'));
});
test('extracts modules from stats', t => {
var webpackDependencyStats = new WebpackDependencyStats(stats, {
srcFolder: path.resolve(__dirname, 'fixtures/demo/')
})
var {byId, byName} = webpackDependencyStats.extractModuleData(stats, {
srcFolder: path.resolve(__dirname, 'fixtures/demo/')
});
var moduleNames = Object.keys(byName);
t.deepEqual(moduleNames, [
'./entry.js',
'./space/earth/ocean/intro.html',
'./space/index.js',
'./space/earth nonrecursive ^\\.\\/.*\\.js$',
'./space/earth/index.js',
'./space/earth/ocean/island.js',
'./space/earth/ocean/text.html',
'./space/earth/europe/index.js',
'./another-entry.js'
]);
var expectedIds = _.values(byName).map((module) => `${module.id}`);
var moduleIds = Object.keys(byId);
t.deepEqual(expectedIds, moduleIds);
});
test('extracts modules names from stats', t => {
var webpackDependencyStats = new WebpackDependencyStats(stats, {
srcFolder: path.resolve(__dirname, 'fixtures/demo/')
})
var {byId, byName} = webpackDependencyStats.extractModuleData(stats, {
srcFolder: path.resolve(__dirname, 'fixtures/demo/')
});
var webpackDependencyStats = new WebpackDependencyStats(stats, {
srcFolder: path.resolve(__dirname, 'fixtures/demo/')
});
var moduleNames = Object.keys(byName);
t.deepEqual(moduleNames, webpackDependencyStats.getModuleNames());
});
test('throws on unknown module', t => {
var webpackDependencyStats = new WebpackDependencyStats(stats, {
srcFolder: path.resolve(__dirname, 'fixtures/demo/')
});
var err = getErrorMessage(() => webpackDependencyStats.getDependentIdsById(999));
t.is(err, `Module "999" was not found in webpack stats`);
});
test('throws on unknown module', t => {
var webpackDependencyStats = new WebpackDependencyStats(stats, {
srcFolder: path.resolve(__dirname, 'fixtures/demo/')
});
var err = getErrorMessage(() => webpackDependencyStats.getDependencyIds('fancy'));
t.is(err, `Module "fancy" was not found in webpack stats`);
});
test('throws on unknown module', t => {
var webpackDependencyStats = new WebpackDependencyStats(stats, {
srcFolder: path.resolve(__dirname, 'fixtures/demo/')
});
var err = getErrorMessage(() => webpackDependencyStats.getDependents('fancy'));
t.is(err, `Module "fancy" was not found in webpack stats`);
});
test('extracts dependents of module', t => {
var webpackDependencyStats = new WebpackDependencyStats(stats, {
srcFolder: path.resolve(__dirname, 'fixtures/demo/')
});
var dependents = webpackDependencyStats.getDependents('./space/earth/ocean/text.html');
t.deepEqual(dependents, [
'./entry.js',
'./space/index.js',
'./space/earth/index.js',
'./space/earth/ocean/island.js',
'./space/earth/europe/index.js'
]);
});
test('extracts dependencies of module', t => {
var webpackDependencyStats = new WebpackDependencyStats(stats, {
srcFolder: path.resolve(__dirname, 'fixtures/demo/')
});
var dependencies = webpackDependencyStats.getDependencies('./entry.js');
t.deepEqual(dependencies, [
'./space/earth/ocean/intro.html',
'./space/index.js',
'./space/earth/index.js',
'./space/earth/ocean/island.js',
'./space/earth/ocean/text.html',
'./space/earth/europe/index.js'
]);
});
test('extracts dependencies of module from cache', t => {
var webpackDependencyStats = new WebpackDependencyStats(stats, {
srcFolder: path.resolve(__dirname, 'fixtures/demo/')
});
var dependencies = webpackDependencyStats.getDependencies('./entry.js');
t.deepEqual(dependencies, webpackDependencyStats.getDependencies('./entry.js'));
});
test('extracts dependencies of module including node modules', t => {
var webpackDependencyStats = new WebpackDependencyStats(stats, {
srcFolder: path.resolve(__dirname, 'fixtures/demo/'),
onlyLocal: false
});
var dependencies = webpackDependencyStats.getDependencies('./entry.js');
t.deepEqual(dependencies, [
'./space/earth/ocean/intro.html',
'./space/index.js',
'./space/earth/index.js',
'./space/earth/ocean/island.js',
'./space/earth/ocean/text.html',
'./space/earth/europe/index.js',
'~/lodash/lodash.js'
]);
});