@@ -167,7 +167,7 @@ ruleTester.run('prefer-read-only-props', rule, {
167167 import React from "react";
168168
169169 interface Props {
170- name: string;
170+ readonly name: string;
171171 }
172172
173173 const MyComponent: React.FC<Props> = ({ name }) => {
@@ -176,7 +176,62 @@ ruleTester.run('prefer-read-only-props', rule, {
176176
177177 export default MyComponent;
178178 ` ,
179- features : [ 'ts' ] ,
179+ features : [ 'ts' , 'no-babel-old' ] ,
180+ } ,
181+ {
182+ code : `
183+ import React from "react";
184+ type Props = {
185+ readonly firstName: string;
186+ readonly lastName: string;
187+ }
188+ const MyComponent: React.FC<Props> = ({ name }) => {
189+ return <div>{name}</div>;
190+ };
191+ export default MyComponent;
192+ ` ,
193+ features : [ 'ts' , 'no-babel-old' ] ,
194+ } ,
195+ {
196+ code : `
197+ import React from "react";
198+ type Props = {
199+ readonly name: string;
200+ }
201+ const MyComponent: React.FC<Props> = ({ name }) => {
202+ return <div>{name}</div>;
203+ };
204+ export default MyComponent;
205+ ` ,
206+ features : [ 'ts' , 'no-babel-old' ] ,
207+ } ,
208+ {
209+ code : `
210+ import React from "react";
211+ type Props = {
212+ readonly name: string[];
213+ }
214+ const MyComponent: React.FC<Props> = ({ name }) => {
215+ return <div>{name}</div>;
216+ };
217+ export default MyComponent;
218+ ` ,
219+ features : [ 'ts' , 'no-babel-old' ] ,
220+ } ,
221+ {
222+ code : `
223+ import React from "react";
224+ type Props = {
225+ readonly person: {
226+ name: string;
227+ }
228+ }
229+ const MyComponent: React.FC<Props> = ({ name }) => {
230+ return <div>{name}</div>;
231+ };
232+ export default MyComponent;
233+ ` ,
234+ features : [ 'ts' , 'no-babel-old' ] ,
180235 } ,
181236 ] ) ,
182237
@@ -383,5 +438,100 @@ ruleTester.run('prefer-read-only-props', rule, {
383438 } ,
384439 ] ,
385440 } ,
441+ {
442+ code : `
443+ type Props = {
444+ name: string;
445+ }
446+
447+ class Hello extends React.Component<Props> {
448+ render () {
449+ return <div>Hello {this.props.name}</div>;
450+ }
451+ }
452+ ` ,
453+ output : `
454+ type Props = {
455+ readonly name: string;
456+ }
457+
458+ class Hello extends React.Component<Props> {
459+ render () {
460+ return <div>Hello {this.props.name}</div>;
461+ }
462+ }
463+ ` ,
464+ features : [ 'ts' , 'no-babel-old' ] ,
465+ errors : [
466+ {
467+ messageId : 'readOnlyProp' ,
468+ data : { name : 'name' } ,
469+ } ,
470+ ] ,
471+ } ,
472+ {
473+ code : `
474+ interface Props {
475+ name: string;
476+ }
477+
478+ class Hello extends React.Component<Props> {
479+ render () {
480+ return <div>Hello {this.props.name}</div>;
481+ }
482+ }
483+ ` ,
484+ output : `
485+ interface Props {
486+ readonly name: string;
487+ }
488+
489+ class Hello extends React.Component<Props> {
490+ render () {
491+ return <div>Hello {this.props.name}</div>;
492+ }
493+ }
494+ ` ,
495+ features : [ 'ts' , 'no-babel-old' ] ,
496+ errors : [
497+ {
498+ messageId : 'readOnlyProp' ,
499+ data : { name : 'name' } ,
500+ } ,
501+ ] ,
502+ } ,
503+ {
504+ code : `
505+ type Props = {
506+ readonly firstName: string;
507+ lastName: string;
508+ }
509+
510+ class Hello extends React.Component<Props> {
511+ render () {
512+ return <div>Hello {this.props.name}</div>;
513+ }
514+ }
515+ ` ,
516+ output : `
517+ type Props = {
518+ readonly firstName: string;
519+ readonly lastName: string;
520+ }
521+
522+ class Hello extends React.Component<Props> {
523+ render () {
524+ return <div>Hello {this.props.name}</div>;
525+ }
526+ }
527+ ` ,
528+ features : [ 'ts' , 'no-babel-old' ] ,
529+ errors : [
530+ {
531+ messageId : 'readOnlyProp' ,
532+ data : { name : 'lastName' } ,
533+ } ,
534+ ] ,
535+ } ,
386536 ] ) ,
387537} ) ;
0 commit comments