diff --git a/tests/files/cycles/depth-one.js b/tests/files/cycles/depth-one.js deleted file mode 100644 index 748f65f844..0000000000 --- a/tests/files/cycles/depth-one.js +++ /dev/null @@ -1,2 +0,0 @@ -import foo from "./depth-zero" -export { foo } diff --git a/tests/files/cycles/es6/depth-one.js b/tests/files/cycles/es6/depth-one.js new file mode 100644 index 0000000000..9caa762505 --- /dev/null +++ b/tests/files/cycles/es6/depth-one.js @@ -0,0 +1,2 @@ +import foo from "../depth-zero" +export { foo } diff --git a/tests/files/cycles/depth-three-indirect.js b/tests/files/cycles/es6/depth-three-indirect.js similarity index 100% rename from tests/files/cycles/depth-three-indirect.js rename to tests/files/cycles/es6/depth-three-indirect.js diff --git a/tests/files/cycles/depth-three-star.js b/tests/files/cycles/es6/depth-three-star.js similarity index 100% rename from tests/files/cycles/depth-three-star.js rename to tests/files/cycles/es6/depth-three-star.js diff --git a/tests/files/cycles/depth-two.js b/tests/files/cycles/es6/depth-two.js similarity index 100% rename from tests/files/cycles/depth-two.js rename to tests/files/cycles/es6/depth-two.js diff --git a/tests/files/cycles/flow-types-depth-two.js b/tests/files/cycles/flow-types-depth-two.js index 9058840ac6..64a0a83591 100644 --- a/tests/files/cycles/flow-types-depth-two.js +++ b/tests/files/cycles/flow-types-depth-two.js @@ -1 +1 @@ -import { foo } from './depth-one' +import { foo } from './es6/depth-one' diff --git a/tests/src/rules/no-cycle.js b/tests/src/rules/no-cycle.js index 302db8351b..11fc515f0b 100644 --- a/tests/src/rules/no-cycle.js +++ b/tests/src/rules/no-cycle.js @@ -1,6 +1,7 @@ import { test as _test, testFilePath } from '../utils'; import { RuleTester } from 'eslint'; +import flatMap from 'array.prototype.flatmap'; const ruleTester = new RuleTester(); const rule = require('rules/no-cycle'); @@ -11,9 +12,10 @@ const test = def => _test(Object.assign(def, { filename: testFilePath('./cycles/depth-zero.js'), })); -// describe.only("no-cycle", () => { +const testDialects = ['es6']; + ruleTester.run('no-cycle', rule, { - valid: [ + valid: [].concat( // this rule doesn't care if the cycle length is 0 test({ code: 'import foo from "./foo.js"' }), @@ -32,14 +34,6 @@ ruleTester.run('no-cycle', rule, { code: 'var bar = require("./bar")', filename: '', }), - test({ - code: 'import { foo } from "./depth-two"', - options: [{ maxDepth: 1 }], - }), - test({ - code: 'import { foo, bar } from "./depth-two"', - options: [{ maxDepth: 1 }], - }), test({ code: 'import { foo } from "cycles/external/depth-one"', options: [{ ignoreExternal: true }], @@ -56,19 +50,31 @@ ruleTester.run('no-cycle', rule, { 'import/external-module-folders': ['cycles/external'], }, }), - test({ - code: 'import("./depth-two").then(function({ foo }){})', - options: [{ maxDepth: 1 }], - parser: require.resolve('babel-eslint'), - }), - test({ - code: 'import type { FooType } from "./depth-one"', - parser: require.resolve('babel-eslint'), - }), - test({ - code: 'import type { FooType, BarType } from "./depth-one"', - parser: require.resolve('babel-eslint'), - }), + + flatMap(testDialects, (testDialect) => [ + test({ + code: `import { foo } from "./${testDialect}/depth-two"`, + options: [{ maxDepth: 1 }], + }), + test({ + code: `import { foo, bar } from "./${testDialect}/depth-two"`, + options: [{ maxDepth: 1 }], + }), + test({ + code: `import("./${testDialect}/depth-two").then(function({ foo }){})`, + options: [{ maxDepth: 1 }], + parser: require.resolve('babel-eslint'), + }), + test({ + code: `import type { FooType } from "./${testDialect}/depth-one"`, + parser: require.resolve('babel-eslint'), + }), + test({ + code: `import type { FooType, BarType } from "./${testDialect}/depth-one"`, + parser: require.resolve('babel-eslint'), + }), + ]), + test({ code: 'import { bar } from "./flow-types"', parser: require.resolve('babel-eslint'), @@ -81,12 +87,9 @@ ruleTester.run('no-cycle', rule, { code: 'import { bar } from "./flow-types-only-importing-multiple-types"', parser: require.resolve('babel-eslint'), }), - ], - invalid: [ - test({ - code: 'import { foo } from "./depth-one"', - errors: [error(`Dependency cycle detected.`)], - }), + ), + + invalid: [].concat( test({ code: 'import { bar } from "./flow-types-some-type-imports"', parser: require.resolve('babel-eslint'), @@ -108,82 +111,89 @@ ruleTester.run('no-cycle', rule, { 'import/external-module-folders': ['cycles/external'], }, }), - test({ - code: 'import { foo } from "./depth-one"', - options: [{ maxDepth: 1 }], - errors: [error(`Dependency cycle detected.`)], - }), - test({ - code: 'const { foo } = require("./depth-one")', - errors: [error(`Dependency cycle detected.`)], - options: [{ commonjs: true }], - }), - test({ - code: 'require(["./depth-one"], d1 => {})', - errors: [error(`Dependency cycle detected.`)], - options: [{ amd: true }], - }), - test({ - code: 'define(["./depth-one"], d1 => {})', - errors: [error(`Dependency cycle detected.`)], - options: [{ amd: true }], - }), - test({ - code: 'import { foo } from "./depth-two"', - errors: [error(`Dependency cycle via ./depth-one:1`)], - }), - test({ - code: 'import { foo } from "./depth-two"', - options: [{ maxDepth: 2 }], - errors: [error(`Dependency cycle via ./depth-one:1`)], - }), - test({ - code: 'const { foo } = require("./depth-two")', - errors: [error(`Dependency cycle via ./depth-one:1`)], - options: [{ commonjs: true }], - }), - test({ - code: 'import { two } from "./depth-three-star"', - errors: [error(`Dependency cycle via ./depth-two:1=>./depth-one:1`)], - }), - test({ - code: 'import one, { two, three } from "./depth-three-star"', - errors: [error(`Dependency cycle via ./depth-two:1=>./depth-one:1`)], - }), - test({ - code: 'import { bar } from "./depth-three-indirect"', - errors: [error(`Dependency cycle via ./depth-two:1=>./depth-one:1`)], - }), - test({ - code: 'import { bar } from "./depth-three-indirect"', - errors: [error(`Dependency cycle via ./depth-two:1=>./depth-one:1`)], - parser: require.resolve('babel-eslint'), - }), - test({ - code: 'import("./depth-three-star")', - errors: [error(`Dependency cycle via ./depth-two:1=>./depth-one:1`)], - parser: require.resolve('babel-eslint'), - }), - test({ - code: 'import("./depth-three-indirect")', - errors: [error(`Dependency cycle via ./depth-two:1=>./depth-one:1`)], - parser: require.resolve('babel-eslint'), - }), + + flatMap(testDialects, (testDialect) => [ + test({ + code: `import { foo } from "./${testDialect}/depth-one"`, + errors: [error(`Dependency cycle detected.`)], + }), + test({ + code: `import { foo } from "./${testDialect}/depth-one"`, + options: [{ maxDepth: 1 }], + errors: [error(`Dependency cycle detected.`)], + }), + test({ + code: `const { foo } = require("./${testDialect}/depth-one")`, + errors: [error(`Dependency cycle detected.`)], + options: [{ commonjs: true }], + }), + test({ + code: `require(["./${testDialect}/depth-one"], d1 => {})`, + errors: [error(`Dependency cycle detected.`)], + options: [{ amd: true }], + }), + test({ + code: `define(["./${testDialect}/depth-one"], d1 => {})`, + errors: [error(`Dependency cycle detected.`)], + options: [{ amd: true }], + }), + test({ + code: `import { foo } from "./${testDialect}/depth-two"`, + errors: [error(`Dependency cycle via ./depth-one:1`)], + }), + test({ + code: `import { foo } from "./${testDialect}/depth-two"`, + options: [{ maxDepth: 2 }], + errors: [error(`Dependency cycle via ./depth-one:1`)], + }), + test({ + code: `const { foo } = require("./${testDialect}/depth-two")`, + errors: [error(`Dependency cycle via ./depth-one:1`)], + options: [{ commonjs: true }], + }), + test({ + code: `import { two } from "./${testDialect}/depth-three-star"`, + errors: [error(`Dependency cycle via ./depth-two:1=>./depth-one:1`)], + }), + test({ + code: `import one, { two, three } from "./${testDialect}/depth-three-star"`, + errors: [error(`Dependency cycle via ./depth-two:1=>./depth-one:1`)], + }), + test({ + code: `import { bar } from "./${testDialect}/depth-three-indirect"`, + errors: [error(`Dependency cycle via ./depth-two:1=>./depth-one:1`)], + }), + test({ + code: `import { bar } from "./${testDialect}/depth-three-indirect"`, + errors: [error(`Dependency cycle via ./depth-two:1=>./depth-one:1`)], + parser: require.resolve('babel-eslint'), + }), + test({ + code: `import("./${testDialect}/depth-three-star")`, + errors: [error(`Dependency cycle via ./depth-two:1=>./depth-one:1`)], + parser: require.resolve('babel-eslint'), + }), + test({ + code: `import("./${testDialect}/depth-three-indirect")`, + errors: [error(`Dependency cycle via ./depth-two:1=>./depth-one:1`)], + parser: require.resolve('babel-eslint'), + }), + test({ + code: `import { foo } from "./${testDialect}/depth-two"`, + options: [{ maxDepth: Infinity }], + errors: [error(`Dependency cycle via ./depth-one:1`)], + }), + test({ + code: `import { foo } from "./${testDialect}/depth-two"`, + options: [{ maxDepth: '∞' }], + errors: [error(`Dependency cycle via ./depth-one:1`)], + }), + ]), + test({ code: 'import { bar } from "./flow-types-depth-one"', parser: require.resolve('babel-eslint'), - errors: [error(`Dependency cycle via ./flow-types-depth-two:4=>./depth-one:1`)], - }), - test({ - code: 'import { foo } from "./depth-two"', - options: [{ maxDepth: Infinity }], - errors: [error(`Dependency cycle via ./depth-one:1`)], - }), - test({ - code: 'import { foo } from "./depth-two"', - options: [{ maxDepth: '∞' }], - errors: [error(`Dependency cycle via ./depth-one:1`)], + errors: [error(`Dependency cycle via ./flow-types-depth-two:4=>./es6/depth-one:1`)], }), - ], + ), }); -// })