Skip to content

Commit 5529f71

Browse files
committed
Improve code coverage
1 parent feebbbe commit 5529f71

File tree

2 files changed

+78
-6
lines changed

2 files changed

+78
-6
lines changed

lib/rules/prop-types.js

+1-6
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,7 @@ module.exports = Components.detect(function(context, components, utils) {
9191
(tokens[1] && tokens[1].value === 'propTypes')
9292
) {
9393
return true;
94-
} else if (
95-
node.typeAnnotation && (tokens[0].value === 'props' || (tokens[1] && tokens[1].value === 'props'))
96-
) {
97-
return true;
9894
}
99-
10095
return false;
10196
}
10297

@@ -404,7 +399,7 @@ module.exports = Components.detect(function(context, components, utils) {
404399

405400
unionTypeDefinition.children.push(type);
406401
}
407-
if (unionTypeDefinition.length === 0) {
402+
if (unionTypeDefinition.children.length === 0) {
408403
// no complex type found, simply accept everything
409404
return true;
410405
}

tests/lib/rules/prop-types.js

+77
Original file line numberDiff line numberDiff line change
@@ -958,6 +958,69 @@ ruleTester.run('prop-types', rule, {
958958
'}'
959959
].join('\n'),
960960
parser: 'babel-eslint'
961+
}, {
962+
code: [
963+
'type Person = {name: {firstname: string;}};',
964+
'type Props = {people: Person[]|Person;};',
965+
'class Hello extends React.Component {',
966+
' props: Props;',
967+
' render () {',
968+
' var names = [];',
969+
' if (Array.isArray(this.props.people)) {',
970+
' for (var i = 0; i < this.props.people.length; i++) {',
971+
' names.push(this.props.people[i].name.firstname);',
972+
' }',
973+
' } else {',
974+
' names.push(this.props.people.name.firstname);',
975+
' }',
976+
' return <div>Hello {names.join(', ')}</div>;',
977+
' }',
978+
'}'
979+
].join('\n'),
980+
parser: 'babel-eslint'
981+
}, {
982+
code: [
983+
'type Props = {ok: string | boolean;};',
984+
'class Hello extends React.Component {',
985+
' props: Props;',
986+
' render () {',
987+
' return <div>Hello {this.props.ok}</div>;',
988+
' }',
989+
'}'
990+
].join('\n'),
991+
parser: 'babel-eslint'
992+
}, {
993+
code: [
994+
'type Props = {result: {ok: string | boolean;}|{ok: number | Array}};',
995+
'class Hello extends React.Component {',
996+
' props: Props;',
997+
' render () {',
998+
' return <div>Hello {this.props.result.ok}</div>;',
999+
' }',
1000+
'}'
1001+
].join('\n'),
1002+
parser: 'babel-eslint'
1003+
}, {
1004+
code: [
1005+
'type Props = {result?: {ok?: ?string | boolean;}|{ok?: ?number | Array}};',
1006+
'class Hello extends React.Component {',
1007+
' props: Props;',
1008+
' render () {',
1009+
' return <div>Hello {this.props.result.ok}</div>;',
1010+
' }',
1011+
'}'
1012+
].join('\n'),
1013+
parser: 'babel-eslint'
1014+
}, {
1015+
code: [
1016+
'class Hello extends React.Component {',
1017+
' props = {a: 123};',
1018+
' render () {',
1019+
' return <div>Hello</div>;',
1020+
' }',
1021+
'}'
1022+
].join('\n'),
1023+
parser: 'babel-eslint'
9611024
}
9621025
],
9631026

@@ -1718,6 +1781,20 @@ ruleTester.run('prop-types', rule, {
17181781
errors: [
17191782
{message: '\'people[].name.lastname\' is missing in props validation'}
17201783
]
1784+
}, {
1785+
code: [
1786+
'type Props = {result?: {ok: string | boolean;}|{ok: number | Array}};',
1787+
'class Hello extends React.Component {',
1788+
' props: Props;',
1789+
' render () {',
1790+
' return <div>Hello {this.props.result.notok}</div>;',
1791+
' }',
1792+
'}'
1793+
].join('\n'),
1794+
parser: 'babel-eslint',
1795+
errors: [
1796+
{message: '\'result.notok\' is missing in props validation'}
1797+
]
17211798
}
17221799
]
17231800
});

0 commit comments

Comments
 (0)