@@ -159,6 +159,85 @@ describe('compat render', () => {
159159		expect ( scratch . firstElementChild . value ) . to . equal ( '0' ) ; 
160160	} ) ; 
161161
162+ 	it ( 'should use defaultProps when prop is undefined' ,  ( )  =>  { 
163+ 		function  TestComponent ( {  message } )  { 
164+ 			return  < div > { message } </ div > ; 
165+ 		} 
166+ 		TestComponent . defaultProps  =  { 
167+ 			message : 'default message' 
168+ 		} ; 
169+ 
170+ 		render ( < TestComponent  message = { undefined }  /> ,  scratch ) ; 
171+ 		expect ( scratch . textContent ) . to . equal ( 'default message' ) ; 
172+ 	} ) ; 
173+ 
174+ 	it ( 'should not use defaultProps when prop is null' ,  ( )  =>  { 
175+ 		function  TestComponent ( {  message } )  { 
176+ 			return  < div > { message  ===  null  ? 'null value'  : message } </ div > ; 
177+ 		} 
178+ 		TestComponent . defaultProps  =  { 
179+ 			message : 'default message' 
180+ 		} ; 
181+ 
182+ 		render ( < TestComponent  message = { null }  /> ,  scratch ) ; 
183+ 		expect ( scratch . textContent ) . to . equal ( 'null value' ) ; 
184+ 	} ) ; 
185+ 
186+ 	it ( 'should not use defaultProps when prop has a value' ,  ( )  =>  { 
187+ 		function  TestComponent ( {  message } )  { 
188+ 			return  < div > { message } </ div > ; 
189+ 		} 
190+ 		TestComponent . defaultProps  =  { 
191+ 			message : 'default message' 
192+ 		} ; 
193+ 
194+ 		render ( < TestComponent  message = "actual message"  /> ,  scratch ) ; 
195+ 		expect ( scratch . textContent ) . to . equal ( 'actual message' ) ; 
196+ 	} ) ; 
197+ 
198+ 	it ( 'should use defaultProps when prop is missing entirely' ,  ( )  =>  { 
199+ 		function  TestComponent ( {  message } )  { 
200+ 			return  < div > { message } </ div > ; 
201+ 		} 
202+ 		TestComponent . defaultProps  =  { 
203+ 			message : 'default message' 
204+ 		} ; 
205+ 
206+ 		render ( < TestComponent  /> ,  scratch ) ; 
207+ 		expect ( scratch . textContent ) . to . equal ( 'default message' ) ; 
208+ 	} ) ; 
209+ 
210+ 	it ( 'should handle multiple defaultProps with mixed prop states' ,  ( )  =>  { 
211+ 		function  TestComponent ( {  title,  message,  count } )  { 
212+ 			return  ( 
213+ 				< div > 
214+ 					< h1 > { title } </ h1 > 
215+ 					< p > { message } </ p > 
216+ 					< span > { count } </ span > 
217+ 				</ div > 
218+ 			) ; 
219+ 		} 
220+ 		TestComponent . defaultProps  =  { 
221+ 			title : 'Default Title' , 
222+ 			message : 'Default Message' , 
223+ 			count : 42 
224+ 		} ; 
225+ 
226+ 		// title is undefined (should use default), message is null (should not use default), count has value (should not use default) 
227+ 		render ( 
228+ 			< TestComponent  title = { undefined }  message = { null }  count = { 0 }  /> , 
229+ 			scratch 
230+ 		) ; 
231+ 
232+ 		const  title  =  scratch . querySelector ( 'h1' ) ; 
233+ 		const  message  =  scratch . querySelector ( 'p' ) ; 
234+ 		const  count  =  scratch . querySelector ( 'span' ) ; 
235+ 
236+ 		expect ( title . textContent ) . to . equal ( 'Default Title' ) ; 
237+ 		expect ( message . textContent ) . to . equal ( '' ) ;  // null renders as empty 
238+ 		expect ( count . textContent ) . to . equal ( '0' ) ;  // 0 is a valid value 
239+ 	} ) ; 
240+ 
162241	it ( 'should call onChange and onInput when input event is dispatched' ,  ( )  =>  { 
163242		const  onChange  =  sinon . spy ( ) ; 
164243		const  onInput  =  sinon . spy ( ) ; 
0 commit comments