@@ -662,6 +662,43 @@ describe('ReactDOMInput', function() {
662
662
) ;
663
663
} ) ;
664
664
665
+ it ( 'should not warn if radio value changes but never becomes controlled' , function ( ) {
666
+ var container = document . createElement ( 'div' ) ;
667
+ ReactDOM . render ( < input type = "radio" value = "value" /> , container ) ;
668
+ ReactDOM . render ( < input type = "radio" /> , container ) ;
669
+ ReactDOM . render ( < input type = "radio" value = "value" defaultChecked = { true } /> , container ) ;
670
+ ReactDOM . render ( < input type = "radio" value = "value" onChange = { ( ) => null } /> , container ) ;
671
+ ReactDOM . render ( < input type = "radio" /> , container ) ;
672
+ expect ( console . error . calls . count ( ) ) . toBe ( 0 ) ;
673
+ } ) ;
674
+
675
+ it ( 'should not warn if radio value changes but never becomes uncontrolled' , function ( ) {
676
+ var container = document . createElement ( 'div' ) ;
677
+ ReactDOM . render ( < input type = "radio" checked = { false } onChange = { ( ) => null } /> , container ) ;
678
+ ReactDOM . render (
679
+ < input
680
+ type = "radio"
681
+ value = "value"
682
+ defaultChecked = { true }
683
+ checked = { false }
684
+ onChange = { ( ) => null }
685
+ /> , container ) ;
686
+ console . log ( console . error . calls . argsFor ( 0 ) [ 0 ] ) ;
687
+ expect ( console . error . calls . count ( ) ) . toBe ( 0 ) ;
688
+ } ) ;
689
+
690
+ it ( 'should warn if radio checked false changes to become uncontrolled' , function ( ) {
691
+ var container = document . createElement ( 'div' ) ;
692
+ ReactDOM . render ( < input type = "radio" value = "value" checked = { false } onChange = { ( ) => null } /> , container ) ;
693
+ ReactDOM . render ( < input type = "radio" value = "value" /> , container ) ;
694
+ expect ( console . error . calls . argsFor ( 0 ) [ 0 ] ) . toContain (
695
+ 'A component is changing a controlled input of type radio to be uncontrolled. ' +
696
+ 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' +
697
+ 'Decide between using a controlled or uncontrolled input ' +
698
+ 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components'
699
+ ) ;
700
+ } ) ;
701
+
665
702
it ( 'sets type before value always' , function ( ) {
666
703
if ( ! ReactDOMFeatureFlags . useCreateElement ) {
667
704
return ;
0 commit comments