Skip to content

Commit

Permalink
Update the tests
Browse files Browse the repository at this point in the history
  • Loading branch information
pmcelhaney committed Jul 23, 2021
1 parent ee9f66c commit 3f88d46
Showing 1 changed file with 168 additions and 33 deletions.
201 changes: 168 additions & 33 deletions tests/src/core/resolve.js
Expand Up @@ -21,48 +21,34 @@ 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);
});

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, { 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 = [];
Expand All @@ -71,56 +57,53 @@ 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<stack-was-here>');
expect(testContextReports[0].loc).to.eql({ line: 1, column: 0 });

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'));
});

it('respects import/resolver as object', 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'));
});

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, { getPhysicalFilename: function () { return utils.getFilename('foo.js'); } }),
, Object.assign({}, testContext, { getFilename: 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, { getPhysicalFilename: function () { return utils.getFilename('foo.js'); } }),
, Object.assign({}, testContext, { getFilename: function () { return utils.getFilename('foo.js'); } }),
)).to.equal(utils.testFilePath('./bar.jsx'));
});

Expand All @@ -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');
Expand All @@ -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`);
Expand All @@ -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<stack-was-here>');
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<stack-was-here>');
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<stack-was-here>');
expect(testContextReports[0].loc).to.eql({ line: 1, column: 0 });
});
});

const caseDescribe = (!CASE_SENSITIVE_FS ? describe : describe.skip);
caseDescribe('case sensitivity', function () {
let file;
Expand Down

0 comments on commit 3f88d46

Please sign in to comment.