Path: blob/main/tests/src/rules/default.js
829 views
import path from 'path';1import { test, SYNTAX_CASES, getTSParsers } from '../utils';2import { RuleTester } from 'eslint';34import { CASE_SENSITIVE_FS } from 'eslint-module-utils/resolve';56const ruleTester = new RuleTester();7const rule = require('rules/default');89ruleTester.run('default', rule, {10valid: [11test({ code: 'import "./malformed.js"' }),1213test({ code: 'import foo from "./empty-folder";' }),14test({ code: 'import { foo } from "./default-export";' }),15test({ code: 'import foo from "./default-export";' }),16test({ code: 'import foo from "./mixed-exports";' }),17test({18code: 'import bar from "./default-export";' }),19test({20code: 'import CoolClass from "./default-class";' }),21test({22code: 'import bar, { baz } from "./default-export";' }),2324// core modules always have a default25test({ code: 'import crypto from "crypto";' }),2627test({ code: 'import common from "./common";' }),2829// es7 export syntax30test({ code: 'export bar from "./bar"',31parser: require.resolve('babel-eslint') }),32test({ code: 'export { default as bar } from "./bar"' }),33test({ code: 'export bar, { foo } from "./bar"',34parser: require.resolve('babel-eslint') }),35test({ code: 'export { default as bar, foo } from "./bar"' }),36test({ code: 'export bar, * as names from "./bar"',37parser: require.resolve('babel-eslint') }),3839// sanity check40test({ code: 'export {a} from "./named-exports"' }),41test({42code: 'import twofer from "./trampoline"',43parser: require.resolve('babel-eslint'),44}),4546// jsx47test({48code: 'import MyCoolComponent from "./jsx/MyCoolComponent.jsx"',49parserOptions: {50sourceType: 'module',51ecmaVersion: 6,52ecmaFeatures: { jsx: true },53},54}),5556// #54: import of named export default57test({ code: 'import foo from "./named-default-export"' }),5859// #94: redux export of execution result,60test({ code: 'import connectedApp from "./redux"' }),61test({62code: 'import App from "./jsx/App"',63parserOptions: {64ecmaFeatures: { jsx: true, modules: true },65},66}),6768// from no-errors69test({70code: "import Foo from './jsx/FooES7.js';",71parser: require.resolve('babel-eslint'),72}),7374// #545: more ES7 cases75test({76code: "import bar from './default-export-from.js';",77parser: require.resolve('babel-eslint'),78}),79test({80code: "import bar from './default-export-from-named.js';",81parser: require.resolve('babel-eslint'),82}),83test({84code: "import bar from './default-export-from-ignored.js';",85settings: { 'import/ignore': ['common'] },86parser: require.resolve('babel-eslint'),87}),88test({89code: "export bar from './default-export-from-ignored.js';",90settings: { 'import/ignore': ['common'] },91parser: require.resolve('babel-eslint'),92}),9394...SYNTAX_CASES,95],9697invalid: [98test({99code: "import Foo from './jsx/FooES7.js';",100errors: ["Parse errors in imported module './jsx/FooES7.js': Unexpected token = (6:16)"],101}),102103test({104code: 'import baz from "./named-exports";',105errors: [{ message: 'No default export found in imported module "./named-exports".',106type: 'ImportDefaultSpecifier' }] }),107108// es7 export syntax109test({110code: 'export baz from "./named-exports"',111parser: require.resolve('babel-eslint'),112errors: ['No default export found in imported module "./named-exports".'],113}),114test({115code: 'export baz, { bar } from "./named-exports"',116parser: require.resolve('babel-eslint'),117errors: ['No default export found in imported module "./named-exports".'],118}),119test({120code: 'export baz, * as names from "./named-exports"',121parser: require.resolve('babel-eslint'),122errors: ['No default export found in imported module "./named-exports".'],123}),124// exports default from a module with no default125test({126code: 'import twofer from "./broken-trampoline"',127parser: require.resolve('babel-eslint'),128errors: ['No default export found in imported module "./broken-trampoline".'],129}),130131// #328: * exports do not include default132test({133code: 'import barDefault from "./re-export"',134errors: ['No default export found in imported module "./re-export".'],135}),136],137});138139// #311: import of mismatched case140if (!CASE_SENSITIVE_FS) {141ruleTester.run('default (path case-insensitivity)', rule, {142valid: [143test({144code: 'import foo from "./jsx/MyUncoolComponent.jsx"',145}),146],147invalid: [148test({149code: 'import bar from "./Named-Exports"',150errors: ['No default export found in imported module "./Named-Exports".'],151}),152],153});154}155156context('TypeScript', function () {157getTSParsers().forEach((parser) => {158ruleTester.run(`default`, rule, {159valid: [160test({161code: `import foobar from "./typescript-default"`,162parser,163settings: {164'import/parsers': { [parser]: ['.ts'] },165'import/resolver': { 'eslint-import-resolver-typescript': true },166},167}),168test({169code: `import foobar from "./typescript-export-assign-default"`,170parser,171settings: {172'import/parsers': { [parser]: ['.ts'] },173'import/resolver': { 'eslint-import-resolver-typescript': true },174},175}),176test({177code: `import foobar from "./typescript-export-assign-function"`,178parser,179settings: {180'import/parsers': { [parser]: ['.ts'] },181'import/resolver': { 'eslint-import-resolver-typescript': true },182},183}),184test({185code: `import foobar from "./typescript-export-assign-mixed"`,186parser,187settings: {188'import/parsers': { [parser]: ['.ts'] },189'import/resolver': { 'eslint-import-resolver-typescript': true },190},191}),192test({193code: `import foobar from "./typescript-export-assign-default-reexport"`,194parser,195settings: {196'import/parsers': { [parser]: ['.ts'] },197'import/resolver': { 'eslint-import-resolver-typescript': true },198},199}),200test({201code: `import React from "./typescript-export-assign-default-namespace"`,202parser,203settings: {204'import/parsers': { [parser]: ['.ts'] },205'import/resolver': { 'eslint-import-resolver-typescript': true },206},207parserOptions: {208tsconfigRootDir: path.resolve(__dirname, '../../files/typescript-export-assign-default-namespace/'),209},210}),211test({212code: `import Foo from "./typescript-export-as-default-namespace"`,213parser,214settings: {215'import/parsers': { [parser]: ['.ts'] },216'import/resolver': { 'eslint-import-resolver-typescript': true },217},218parserOptions: {219tsconfigRootDir: path.resolve(__dirname, '../../files/typescript-export-as-default-namespace/'),220},221}),222test({223code: `import Foo from "./typescript-export-react-test-renderer"`,224parser,225settings: {226'import/parsers': { [parser]: ['.ts'] },227'import/resolver': { 'eslint-import-resolver-typescript': true },228},229parserOptions: {230tsconfigRootDir: path.resolve(__dirname, '../../files/typescript-export-react-test-renderer/'),231},232}),233test({234code: `import Foo from "./typescript-extended-config"`,235parser,236settings: {237'import/parsers': { [parser]: ['.ts'] },238'import/resolver': { 'eslint-import-resolver-typescript': true },239},240parserOptions: {241tsconfigRootDir: path.resolve(__dirname, '../../files/typescript-extended-config/'),242},243}),244test({245code: `import foobar from "./typescript-export-assign-property"`,246parser,247settings: {248'import/parsers': { [parser]: ['.ts'] },249'import/resolver': { 'eslint-import-resolver-typescript': true },250},251}),252],253254invalid: [255test({256code: `import foobar from "./typescript"`,257parser,258settings: {259'import/parsers': { [parser]: ['.ts'] },260'import/resolver': { 'eslint-import-resolver-typescript': true },261},262errors: ['No default export found in imported module "./typescript".'],263}),264test({265code: `import React from "./typescript-export-assign-default-namespace"`,266parser,267settings: {268'import/parsers': { [parser]: ['.ts'] },269'import/resolver': { 'eslint-import-resolver-typescript': true },270},271errors: ['No default export found in imported module "./typescript-export-assign-default-namespace".'],272}),273test({274code: `import FooBar from "./typescript-export-as-default-namespace"`,275parser,276settings: {277'import/parsers': { [parser]: ['.ts'] },278'import/resolver': { 'eslint-import-resolver-typescript': true },279},280errors: ['No default export found in imported module "./typescript-export-as-default-namespace".'],281}),282test({283code: `import Foo from "./typescript-export-as-default-namespace"`,284parser,285settings: {286'import/parsers': { [parser]: ['.ts'] },287'import/resolver': { 'eslint-import-resolver-typescript': true },288},289parserOptions: {290tsconfigRootDir: path.resolve(__dirname, '../../files/typescript-no-compiler-options/'),291},292errors: [293{294message: 'No default export found in imported module "./typescript-export-as-default-namespace".',295line: 1,296column: 8,297endLine: 1,298endColumn: 11,299},300],301}),302],303});304});305});306307308