Path: blob/main/tests/src/rules/group-exports.js
829 views
import { test } from '../utils';1import { RuleTester } from 'eslint';2import rule from 'rules/group-exports';3import { resolve } from 'path';4import { default as babelPresetFlow } from 'babel-preset-flow';56/* eslint-disable max-len */7const errors = {8named: 'Multiple named export declarations; consolidate all named exports into a single export declaration',9commonjs: 'Multiple CommonJS exports; consolidate all exports into a single assignment to `module.exports`',10};11/* eslint-enable max-len */12const ruleTester = new RuleTester({13parser: resolve(__dirname, '../../../node_modules/babel-eslint'),14parserOptions: {15babelOptions: {16configFile: false,17babelrc: false,18presets: [babelPresetFlow],19},20},21});2223ruleTester.run('group-exports', rule, {24valid: [25test({ code: 'export const test = true' }),26test({ code: `27export default {}28export const test = true29` }),30test({ code: `31const first = true32const second = true33export {34first,35second36}37` }),38test({ code: `39export default {}40/* test */41export const test = true42` }),43test({ code: `44export default {}45// test46export const test = true47` }),48test({ code: `49export const test = true50/* test */51export default {}52` }),53test({ code: `54export const test = true55// test56export default {}57` }),58test({ code: `59export { default as module1 } from './module-1'60export { default as module2 } from './module-2'61` }),62test({ code: 'module.exports = {} ' }),63test({ code: `64module.exports = { test: true,65another: false }66` }),67test({ code: 'exports.test = true' }),6869test({ code: `70module.exports = {}71const test = module.exports72` }),73test({ code: `74exports.test = true75const test = exports.test76` }),77test({ code: `78module.exports = {}79module.exports.too.deep = true80` }),81test({ code: `82module.exports.deep.first = true83module.exports.deep.second = true84` }),85test({ code: `86module.exports = {}87exports.too.deep = true88` }),89test({ code: `90export default {}91const test = true92export { test }93` }),94test({ code: `95const test = true96export { test }97const another = true98export default {}99` }),100test({ code: `101module.something.else = true102module.something.different = true103` }),104test({ code: `105module.exports.test = true106module.something.different = true107` }),108test({ code: `109exports.test = true110module.something.different = true111` }),112test({ code: `113unrelated = 'assignment'114module.exports.test = true115` }),116test({ code: `117type firstType = {118propType: string119};120const first = {};121export type { firstType };122export { first };123` }),124test({ code: `125type firstType = {126propType: string127};128type secondType = {129propType: string130};131export type { firstType, secondType };132` }),133test({ code: `134export type { type1A, type1B } from './module-1'135export { method1 } from './module-1'136` }),137],138invalid: [139test({140code: `141export const test = true142export const another = true143`,144errors: [145errors.named,146errors.named,147],148}),149test({150code: `151export { method1 } from './module-1'152export { method2 } from './module-1'153`,154errors: [155errors.named,156errors.named,157],158}),159test({160code: `161module.exports = {}162module.exports.test = true163module.exports.another = true164`,165errors: [166errors.commonjs,167errors.commonjs,168errors.commonjs,169],170}),171test({172code: `173module.exports = {}174module.exports.test = true175`,176errors: [177errors.commonjs,178errors.commonjs,179],180}),181test({182code: `183module.exports = { test: true }184module.exports.another = true185`,186errors: [187errors.commonjs,188errors.commonjs,189],190}),191test({192code: `193module.exports.test = true194module.exports.another = true195`,196errors: [197errors.commonjs,198errors.commonjs,199],200}),201test({202code: `203exports.test = true204module.exports.another = true205`,206errors: [207errors.commonjs,208errors.commonjs,209],210}),211test({212code: `213module.exports = () => {}214module.exports.attached = true215`,216errors: [217errors.commonjs,218errors.commonjs,219],220}),221test({222code: `223module.exports = function test() {}224module.exports.attached = true225`,226errors: [227errors.commonjs,228errors.commonjs,229],230}),231test({232code: `233module.exports = () => {}234exports.test = true235exports.another = true236`,237errors: [238errors.commonjs,239errors.commonjs,240errors.commonjs,241],242}),243test({244code: `245module.exports = "non-object"246module.exports.attached = true247`,248errors: [249errors.commonjs,250errors.commonjs,251],252}),253test({254code: `255module.exports = "non-object"256module.exports.attached = true257module.exports.another = true258`,259errors: [260errors.commonjs,261errors.commonjs,262errors.commonjs,263],264}),265test({266code: `267type firstType = {268propType: string269};270type secondType = {271propType: string272};273const first = {};274export type { firstType };275export type { secondType };276export { first };277`,278errors: [279errors.named,280errors.named,281],282}),283test({284code: `285export type { type1 } from './module-1'286export type { type2 } from './module-1'287`,288errors: [289errors.named,290errors.named,291],292}),293],294});295296297