@@ -12,6 +12,26 @@ describe('checkPropTypes', () => {
1212 expect ( checkPropTypes ( '123' , 'age' , PropTypes . number , 'TestComponent' ) ) . toBe ( false ) ;
1313 } ) ;
1414
15+ it ( 'should validate correctly with valid object prop type' , ( ) => {
16+ expect ( checkPropTypes ( { a : 123 } , 'age' , PropTypes . object , 'TestComponent' ) ) . toBe ( true ) ;
17+ expect ( checkPropTypes ( { a : '123' } , 'age' , PropTypes . object , 'TestComponent' ) ) . toBe ( true ) ;
18+ } ) ;
19+
20+ it ( 'should validate correctly with valid object string prop type' , ( ) => {
21+ expect ( checkPropTypes ( { a : 123 } , 'age' , 'object' , 'TestComponent' ) ) . toBe ( true ) ;
22+ expect ( checkPropTypes ( { a : '123' } , 'age' , 'object' , 'TestComponent' ) ) . toBe ( true ) ;
23+ } ) ;
24+
25+ it ( 'should validate correctly with valid isRequired prop type' , ( ) => {
26+ const rule = {
27+ type : 'string' ,
28+ isRequired : true ,
29+ } ;
30+ expect ( transformPropTypesRuleToString ( rule ) ) . toBe ( 'PropTypes.string.isRequired' ) ;
31+ expect ( checkPropTypes ( 'News' , 'type' , rule , 'TestComponent' ) ) . toBe ( true ) ;
32+ expect ( checkPropTypes ( undefined , 'type' , rule , 'TestComponent' ) ) . toBe ( false ) ;
33+ } ) ;
34+
1535 it ( 'should handle custom rule functions correctly' , ( ) => {
1636 const customRule = ( props , propName ) => {
1737 if ( props [ propName ] !== 123 ) {
@@ -28,6 +48,11 @@ describe('checkPropTypes', () => {
2848 expect ( result ) . toBe ( true ) ;
2949 } ) ;
3050
51+ it ( 'should interpret and validate a rule given as a string' , ( ) => {
52+ expect ( checkPropTypes ( 123 , 'age' , 'number' , 'TestComponent' ) ) . toBe ( true ) ;
53+ expect ( checkPropTypes ( '123' , 'age' , 'string' , 'TestComponent' ) ) . toBe ( true ) ;
54+ } ) ;
55+
3156 it ( 'should log a warning for invalid rule type' , ( ) => {
3257 const result = checkPropTypes ( 123 , 'age' , 123 , 'TestComponent' ) ;
3358 expect ( result ) . toBe ( true ) ;
@@ -60,6 +85,46 @@ describe('checkPropTypes', () => {
6085 expect ( checkPropTypes ( { } , 'type' , rule , 'TestComponent' ) ) . toBe ( false ) ;
6186 } ) ;
6287
88+ it ( 'should validate correctly with valid oneOfType prop type' , ( ) => {
89+ const rule = {
90+ type : 'oneOfType' ,
91+ value : [
92+ 'bool' ,
93+ {
94+ type : 'shape' ,
95+ value : [
96+ {
97+ name : 'type' ,
98+ propType : {
99+ type : 'oneOf' ,
100+ value : [ 'JSExpression' ] ,
101+ }
102+ } ,
103+ {
104+ name : 'value' ,
105+ propType : 'string' ,
106+ } ,
107+ ] ,
108+ } ,
109+ ] ,
110+ } ;
111+ expect ( transformPropTypesRuleToString ( rule ) ) . toBe ( 'PropTypes.oneOfType([PropTypes.bool, PropTypes.shape({type: PropTypes.oneOf(["JSExpression"]),value: PropTypes.string})])' ) ;
112+ expect ( checkPropTypes ( true , 'type' , rule , 'TestComponent' ) ) . toBe ( true ) ;
113+ expect ( checkPropTypes ( { type : 'JSExpression' , value : '1 + 1 === 2' } , 'type' , rule , 'TestComponent' ) ) . toBe ( true ) ;
114+ expect ( checkPropTypes ( { type : 'JSExpression' } , 'type' , rule , 'TestComponent' ) ) . toBe ( true ) ;
115+ expect ( checkPropTypes ( { type : 'JSExpression' , value : 123 } , 'type' , rule , 'TestComponent' ) ) . toBe ( false ) ;
116+ } ) ;
117+
118+ it ( 'should log a warning for invalid type' , ( ) => {
119+ const rule = {
120+ type : 'inval' ,
121+ value : [ 'News' , 'Photos' ] ,
122+ }
123+ expect ( transformPropTypesRuleToString ( rule ) ) . toBe ( 'PropTypes.any' ) ;
124+ expect ( checkPropTypes ( 'News' , 'type' , rule , 'TestComponent' ) ) . toBe ( true ) ;
125+ expect ( checkPropTypes ( 'Others' , 'type' , rule , 'TestComponent' ) ) . toBe ( true ) ;
126+ } ) ;
127+
63128 // arrayOf
64129 it ( 'should validate correctly with valid arrayOf prop type' , ( ) => {
65130 const rule = {
0 commit comments