@@ -26,7 +26,6 @@ const ERROR_MESSAGE_LIFECYCLE_METHOD = 'Typo in component lifecycle method decla
2626
2727const ruleTester = new RuleTester ( ) ;
2828ruleTester . run ( 'no-typos' , rule , {
29-
3029 valid : [ {
3130 code : [
3231 'class First {' ,
@@ -38,8 +37,7 @@ ruleTester.run('no-typos', rule, {
3837 ] . join ( '\n' ) ,
3938 parser : 'babel-eslint' ,
4039 parserOptions : parserOptions
41- } ,
42- {
40+ } , {
4341 code : [
4442 'class First {}' ,
4543 'First.PropTypes = {key: "myValue"};' ,
@@ -248,6 +246,86 @@ ruleTester.run('no-typos', rule, {
248246 }
249247 function a() {}
250248 ` ,
249+ parser : 'babel-eslint' ,
250+ parserOptions : parserOptions
251+ } , {
252+ code : `class Component extends React.Component {};
253+ Component.propTypes = {
254+ a: PropTypes.number.isRequired
255+ }
256+ ` ,
257+ parser : 'babel-eslint' ,
258+ parserOptions : parserOptions
259+ } , {
260+ code : `class Component extends React.Component {};
261+ Component.propTypes = {
262+ e: PropTypes.shape({
263+ ea: PropTypes.string,
264+ })
265+ }
266+ ` ,
267+ parser : 'babel-eslint' ,
268+ parserOptions : parserOptions
269+ } , {
270+ code : `class Component extends React.Component {};
271+ Component.propTypes = {
272+ a: PropTypes.string,
273+ b: PropTypes.string.isRequired,
274+ c: PropTypes.shape({
275+ d: PropTypes.string,
276+ e: PropTypes.number.isRequired,
277+ }).isRequired
278+ }
279+ ` ,
280+ parser : 'babel-eslint' ,
281+ parserOptions : parserOptions
282+ } , {
283+ code : `class Component extends React.Component {};
284+ Component.propTypes = {
285+ a: PropTypes.oneOfType([
286+ PropTypes.string,
287+ PropTypes.number
288+ ])
289+ }
290+ ` ,
291+ parser : 'babel-eslint' ,
292+ parserOptions : parserOptions
293+ } , {
294+ code : `class Component extends React.Component {};
295+ Component.propTypes = {
296+ a: PropTypes.oneOf([
297+ 'hello',
298+ 'hi'
299+ ])
300+ }
301+ ` ,
302+ parser : 'babel-eslint' ,
303+ parserOptions : parserOptions
304+ } , {
305+ code : `class Component extends React.Component {};
306+ Component.childContextTypes = {
307+ a: PropTypes.string,
308+ b: PropTypes.string.isRequired,
309+ c: PropTypes.shape({
310+ d: PropTypes.string,
311+ e: PropTypes.number.isRequired,
312+ }).isRequired
313+ }
314+ ` ,
315+ parser : 'babel-eslint' ,
316+ parserOptions : parserOptions
317+ } , {
318+ code : `class Component extends React.Component {};
319+ Component.contextTypes = {
320+ a: PropTypes.string,
321+ b: PropTypes.string.isRequired,
322+ c: PropTypes.shape({
323+ d: PropTypes.string,
324+ e: PropTypes.number.isRequired,
325+ }).isRequired
326+ }
327+ ` ,
328+ parser : 'babel-eslint' ,
251329 parserOptions : parserOptions
252330 } ] ,
253331
@@ -552,5 +630,106 @@ ruleTester.run('no-typos', rule, {
552630 message : ERROR_MESSAGE_LIFECYCLE_METHOD ,
553631 type : 'MethodDefinition'
554632 } ]
633+ } , {
634+ code : `class Component extends React.Component {};
635+ Component.propTypes = {
636+ a: PropTypes.Number.isRequired
637+ }
638+ ` ,
639+ parser : 'babel-eslint' ,
640+ parserOptions : parserOptions ,
641+ errors : [ {
642+ message : 'Typo in declared prop type: Number'
643+ } ]
644+ } , {
645+ code : `class Component extends React.Component {};
646+ Component.propTypes = {
647+ a: PropTypes.number.isrequired
648+ }
649+ ` ,
650+ parser : 'babel-eslint' ,
651+ parserOptions : parserOptions ,
652+ errors : [ {
653+ message : 'Typo in prop type chain qualifier: isrequired'
654+ } ]
655+ } , {
656+ code : `class Component extends React.Component {};
657+ Component.propTypes = {
658+ a: PropTypes.Number
659+ }
660+ ` ,
661+ parser : 'babel-eslint' ,
662+ parserOptions : parserOptions ,
663+ errors : [ {
664+ message : 'Typo in declared prop type: Number'
665+ } ]
666+ } , {
667+ code : `class Component extends React.Component {};
668+ Component.propTypes = {
669+ a: PropTypes.shape({
670+ b: PropTypes.String,
671+ c: PropTypes.number.isRequired,
672+ })
673+ }
674+ ` ,
675+ parser : 'babel-eslint' ,
676+ parserOptions : parserOptions ,
677+ errors : [ {
678+ message : 'Typo in declared prop type: String'
679+ } ]
680+ } , {
681+ code : `class Component extends React.Component {};
682+ Component.propTypes = {
683+ a: PropTypes.oneOfType([
684+ PropTypes.bools,
685+ PropTypes.number,
686+ ])
687+ }
688+ ` ,
689+ parser : 'babel-eslint' ,
690+ parserOptions : parserOptions ,
691+ errors : [ {
692+ message : 'Typo in declared prop type: bools'
693+ } ]
694+ } , {
695+ code : `class Component extends React.Component {};
696+ Component.propTypes = {
697+ a: PropTypes.bools,
698+ b: PropTypes.Array,
699+ c: PropTypes.function,
700+ d: PropTypes.objectof,
701+ }
702+ ` ,
703+ parser : 'babel-eslint' ,
704+ parserOptions : parserOptions ,
705+ errors : [ {
706+ message : 'Typo in declared prop type: bools'
707+ } , {
708+ message : 'Typo in declared prop type: Array'
709+ } , {
710+ message : 'Typo in declared prop type: function'
711+ } , {
712+ message : 'Typo in declared prop type: objectof'
713+ } ]
714+ } , {
715+ code : `class Component extends React.Component {};
716+ Component.childContextTypes = {
717+ a: PropTypes.bools,
718+ b: PropTypes.Array,
719+ c: PropTypes.function,
720+ d: PropTypes.objectof,
721+ }
722+ ` ,
723+ parser : 'babel-eslint' ,
724+ parserOptions : parserOptions ,
725+ errors : [ {
726+ message : 'Typo in declared prop type: bools'
727+ } , {
728+ message : 'Typo in declared prop type: Array'
729+ } , {
730+ message : 'Typo in declared prop type: function'
731+ } , {
732+ message : 'Typo in declared prop type: objectof'
733+ } ]
555734 } ]
556735} ) ;
0 commit comments