'use strict'; const common = require('../common'); if ((!common.hasCrypto) || (!common.hasIntl)) { common.skip('ESLint tests require crypto and Intl'); } common.skipIfEslintMissing(); const RuleTester = require('../../tools/eslint/node_modules/eslint').RuleTester; const rule = require('../../tools/eslint-rules/alphabetize-errors'); new RuleTester().run('alphabetize-errors', rule, { valid: [ { code: ` E('AAA', 'foo'); E('BBB', 'bar'); E('CCC', 'baz'); `, options: [{ checkErrorDeclarations: true }] }, ` E('AAA', 'foo'); E('CCC', 'baz'); E('BBB', 'bar'); `, `const { codes: { ERR_A, ERR_B, }, } = require("internal/errors")`, ], invalid: [ { code: ` E('BBB', 'bar'); E('AAA', 'foo'); E('CCC', 'baz'); `, options: [{ checkErrorDeclarations: true }], errors: [{ message: 'Out of ASCIIbetical order - BBB >= AAA', line: 3 }] }, { code: `const { codes: { ERR_B, ERR_A, }, } = require("internal/errors")`, errors: [{ message: 'Out of ASCIIbetical order - ERR_B >= ERR_A', line: 4 }] }, { code: 'const internalErrors = require("internal/errors")', errors: [{ message: /Use destructuring/ }] }, { code: 'const {codes} = require("internal/errors")', errors: [{ message: /Use destructuring/ }] }, { code: 'const {codes:{ERR_A}} = require("internal/errors")', errors: [{ message: /Use multiline destructuring/ }] }, ] });