@@ -29,13 +29,15 @@ const ruleTester = new RuleTester({parserOptions});
29
29
ruleTester . run ( 'boolean-prop-naming' , rule , {
30
30
31
31
valid : [ {
32
+ // Should support both `is` and `has` prefixes by default
32
33
code : `
33
34
var Hello = createReactClass({
34
35
propTypes: {isSomething: PropTypes.bool, hasValue: PropTypes.bool},
35
36
render: function() { return <div />; }
36
37
});
37
38
`
38
39
} , {
40
+ // createReactClass components with PropTypes
39
41
code : `
40
42
var Hello = createReactClass({
41
43
propTypes: {isSomething: PropTypes.bool},
@@ -46,6 +48,7 @@ ruleTester.run('boolean-prop-naming', rule, {
46
48
rule : '^is[A-Z]([A-Za-z0-9]?)+'
47
49
} ]
48
50
} , {
51
+ // createReactClass components with React.PropTypes
49
52
code : `
50
53
var Hello = createReactClass({
51
54
propTypes: {isSomething: React.PropTypes.bool},
@@ -56,6 +59,7 @@ ruleTester.run('boolean-prop-naming', rule, {
56
59
rule : '^is[A-Z]([A-Za-z0-9]?)+'
57
60
} ]
58
61
} , {
62
+ // React.createClass components with PropTypes
59
63
code : `
60
64
var Hello = React.createClass({
61
65
propTypes: {isSomething: PropTypes.bool},
@@ -71,6 +75,7 @@ ruleTester.run('boolean-prop-naming', rule, {
71
75
}
72
76
}
73
77
} , {
78
+ // React.createClass components with non-boolean PropTypes
74
79
code : `
75
80
var Hello = React.createClass({
76
81
propTypes: {something: PropTypes.any},
@@ -86,6 +91,7 @@ ruleTester.run('boolean-prop-naming', rule, {
86
91
}
87
92
}
88
93
} , {
94
+ // ES6 components as React.Component with boolean PropTypes
89
95
code : `
90
96
class Hello extends React.Component {
91
97
render () { return <div />; }
@@ -96,6 +102,7 @@ ruleTester.run('boolean-prop-naming', rule, {
96
102
rule : '^is[A-Z]([A-Za-z0-9]?)+'
97
103
} ]
98
104
} , {
105
+ // ES6 components as React.Component with non-boolean PropTypes
99
106
code : `
100
107
class Hello extends React.Component {
101
108
render () { return <div />; }
@@ -116,6 +123,7 @@ ruleTester.run('boolean-prop-naming', rule, {
116
123
rule : '^is[A-Z]([A-Za-z0-9]?)+'
117
124
} ]
118
125
} , {
126
+ // ES6 components as Component with boolean PropTypes
119
127
code : `
120
128
class Hello extends Component {
121
129
render () { return <div />; }
@@ -126,6 +134,7 @@ ruleTester.run('boolean-prop-naming', rule, {
126
134
rule : '^is[A-Z]([A-Za-z0-9]?)+'
127
135
} ]
128
136
} , {
137
+ // ES6 components with static class properties and PropTypes
129
138
code : `
130
139
class Hello extends React.Component {
131
140
static propTypes = {isSomething: PropTypes.bool};
@@ -137,6 +146,7 @@ ruleTester.run('boolean-prop-naming', rule, {
137
146
} ] ,
138
147
parser : 'babel-eslint'
139
148
} , {
149
+ // ES6 components with static class properties and React.PropTypes
140
150
code : `
141
151
class Hello extends React.Component {
142
152
static propTypes = {isSomething: React.PropTypes.bool};
@@ -148,6 +158,7 @@ ruleTester.run('boolean-prop-naming', rule, {
148
158
} ] ,
149
159
parser : 'babel-eslint'
150
160
} , {
161
+ // ES6 components with static class properties an non-booleans
151
162
code : `
152
163
class Hello extends React.Component {
153
164
static propTypes = {something: PropTypes.any};
@@ -159,6 +170,7 @@ ruleTester.run('boolean-prop-naming', rule, {
159
170
} ] ,
160
171
parser : 'babel-eslint'
161
172
} , {
173
+ // ES6 components and Flowtype booleans
162
174
code : `
163
175
class Hello extends React.Component {
164
176
props: {isSomething: boolean};
@@ -170,6 +182,7 @@ ruleTester.run('boolean-prop-naming', rule, {
170
182
} ] ,
171
183
parser : 'babel-eslint'
172
184
} , {
185
+ // ES6 components and Flowtype non-booleans
173
186
code : `
174
187
class Hello extends React.Component {
175
188
props: {something: any};
@@ -181,6 +194,7 @@ ruleTester.run('boolean-prop-naming', rule, {
181
194
} ] ,
182
195
parser : 'babel-eslint'
183
196
} , {
197
+ // Stateless components
184
198
code : `
185
199
var Hello = ({isSomething}) => { return <div /> }
186
200
Hello.propTypes = {isSomething: PropTypes.bool};
@@ -190,6 +204,7 @@ ruleTester.run('boolean-prop-naming', rule, {
190
204
} ] ,
191
205
parser : 'babel-eslint'
192
206
} , {
207
+ // Functional components and Flowtype booleans
193
208
code : `
194
209
type Props = {
195
210
isSomething: boolean;
@@ -201,6 +216,7 @@ ruleTester.run('boolean-prop-naming', rule, {
201
216
} ] ,
202
217
parser : 'babel-eslint'
203
218
} , {
219
+ // Custom `propTypeNames` option
204
220
code : `
205
221
class Hello extends React.Component {
206
222
static propTypes = {
@@ -216,6 +232,7 @@ ruleTester.run('boolean-prop-naming', rule, {
216
232
} ] ,
217
233
parser : 'babel-eslint'
218
234
} , {
235
+ // Custom PropTypes that are specified as variables
219
236
code : `
220
237
class Hello extends React.Component {
221
238
static propTypes = {
@@ -231,6 +248,7 @@ ruleTester.run('boolean-prop-naming', rule, {
231
248
} ] ,
232
249
parser : 'babel-eslint'
233
250
} , {
251
+ // Ensure rule doesn't crash on destructured objects [Issue #1369]
234
252
code : `
235
253
var x = {a: 1}
236
254
var y = {...x}
@@ -240,6 +258,7 @@ ruleTester.run('boolean-prop-naming', rule, {
240
258
} ] ,
241
259
parser : 'babel-eslint'
242
260
} , {
261
+ // Ensure rule doesn't crash on on components reference old-style Flow props
243
262
code : `
244
263
class Hello extends PureComponent {
245
264
props: PropsType;
@@ -253,6 +272,7 @@ ruleTester.run('boolean-prop-naming', rule, {
253
272
} ] ,
254
273
255
274
invalid : [ {
275
+ // createReactClass components with PropTypes
256
276
code : `
257
277
var Hello = createReactClass({
258
278
propTypes: {something: PropTypes.bool},
@@ -266,6 +286,7 @@ ruleTester.run('boolean-prop-naming', rule, {
266
286
message : 'Prop name (something) doesn\'t match rule (^is[A-Z]([A-Za-z0-9]?)+)'
267
287
} ]
268
288
} , {
289
+ // createReactClass components with React.PropTypes
269
290
code : `
270
291
var Hello = createReactClass({
271
292
propTypes: {something: React.PropTypes.bool},
@@ -279,6 +300,7 @@ ruleTester.run('boolean-prop-naming', rule, {
279
300
message : 'Prop name (something) doesn\'t match rule (^is[A-Z]([A-Za-z0-9]?)+)'
280
301
} ]
281
302
} , {
303
+ // React.createClass components with PropTypes
282
304
code : `
283
305
var Hello = React.createClass({
284
306
propTypes: {something: PropTypes.bool},
@@ -297,6 +319,7 @@ ruleTester.run('boolean-prop-naming', rule, {
297
319
message : 'Prop name (something) doesn\'t match rule (^is[A-Z]([A-Za-z0-9]?)+)'
298
320
} ]
299
321
} , {
322
+ // ES6 components as React.Component with boolean PropTypes
300
323
code : `
301
324
class Hello extends React.Component {
302
325
render () { return <div />; }
@@ -310,6 +333,7 @@ ruleTester.run('boolean-prop-naming', rule, {
310
333
message : 'Prop name (something) doesn\'t match rule (^is[A-Z]([A-Za-z0-9]?)+)'
311
334
} ]
312
335
} , {
336
+ // ES6 components as Component with non-boolean PropTypes
313
337
code : `
314
338
class Hello extends Component {
315
339
render () { return <div />; }
@@ -323,6 +347,7 @@ ruleTester.run('boolean-prop-naming', rule, {
323
347
message : 'Prop name (something) doesn\'t match rule (^is[A-Z]([A-Za-z0-9]?)+)'
324
348
} ]
325
349
} , {
350
+ // ES6 components as React.Component with non-boolean PropTypes
326
351
code : `
327
352
class Hello extends React.Component {
328
353
static propTypes = {something: PropTypes.bool};
@@ -337,6 +362,7 @@ ruleTester.run('boolean-prop-naming', rule, {
337
362
message : 'Prop name (something) doesn\'t match rule (^is[A-Z]([A-Za-z0-9]?)+)'
338
363
} ]
339
364
} , {
365
+ // ES6 components as React.Component with non-boolean PropTypes
340
366
code : `
341
367
class Hello extends React.Component {
342
368
props: {something: boolean};
@@ -377,6 +403,7 @@ ruleTester.run('boolean-prop-naming', rule, {
377
403
message : 'Prop name (something) doesn\'t match rule (^is[A-Z]([A-Za-z0-9]?)+)'
378
404
} ]
379
405
} , {
406
+ // ES6 components and Flowtype non-booleans
380
407
code : `
381
408
class Hello extends React.Component {
382
409
static propTypes = {something: PropTypes.mutuallyExclusiveTrueProps};
0 commit comments