From 3f88d46ddeabe41cfe50f4e0a25b2f8162571af3 Mon Sep 17 00:00:00 2001 From: Patrick McElhaney Date: Thu, 22 Jul 2021 21:39:01 -0400 Subject: [PATCH] Update the tests --- tests/src/core/resolve.js | 201 +++++++++++++++++++++++++++++++------- 1 file changed, 168 insertions(+), 33 deletions(-) diff --git a/tests/src/core/resolve.js b/tests/src/core/resolve.js index 30fbe09094..2e8896b8dd 100644 --- a/tests/src/core/resolve.js +++ b/tests/src/core/resolve.js @@ -21,15 +21,15 @@ describe('resolve', function () { const testContext = utils.testContext({ 'import/resolver': './foo-bar-resolver-v1' }); expect(resolve( '../files/foo' - , Object.assign({}, testContext, { getPhysicalFilename: function () { return utils.getFilename('foo.js'); } }), + , Object.assign({}, testContext, { getFilename: function () { return utils.getFilename('foo.js'); } }), )).to.equal(utils.testFilePath('./bar.jsx')); expect(resolve( '../files/exception' - , Object.assign({}, testContext, { getPhysicalFilename: function () { return utils.getFilename('exception.js'); } }), + , Object.assign({}, testContext, { getFilename: function () { return utils.getFilename('exception.js'); } }), )).to.equal(undefined); expect(resolve( '../files/not-found' - , Object.assign({}, testContext, { getPhysicalFilename: function () { return utils.getFilename('not-found.js'); } }), + , Object.assign({}, testContext, { getFilename: function () { return utils.getFilename('not-found.js'); } }), )).to.equal(undefined); }); @@ -37,32 +37,18 @@ describe('resolve', function () { const testContext = utils.testContext({ 'import/resolver': './foo-bar-resolver-no-version' }); expect(resolve( '../files/foo' - , Object.assign({}, testContext, { getPhysicalFilename: function () { return utils.getFilename('foo.js'); } }), + , Object.assign({}, testContext, { getFilename: function () { return utils.getFilename('foo.js'); } }), )).to.equal(utils.testFilePath('./bar.jsx')); expect(resolve( '../files/exception' - , Object.assign({}, testContext, { getPhysicalFilename: function () { return utils.getFilename('exception.js'); } }), + , Object.assign({}, testContext, { getFilename: function () { return utils.getFilename('exception.js'); } }), )).to.equal(undefined); expect(resolve( '../files/not-found' - , Object.assign({}, testContext, { getPhysicalFilename: function () { return utils.getFilename('not-found.js'); } }), + , Object.assign({}, testContext, { getFilename: function () { return utils.getFilename('not-found.js'); } }), )).to.equal(undefined); }); - it('falls back to getFilename() when getPhysicalFileName() is not available (ESLint < 7.28)', function () { - const testContext = utils.testContext({ 'import/resolver': './foo-bar-resolver-v1' }); - - expect(resolve( '../files/foo' - , Object.assign({}, testContext, { getFilename: function () { return utils.getFilename('foo.js'); } }), - )).to.equal(utils.testFilePath('./bar.jsx')); - - expect(resolve( '../files/foo' - , Object.assign({}, testContext, { getFilename: function () { throw new Error('Should call getPhysicalFilename() instead of getFilename()'); }, getPhysicalFilename: function () { return utils.getFilename('foo.js'); } }), - )).to.equal(utils.testFilePath('./bar.jsx')); - - - }); - it('resolves via a custom resolver with interface version 2', function () { const testContext = utils.testContext({ 'import/resolver': './foo-bar-resolver-v2' }); const testContextReports = []; @@ -71,12 +57,12 @@ describe('resolve', function () { }; expect(resolve( '../files/foo' - , Object.assign({}, testContext, { getPhysicalFilename: function () { return utils.getFilename('foo.js'); } }), + , Object.assign({}, testContext, { getFilename: function () { return utils.getFilename('foo.js'); } }), )).to.equal(utils.testFilePath('./bar.jsx')); testContextReports.length = 0; expect(resolve( '../files/exception' - , Object.assign({}, testContext, { getPhysicalFilename: function () { return utils.getFilename('exception.js'); } }), + , Object.assign({}, testContext, { getFilename: function () { return utils.getFilename('exception.js'); } }), )).to.equal(undefined); expect(testContextReports[0]).to.be.an('object'); expect(replaceErrorStackForTest(testContextReports[0].message)).to.equal('Resolve error: foo-bar-resolver-v2 resolve test exception\n'); @@ -84,19 +70,16 @@ describe('resolve', function () { testContextReports.length = 0; expect(resolve( '../files/not-found' - , Object.assign({}, testContext, { getPhysicalFilename: function () { return utils.getFilename('not-found.js'); } }), + , Object.assign({}, testContext, { getFilename: function () { return utils.getFilename('not-found.js'); } }), )).to.equal(undefined); expect(testContextReports.length).to.equal(0); }); - - - it('respects import/resolver as array of strings', function () { const testContext = utils.testContext({ 'import/resolver': [ './foo-bar-resolver-v2', './foo-bar-resolver-v1' ] }); expect(resolve( '../files/foo' - , Object.assign({}, testContext, { getPhysicalFilename: function () { return utils.getFilename('foo.js'); } }), + , Object.assign({}, testContext, { getFilename: function () { return utils.getFilename('foo.js'); } }), )).to.equal(utils.testFilePath('./bar.jsx')); }); @@ -104,7 +87,7 @@ describe('resolve', function () { const testContext = utils.testContext({ 'import/resolver': { './foo-bar-resolver-v2': {} } }); expect(resolve( '../files/foo' - , Object.assign({}, testContext, { getPhysicalFilename: function () { return utils.getFilename('foo.js'); } }), + , Object.assign({}, testContext, { getFilename: function () { return utils.getFilename('foo.js'); } }), )).to.equal(utils.testFilePath('./bar.jsx')); }); @@ -112,7 +95,7 @@ describe('resolve', function () { const testContext = utils.testContext({ 'import/resolver': [ { './foo-bar-resolver-v2': {} }, { './foo-bar-resolver-v1': {} } ] }); expect(resolve( '../files/foo' - , Object.assign({}, testContext, { getPhysicalFilename: function () { return utils.getFilename('foo.js'); } }), + , Object.assign({}, testContext, { getFilename: function () { return utils.getFilename('foo.js'); } }), )).to.equal(utils.testFilePath('./bar.jsx')); }); @@ -120,7 +103,7 @@ describe('resolve', function () { const testContext = utils.testContext({ 'import/resolver': { 'foo': {} } }); expect(resolve( '../files/foo' - , Object.assign({}, testContext, { getPhysicalFilename: function () { return utils.getFilename('foo.js'); } }), + , Object.assign({}, testContext, { getFilename: function () { return utils.getFilename('foo.js'); } }), )).to.equal(utils.testFilePath('./bar.jsx')); }); @@ -133,7 +116,7 @@ describe('resolve', function () { testContextReports.length = 0; expect(resolve( '../files/foo' - , Object.assign({}, testContext, { getPhysicalFilename: function () { return utils.getFilename('foo.js'); } }), + , Object.assign({}, testContext, { getFilename: function () { return utils.getFilename('foo.js'); } }), )).to.equal(undefined); expect(testContextReports[0]).to.be.an('object'); expect(testContextReports[0].message).to.equal('Resolve error: invalid resolver config'); @@ -149,7 +132,7 @@ describe('resolve', function () { }; testContextReports.length = 0; expect(resolve( '../files/foo' - , Object.assign({}, testContext, { getPhysicalFilename: function () { return utils.getFilename('foo.js'); } }), + , Object.assign({}, testContext, { getFilename: function () { return utils.getFilename('foo.js'); } }), )).to.equal(undefined); expect(testContextReports[0]).to.be.an('object'); expect(testContextReports[0].message).to.equal(`Resolve error: ${resolverName} with invalid interface loaded as resolver`); @@ -172,13 +155,165 @@ describe('resolve', function () { }; expect(resolve( '../files/exception' - , Object.assign({}, testContext, { getPhysicalFilename: function () { return utils.getFilename('exception.js'); } }), + , Object.assign({}, testContext, { getFilename: function () { return utils.getFilename('exception.js'); } }), )).to.equal(undefined); expect(testContextReports[0]).to.be.an('object'); expect(replaceErrorStackForTest(testContextReports[0].message)).to.equal('Resolve error: SyntaxError: TEST SYNTAX ERROR\n'); expect(testContextReports[0].loc).to.eql({ line: 1, column: 0 }); }); + describe('getPhysicalFilename()', () => { // context.getPhysicalFilename() is available in ESLint 7.28+ + + function unexpectedCallToGetFilename() { + throw new Error('Expected to call to getPhysicalFilename() instead of getFilename()'); + } + + it('resolves via a custom resolver with interface version 1', function () { + const testContext = utils.testContext({ 'import/resolver': './foo-bar-resolver-v1' }); + + expect(resolve( '../files/foo' + , Object.assign({}, testContext, { getFilename: unexpectedCallToGetFilename, getPhysicalFilename: function () { return utils.getFilename('foo.js'); } }), + )).to.equal(utils.testFilePath('./bar.jsx')); + + expect(resolve( '../files/exception' + , Object.assign({}, testContext, { getFilename: unexpectedCallToGetFilename, getPhysicalFilename: function () { return utils.getFilename('exception.js'); } }), + )).to.equal(undefined); + + expect(resolve( '../files/not-found' + , Object.assign({}, testContext, { getFilename: unexpectedCallToGetFilename, getPhysicalFilename: function () { return utils.getFilename('not-found.js'); } }), + )).to.equal(undefined); + }); + + it('resolves via a custom resolver with interface version 1 assumed if not specified', function () { + const testContext = utils.testContext({ 'import/resolver': './foo-bar-resolver-no-version' }); + + expect(resolve( '../files/foo' + , Object.assign({}, testContext, { getFilename: unexpectedCallToGetFilename, getPhysicalFilename: function () { return utils.getFilename('foo.js'); } }), + )).to.equal(utils.testFilePath('./bar.jsx')); + + expect(resolve( '../files/exception' + , Object.assign({}, testContext, { getFilename: unexpectedCallToGetFilename, getPhysicalFilename: function () { return utils.getFilename('exception.js'); } }), + )).to.equal(undefined); + + expect(resolve( '../files/not-found' + , Object.assign({}, testContext, { getFilename: unexpectedCallToGetFilename, getPhysicalFilename: function () { return utils.getFilename('not-found.js'); } }), + )).to.equal(undefined); + }); + + it('resolves via a custom resolver with interface version 2', function () { + const testContext = utils.testContext({ 'import/resolver': './foo-bar-resolver-v2' }); + const testContextReports = []; + testContext.report = function (reportInfo) { + testContextReports.push(reportInfo); + }; + + expect(resolve( '../files/foo' + , Object.assign({}, testContext, { getFilename: unexpectedCallToGetFilename, getPhysicalFilename: function () { return utils.getFilename('foo.js'); } }), + )).to.equal(utils.testFilePath('./bar.jsx')); + + testContextReports.length = 0; + expect(resolve( '../files/exception' + , Object.assign({}, testContext, { getFilename: unexpectedCallToGetFilename, getPhysicalFilename: function () { return utils.getFilename('exception.js'); } }), + )).to.equal(undefined); + expect(testContextReports[0]).to.be.an('object'); + expect(replaceErrorStackForTest(testContextReports[0].message)).to.equal('Resolve error: foo-bar-resolver-v2 resolve test exception\n'); + expect(testContextReports[0].loc).to.eql({ line: 1, column: 0 }); + + testContextReports.length = 0; + expect(resolve( '../files/not-found' + , Object.assign({}, testContext, { getFilename: unexpectedCallToGetFilename, getPhysicalFilename: function () { return utils.getFilename('not-found.js'); } }), + )).to.equal(undefined); + expect(testContextReports.length).to.equal(0); + }); + + it('respects import/resolver as array of strings', function () { + const testContext = utils.testContext({ 'import/resolver': [ './foo-bar-resolver-v2', './foo-bar-resolver-v1' ] }); + + expect(resolve( '../files/foo' + , Object.assign({}, testContext, { getFilename: unexpectedCallToGetFilename, getPhysicalFilename: function () { return utils.getFilename('foo.js'); } }), + )).to.equal(utils.testFilePath('./bar.jsx')); + }); + + it('respects import/resolver as object', function () { + const testContext = utils.testContext({ 'import/resolver': { './foo-bar-resolver-v2': {} } }); + + expect(resolve( '../files/foo' + , Object.assign({}, testContext, { getFilename: unexpectedCallToGetFilename, getPhysicalFilename: function () { return utils.getFilename('foo.js'); } }), + )).to.equal(utils.testFilePath('./bar.jsx')); + }); + + it('respects import/resolver as array of objects', function () { + const testContext = utils.testContext({ 'import/resolver': [ { './foo-bar-resolver-v2': {} }, { './foo-bar-resolver-v1': {} } ] }); + + expect(resolve( '../files/foo' + , Object.assign({}, testContext, { getFilename: unexpectedCallToGetFilename, getPhysicalFilename: function () { return utils.getFilename('foo.js'); } }), + )).to.equal(utils.testFilePath('./bar.jsx')); + }); + + it('finds resolvers from the source files rather than eslint-module-utils', function () { + const testContext = utils.testContext({ 'import/resolver': { 'foo': {} } }); + + expect(resolve( '../files/foo' + , Object.assign({}, testContext, { getFilename: unexpectedCallToGetFilename, getPhysicalFilename: function () { return utils.getFilename('foo.js'); } }), + )).to.equal(utils.testFilePath('./bar.jsx')); + }); + + it('reports invalid import/resolver config', function () { + const testContext = utils.testContext({ 'import/resolver': 123.456 }); + const testContextReports = []; + testContext.report = function (reportInfo) { + testContextReports.push(reportInfo); + }; + + testContextReports.length = 0; + expect(resolve( '../files/foo' + , Object.assign({}, testContext, { getFilename: unexpectedCallToGetFilename, getPhysicalFilename: function () { return utils.getFilename('foo.js'); } }), + )).to.equal(undefined); + expect(testContextReports[0]).to.be.an('object'); + expect(testContextReports[0].message).to.equal('Resolve error: invalid resolver config'); + expect(testContextReports[0].loc).to.eql({ line: 1, column: 0 }); + }); + + it('reports loaded resolver with invalid interface', function () { + const resolverName = './foo-bar-resolver-invalid'; + const testContext = utils.testContext({ 'import/resolver': resolverName }); + const testContextReports = []; + testContext.report = function (reportInfo) { + testContextReports.push(reportInfo); + }; + testContextReports.length = 0; + expect(resolve( '../files/foo' + , Object.assign({}, testContext, { getFilename: unexpectedCallToGetFilename, getPhysicalFilename: function () { return utils.getFilename('foo.js'); } }), + )).to.equal(undefined); + expect(testContextReports[0]).to.be.an('object'); + expect(testContextReports[0].message).to.equal(`Resolve error: ${resolverName} with invalid interface loaded as resolver`); + expect(testContextReports[0].loc).to.eql({ line: 1, column: 0 }); + }); + + it('respects import/resolve extensions', function () { + const testContext = utils.testContext({ 'import/resolve': { 'extensions': ['.jsx'] } }); + + expect(resolve( './jsx/MyCoolComponent' + , testContext, + )).to.equal(utils.testFilePath('./jsx/MyCoolComponent.jsx')); + }); + + it('reports load exception in a user resolver', function () { + const testContext = utils.testContext({ 'import/resolver': './load-error-resolver' }); + const testContextReports = []; + testContext.report = function (reportInfo) { + testContextReports.push(reportInfo); + }; + + expect(resolve( '../files/exception' + , Object.assign({}, testContext, { getFilename: unexpectedCallToGetFilename, getPhysicalFilename: function () { return utils.getFilename('exception.js'); } }), + )).to.equal(undefined); + expect(testContextReports[0]).to.be.an('object'); + expect(replaceErrorStackForTest(testContextReports[0].message)).to.equal('Resolve error: SyntaxError: TEST SYNTAX ERROR\n'); + expect(testContextReports[0].loc).to.eql({ line: 1, column: 0 }); + }); + }); + const caseDescribe = (!CASE_SENSITIVE_FS ? describe : describe.skip); caseDescribe('case sensitivity', function () { let file;