• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict';
2
3// This list must be computed before we require any modules to
4// to eliminate the noise.
5const actualModules = new Set(process.moduleLoadList.slice());
6
7const common = require('../common');
8const assert = require('assert');
9
10const expectedModules = new Set([
11  'Internal Binding errors',
12  'Internal Binding async_wrap',
13  'Internal Binding buffer',
14  'Internal Binding config',
15  'Internal Binding constants',
16  'Internal Binding contextify',
17  'Internal Binding credentials',
18  'Internal Binding fs',
19  'Internal Binding fs_dir',
20  'Internal Binding inspector',
21  'Internal Binding messaging',
22  'Internal Binding module_wrap',
23  'Internal Binding native_module',
24  'Internal Binding options',
25  'Internal Binding process_methods',
26  'Internal Binding report',
27  'Internal Binding string_decoder',
28  'Internal Binding symbols',
29  'Internal Binding task_queue',
30  'Internal Binding timers',
31  'Internal Binding trace_events',
32  'Internal Binding types',
33  'Internal Binding url',
34  'Internal Binding util',
35  'NativeModule buffer',
36  'NativeModule events',
37  'NativeModule fs',
38  'NativeModule internal/assert',
39  'NativeModule internal/async_hooks',
40  'NativeModule internal/bootstrap/pre_execution',
41  'NativeModule internal/buffer',
42  'NativeModule internal/console/constructor',
43  'NativeModule internal/console/global',
44  'NativeModule internal/constants',
45  'NativeModule internal/encoding',
46  'NativeModule internal/errors',
47  'NativeModule internal/fixed_queue',
48  'NativeModule internal/fs/dir',
49  'NativeModule internal/fs/utils',
50  'NativeModule internal/idna',
51  'NativeModule internal/linkedlist',
52  'NativeModule internal/modules/run_main',
53  'NativeModule internal/modules/package_json_reader',
54  'NativeModule internal/modules/cjs/helpers',
55  'NativeModule internal/modules/cjs/loader',
56  'NativeModule internal/modules/esm/create_dynamic_module',
57  'NativeModule internal/modules/esm/get_format',
58  'NativeModule internal/modules/esm/get_source',
59  'NativeModule internal/modules/esm/loader',
60  'NativeModule internal/modules/esm/module_job',
61  'NativeModule internal/modules/esm/module_map',
62  'NativeModule internal/modules/esm/resolve',
63  'NativeModule internal/modules/esm/transform_source',
64  'NativeModule internal/modules/esm/translators',
65  'NativeModule internal/process/esm_loader',
66  'NativeModule internal/options',
67  'NativeModule internal/priority_queue',
68  'NativeModule internal/process/execution',
69  'NativeModule internal/process/per_thread',
70  'NativeModule internal/process/promises',
71  'NativeModule internal/process/report',
72  'NativeModule internal/process/signal',
73  'NativeModule internal/process/task_queues',
74  'NativeModule internal/process/warning',
75  'NativeModule internal/querystring',
76  'NativeModule internal/source_map/source_map_cache',
77  'NativeModule internal/timers',
78  'NativeModule internal/url',
79  'NativeModule internal/util',
80  'NativeModule internal/util/debuglog',
81  'NativeModule internal/util/inspect',
82  'NativeModule internal/util/types',
83  'NativeModule internal/validators',
84  'NativeModule internal/vm/module',
85  'NativeModule internal/worker/js_transferable',
86  'NativeModule path',
87  'NativeModule timers',
88  'NativeModule url',
89  'NativeModule vm',
90]);
91
92if (!common.isMainThread) {
93  expectedModules.add('Internal Binding messaging');
94  expectedModules.add('Internal Binding symbols');
95  expectedModules.add('Internal Binding worker');
96  expectedModules.add('NativeModule _stream_duplex');
97  expectedModules.add('NativeModule _stream_passthrough');
98  expectedModules.add('NativeModule _stream_readable');
99  expectedModules.add('NativeModule _stream_transform');
100  expectedModules.add('NativeModule _stream_writable');
101  expectedModules.add('NativeModule internal/error_serdes');
102  expectedModules.add('NativeModule internal/process/worker_thread_only');
103  expectedModules.add('NativeModule internal/streams/buffer_list');
104  expectedModules.add('NativeModule internal/streams/destroy');
105  expectedModules.add('NativeModule internal/streams/end-of-stream');
106  expectedModules.add('NativeModule internal/streams/legacy');
107  expectedModules.add('NativeModule internal/streams/pipeline');
108  expectedModules.add('NativeModule internal/streams/state');
109  expectedModules.add('NativeModule internal/worker');
110  expectedModules.add('NativeModule internal/worker/io');
111  expectedModules.add('NativeModule stream');
112  expectedModules.add('NativeModule worker_threads');
113}
114
115if (common.hasIntl) {
116  expectedModules.add('Internal Binding icu');
117} else {
118  expectedModules.add('NativeModule punycode');
119}
120
121if (process.features.inspector) {
122  expectedModules.add('NativeModule internal/inspector_async_hook');
123  expectedModules.add('NativeModule internal/util/inspector');
124}
125
126if (process.env.NODE_V8_COVERAGE) {
127  expectedModules.add('Internal Binding profiler');
128}
129
130const difference = (setA, setB) => {
131  return new Set([...setA].filter((x) => !setB.has(x)));
132};
133const missingModules = difference(expectedModules, actualModules);
134const extraModules = difference(actualModules, expectedModules);
135const printSet = (s) => { return `${[...s].sort().join(',\n  ')}\n`; };
136
137assert.deepStrictEqual(actualModules, expectedModules,
138                       (missingModules.size > 0 ?
139                         'These modules were not loaded:\n  ' +
140                         printSet(missingModules) : '') +
141                       (extraModules.size > 0 ?
142                         'These modules were unexpectedly loaded:\n  ' +
143                         printSet(extraModules) : ''));
144