eslint-plugin-ecmascript-compat
Version:
ESLint plugin for checking JavaScript code compatibility with target browsers and Node.js versions
64 lines (46 loc) • 1.91 kB
JavaScript
const assert = require('node:assert');
const { beforeEach, it } = require('node:test');
const browserslist = require('browserslist');
const targetRuntimes = require('./targetRuntimes');
beforeEach(() => {
delete process.env.BROWSERSLIST;
browserslist.clearCaches();
});
it('targets the oldest version of each family', () => {
process.env.BROWSERSLIST = 'Chrome >= 50';
assert.deepStrictEqual(targetRuntimes(), [{ name: 'chrome', version: '50' }]);
});
it('targets the oldest version of each family, treating versions as numbers', () => {
process.env.BROWSERSLIST = 'chrome 9-10';
assert.deepStrictEqual(targetRuntimes(), [{ name: 'chrome', version: '9' }]);
});
it('maps browserslist names to mdn names where necessary', () => {
process.env.BROWSERSLIST = 'Android >= 0';
assert.deepStrictEqual(targetRuntimes(), [{ name: 'webview_android', version: '2.1' }]);
});
it('discards families unknown to mdn', () => {
process.env.BROWSERSLIST = 'kaios >= 0';
assert.deepStrictEqual(targetRuntimes(), []);
});
it('handles multiple families', () => {
process.env.BROWSERSLIST = 'Firefox >= 55,IE >= 10';
assert.deepStrictEqual(targetRuntimes(), [
{ name: 'firefox', version: '55' },
{ name: 'ie', version: '10' },
]);
});
it('accepts a override', () => {
assert.deepStrictEqual(targetRuntimes('Firefox >= 55,IE >= 10'), [
{ name: 'firefox', version: '55' },
{ name: 'ie', version: '10' },
]);
});
it('preserves versions as strings to allow semver', () => {
process.env.BROWSERSLIST = 'Node >= 0';
assert.deepStrictEqual(targetRuntimes(), [{ name: 'nodejs', version: '0.2.0' }]);
});
it('simplifies version ranges to the start of the range', () => {
assert.deepStrictEqual(browserslist('iOS 15'), ['ios_saf 15.0-15.1']);
process.env.BROWSERSLIST = 'iOS 15';
assert.deepStrictEqual(targetRuntimes(), [{ name: 'safari_ios', version: '15.0' }]);
});