Path: blob/main/tests/src/rules/newline-after-import.js
829 views
import { RuleTester } from 'eslint';1import flatMap from 'array.prototype.flatmap';23import { getTSParsers, testVersion } from '../utils';45const IMPORT_ERROR_MESSAGE = 'Expected 1 empty line after import statement not followed by another import.';6const IMPORT_ERROR_MESSAGE_MULTIPLE = (count) => {7return `Expected ${count} empty lines after import statement not followed by another import.`;8};9const REQUIRE_ERROR_MESSAGE = 'Expected 1 empty line after require statement not followed by another require.';1011const ruleTester = new RuleTester();1213ruleTester.run('newline-after-import', require('rules/newline-after-import'), {14valid: [15`var path = require('path');\nvar foo = require('foo');\n`,16`require('foo');`,17`switch ('foo') { case 'bar': require('baz'); }`,18{19code: `20const x = () => require('baz')21, y = () => require('bar')`,22parserOptions: { ecmaVersion: 6 } ,23},24{25code: `const x = () => require('baz') && require('bar')`,26parserOptions: { ecmaVersion: 6 } ,27},28`function x() { require('baz'); }`,29`a(require('b'), require('c'), require('d'));`,30`function foo() {31switch (renderData.modalViewKey) {32case 'value':33var bar = require('bar');34return bar(renderData, options)35default:36return renderData.mainModalContent.clone()37}38}`,39{ code: `//issue 44140function bar() {41switch (foo) {42case '1':43return require('../path/to/file1.jst.hbs')(renderData, options);44case '2':45return require('../path/to/file2.jst.hbs')(renderData, options);46case '3':47return require('../path/to/file3.jst.hbs')(renderData, options);48case '4':49return require('../path/to/file4.jst.hbs')(renderData, options);50case '5':51return require('../path/to/file5.jst.hbs')(renderData, options);52case '6':53return require('../path/to/file6.jst.hbs')(renderData, options);54case '7':55return require('../path/to/file7.jst.hbs')(renderData, options);56case '8':57return require('../path/to/file8.jst.hbs')(renderData, options);58case '9':59return require('../path/to/file9.jst.hbs')(renderData, options);60case '10':61return require('../path/to/file10.jst.hbs')(renderData, options);62case '11':63return require('../path/to/file11.jst.hbs')(renderData, options);64case '12':65return something();66default:67return somethingElse();68}69}`,70parserOptions: { ecmaVersion: 2015, sourceType: 'module' },71},72{73code: `import path from 'path';\nimport foo from 'foo';\n`,74parserOptions: { ecmaVersion: 2015, sourceType: 'module' },75},76{77code: `import path from 'path';import foo from 'foo';\n`,78parserOptions: { ecmaVersion: 2015, sourceType: 'module' },79},80{81code: `import path from 'path';import foo from 'foo';\n\nvar bar = 42;`,82parserOptions: { ecmaVersion: 2015, sourceType: 'module' },83},84{85code: `import foo from 'foo';\n\nvar bar = 'bar';`,86parserOptions: { ecmaVersion: 2015, sourceType: 'module' },87},88{89code: `import foo from 'foo';\n\n\nvar bar = 'bar';`,90parserOptions: { ecmaVersion: 2015, sourceType: 'module' },91options: [{ 'count': 2 }],92},93{94code: `import foo from 'foo';\n\n\n\n\nvar bar = 'bar';`,95parserOptions: { ecmaVersion: 2015, sourceType: 'module' },96options: [{ 'count': 4 }],97},98{99code: `var foo = require('foo-module');\n\nvar foo = 'bar';`,100parserOptions: { ecmaVersion: 2015, sourceType: 'module' },101},102{103code: `var foo = require('foo-module');\n\n\nvar foo = 'bar';`,104parserOptions: { ecmaVersion: 2015, sourceType: 'module' },105options: [{ 'count': 2 }],106},107{108code: `var foo = require('foo-module');\n\n\n\n\nvar foo = 'bar';`,109parserOptions: { ecmaVersion: 2015, sourceType: 'module' },110options: [{ 'count': 4 }],111},112{113code: `require('foo-module');\n\nvar foo = 'bar';`,114parserOptions: { ecmaVersion: 2015, sourceType: 'module' },115},116{117code: `import foo from 'foo';\nimport { bar } from './bar-lib';`,118parserOptions: { ecmaVersion: 2015, sourceType: 'module' },119},120{121code: `import foo from 'foo';\n\nvar a = 123;\n\nimport { bar } from './bar-lib';`,122parserOptions: { ecmaVersion: 2015, sourceType: 'module' },123},124{125code: `var foo = require('foo-module');\n\nvar a = 123;\n\nvar bar = require('bar-lib');`,126parserOptions: { ecmaVersion: 2015, sourceType: 'module' },127},128{129code: `130function foo() {131var foo = require('foo');132foo();133}134`,135parserOptions: { ecmaVersion: 2015, sourceType: 'module' },136},137{138code: `139if (true) {140var foo = require('foo');141foo();142}143`,144parserOptions: { ecmaVersion: 2015, sourceType: 'module' },145},146{147code: `148function a() {149var assign = Object.assign || require('object-assign');150var foo = require('foo');151var bar = 42;152}153`,154parserOptions: { ecmaVersion: 2015, sourceType: 'module' },155},156{157code: `//issue 592158export default159@SomeDecorator(require('./some-file'))160class App {}161`,162parserOptions: { ecmaVersion: 2015, sourceType: 'module' },163parser: require.resolve('babel-eslint'),164},165{166code: `var foo = require('foo');\n\n@SomeDecorator(foo)\nclass Foo {}`,167parserOptions: { ecmaVersion: 2015, sourceType: 'module' },168parser: require.resolve('babel-eslint'),169},170{171code : `// issue 1004\nimport foo from 'foo';\n\n@SomeDecorator(foo)\nexport default class Test {}`,172parserOptions: { sourceType: 'module' },173parser: require.resolve('babel-eslint'),174},175{176code : `// issue 1004\nconst foo = require('foo');\n\n@SomeDecorator(foo)\nexport default class Test {}`,177parserOptions: { sourceType: 'module' },178parser: require.resolve('babel-eslint'),179},180...flatMap(getTSParsers(), (parser) => [181{182code: `183import { ExecaReturnValue } from 'execa';184import execa = require('execa');185`,186parser,187parserOptions: { ecmaVersion: 2015, sourceType: 'module' },188},189{190code: `191import execa = require('execa');192import { ExecaReturnValue } from 'execa';193`,194parser,195parserOptions: { ecmaVersion: 2015, sourceType: 'module' },196},197{198code: `199import { ExecaReturnValue } from 'execa';200import execa = require('execa');201import { ExecbReturnValue } from 'execb';202`,203parser,204parserOptions: { ecmaVersion: 2015, sourceType: 'module' },205},206{207code: `208import execa = require('execa');209import { ExecaReturnValue } from 'execa';210import execb = require('execb');211`,212parser,213parserOptions: { ecmaVersion: 2015, sourceType: 'module' },214},215{216code: `217export import a = obj;\nf(a);218`,219parser,220parserOptions: { ecmaVersion: 2015, sourceType: 'module' },221},222{223code: `224import { a } from "./a";225226export namespace SomeNamespace {227export import a2 = a;228f(a);229}`,230parser,231parserOptions: { ecmaVersion: 2015, sourceType: 'module' },232},233{234code: `235import stub from './stub';236237export {238stub239}240`,241parser,242parserOptions: { ecmaVersion: 2015, sourceType: 'module' },243},244]),245{246code: `247import stub from './stub';248249export {250stub251}252`,253parserOptions: { ecmaVersion: 2015, sourceType: 'module' },254},255],256257invalid: [].concat(258{259code: `import foo from 'foo';\nexport default function() {};`,260output: `import foo from 'foo';\n\nexport default function() {};`,261errors: [ {262line: 1,263column: 1,264message: IMPORT_ERROR_MESSAGE,265} ],266parserOptions: { ecmaVersion: 2015, sourceType: 'module' },267},268{269code: `import foo from 'foo';\n\nexport default function() {};`,270output: `import foo from 'foo';\n\n\nexport default function() {};`,271options: [{ 'count': 2 }],272errors: [ {273line: 1,274column: 1,275message: IMPORT_ERROR_MESSAGE_MULTIPLE(2),276} ],277parserOptions: { ecmaVersion: 2015, sourceType: 'module' },278},279{280code: `var foo = require('foo-module');\nvar something = 123;`,281output: `var foo = require('foo-module');\n\nvar something = 123;`,282errors: [ {283line: 1,284column: 1,285message: REQUIRE_ERROR_MESSAGE,286} ],287parserOptions: { ecmaVersion: 2015, sourceType: 'module' },288},289{290code: `import foo from 'foo';\nexport default function() {};`,291output: `import foo from 'foo';\n\nexport default function() {};`,292options: [{ 'count': 1 }],293errors: [ {294line: 1,295column: 1,296message: IMPORT_ERROR_MESSAGE,297} ],298parserOptions: { ecmaVersion: 2015, sourceType: 'module' },299},300{301code: `import foo from 'foo';\nvar a = 123;\n\nimport { bar } from './bar-lib';\nvar b=456;`,302output: `import foo from 'foo';\n\nvar a = 123;\n\nimport { bar } from './bar-lib';\n\nvar b=456;`,303errors: [304{305line: 1,306column: 1,307message: IMPORT_ERROR_MESSAGE,308},309{310line: 4,311column: 1,312message: IMPORT_ERROR_MESSAGE,313}],314parserOptions: { ecmaVersion: 2015, sourceType: 'module' },315},316{317code: `var foo = require('foo-module');\nvar a = 123;\n\nvar bar = require('bar-lib');\nvar b=456;`,318output: `var foo = require('foo-module');\n\nvar a = 123;\n\nvar bar = require('bar-lib');\n\nvar b=456;`,319errors: [320{321line: 1,322column: 1,323message: REQUIRE_ERROR_MESSAGE,324},325{326line: 4,327column: 1,328message: REQUIRE_ERROR_MESSAGE,329}],330parserOptions: { ecmaVersion: 2015, sourceType: 'module' },331},332{333code: `var foo = require('foo-module');\nvar a = 123;\n\nrequire('bar-lib');\nvar b=456;`,334output: `var foo = require('foo-module');\n\nvar a = 123;\n\nrequire('bar-lib');\n\nvar b=456;`,335errors: [336{337line: 1,338column: 1,339message: REQUIRE_ERROR_MESSAGE,340},341{342line: 4,343column: 1,344message: REQUIRE_ERROR_MESSAGE,345}],346parserOptions: { ecmaVersion: 2015, sourceType: 'module' },347},348{349code: `var path = require('path');\nvar foo = require('foo');\nvar bar = 42;`,350output: `var path = require('path');\nvar foo = require('foo');\n\nvar bar = 42;`,351errors: [ {352line: 2,353column: 1,354message: REQUIRE_ERROR_MESSAGE,355} ],356},357{358code: `var assign = Object.assign || require('object-assign');\nvar foo = require('foo');\nvar bar = 42;`,359output: `var assign = Object.assign || require('object-assign');\nvar foo = require('foo');\n\nvar bar = 42;`,360errors: [ {361line: 2,362column: 1,363message: REQUIRE_ERROR_MESSAGE,364} ],365},366{367code: `require('a');\nfoo(require('b'), require('c'), require('d'));\nrequire('d');\nvar foo = 'bar';`,368output: `require('a');\nfoo(require('b'), require('c'), require('d'));\nrequire('d');\n\nvar foo = 'bar';`,369errors: [370{371line: 3,372column: 1,373message: REQUIRE_ERROR_MESSAGE,374},375],376},377{378code: `require('a');\nfoo(\nrequire('b'),\nrequire('c'),\nrequire('d')\n);\nvar foo = 'bar';`,379output: `require('a');\nfoo(\nrequire('b'),\nrequire('c'),\nrequire('d')\n);\n\nvar foo = 'bar';`,380errors: [381{382line: 6,383column: 1,384message: REQUIRE_ERROR_MESSAGE,385},386],387},388{389code: `import path from 'path';\nimport foo from 'foo';\nvar bar = 42;`,390output: `import path from 'path';\nimport foo from 'foo';\n\nvar bar = 42;`,391errors: [ {392line: 2,393column: 1,394message: IMPORT_ERROR_MESSAGE,395} ],396parserOptions: { ecmaVersion: 2015, sourceType: 'module' },397},398{399code: `import path from 'path';import foo from 'foo';var bar = 42;`,400output: `import path from 'path';import foo from 'foo';\n\nvar bar = 42;`,401errors: [ {402line: 1,403column: 25,404message: IMPORT_ERROR_MESSAGE,405} ],406parserOptions: { ecmaVersion: 2015, sourceType: 'module' },407},408{409code: `import foo from 'foo';\n@SomeDecorator(foo)\nclass Foo {}`,410output: `import foo from 'foo';\n\n@SomeDecorator(foo)\nclass Foo {}`,411errors: [ {412line: 1,413column: 1,414message: IMPORT_ERROR_MESSAGE,415} ],416parserOptions: { ecmaVersion: 2015, sourceType: 'module' },417parser: require.resolve('babel-eslint'),418},419{420code: `var foo = require('foo');\n@SomeDecorator(foo)\nclass Foo {}`,421output: `var foo = require('foo');\n\n@SomeDecorator(foo)\nclass Foo {}`,422errors: [ {423line: 1,424column: 1,425message: REQUIRE_ERROR_MESSAGE,426} ],427parserOptions: { ecmaVersion: 2015, sourceType: 'module' },428parser: require.resolve('babel-eslint'),429},430{431code: `// issue 10042\nimport foo from 'foo';\n@SomeDecorator(foo)\nexport default class Test {}`,432output: `// issue 10042\nimport foo from 'foo';\n\n@SomeDecorator(foo)\nexport default class Test {}`,433errors: [ {434line: 2,435column: 1,436message: IMPORT_ERROR_MESSAGE,437} ],438parserOptions: { sourceType: 'module' },439parser: require.resolve('babel-eslint'),440},441{442code: `// issue 1004\nconst foo = require('foo');\n@SomeDecorator(foo)\nexport default class Test {}`,443output: `// issue 1004\nconst foo = require('foo');\n\n@SomeDecorator(foo)\nexport default class Test {}`,444errors: [ {445line: 2,446column: 1,447message: REQUIRE_ERROR_MESSAGE,448} ],449parserOptions: { sourceType: 'module' },450parser: require.resolve('babel-eslint'),451},452testVersion('>= 6', () => ({453code: `454// issue 1784455import { map } from 'rxjs/operators';456@Component({})457export class Test {}458`,459output: `460// issue 1784461import { map } from 'rxjs/operators';462463@Component({})464export class Test {}465`,466errors: [467{468line: 3,469column: 9,470message: IMPORT_ERROR_MESSAGE,471},472],473parserOptions: { sourceType: 'module' },474parser: require.resolve('babel-eslint'),475})) || [],476),477});478479480