diff --git a/tests/lib/rules/boolean-prop-naming.js b/tests/lib/rules/boolean-prop-naming.js index 6e10971ef3..57320c5270 100644 --- a/tests/lib/rules/boolean-prop-naming.js +++ b/tests/lib/rules/boolean-prop-naming.js @@ -30,42 +30,42 @@ ruleTester.run('boolean-prop-naming', rule, { valid: [{ // Should support both `is` and `has` prefixes by default - code: [ - 'var Hello = createReactClass({', - ' propTypes: {isSomething: PropTypes.bool, hasValue: PropTypes.bool},', - ' render: function() { return
; }', - '});' - ].join('\n') + code: ` + var Hello = createReactClass({ + propTypes: {isSomething: PropTypes.bool, hasValue: PropTypes.bool}, + render: function() { return
; } + }); + ` }, { // createReactClass components with PropTypes - code: [ - 'var Hello = createReactClass({', - ' propTypes: {isSomething: PropTypes.bool},', - ' render: function() { return
; }', - '});' - ].join('\n'), + code: ` + var Hello = createReactClass({ + propTypes: {isSomething: PropTypes.bool}, + render: function() { return
; } + }); + `, options: [{ rule: '^is[A-Z]([A-Za-z0-9]?)+' }] }, { // createReactClass components with React.PropTypes - code: [ - 'var Hello = createReactClass({', - ' propTypes: {isSomething: React.PropTypes.bool},', - ' render: function() { return
; }', - '});' - ].join('\n'), + code: ` + var Hello = createReactClass({ + propTypes: {isSomething: React.PropTypes.bool}, + render: function() { return
; } + }); + `, options: [{ rule: '^is[A-Z]([A-Za-z0-9]?)+' }] }, { // React.createClass components with PropTypes - code: [ - 'var Hello = React.createClass({', - ' propTypes: {isSomething: PropTypes.bool},', - ' render: function() { return
; }', - '});' - ].join('\n'), + code: ` + var Hello = React.createClass({ + propTypes: {isSomething: PropTypes.bool}, + render: function() { return
; } + }); + `, options: [{ rule: '^is[A-Z]([A-Za-z0-9]?)+' }], @@ -76,12 +76,12 @@ ruleTester.run('boolean-prop-naming', rule, { } }, { // React.createClass components with non-boolean PropTypes - code: [ - 'var Hello = React.createClass({', - ' propTypes: {something: PropTypes.any},', - ' render: function() { return
; }', - '});' - ].join('\n'), + code: ` + var Hello = React.createClass({ + propTypes: {something: PropTypes.any}, + render: function() { return
; } + }); + `, options: [{ rule: '^is[A-Z]([A-Za-z0-9]?)+' }], @@ -92,140 +92,140 @@ ruleTester.run('boolean-prop-naming', rule, { } }, { // ES6 components as React.Component with boolean PropTypes - code: [ - 'class Hello extends React.Component {', - ' render () { return
; }', - '}', - 'Hello.propTypes = {isSomething: PropTypes.bool}' - ].join('\n'), + code: ` + class Hello extends React.Component { + render () { return
; } + } + Hello.propTypes = {isSomething: PropTypes.bool} + `, options: [{ rule: '^is[A-Z]([A-Za-z0-9]?)+' }] }, { - code: [ - 'class Hello extends React.Component {', - ' render () { return
; }', - '}', - 'Hello.propTypes = wrap({ a: PropTypes.bool })' - ].join('\n'), + // ES6 components as React.Component with non-boolean PropTypes + code: ` + class Hello extends React.Component { + render () { return
; } + } + Hello.propTypes = wrap({ a: PropTypes.bool }) + `, options: [{ rule: '^is[A-Z]([A-Za-z0-9]?)+' }] }, { - // ES6 components as React.Component with non-boolean PropTypes - code: [ - 'class Hello extends React.Component {', - ' render () { return
; }', - '}', - 'Hello.propTypes = {something: PropTypes.any}' - ].join('\n'), + code: ` + class Hello extends React.Component { + render () { return
; } + } + Hello.propTypes = {something: PropTypes.any} + `, options: [{ rule: '^is[A-Z]([A-Za-z0-9]?)+' }] }, { // ES6 components as Component with boolean PropTypes - code: [ - 'class Hello extends Component {', - ' render () { return
; }', - '}', - 'Hello.propTypes = {isSomething: PropTypes.bool}' - ].join('\n'), + code: ` + class Hello extends Component { + render () { return
; } + } + Hello.propTypes = {isSomething: PropTypes.bool} + `, options: [{ rule: '^is[A-Z]([A-Za-z0-9]?)+' }] }, { // ES6 components with static class properties and PropTypes - code: [ - 'class Hello extends React.Component {', - ' static propTypes = {isSomething: PropTypes.bool};', - ' render () { return
; }', - '}' - ].join('\n'), + code: ` + class Hello extends React.Component { + static propTypes = {isSomething: PropTypes.bool}; + render () { return
; } + } + `, options: [{ rule: '^is[A-Z]([A-Za-z0-9]?)+' }], parser: 'babel-eslint' }, { // ES6 components with static class properties and React.PropTypes - code: [ - 'class Hello extends React.Component {', - ' static propTypes = {isSomething: React.PropTypes.bool};', - ' render () { return
; }', - '}' - ].join('\n'), + code: ` + class Hello extends React.Component { + static propTypes = {isSomething: React.PropTypes.bool}; + render () { return
; } + } + `, options: [{ rule: '^is[A-Z]([A-Za-z0-9]?)+' }], parser: 'babel-eslint' }, { // ES6 components with static class properties an non-booleans - code: [ - 'class Hello extends React.Component {', - ' static propTypes = {something: PropTypes.any};', - ' render () { return
; }', - '}' - ].join('\n'), + code: ` + class Hello extends React.Component { + static propTypes = {something: PropTypes.any}; + render () { return
; } + } + `, options: [{ rule: '^is[A-Z]([A-Za-z0-9]?)+' }], parser: 'babel-eslint' }, { // ES6 components and Flowtype booleans - code: [ - 'class Hello extends React.Component {', - ' props: {isSomething: boolean};', - ' render () { return
; }', - '}' - ].join('\n'), + code: ` + class Hello extends React.Component { + props: {isSomething: boolean}; + render () { return
; } + } + `, options: [{ rule: '^is[A-Z]([A-Za-z0-9]?)+' }], parser: 'babel-eslint' }, { // ES6 components and Flowtype non-booleans - code: [ - 'class Hello extends React.Component {', - ' props: {something: any};', - ' render () { return
; }', - '}' - ].join('\n'), + code: ` + class Hello extends React.Component { + props: {something: any}; + render () { return
; } + } + `, options: [{ rule: '^is[A-Z]([A-Za-z0-9]?)+' }], parser: 'babel-eslint' }, { // Stateless components - code: [ - 'var Hello = ({isSomething}) => { return
}', - 'Hello.propTypes = {isSomething: PropTypes.bool};' - ].join('\n'), + code: ` + var Hello = ({isSomething}) => { return
} + Hello.propTypes = {isSomething: PropTypes.bool}; + `, options: [{ rule: '^is[A-Z]([A-Za-z0-9]?)+' }], parser: 'babel-eslint' }, { // Functional components and Flowtype booleans - code: [ - 'type Props = {', - ' isSomething: boolean;', - '};', - 'function Hello(props: Props): React.Element { return
}' - ].join('\n'), + code: ` + type Props = { + isSomething: boolean; + }; + function Hello(props: Props): React.Element { return
} + `, options: [{ rule: '^is[A-Z]([A-Za-z0-9]?)+' }], parser: 'babel-eslint' }, { // Custom `propTypeNames` option - code: [ - 'class Hello extends React.Component {', - ' static propTypes = {', - ' isSomething: PropTypes.mutuallyExclusiveTrueProps,', - ' something: PropTypes.bool', - ' };', - ' render () { return
; }', - '}' - ].join('\n'), + code: ` + class Hello extends React.Component { + static propTypes = { + isSomething: PropTypes.mutuallyExclusiveTrueProps, + something: PropTypes.bool + }; + render () { return
; } + } + `, options: [{ propTypeNames: ['mutuallyExclusiveTrueProps'], rule: '^is[A-Z]([A-Za-z0-9]?)+' @@ -233,15 +233,15 @@ ruleTester.run('boolean-prop-naming', rule, { parser: 'babel-eslint' }, { // Custom PropTypes that are specified as variables - code: [ - 'class Hello extends React.Component {', - ' static propTypes = {', - ' isSomething: mutuallyExclusiveTrueProps,', - ' isSomethingElse: bool', - ' };', - ' render () { return
; }', - '}' - ].join('\n'), + code: ` + class Hello extends React.Component { + static propTypes = { + isSomething: mutuallyExclusiveTrueProps, + isSomethingElse: bool + }; + render () { return
; } + } + `, options: [{ propTypeNames: ['bool', 'mutuallyExclusiveTrueProps'], rule: '^is[A-Z]([A-Za-z0-9]?)+' @@ -249,22 +249,22 @@ ruleTester.run('boolean-prop-naming', rule, { parser: 'babel-eslint' }, { // Ensure rule doesn't crash on destructured objects [Issue #1369] - code: [ - 'var x = {a: 1}', - 'var y = {...x}' - ].join('\n'), + code: ` + var x = {a: 1} + var y = {...x} + `, options: [{ rule: '^is[A-Z]([A-Za-z0-9]?)+' }], parser: 'babel-eslint' }, { // Ensure rule doesn't crash on on components reference old-style Flow props - code: [ - 'class Hello extends PureComponent {', - ' props: PropsType;', - ' render () { return
}', - '}' - ].join('\n'), + code: ` + class Hello extends PureComponent { + props: PropsType; + render () { return
} + } + `, options: [{ rule: '^is[A-Z]([A-Za-z0-9]?)+' }], @@ -273,12 +273,12 @@ ruleTester.run('boolean-prop-naming', rule, { invalid: [{ // createReactClass components with PropTypes - code: [ - 'var Hello = createReactClass({', - ' propTypes: {something: PropTypes.bool},', - ' render: function() { return
; }', - '});' - ].join('\n'), + code: ` + var Hello = createReactClass({ + propTypes: {something: PropTypes.bool}, + render: function() { return
; } + }); + `, options: [{ rule: '^is[A-Z]([A-Za-z0-9]?)+' }], @@ -287,12 +287,12 @@ ruleTester.run('boolean-prop-naming', rule, { }] }, { // createReactClass components with React.PropTypes - code: [ - 'var Hello = createReactClass({', - ' propTypes: {something: React.PropTypes.bool},', - ' render: function() { return
; }', - '});' - ].join('\n'), + code: ` + var Hello = createReactClass({ + propTypes: {something: React.PropTypes.bool}, + render: function() { return
; } + }); + `, options: [{ rule: '^is[A-Z]([A-Za-z0-9]?)+' }], @@ -301,12 +301,12 @@ ruleTester.run('boolean-prop-naming', rule, { }] }, { // React.createClass components with PropTypes - code: [ - 'var Hello = React.createClass({', - ' propTypes: {something: PropTypes.bool},', - ' render: function() { return
; }', - '});' - ].join('\n'), + code: ` + var Hello = React.createClass({ + propTypes: {something: PropTypes.bool}, + render: function() { return
; } + }); + `, options: [{ rule: '^is[A-Z]([A-Za-z0-9]?)+' }], @@ -320,12 +320,12 @@ ruleTester.run('boolean-prop-naming', rule, { }] }, { // ES6 components as React.Component with boolean PropTypes - code: [ - 'class Hello extends React.Component {', - ' render () { return
; }', - '}', - 'Hello.propTypes = {something: PropTypes.bool}' - ].join('\n'), + code: ` + class Hello extends React.Component { + render () { return
; } + } + Hello.propTypes = {something: PropTypes.bool} + `, options: [{ rule: '^is[A-Z]([A-Za-z0-9]?)+' }], @@ -334,12 +334,12 @@ ruleTester.run('boolean-prop-naming', rule, { }] }, { // ES6 components as Component with non-boolean PropTypes - code: [ - 'class Hello extends Component {', - ' render () { return
; }', - '}', - 'Hello.propTypes = {something: PropTypes.bool}' - ].join('\n'), + code: ` + class Hello extends Component { + render () { return
; } + } + Hello.propTypes = {something: PropTypes.bool} + `, options: [{ rule: '^is[A-Z]([A-Za-z0-9]?)+' }], @@ -348,12 +348,12 @@ ruleTester.run('boolean-prop-naming', rule, { }] }, { // ES6 components as React.Component with non-boolean PropTypes - code: [ - 'class Hello extends React.Component {', - ' static propTypes = {something: PropTypes.bool};', - ' render () { return
; }', - '}' - ].join('\n'), + code: ` + class Hello extends React.Component { + static propTypes = {something: PropTypes.bool}; + render () { return
; } + } + `, options: [{ rule: '^is[A-Z]([A-Za-z0-9]?)+' }], @@ -362,13 +362,13 @@ ruleTester.run('boolean-prop-naming', rule, { message: 'Prop name (something) doesn\'t match rule (^is[A-Z]([A-Za-z0-9]?)+)' }] }, { - // ES6 components and Flowtype non-booleans - code: [ - 'class Hello extends React.Component {', - ' props: {something: boolean};', - ' render () { return
; }', - '}' - ].join('\n'), + // ES6 components as React.Component with non-boolean PropTypes + code: ` + class Hello extends React.Component { + props: {something: boolean}; + render () { return
; } + } + `, options: [{ rule: '^is[A-Z]([A-Za-z0-9]?)+' }], @@ -377,11 +377,10 @@ ruleTester.run('boolean-prop-naming', rule, { message: 'Prop name (something) doesn\'t match rule (^is[A-Z]([A-Za-z0-9]?)+)' }] }, { - // Stateless components - code: [ - 'var Hello = ({something}) => { return
}', - 'Hello.propTypes = {something: PropTypes.bool};' - ].join('\n'), + code: ` + var Hello = ({something}) => { return
} + Hello.propTypes = {something: PropTypes.bool}; + `, options: [{ rule: '^is[A-Z]([A-Za-z0-9]?)+' }], @@ -390,13 +389,12 @@ ruleTester.run('boolean-prop-naming', rule, { message: 'Prop name (something) doesn\'t match rule (^is[A-Z]([A-Za-z0-9]?)+)' }] }, { - // Functional components and Flowtype booleans - code: [ - 'type Props = {', - ' something: boolean;', - '};', - 'function Hello(props: Props): React.Element { return
}' - ].join('\n'), + code: ` + type Props = { + something: boolean; + }; + function Hello(props: Props): React.Element { return
} + `, options: [{ rule: '^is[A-Z]([A-Za-z0-9]?)+' }], @@ -405,13 +403,13 @@ ruleTester.run('boolean-prop-naming', rule, { message: 'Prop name (something) doesn\'t match rule (^is[A-Z]([A-Za-z0-9]?)+)' }] }, { - // Custom `propTypeNames` option - code: [ - 'class Hello extends React.Component {', - ' static propTypes = {something: PropTypes.mutuallyExclusiveTrueProps};', - ' render () { return
; }', - '}' - ].join('\n'), + // ES6 components and Flowtype non-booleans + code: ` + class Hello extends React.Component { + static propTypes = {something: PropTypes.mutuallyExclusiveTrueProps}; + render () { return
; } + } + `, options: [{ propTypeNames: ['bool', 'mutuallyExclusiveTrueProps'], rule: '^is[A-Z]([A-Za-z0-9]?)+' @@ -421,16 +419,15 @@ ruleTester.run('boolean-prop-naming', rule, { message: 'Prop name (something) doesn\'t match rule (^is[A-Z]([A-Za-z0-9]?)+)' }] }, { - // Should fail for every invalid prop - code: [ - 'class Hello extends React.Component {', - ' static propTypes = {', - ' something: PropTypes.mutuallyExclusiveTrueProps,', - ' somethingElse: PropTypes.bool', - ' };', - ' render () { return
; }', - '}' - ].join('\n'), + code: ` + class Hello extends React.Component { + static propTypes = { + something: PropTypes.mutuallyExclusiveTrueProps, + somethingElse: PropTypes.bool + }; + render () { return
; } + } + `, options: [{ propTypeNames: ['bool', 'mutuallyExclusiveTrueProps'], rule: '^is[A-Z]([A-Za-z0-9]?)+' @@ -442,16 +439,15 @@ ruleTester.run('boolean-prop-naming', rule, { message: 'Prop name (somethingElse) doesn\'t match rule (^is[A-Z]([A-Za-z0-9]?)+)' }] }, { - // Custom PropTypes that are specified as variables - code: [ - 'class Hello extends React.Component {', - ' static propTypes = {', - ' something: mutuallyExclusiveTrueProps,', - ' somethingElse: bool', - ' };', - ' render () { return
; }', - '}' - ].join('\n'), + code: ` + class Hello extends React.Component { + static propTypes = { + something: mutuallyExclusiveTrueProps, + somethingElse: bool + }; + render () { return
; } + } + `, options: [{ propTypeNames: ['bool', 'mutuallyExclusiveTrueProps'], rule: '^is[A-Z]([A-Za-z0-9]?)+' diff --git a/tests/lib/rules/display-name.js b/tests/lib/rules/display-name.js index 48c8f671b4..b3a2bce5b8 100644 --- a/tests/lib/rules/display-name.js +++ b/tests/lib/rules/display-name.js @@ -30,26 +30,26 @@ const ruleTester = new RuleTester({parserOptions}); ruleTester.run('display-name', rule, { valid: [{ - code: [ - 'var Hello = createReactClass({', - ' displayName: \'Hello\',', - ' render: function() {', - ' return
Hello {this.props.name}
;', - ' }', - '});' - ].join('\n'), + code: ` + var Hello = createReactClass({ + displayName: 'Hello', + render: function() { + return
Hello {this.props.name}
; + } + }); + `, options: [{ ignoreTranspilerName: true }] }, { - code: [ - 'var Hello = React.createClass({', - ' displayName: \'Hello\',', - ' render: function() {', - ' return
Hello {this.props.name}
;', - ' }', - '});' - ].join('\n'), + code: ` + var Hello = React.createClass({ + displayName: 'Hello', + render: function() { + return
Hello {this.props.name}
; + } + }); + `, options: [{ ignoreTranspilerName: true }], @@ -59,292 +59,292 @@ ruleTester.run('display-name', rule, { } } }, { - code: [ - 'class Hello extends React.Component {', - ' render() {', - ' return
Hello {this.props.name}
;', - ' }', - '}', - 'Hello.displayName = \'Hello\'' - ].join('\n'), + code: ` + class Hello extends React.Component { + render() { + return
Hello {this.props.name}
; + } + } + Hello.displayName = 'Hello' + `, options: [{ ignoreTranspilerName: true }] }, { - code: [ - 'class Hello {', - ' render() {', - ' return \'Hello World\';', - ' }', - '}' - ].join('\n') - }, { - code: [ - 'class Hello extends Greetings {', - ' static text = \'Hello World\';', - ' render() {', - ' return Hello.text;', - ' }', - '}' - ].join('\n'), + code: ` + class Hello { + render() { + return 'Hello World'; + } + } + ` + }, { + code: ` + class Hello extends Greetings { + static text = 'Hello World'; + render() { + return Hello.text; + } + } + `, parser: 'babel-eslint' }, { - code: [ - 'class Hello {', - ' method;', - '}' - ].join('\n'), + code: ` + class Hello { + method; + } + `, parser: 'babel-eslint' }, { - code: [ - 'class Hello extends React.Component {', - ' static get displayName() {', - ' return \'Hello\';', - ' }', - ' render() {', - ' return
Hello {this.props.name}
;', - ' }', - '}' - ].join('\n'), + code: ` + class Hello extends React.Component { + static get displayName() { + return 'Hello'; + } + render() { + return
Hello {this.props.name}
; + } + } + `, options: [{ ignoreTranspilerName: true }] }, { - code: [ - 'class Hello extends React.Component {', - ' static displayName = \'Widget\';', - ' render() {', - ' return
Hello {this.props.name}
;', - ' }', - '}' - ].join('\n'), + code: ` + class Hello extends React.Component { + static displayName = 'Widget'; + render() { + return
Hello {this.props.name}
; + } + } + `, options: [{ ignoreTranspilerName: true }], parser: 'babel-eslint' }, { - code: [ - 'var Hello = createReactClass({', - ' render: function() {', - ' return
Hello {this.props.name}
;', - ' }', - '});' - ].join('\n') - }, { - code: [ - 'class Hello extends React.Component {', - ' render() {', - ' return
Hello {this.props.name}
;', - ' }', - '}' - ].join('\n'), + code: ` + var Hello = createReactClass({ + render: function() { + return
Hello {this.props.name}
; + } + }); + ` + }, { + code: ` + class Hello extends React.Component { + render() { + return
Hello {this.props.name}
; + } + } + `, parser: 'babel-eslint' }, { - code: [ - 'export default class Hello {', - ' render() {', - ' return
Hello {this.props.name}
;', - ' }', - '}' - ].join('\n'), + code: ` + export default class Hello { + render() { + return
Hello {this.props.name}
; + } + } + `, parser: 'babel-eslint' }, { - code: [ - 'var Hello;', - 'Hello = createReactClass({', - ' render: function() {', - ' return
Hello {this.props.name}
;', - ' }', - '});' - ].join('\n') - }, { - code: [ - 'module.exports = createReactClass({', - ' "displayName": "Hello",', - ' "render": function() {', - ' return
Hello {this.props.name}
;', - ' }', - '});' - ].join('\n') - }, { - code: [ - 'var Hello = createReactClass({', - ' displayName: \'Hello\',', - ' render: function() {', - ' let { a, ...b } = obj;', - ' let c = { ...d };', - ' return
;', - ' }', - '});' - ].join('\n'), + code: ` + var Hello; + Hello = createReactClass({ + render: function() { + return
Hello {this.props.name}
; + } + }); + ` + }, { + code: ` + module.exports = createReactClass({ + "displayName": "Hello", + "render": function() { + return
Hello {this.props.name}
; + } + }); + ` + }, { + code: ` + var Hello = createReactClass({ + displayName: 'Hello', + render: function() { + let { a, ...b } = obj; + let c = { ...d }; + return
; + } + }); + `, options: [{ ignoreTranspilerName: true }] }, { - code: [ - 'export default class {', - ' render() {', - ' return
Hello {this.props.name}
;', - ' }', - '}' - ].join('\n'), + code: ` + export default class { + render() { + return
Hello {this.props.name}
; + } + } + `, parser: 'babel-eslint' }, { - code: [ - 'var Hello = function() {', - ' return
Hello {this.props.name}
;', - '}' - ].join('\n'), + code: ` + var Hello = function() { + return
Hello {this.props.name}
; + } + `, parser: 'babel-eslint' }, { - code: [ - 'function Hello() {', - ' return
Hello {this.props.name}
;', - '}' - ].join('\n'), + code: ` + function Hello() { + return
Hello {this.props.name}
; + } + `, parser: 'babel-eslint' }, { - code: [ - 'var Hello = () => {', - ' return
Hello {this.props.name}
;', - '}' - ].join('\n'), + code: ` + var Hello = () => { + return
Hello {this.props.name}
; + } + `, parser: 'babel-eslint' }, { - code: [ - 'module.exports = function Hello() {', - ' return
Hello {this.props.name}
;', - '}' - ].join('\n'), + code: ` + module.exports = function Hello() { + return
Hello {this.props.name}
; + } + `, parser: 'babel-eslint' }, { - code: [ - 'function Hello() {', - ' return
Hello {this.props.name}
;', - '}', - 'Hello.displayName = \'Hello\';' - ].join('\n'), + code: ` + function Hello() { + return
Hello {this.props.name}
; + } + Hello.displayName = 'Hello'; + `, options: [{ ignoreTranspilerName: true }], parser: 'babel-eslint' }, { - code: [ - 'var Hello = () => {', - ' return
Hello {this.props.name}
;', - '}', - 'Hello.displayName = \'Hello\';' - ].join('\n'), + code: ` + var Hello = () => { + return
Hello {this.props.name}
; + } + Hello.displayName = 'Hello'; + `, options: [{ ignoreTranspilerName: true }], parser: 'babel-eslint' }, { - code: [ - 'var Hello = function() {', - ' return
Hello {this.props.name}
;', - '}', - 'Hello.displayName = \'Hello\';' - ].join('\n'), + code: ` + var Hello = function() { + return
Hello {this.props.name}
; + } + Hello.displayName = 'Hello'; + `, options: [{ ignoreTranspilerName: true }], parser: 'babel-eslint' }, { - code: [ - 'var Mixins = {', - ' Greetings: {', - ' Hello: function() {', - ' return
Hello {this.props.name}
;', - ' }', - ' }', - '}', - 'Mixins.Greetings.Hello.displayName = \'Hello\';' - ].join('\n'), + code: ` + var Mixins = { + Greetings: { + Hello: function() { + return
Hello {this.props.name}
; + } + } + } + Mixins.Greetings.Hello.displayName = 'Hello'; + `, options: [{ ignoreTranspilerName: true }], parser: 'babel-eslint' }, { - code: [ - 'var Hello = createReactClass({', - ' render: function() {', - ' return
{this._renderHello()}
;', - ' },', - ' _renderHello: function() {', - ' return Hello {this.props.name};', - ' }', - '});' - ].join('\n'), + code: ` + var Hello = createReactClass({ + render: function() { + return
{this._renderHello()}
; + }, + _renderHello: function() { + return Hello {this.props.name}; + } + }); + `, parser: 'babel-eslint' }, { - code: [ - 'var Hello = createReactClass({', - ' displayName: \'Hello\',', - ' render: function() {', - ' return
{this._renderHello()}
;', - ' },', - ' _renderHello: function() {', - ' return Hello {this.props.name};', - ' }', - '});' - ].join('\n'), + code: ` + var Hello = createReactClass({ + displayName: 'Hello', + render: function() { + return
{this._renderHello()}
; + }, + _renderHello: function() { + return Hello {this.props.name}; + } + }); + `, options: [{ ignoreTranspilerName: true }], parser: 'babel-eslint' }, { - code: [ - 'const Mixin = {', - ' Button() {', - ' return (', - ' ', - ' )', - ' }', - '});', - 'export default Button;' - ].join('\n')}, + {code: ` + import React from 'react/addons'; + const Button = createReactClass({ + render() { + return ( + + ) + } + }); + export default Button; + `}, {code: 'var Foo, App; ;', settings: settings} ], invalid: [{ diff --git a/tests/lib/rules/require-optimization.js b/tests/lib/rules/require-optimization.js index 089a83c12f..b4c1bf7b4c 100644 --- a/tests/lib/rules/require-optimization.js +++ b/tests/lib/rules/require-optimization.js @@ -21,168 +21,163 @@ const MESSAGE = 'Component is not optimized. Please add a shouldComponentUpdate const ruleTester = new RuleTester({parserOptions}); ruleTester.run('react-require-optimization', rule, { valid: [{ - code: [ - 'class A {}' - ].join('\n') - }, { - code: [ - 'import React from "react";' + - 'class YourComponent extends React.Component {' + - 'shouldComponentUpdate () {}' + - '}' - ].join('\n') - }, { - code: [ - 'import React, {Component} from "react";' + - 'class YourComponent extends Component {' + - 'shouldComponentUpdate () {}' + - '}' - ].join('\n') - }, { - code: [ - 'import React, {Component} from "react";', - '@reactMixin.decorate(PureRenderMixin)', - 'class YourComponent extends Component {', - ' componetnDidMount () {}', - ' render() {}', - '}' - ].join('\n'), + code: ` + class A {} + ` + }, { + code: ` + import React from "react"; + class YourComponent extends React.Component { + shouldComponentUpdate () {} + } + ` + }, { + code: ` + import React, {Component} from "react"; + class YourComponent extends Component { + shouldComponentUpdate () {} + } + ` + }, { + code: ` + import React, {Component} from "react"; + @reactMixin.decorate(PureRenderMixin) + class YourComponent extends Component { + componetnDidMount () {} + render() {} + } + `, parser: 'babel-eslint' }, { - code: [ - 'import React from "react";' + - 'createReactClass({' + - 'shouldComponentUpdate: function () {}' + - '})' - ].join('\n') - }, { - code: [ - 'import React from "react";' + - 'createReactClass({' + - 'mixins: [PureRenderMixin]' + - '})' - ].join('\n') - }, { - code: [ - '@reactMixin.decorate(PureRenderMixin)', - 'class DecoratedComponent extends Component {' + - '}' - ].join('\n'), + code: ` + import React from "react"; + createReactClass({ + shouldComponentUpdate: function () {} + }) + ` + }, { + code: ` + import React from "react"; + createReactClass({ + mixins: [PureRenderMixin] + }) + ` + }, { + code: ` + @reactMixin.decorate(PureRenderMixin) + class DecoratedComponent extends Component {} + `, parser: 'babel-eslint' }, { - code: [ - 'const FunctionalComponent = function (props) {' + - 'return
;' + - '}' - ].join('\n'), + code: ` + const FunctionalComponent = function (props) { + return
; + } + `, parser: 'babel-eslint' }, { - code: [ - 'function FunctionalComponent(props) {' + - 'return
;' + - '}' - ].join('\n'), + code: ` + function FunctionalComponent(props) { + return
; + } + `, parser: 'babel-eslint' }, { - code: [ - 'const FunctionalComponent = (props) => {' + - 'return
;' + - '}' - ].join('\n'), + code: ` + const FunctionalComponent = (props) => { + return
; + } + `, parser: 'babel-eslint' }, { - code: [ - '@bar', - '@pureRender', - '@foo', - 'class DecoratedComponent extends Component {' + - '}' - ].join('\n'), + code: ` + @bar + @pureRender + @foo + class DecoratedComponent extends Component {} + `, parser: 'babel-eslint', options: [{allowDecorators: ['renderPure', 'pureRender']}] }, { - code: [ - 'import React from "react";' + - 'class YourComponent extends React.PureComponent {}' - ].join('\n'), + code: ` + import React from "react"; + class YourComponent extends React.PureComponent {} + `, parser: 'babel-eslint', options: [{allowDecorators: ['renderPure', 'pureRender']}] }, { - code: [ - 'import React, {PureComponent} from "react";' + - 'class YourComponent extends PureComponent {}' - ].join('\n'), + code: ` + import React, {PureComponent} from "react"; + class YourComponent extends PureComponent {} + `, parser: 'babel-eslint', options: [{allowDecorators: ['renderPure', 'pureRender']}] }], invalid: [{ - code: [ - 'import React from "react";' + - 'class YourComponent extends React.Component {}' - ].join('\n'), + code: ` + import React from "react"; + class YourComponent extends React.Component {} + `, errors: [{ message: MESSAGE }] }, { - code: [ - 'import React from "react";', - 'class YourComponent extends React.Component {', - ' handleClick() {}', - ' render() {', - ' return
123
', - ' }', - '}' - ].join('\n'), + code: ` + import React from "react"; + class YourComponent extends React.Component { + handleClick() {} + render() { + return
123
+ } + } + `, parser: 'babel-eslint', errors: [{ message: MESSAGE }] }, { - code: [ - 'import React, {Component} from "react";' + - 'class YourComponent extends Component {}' - ].join('\n'), + code: ` + import React, {Component} from "react"; + class YourComponent extends Component {} + `, errors: [{ message: MESSAGE }] }, { - code: [ - 'import React from "react";' + - 'createReactClass({' + - '})' - ].join('\n'), + code: ` + import React from "react"; + createReactClass({}) + `, errors: [{ message: MESSAGE }] }, { - code: [ - 'import React from "react";' + - 'createReactClass({' + - 'mixins: [RandomMixin]' + - '})' - ].join('\n'), + code: ` + import React from "react"; + createReactClass({ + mixins: [RandomMixin] + }) + `, errors: [{ message: MESSAGE }] }, { - code: [ - '@reactMixin.decorate(SomeOtherMixin)', - 'class DecoratedComponent extends Component {' + - '}' - ].join('\n'), + code: ` + @reactMixin.decorate(SomeOtherMixin) + class DecoratedComponent extends Component {} + `, errors: [{ message: MESSAGE }], parser: 'babel-eslint' }, { - code: [ - '@bar', - '@pure', - '@foo', - 'class DecoratedComponent extends Component {' + - '}' - ].join('\n'), + code: ` + @bar + @pure + @foo + class DecoratedComponent extends Component {} + `, errors: [{ message: MESSAGE }], diff --git a/tests/lib/rules/require-render-return.js b/tests/lib/rules/require-render-return.js index b3d7d585b8..4d6089fc63 100644 --- a/tests/lib/rules/require-render-return.js +++ b/tests/lib/rules/require-render-return.js @@ -31,92 +31,92 @@ ruleTester.run('require-render-return', rule, { valid: [{ // ES6 class - code: [ - 'class Hello extends React.Component {', - ' render() {', - ' return
Hello {this.props.name}
;', - ' }', - '}' - ].join('\n') + code: ` + class Hello extends React.Component { + render() { + return
Hello {this.props.name}
; + } + } + ` }, { // ES6 class with render property - code: [ - 'class Hello extends React.Component {', - ' render = () => {', - ' return
Hello {this.props.name}
;', - ' }', - '}' - ].join('\n'), + code: ` + class Hello extends React.Component { + render = () => { + return
Hello {this.props.name}
; + } + } + `, parser: 'babel-eslint' }, { // ES6 class with render property (implicit return) - code: [ - 'class Hello extends React.Component {', - ' render = () => (', - '
Hello {this.props.name}
', - ' )', - '}' - ].join('\n'), + code: ` + class Hello extends React.Component { + render = () => ( +
Hello {this.props.name}
+ ) + } + `, parser: 'babel-eslint' }, { // ES5 class - code: [ - 'var Hello = createReactClass({', - ' displayName: \'Hello\',', - ' render: function() {', - ' return
', - ' }', - '});' - ].join('\n') + code: ` + var Hello = createReactClass({ + displayName: 'Hello', + render: function() { + return
+ } + }); + ` }, { // Stateless function - code: [ - 'function Hello() {', - ' return
;', - '}' - ].join('\n') + code: ` + function Hello() { + return
; + } + ` }, { // Stateless arrow function - code: [ - 'var Hello = () => (', - '
', - ');' - ].join('\n'), + code: ` + var Hello = () => ( +
+ ); + `, parser: 'babel-eslint' }, { // Return in a switch...case - code: [ - 'var Hello = createReactClass({', - ' render: function() {', - ' switch (this.props.name) {', - ' case \'Foo\':', - ' return
Hello Foo
;', - ' default:', - ' return
Hello {this.props.name}
;', - ' }', - ' }', - '});' - ].join('\n') + code: ` + var Hello = createReactClass({ + render: function() { + switch (this.props.name) { + case 'Foo': + return
Hello Foo
; + default: + return
Hello {this.props.name}
; + } + } + }); + ` }, { // Return in a if...else - code: [ - 'var Hello = createReactClass({', - ' render: function() {', - ' if (this.props.name === \'Foo\') {', - ' return
Hello Foo
;', - ' } else {', - ' return
Hello {this.props.name}
;', - ' }', - ' }', - '});' - ].join('\n') + code: ` + var Hello = createReactClass({ + render: function() { + if (this.props.name === 'Foo') { + return
Hello Foo
; + } else { + return
Hello {this.props.name}
; + } + } + }); + ` }, { // Not a React component - code: [ - 'class Hello {', - ' render() {}', - '}' - ].join('\n') + code: ` + class Hello { + render() {} + } + ` }, { // ES6 class without a render method code: 'class Hello extends React.Component {}' @@ -125,66 +125,66 @@ ruleTester.run('require-render-return', rule, { code: 'var Hello = createReactClass({});' }, { // ES5 class with an imported render method - code: [ - 'var render = require(\'./render\');', - 'var Hello = createReactClass({', - ' render', - '});' - ].join('\n') + code: ` + var render = require('./render'); + var Hello = createReactClass({ + render + }); + ` }, { // Invalid render method (but accepted by Babel) - code: [ - 'class Foo extends Component {', - ' render', - '}' - ].join('\n'), + code: ` + class Foo extends Component { + render + } + `, parser: 'babel-eslint' }], invalid: [{ // Missing return in ES5 class - code: [ - 'var Hello = createReactClass({', - ' displayName: \'Hello\',', - ' render: function() {}', - '});' - ].join('\n'), + code: ` + var Hello = createReactClass({ + displayName: 'Hello', + render: function() {} + }); + `, errors: [{ message: 'Your render method should have return statement' }] }, { // Missing return in ES6 class - code: [ - 'class Hello extends React.Component {', - ' render() {} ', - '}' - ].join('\n'), + code: ` + class Hello extends React.Component { + render() {} + } + `, errors: [{ message: 'Your render method should have return statement' }] }, { // Missing return (but one is present in a sub-function) - code: [ - 'class Hello extends React.Component {', - ' render() {', - ' const names = this.props.names.map(function(name) {', - ' return
{name}
', - ' });', - ' } ', - '}' - ].join('\n'), + code: ` + class Hello extends React.Component { + render() { + const names = this.props.names.map(function(name) { + return
{name}
+ }); + } + } + `, errors: [{ message: 'Your render method should have return statement' }] }, { // Missing return ES6 class render property - code: [ - 'class Hello extends React.Component {', - ' render = () => {', - '
Hello {this.props.name}
', - ' }', - '}' - ].join('\n'), + code: ` + class Hello extends React.Component { + render = () => { +
Hello {this.props.name}
+ } + } + `, parser: 'babel-eslint', errors: [{ message: 'Your render method should have return statement'