Skip to content

Commit cfb4d6b

Browse files
committed
[Tests] add test cases for propWrapperFunctions
Closes #1927.
1 parent 35e323f commit cfb4d6b

File tree

2 files changed

+114
-0
lines changed

2 files changed

+114
-0
lines changed

tests/lib/rules/prop-types.js

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4601,6 +4601,73 @@ ruleTester.run('prop-types', rule, {
46014601
},
46024602
],
46034603
},
4604+
{
4605+
features: ['no-default', 'no-ts', 'no-babel'], // TODO: remove this entire line, and fix the failures
4606+
code: `
4607+
class Test extends Foo.Component {
4608+
render() {
4609+
return (
4610+
<div>{this.props.firstname} {this.props.lastname}</div>
4611+
);
4612+
}
4613+
};
4614+
const propTypes = forbidExtraProps({
4615+
firstname: PropTypes.string
4616+
});
4617+
Test.propTypes = propTypes;
4618+
`,
4619+
settings: {
4620+
propWrapperFunctions: ['forbidExtraProps'],
4621+
},
4622+
errors: [
4623+
{
4624+
messageId: 'missingPropType',
4625+
data: { name: 'lastname' },
4626+
line: 5,
4627+
},
4628+
],
4629+
},
4630+
{
4631+
code: `
4632+
class Test extends Foo.Component {
4633+
render() {
4634+
return (
4635+
<div>{this.props.firstname} {this.props.lastname}</div>
4636+
);
4637+
}
4638+
}
4639+
Test.propTypes = {
4640+
firstname: PropTypes.string
4641+
};
4642+
`,
4643+
settings,
4644+
errors: [
4645+
{
4646+
messageId: 'missingPropType',
4647+
data: { name: 'lastname' },
4648+
line: 5,
4649+
},
4650+
],
4651+
},
4652+
{
4653+
code: `
4654+
type MyComponentProps = {
4655+
a: number,
4656+
};
4657+
function MyComponent({ a, b }: MyComponentProps) {
4658+
return <div />;
4659+
}
4660+
`,
4661+
features: ['types'],
4662+
errors: [
4663+
{
4664+
messageId: 'missingPropType',
4665+
data: { name: 'b' },
4666+
line: 5,
4667+
column: 35,
4668+
},
4669+
],
4670+
},
46044671
{
46054672
code: `
46064673
class Hello extends React.Component {

tests/lib/rules/require-default-props.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2631,5 +2631,52 @@ ruleTester.run('require-default-props', rule, {
26312631
},
26322632
],
26332633
},
2634+
{
2635+
code: `
2636+
function MyStatelessComponent({ foo, bar }) {
2637+
return <div>{foo}{bar}</div>;
2638+
}
2639+
MyStatelessComponent.propTypes = {
2640+
foo: PropTypes.string,
2641+
bar: PropTypes.string.isRequired
2642+
};
2643+
MyStatelessComponent.propTypes.baz = React.propTypes.string;
2644+
`,
2645+
errors: [
2646+
{
2647+
messageId: 'shouldHaveDefault',
2648+
data: { name: 'foo' },
2649+
line: 6,
2650+
},
2651+
{
2652+
messageId: 'shouldHaveDefault',
2653+
data: { name: 'baz' },
2654+
line: 9,
2655+
},
2656+
],
2657+
},
2658+
2659+
{
2660+
code: `
2661+
function MyStatelessComponent({ foo, bar }) {
2662+
return <div>{foo}{bar}</div>;
2663+
}
2664+
const propTypes = forbidExtraProps({
2665+
foo: PropTypes.string,
2666+
bar: PropTypes.string.isRequired
2667+
});
2668+
MyStatelessComponent.propTypes = propTypes;
2669+
`,
2670+
errors: [
2671+
{
2672+
messageId: 'shouldHaveDefault',
2673+
data: { name: 'foo' },
2674+
line: 6,
2675+
},
2676+
],
2677+
settings: {
2678+
propWrapperFunctions: ['forbidExtraProps'],
2679+
},
2680+
},
26342681
]),
26352682
});

0 commit comments

Comments
 (0)