From cf1d4cccbd01772b9674f3c3dcb5f76a6e426685 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Thu, 10 Feb 2022 21:46:11 -0800 Subject: [PATCH] [Test] add tests for `"main": false` See https://github.com/import-js/eslint-plugin-import/issues/2132#issuecomment-1035886707 --- test/resolver.js | 49 ++++++++++++++++++++++ test/resolver/false_main/index.js | 0 test/resolver/false_main/package.json | 4 ++ test/resolver_sync.js | 58 +++++++++++++++++++-------- 4 files changed, 94 insertions(+), 17 deletions(-) create mode 100644 test/resolver/false_main/index.js create mode 100644 test/resolver/false_main/package.json diff --git a/test/resolver.js b/test/resolver.js index 09da6868..49031659 100644 --- a/test/resolver.js +++ b/test/resolver.js @@ -290,6 +290,55 @@ test('incorrect main', function (t) { }); }); +test('missing index', function (t) { + t.plan(2); + + var resolverDir = path.join(__dirname, 'resolver'); + resolve('./missing_index', { basedir: resolverDir }, function (err, res, pkg) { + t.ok(err instanceof Error); + t.equal(err && err.code, 'MODULE_NOT_FOUND', 'error has correct error code'); + }); +}); + +test('missing main', function (t) { + t.plan(1); + + var resolverDir = path.join(__dirname, 'resolver'); + + resolve('./missing_main', { basedir: resolverDir }, function (err, res, pkg) { + t.equal(err && err.code, 'MODULE_NOT_FOUND', 'error has correct error code'); + }); +}); + +test('null main', function (t) { + t.plan(1); + + var resolverDir = path.join(__dirname, 'resolver'); + + resolve('./null_main', { basedir: resolverDir }, function (err, res, pkg) { + t.equal(err && err.code, 'MODULE_NOT_FOUND', 'error has correct error code'); + }); +}); + +test('main: false', function (t) { + t.plan(2); + + var basedir = path.join(__dirname, 'resolver'); + var dir = path.join(basedir, 'false_main'); + resolve('./false_main', { basedir: basedir }, function (err, res, pkg) { + if (err) t.fail(err); + t.equal( + res, + path.join(dir, 'index.js'), + '`"main": false`: resolves to `index.js`' + ); + t.deepEqual(pkg, { + name: 'false_main', + main: false + }); + }); +}); + test('without basedir', function (t) { t.plan(1); diff --git a/test/resolver/false_main/index.js b/test/resolver/false_main/index.js new file mode 100644 index 00000000..e69de29b diff --git a/test/resolver/false_main/package.json b/test/resolver/false_main/package.json new file mode 100644 index 00000000..a7416c0c --- /dev/null +++ b/test/resolver/false_main/package.json @@ -0,0 +1,4 @@ +{ + "name": "false_main", + "main": false +} diff --git a/test/resolver_sync.js b/test/resolver_sync.js index 6fb46a29..53453d66 100644 --- a/test/resolver_sync.js +++ b/test/resolver_sync.js @@ -317,7 +317,7 @@ test('missing index', function (t) { resolve.sync('./missing_index', { basedir: resolverDir }); t.fail('did not fail'); } catch (err) { - t.equal(err && err.code, 'INCORRECT_PACKAGE_MAIN', 'error has correct error code'); + t.equal(err && err.code, 'MODULE_NOT_FOUND', 'error has correct error code'); } if (requireResolveSupportsPaths) { try { @@ -331,18 +331,20 @@ test('missing index', function (t) { test('missing main', function (t) { var resolverDir = path.join(__dirname, 'resolver'); - var dir = path.join(resolverDir, 'missing_main'); - t.equal( - resolve.sync('./missing_main', { basedir: resolverDir }), - path.join(dir, 'index.js') - ); + try { + resolve.sync('./missing_main', { basedir: resolverDir }); + t.fail('require.resolve did not fail'); + } catch (err) { + t.equal(err && err.code, 'MODULE_NOT_FOUND', 'error has correct error code'); + } if (requireResolveSupportsPaths) { - t.equal( - resolve.sync('./missing_main', { basedir: resolverDir }), - require.resolve('./missing_main', { paths: [resolverDir] }), - '"main" missing: resolve.sync === require.resolve' - ); + try { + resolve.sync('./missing_main', { basedir: resolverDir }); + t.fail('require.resolve did not fail'); + } catch (err) { + t.equal(err && err.code, 'MODULE_NOT_FOUND', 'error has correct error code'); + } } t.end(); @@ -350,22 +352,44 @@ test('missing main', function (t) { test('null main', function (t) { var resolverDir = path.join(__dirname, 'resolver'); - var dir = path.join(resolverDir, 'null_main'); + try { + resolve.sync('./null_main', { basedir: resolverDir }); + t.fail('require.resolve did not fail'); + } catch (err) { + t.equal(err && err.code, 'MODULE_NOT_FOUND', 'error has correct error code'); + } + if (requireResolveSupportsPaths) { + try { + resolve.sync('./null_main', { basedir: resolverDir }); + t.fail('require.resolve did not fail'); + } catch (err) { + t.equal(err && err.code, 'MODULE_NOT_FOUND', 'error has correct error code'); + } + } + + t.end(); +}); + +test('main: false', function (t) { + var basedir = path.join(__dirname, 'resolver'); + var dir = path.join(basedir, 'false_main'); t.equal( - resolve.sync('./null_main', { basedir: resolverDir }), - path.join(dir, 'index.js') + resolve.sync('./false_main', { basedir: basedir }), + path.join(dir, 'index.js'), + '`"main": false`: resolves to `index.js`' ); if (requireResolveSupportsPaths) { t.equal( - resolve.sync('./null_main', { basedir: resolverDir }), - require.resolve('./null_main', { paths: [resolverDir] }), - '`"main": null`: resolve.sync === require.resolve' + resolve.sync('./false_main', { basedir: basedir }), + require.resolve('./false_main', { paths: [basedir] }), + '`"main": false`: resolve.sync === require.resolve' ); } t.end(); }); + var stubStatSync = function stubStatSync(fn) { var statSync = fs.statSync; try {