| 1 | var test = require('tape');
|
|---|
| 2 | var keys = require('object-keys');
|
|---|
| 3 | var semver = require('semver');
|
|---|
| 4 |
|
|---|
| 5 | var resolve = require('../');
|
|---|
| 6 |
|
|---|
| 7 | var brokenNode = semver.satisfies(process.version, '11.11 - 11.13');
|
|---|
| 8 |
|
|---|
| 9 | test('core modules', function (t) {
|
|---|
| 10 | t.test('isCore()', function (st) {
|
|---|
| 11 | st.ok(resolve.isCore('fs'));
|
|---|
| 12 | st.ok(resolve.isCore('net'));
|
|---|
| 13 | st.ok(resolve.isCore('http'));
|
|---|
| 14 |
|
|---|
| 15 | st.ok(!resolve.isCore('seq'));
|
|---|
| 16 | st.ok(!resolve.isCore('../'));
|
|---|
| 17 |
|
|---|
| 18 | st.ok(!resolve.isCore('toString'));
|
|---|
| 19 |
|
|---|
| 20 | st.end();
|
|---|
| 21 | });
|
|---|
| 22 |
|
|---|
| 23 | t.test('core list', function (st) {
|
|---|
| 24 | var cores = keys(resolve.core);
|
|---|
| 25 | st.plan(cores.length);
|
|---|
| 26 |
|
|---|
| 27 | for (var i = 0; i < cores.length; ++i) {
|
|---|
| 28 | var mod = cores[i];
|
|---|
| 29 | // note: this must be require, not require.resolve, due to https://github.com/nodejs/node/issues/43274
|
|---|
| 30 | var requireFunc = function () { require(mod); }; // eslint-disable-line no-loop-func
|
|---|
| 31 | t.comment(mod + ': ' + resolve.core[mod]);
|
|---|
| 32 | if (resolve.core[mod]) {
|
|---|
| 33 | st.doesNotThrow(requireFunc, mod + ' supported; requiring does not throw');
|
|---|
| 34 | } else if (brokenNode) {
|
|---|
| 35 | st.ok(true, 'this version of node is broken: attempting to require things that fail to resolve breaks "home_paths" tests');
|
|---|
| 36 | } else {
|
|---|
| 37 | st.throws(requireFunc, mod + ' not supported; requiring throws');
|
|---|
| 38 | }
|
|---|
| 39 | }
|
|---|
| 40 |
|
|---|
| 41 | st.end();
|
|---|
| 42 | });
|
|---|
| 43 |
|
|---|
| 44 | t.test('core via repl module', { skip: !resolve.core.repl }, function (st) {
|
|---|
| 45 | var libs = require('repl')._builtinLibs; // eslint-disable-line no-underscore-dangle
|
|---|
| 46 | if (!libs) {
|
|---|
| 47 | st.skip('module.builtinModules does not exist');
|
|---|
| 48 | return st.end();
|
|---|
| 49 | }
|
|---|
| 50 | for (var i = 0; i < libs.length; ++i) {
|
|---|
| 51 | var mod = libs[i];
|
|---|
| 52 | st.ok(resolve.core[mod], mod + ' is a core module');
|
|---|
| 53 | st.doesNotThrow(
|
|---|
| 54 | function () { require(mod); }, // eslint-disable-line no-loop-func
|
|---|
| 55 | 'requiring ' + mod + ' does not throw'
|
|---|
| 56 | );
|
|---|
| 57 | }
|
|---|
| 58 | st.end();
|
|---|
| 59 | });
|
|---|
| 60 |
|
|---|
| 61 | t.test('core via builtinModules list', { skip: !resolve.core.module }, function (st) {
|
|---|
| 62 | var libs = require('module').builtinModules;
|
|---|
| 63 | if (!libs) {
|
|---|
| 64 | st.skip('module.builtinModules does not exist');
|
|---|
| 65 | return st.end();
|
|---|
| 66 | }
|
|---|
| 67 | var blacklist = [
|
|---|
| 68 | '_debug_agent',
|
|---|
| 69 | 'v8/tools/tickprocessor-driver',
|
|---|
| 70 | 'v8/tools/SourceMap',
|
|---|
| 71 | 'v8/tools/tickprocessor',
|
|---|
| 72 | 'v8/tools/profile'
|
|---|
| 73 | ];
|
|---|
| 74 | for (var i = 0; i < libs.length; ++i) {
|
|---|
| 75 | var mod = libs[i];
|
|---|
| 76 | if (blacklist.indexOf(mod) === -1) {
|
|---|
| 77 | st.ok(resolve.core[mod], mod + ' is a core module');
|
|---|
| 78 | st.doesNotThrow(
|
|---|
| 79 | function () { require(mod); }, // eslint-disable-line no-loop-func
|
|---|
| 80 | 'requiring ' + mod + ' does not throw'
|
|---|
| 81 | );
|
|---|
| 82 | }
|
|---|
| 83 | }
|
|---|
| 84 | st.end();
|
|---|
| 85 | });
|
|---|
| 86 |
|
|---|
| 87 | t.end();
|
|---|
| 88 | });
|
|---|