@@ -36,6 +36,7 @@ describe('ReactDOMInput', function() {
3636 stub = ReactTestUtils . renderIntoDocument ( stub ) ;
3737 var node = ReactDOM . findDOMNode ( stub ) ;
3838
39+ expect ( node . getAttribute ( 'value' ) ) . toBe ( '0' ) ;
3940 expect ( node . value ) . toBe ( '0' ) ;
4041 } ) ;
4142
@@ -55,6 +56,68 @@ describe('ReactDOMInput', function() {
5556 expect ( node . value ) . toBe ( 'false' ) ;
5657 } ) ;
5758
59+ it ( 'should update `defaultValue` for uncontrolled input' , function ( ) {
60+ var container = document . createElement ( 'div' ) ;
61+
62+ var el = ReactDOM . render ( < input type = "text" defaultValue = "0" /> , container ) ;
63+ var node = ReactDOM . findDOMNode ( el ) ;
64+
65+ expect ( node . value ) . toBe ( '0' ) ;
66+
67+ ReactDOM . render ( < input type = "text" defaultValue = "1" /> , container ) ;
68+
69+ expect ( node . value ) . toBe ( '1' ) ;
70+ } ) ;
71+
72+ it ( 'should take `defaultValue` for a controlled input' , function ( ) {
73+ var container = document . createElement ( 'div' ) ;
74+
75+ var el = ReactDOM . render ( < input type = "text" value = { null } defaultValue = "0" /> , container ) ;
76+ var node = ReactDOM . findDOMNode ( el ) ;
77+
78+ expect ( node . value ) . toBe ( '0' ) ;
79+
80+ ReactDOM . render ( < input type = "text" value = { null } defaultValue = "1" /> , container ) ;
81+
82+ expect ( node . value ) . toBe ( '1' ) ;
83+
84+ ReactDOM . render ( < input type = "text" value = { 3 } defaultValue = "2" /> , container ) ;
85+
86+ expect ( node . value ) . toBe ( '3' ) ;
87+
88+ ReactDOM . render ( < input type = "text" value = { 5 } defaultValue = "4" /> , container ) ;
89+
90+ expect ( node . value ) . toBe ( '5' ) ;
91+ expect ( node . getAttribute ( 'value' ) ) . toBe ( '4' ) ;
92+ expect ( node . defaultValue ) . toBe ( '4' ) ;
93+ } ) ;
94+
95+ it ( 'should update `value` when changing to controlled input' , function ( ) {
96+ var container = document . createElement ( 'div' ) ;
97+
98+ var el = ReactDOM . render ( < input type = "text" defaultValue = "0" /> , container ) ;
99+ var node = ReactDOM . findDOMNode ( el ) ;
100+
101+ expect ( node . value ) . toBe ( '0' ) ;
102+
103+ ReactDOM . render ( < input type = "text" value = "1" defaultValue = "0" /> , container ) ;
104+
105+ expect ( node . value ) . toBe ( '1' ) ;
106+ } ) ;
107+
108+ it ( 'should clear `value` when changing to uncontrolled input' , function ( ) {
109+ var container = document . createElement ( 'div' ) ;
110+
111+ var el = ReactDOM . render ( < input type = "text" value = "0" readOnly = "true" /> , container ) ;
112+ var node = ReactDOM . findDOMNode ( el ) ;
113+
114+ expect ( node . value ) . toBe ( '0' ) ;
115+
116+ ReactDOM . render ( < input type = "text" defaultValue = "1" /> , container ) ;
117+
118+ expect ( node . value ) . toBe ( '' ) ;
119+ } ) ;
120+
58121 it ( 'should display "foobar" for `defaultValue` of `objToString`' , function ( ) {
59122 var objToString = {
60123 toString : function ( ) {
0 commit comments