123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- /**
- * @fileoverview Rule to forbid or enforce destructuring assignment consistency.
- **/
- 'use strict';
- const rule = require('../../../lib/rules/destructuring-assignment');
- const RuleTester = require('eslint').RuleTester;
- require('babel-eslint');
- const parserOptions = {
- ecmaVersion: 2018,
- sourceType: 'module',
- ecmaFeatures: {
- jsx: true
- }
- };
- const ruleTester = new RuleTester({parserOptions});
- ruleTester.run('destructuring-assignment', rule, {
- valid: [{
- code: `const Foo = class extends React.PureComponent {
- render() {
- const { foo } = this.props;
- return <div>{foo}</div>;
- }
- };`,
- options: ['always'],
- parser: 'babel-eslint'
- }, {
- code: `const MyComponent = ({ id, className }) => (
- <div id={id} className={className} />
- );`
- }, {
- code: `const MyComponent = (props) => {
- const { id, className } = props;
- return <div id={id} className={className} />
- };`,
- parser: 'babel-eslint'
- }, {
- code: `const MyComponent = ({ id, className }) => (
- <div id={id} className={className} />
- );`,
- options: ['always']
- }, {
- code: `const MyComponent = (props) => {
- const { id, className } = props;
- return <div id={id} className={className} />
- };`
- }, {
- code: `const MyComponent = (props) => {
- const { id, className } = props;
- return <div id={id} className={className} />
- };`,
- options: ['always']
- }, {
- code: `const MyComponent = (props) => (
- <div id={id} props={props} />
- );`
- }, {
- code: `const MyComponent = (props) => (
- <div id={id} props={props} />
- );`,
- options: ['always']
- }, {
- code: `const MyComponent = (props, { color }) => (
- <div id={id} props={props} color={color} />
- );`
- }, {
- code: `const MyComponent = (props, { color }) => (
- <div id={id} props={props} color={color} />
- );`,
- options: ['always']
- }, {
- code: `const Foo = class extends React.PureComponent {
- render() {
- return <div>{this.props.foo}</div>;
- }
- };`,
- options: ['never']
- }, {
- code: `class Foo extends React.Component {
- doStuff() {}
- render() {
- return <div>{this.props.foo}</div>;
- }
- }`,
- options: ['never']
- }, {
- code: `const Foo = class extends React.PureComponent {
- render() {
- const { foo } = this.props;
- return <div>{foo}</div>;
- }
- };`
- }, {
- code: `const Foo = class extends React.PureComponent {
- render() {
- const { foo } = this.props;
- return <div>{foo}</div>;
- }
- };`,
- options: ['always'],
- parser: 'babel-eslint'
- }, {
- code: `const Foo = class extends React.PureComponent {
- render() {
- const { foo } = this.props;
- return <div>{foo}</div>;
- }
- };`
- }, {
- code: `const Foo = class extends React.PureComponent {
- render() {
- const { foo } = this.props;
- return <div>{foo}</div>;
- }
- };`,
- options: ['always'],
- parser: 'babel-eslint'
- }, {
- code: `const MyComponent = (props) => {
- const { h, i } = hi;
- return <div id={props.id} className={props.className} />
- };`,
- options: ['never'],
- parser: 'babel-eslint'
- }],
- invalid: [{
- code: `const MyComponent = (props) => {
- return (<div id={props.id} />)
- };`,
- errors: [
- {message: 'Must use destructuring props assignment'}
- ]
- }, {
- code: `const MyComponent = ({ id, className }) => (
- <div id={id} className={className} />
- );`,
- options: ['never'],
- errors: [
- {message: 'Must never use destructuring props assignment in SFC argument'}
- ]
- }, {
- code: `const MyComponent = (props, { color }) => (
- <div id={props.id} className={props.className} />
- );`,
- options: ['never'],
- errors: [
- {message: 'Must never use destructuring context assignment in SFC argument'}
- ]
- }, {
- code: `const Foo = class extends React.PureComponent {
- render() {
- return <div>{this.props.foo}</div>;
- }
- };`,
- errors: [
- {message: 'Must use destructuring props assignment'}
- ]
- }, {
- code: `const Foo = class extends React.PureComponent {
- render() {
- return <div>{this.state.foo}</div>;
- }
- };`,
- errors: [
- {message: 'Must use destructuring state assignment'}
- ]
- }, {
- code: `const Foo = class extends React.PureComponent {
- render() {
- return <div>{this.context.foo}</div>;
- }
- };`,
- errors: [
- {message: 'Must use destructuring context assignment'}
- ]
- }, {
- code: `class Foo extends React.Component {
- render() { return this.foo(); }
- foo() {
- return this.props.children;
- }
- }`,
- errors: [
- {message: 'Must use destructuring props assignment'}
- ]
- }, {
- code: `var Hello = React.createClass({
- render: function() {
- return <Text>{this.props.foo}</Text>;
- }
- });`,
- errors: [
- {message: 'Must use destructuring props assignment'}
- ]
- }, {
- code: `const Foo = class extends React.PureComponent {
- render() {
- const foo = this.props.foo;
- return <div>{foo}</div>;
- }
- };`,
- errors: [
- {message: 'Must use destructuring props assignment'}
- ]
- }, {
- code: `const Foo = class extends React.PureComponent {
- render() {
- const { foo } = this.props;
- return <div>{foo}</div>;
- }
- };`,
- options: ['never'],
- parser: 'babel-eslint',
- errors: [
- {message: 'Must never use destructuring props assignment'}
- ]
- }, {
- code: `const MyComponent = (props) => {
- const { id, className } = props;
- return <div id={id} className={className} />
- };`,
- options: ['never'],
- parser: 'babel-eslint',
- errors: [
- {message: 'Must never use destructuring props assignment'}
- ]
- }, {
- code: `const Foo = class extends React.PureComponent {
- render() {
- const { foo } = this.state;
- return <div>{foo}</div>;
- }
- };`,
- options: ['never'],
- parser: 'babel-eslint',
- errors: [
- {message: 'Must never use destructuring state assignment'}
- ]
- }]
- });
|