123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- /**
- * @fileoverview Ensure proper position of the first property in JSX
- * @author Joachim Seminck
- */
- 'use strict';
- // -----------------------------------------------------------------------------
- // Requirements
- // -----------------------------------------------------------------------------
- const rule = require('../../../lib/rules/jsx-first-prop-new-line');
- const RuleTester = require('eslint').RuleTester;
- const parserOptions = {
- ecmaVersion: 2018,
- sourceType: 'module',
- ecmaFeatures: {
- jsx: true
- }
- };
- // -----------------------------------------------------------------------------
- // Tests
- // -----------------------------------------------------------------------------
- const ruleTester = new RuleTester({parserOptions});
- ruleTester.run('jsx-first-prop-new-line', rule, {
- valid: [
- {
- code: '<Foo />',
- options: ['never'],
- parser: 'babel-eslint'
- },
- {
- code: '<Foo prop="bar" />',
- options: ['never'],
- parser: 'babel-eslint'
- },
- {
- code: '<Foo {...this.props} />',
- options: ['never'],
- parser: 'babel-eslint'
- },
- {
- code: '<Foo a a a />',
- options: ['never'],
- parser: 'babel-eslint'
- },
- {
- code: [
- '<Foo a',
- ' b ',
- '/>'
- ].join('\n'),
- options: ['never'],
- parser: 'babel-eslint'
- },
- {
- code: '<Foo />',
- options: ['multiline'],
- parser: 'babel-eslint'
- },
- {
- code: '<Foo prop="one" />',
- options: ['multiline'],
- parser: 'babel-eslint'
- },
- {
- code: '<Foo {...this.props} />',
- options: ['multiline'],
- parser: 'babel-eslint'
- },
- {
- code: '<Foo a a a />',
- options: ['multiline'],
- parser: 'babel-eslint'
- },
- {
- code: [
- '<Foo',
- ' propOne="one"',
- ' propTwo="two"',
- '/>'
- ].join('\n'),
- options: ['multiline'],
- parser: 'babel-eslint'
- },
- {
- code: [
- '<Foo',
- ' {...this.props}',
- ' propTwo="two"',
- '/>'
- ].join('\n'),
- options: ['multiline'],
- parser: 'babel-eslint'
- },
- {
- code: [
- '<Foo bar />'
- ].join('\n'),
- options: ['multiline-multiprop'],
- parser: 'babel-eslint'
- },
- {
- code: [
- '<Foo bar baz />'
- ].join('\n'),
- options: ['multiline-multiprop'],
- parser: 'babel-eslint'
- },
- {
- code: [
- '<Foo prop={{',
- '}} />'
- ].join('\n'),
- options: ['multiline-multiprop'],
- parser: 'babel-eslint'
- },
- {
- code: [
- '<Foo ',
- ' foo={{',
- ' }}',
- ' bar',
- '/>'
- ].join('\n'),
- options: ['multiline-multiprop'],
- parser: 'babel-eslint'
- },
- {
- code: '<Foo />',
- options: ['always'],
- parser: 'babel-eslint'
- },
- {
- code: [
- '<Foo',
- ' propOne="one"',
- ' propTwo="two"',
- '/>'
- ].join('\n'),
- options: ['always'],
- parser: 'babel-eslint'
- },
- {
- code: [
- '<Foo',
- ' {...this.props}',
- ' propTwo="two"',
- '/>'
- ].join('\n'),
- options: ['always'],
- parser: 'babel-eslint'
- }
- ],
- invalid: [
- {
- code: '<Foo propOne="one" propTwo="two" />',
- output: [
- '<Foo',
- 'propOne="one" propTwo="two" />'
- ].join('\n'),
- options: ['always'],
- errors: [{message: 'Property should be placed on a new line'}],
- parser: 'babel-eslint'
- },
- {
- code: [
- '<Foo propOne="one"',
- ' propTwo="two"',
- '/>'
- ].join('\n'),
- output: [
- '<Foo',
- 'propOne="one"',
- ' propTwo="two"',
- '/>'
- ].join('\n'),
- options: ['always'],
- errors: [{message: 'Property should be placed on a new line'}],
- parser: 'babel-eslint'
- },
- {
- code: [
- '<Foo',
- ' propOne="one"',
- ' propTwo="two"',
- '/>'
- ].join('\n'),
- output: [
- '<Foo propOne="one"',
- ' propTwo="two"',
- '/>'
- ].join('\n'),
- options: ['never'],
- errors: [{message: 'Property should be placed on the same line as the component declaration'}],
- parser: 'babel-eslint'
- },
- {
- code: [
- '<Foo prop={{',
- '}} />'
- ].join('\n'),
- output: [
- '<Foo',
- 'prop={{',
- '}} />'
- ].join('\n'),
- options: ['multiline'],
- errors: [{message: 'Property should be placed on a new line'}],
- parser: 'babel-eslint'
- },
- {
- code: [
- '<Foo bar={{',
- '}} baz />'
- ].join('\n'),
- output: [
- '<Foo',
- 'bar={{',
- '}} baz />'
- ].join('\n'),
- options: ['multiline-multiprop'],
- errors: [{message: 'Property should be placed on a new line'}],
- parser: 'babel-eslint'
- }
- ]
- });
|