Path: blob/main/tests/src/rules/no-cycle.js
829 views
import { test as _test, testFilePath } from '../utils';12import { RuleTester } from 'eslint';3import flatMap from 'array.prototype.flatmap';45const ruleTester = new RuleTester();6const rule = require('rules/no-cycle');78const error = message => ({ message });910const test = def => _test(Object.assign(def, {11filename: testFilePath('./cycles/depth-zero.js'),12}));1314const testDialects = ['es6'];1516ruleTester.run('no-cycle', rule, {17valid: [].concat(18// this rule doesn't care if the cycle length is 019test({ code: 'import foo from "./foo.js"' }),2021test({ code: 'import _ from "lodash"' }),22test({ code: 'import foo from "@scope/foo"' }),23test({ code: 'var _ = require("lodash")' }),24test({ code: 'var find = require("lodash.find")' }),25test({ code: 'var foo = require("./foo")' }),26test({ code: 'var foo = require("../foo")' }),27test({ code: 'var foo = require("foo")' }),28test({ code: 'var foo = require("./")' }),29test({ code: 'var foo = require("@scope/foo")' }),30test({ code: 'var bar = require("./bar/index")' }),31test({ code: 'var bar = require("./bar")' }),32test({33code: 'var bar = require("./bar")',34filename: '<text>',35}),36test({37code: 'import { foo } from "cycles/external/depth-one"',38options: [{ ignoreExternal: true }],39settings: {40'import/resolver': 'webpack',41'import/external-module-folders': ['cycles/external'],42},43}),44test({45code: 'import { foo } from "./external-depth-two"',46options: [{ ignoreExternal: true }],47settings: {48'import/resolver': 'webpack',49'import/external-module-folders': ['cycles/external'],50},51}),5253flatMap(testDialects, (testDialect) => [54test({55code: `import { foo } from "./${testDialect}/depth-two"`,56options: [{ maxDepth: 1 }],57}),58test({59code: `import { foo, bar } from "./${testDialect}/depth-two"`,60options: [{ maxDepth: 1 }],61}),62test({63code: `import("./${testDialect}/depth-two").then(function({ foo }) {})`,64options: [{ maxDepth: 1 }],65parser: require.resolve('babel-eslint'),66}),67test({68code: `import type { FooType } from "./${testDialect}/depth-one"`,69parser: require.resolve('babel-eslint'),70}),71test({72code: `import type { FooType, BarType } from "./${testDialect}/depth-one"`,73parser: require.resolve('babel-eslint'),74}),75]),7677test({78code: 'import { bar } from "./flow-types"',79parser: require.resolve('babel-eslint'),80}),81test({82code: 'import { bar } from "./flow-types-only-importing-type"',83parser: require.resolve('babel-eslint'),84}),85test({86code: 'import { bar } from "./flow-types-only-importing-multiple-types"',87parser: require.resolve('babel-eslint'),88}),89),9091invalid: [].concat(92test({93code: 'import { bar } from "./flow-types-some-type-imports"',94parser: require.resolve('babel-eslint'),95errors: [error(`Dependency cycle detected.`)],96}),97test({98code: 'import { foo } from "cycles/external/depth-one"',99errors: [error(`Dependency cycle detected.`)],100settings: {101'import/resolver': 'webpack',102'import/external-module-folders': ['cycles/external'],103},104}),105test({106code: 'import { foo } from "./external-depth-two"',107errors: [error(`Dependency cycle via cycles/external/depth-one:1`)],108settings: {109'import/resolver': 'webpack',110'import/external-module-folders': ['cycles/external'],111},112}),113114flatMap(testDialects, (testDialect) => [115test({116code: `import { foo } from "./${testDialect}/depth-one"`,117errors: [error(`Dependency cycle detected.`)],118}),119test({120code: `import { foo } from "./${testDialect}/depth-one"`,121options: [{ maxDepth: 1 }],122errors: [error(`Dependency cycle detected.`)],123}),124test({125code: `const { foo } = require("./${testDialect}/depth-one")`,126errors: [error(`Dependency cycle detected.`)],127options: [{ commonjs: true }],128}),129test({130code: `require(["./${testDialect}/depth-one"], d1 => {})`,131errors: [error(`Dependency cycle detected.`)],132options: [{ amd: true }],133}),134test({135code: `define(["./${testDialect}/depth-one"], d1 => {})`,136errors: [error(`Dependency cycle detected.`)],137options: [{ amd: true }],138}),139test({140code: `import { foo } from "./${testDialect}/depth-two"`,141errors: [error(`Dependency cycle via ./depth-one:1`)],142}),143test({144code: `import { foo } from "./${testDialect}/depth-two"`,145options: [{ maxDepth: 2 }],146errors: [error(`Dependency cycle via ./depth-one:1`)],147}),148test({149code: `const { foo } = require("./${testDialect}/depth-two")`,150errors: [error(`Dependency cycle via ./depth-one:1`)],151options: [{ commonjs: true }],152}),153test({154code: `import { two } from "./${testDialect}/depth-three-star"`,155errors: [error(`Dependency cycle via ./depth-two:1=>./depth-one:1`)],156}),157test({158code: `import one, { two, three } from "./${testDialect}/depth-three-star"`,159errors: [error(`Dependency cycle via ./depth-two:1=>./depth-one:1`)],160}),161test({162code: `import { bar } from "./${testDialect}/depth-three-indirect"`,163errors: [error(`Dependency cycle via ./depth-two:1=>./depth-one:1`)],164}),165test({166code: `import { bar } from "./${testDialect}/depth-three-indirect"`,167errors: [error(`Dependency cycle via ./depth-two:1=>./depth-one:1`)],168parser: require.resolve('babel-eslint'),169}),170test({171code: `import("./${testDialect}/depth-three-star")`,172errors: [error(`Dependency cycle via ./depth-two:1=>./depth-one:1`)],173parser: require.resolve('babel-eslint'),174}),175test({176code: `import("./${testDialect}/depth-three-indirect")`,177errors: [error(`Dependency cycle via ./depth-two:1=>./depth-one:1`)],178parser: require.resolve('babel-eslint'),179}),180test({181code: `import { foo } from "./${testDialect}/depth-two"`,182options: [{ maxDepth: Infinity }],183errors: [error(`Dependency cycle via ./depth-one:1`)],184}),185test({186code: `import { foo } from "./${testDialect}/depth-two"`,187options: [{ maxDepth: '∞' }],188errors: [error(`Dependency cycle via ./depth-one:1`)],189}),190]),191192test({193code: 'import { bar } from "./flow-types-depth-one"',194parser: require.resolve('babel-eslint'),195errors: [error(`Dependency cycle via ./flow-types-depth-two:4=>./es6/depth-one:1`)],196}),197),198});199200201