Skip to content

Commit a697753

Browse files
committed
Add tests for jsx-sort-prop-types rule.
1 parent d2676bc commit a697753

File tree

1 file changed

+324
-0
lines changed

1 file changed

+324
-0
lines changed
Lines changed: 324 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,324 @@
1+
/**
2+
* @fileoverview Tests for jsx-sort-prop-types
3+
*/
4+
'use strict';
5+
6+
// -----------------------------------------------------------------------------
7+
// Requirements
8+
// -----------------------------------------------------------------------------
9+
10+
var eslint = require('eslint').linter;
11+
var ESLintTester = require('eslint-tester');
12+
13+
require('babel-eslint');
14+
15+
// -----------------------------------------------------------------------------
16+
// Tests
17+
// -----------------------------------------------------------------------------
18+
19+
var ERROR_MESSAGE = 'Prop types declarations should be sorted alphabetically';
20+
21+
var eslintTester = new ESLintTester(eslint);
22+
eslintTester.addRuleTest('lib/rules/jsx-sort-prop-types', {
23+
valid: [
24+
{
25+
code: [
26+
'var First = React.createClass({',
27+
' render: function() {',
28+
' return <div />;',
29+
' }',
30+
'});'
31+
].join('\n'),
32+
ecmaFeatures: {
33+
jsx: true
34+
}
35+
}, {
36+
code: [
37+
'var First = React.createClass({',
38+
' propTypes: externalPropTypes,',
39+
' render: function() {',
40+
' return <div />;',
41+
' }',
42+
'});'
43+
].join('\n'),
44+
ecmaFeatures: {
45+
jsx: true
46+
}
47+
}, {
48+
code: [
49+
'var First = React.createClass({',
50+
' propTypes: {',
51+
' A: React.PropTypes.any,',
52+
' Z: React.PropTypes.string,',
53+
' a: React.PropTypes.any,',
54+
' z: React.PropTypes.string',
55+
' },',
56+
' render: function() {',
57+
' return <div />;',
58+
' }',
59+
'});'
60+
].join('\n'),
61+
ecmaFeatures: {
62+
jsx: true
63+
}
64+
}, {
65+
code: [
66+
'var First = React.createClass({',
67+
' propTypes: {',
68+
' a: React.PropTypes.any,',
69+
' A: React.PropTypes.any,',
70+
' z: React.PropTypes.string,',
71+
' Z: React.PropTypes.string',
72+
' },',
73+
' render: function() {',
74+
' return <div />;',
75+
' }',
76+
'});'
77+
].join('\n'),
78+
args: [1, {
79+
ignoreCase: true
80+
}],
81+
ecmaFeatures: {
82+
jsx: true
83+
}
84+
}, {
85+
code: [
86+
'var First = React.createClass({',
87+
' propTypes: {',
88+
' a: React.PropTypes.any,',
89+
' z: React.PropTypes.string',
90+
' },',
91+
' render: function() {',
92+
' return <div />;',
93+
' }',
94+
'});',
95+
'var Second = React.createClass({',
96+
' propTypes: {',
97+
' AA: React.PropTypes.any,',
98+
' ZZ: React.PropTypes.string',
99+
' },',
100+
' render: function() {',
101+
' return <div />;',
102+
' }',
103+
'});'
104+
].join('\n'),
105+
ecmaFeatures: {
106+
jsx: true
107+
}
108+
}, {
109+
code: [
110+
'class First extends React.Component {',
111+
' render() {',
112+
' return <div />;',
113+
' }',
114+
'}',
115+
'First.propTypes = {',
116+
' a: React.PropTypes.string,',
117+
' z: React.PropTypes.string',
118+
'};',
119+
'First.propTypes.justforcheck = React.PropTypes.string;'
120+
].join('\n'),
121+
ecmaFeatures: {
122+
classes: true,
123+
jsx: true
124+
}
125+
}, {
126+
code: [
127+
'class First extends React.Component {',
128+
' render() {',
129+
' return <div />;',
130+
' }',
131+
'}',
132+
'First.propTypes = {',
133+
' a: React.PropTypes.any,',
134+
' A: React.PropTypes.any,',
135+
' z: React.PropTypes.string,',
136+
' Z: React.PropTypes.string',
137+
'};'
138+
].join('\n'),
139+
args: [1, {
140+
ignoreCase: true
141+
}],
142+
ecmaFeatures: {
143+
classes: true,
144+
jsx: true
145+
}
146+
}, {
147+
code: [
148+
'class Component extends React.Component {',
149+
' static propTypes = {',
150+
' a: React.PropTypes.any,',
151+
' b: React.PropTypes.any,',
152+
' c: React.PropTypes.any',
153+
' }',
154+
' render() {',
155+
' return <div />;',
156+
' }',
157+
'}'
158+
].join('\n'),
159+
parser: 'babel-eslint',
160+
ecmaFeatures: {
161+
classes: true,
162+
jsx: true
163+
}
164+
}
165+
],
166+
167+
invalid: [
168+
{
169+
code: [
170+
'var First = React.createClass({',
171+
' propTypes: {',
172+
' z: React.PropTypes.string,',
173+
' a: React.PropTypes.any',
174+
' },',
175+
' render: function() {',
176+
' return <div />;',
177+
' }',
178+
'});'
179+
].join('\n'),
180+
ecmaFeatures: {
181+
jsx: true
182+
},
183+
errors: [{
184+
message: ERROR_MESSAGE,
185+
line: 4,
186+
column: 4,
187+
type: 'Property'
188+
}]
189+
}, {
190+
code: [
191+
'var First = React.createClass({',
192+
' propTypes: {',
193+
' z: React.PropTypes.any,',
194+
' Z: React.PropTypes.any',
195+
' },',
196+
' render: function() {',
197+
' return <div />;',
198+
' }',
199+
'});'
200+
].join('\n'),
201+
ecmaFeatures: {
202+
jsx: true
203+
},
204+
errors: [{
205+
message: ERROR_MESSAGE,
206+
line: 4,
207+
column: 4,
208+
type: 'Property'
209+
}]
210+
}, {
211+
code: [
212+
'var First = React.createClass({',
213+
' propTypes: {',
214+
' Z: React.PropTypes.any,',
215+
' a: React.PropTypes.any',
216+
' },',
217+
' render: function() {',
218+
' return <div />;',
219+
' }',
220+
'});'
221+
].join('\n'),
222+
args: [1, {
223+
ignoreCase: true
224+
}],
225+
ecmaFeatures: {
226+
jsx: true
227+
},
228+
errors: [{
229+
message: ERROR_MESSAGE,
230+
line: 4,
231+
column: 4,
232+
type: 'Property'
233+
}]
234+
}, {
235+
code: [
236+
'var First = React.createClass({',
237+
' propTypes: {',
238+
' a: React.PropTypes.any,',
239+
' A: React.PropTypes.any,',
240+
' z: React.PropTypes.string,',
241+
' Z: React.PropTypes.string',
242+
' },',
243+
' render: function() {',
244+
' return <div />;',
245+
' }',
246+
'});'
247+
].join('\n'),
248+
ecmaFeatures: {
249+
jsx: true
250+
},
251+
errors: 2
252+
}, {
253+
code: [
254+
'var First = React.createClass({',
255+
' propTypes: {',
256+
' a: React.PropTypes.any,',
257+
' Zz: React.PropTypes.string',
258+
' },',
259+
' render: function() {',
260+
' return <div />;',
261+
' }',
262+
'});',
263+
'var Second = React.createClass({',
264+
' propTypes: {',
265+
' aAA: React.PropTypes.any,',
266+
' ZZ: React.PropTypes.string',
267+
' },',
268+
' render: function() {',
269+
' return <div />;',
270+
' }',
271+
'});'
272+
].join('\n'),
273+
ecmaFeatures: {
274+
jsx: true
275+
},
276+
errors: 2
277+
}, {
278+
code: [
279+
'class First extends React.Component {',
280+
' render() {',
281+
' return <div />;',
282+
' }',
283+
'}',
284+
'First.propTypes = {',
285+
' yy: React.PropTypes.any,',
286+
' bb: React.PropTypes.string',
287+
'};',
288+
'class Second extends React.Component {',
289+
' render() {',
290+
' return <div />;',
291+
' }',
292+
'}',
293+
'Second.propTypes = {',
294+
' aAA: React.PropTypes.any,',
295+
' ZZ: React.PropTypes.string',
296+
'};'
297+
].join('\n'),
298+
ecmaFeatures: {
299+
classes: true,
300+
jsx: true
301+
},
302+
errors: 2
303+
}, {
304+
code: [
305+
'class Component extends React.Component {',
306+
' static propTypes = {',
307+
' z: React.PropTypes.any,',
308+
' y: React.PropTypes.any,',
309+
' a: React.PropTypes.any',
310+
' }',
311+
' render() {',
312+
' return <div />;',
313+
' }',
314+
'}'
315+
].join('\n'),
316+
parser: 'babel-eslint',
317+
ecmaFeatures: {
318+
classes: true,
319+
jsx: true
320+
},
321+
errors: 2
322+
}
323+
]
324+
});

0 commit comments

Comments
 (0)