Skip to content

Commit ecba3d6

Browse files
committed
cherry-pick regression test from master
1 parent 1a320eb commit ecba3d6

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

src/renderers/dom/client/__tests__/inputValueTracking-test.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
'use strict';
1212

1313
var React = require('React');
14+
var ReactDOM = require('ReactDOM');
1415
var ReactTestUtils = require('ReactTestUtils');
1516
var inputValueTracking = require('inputValueTracking');
1617

@@ -151,4 +152,31 @@ describe('inputValueTracking', function() {
151152

152153
expect(input.hasOwnProperty('value')).toBe(false);
153154
});
155+
156+
157+
it('does not crash for nodes with custom value property', () => {
158+
// https://github.com/facebook/react/issues/10196
159+
try {
160+
var originalCreateElement = document.createElement;
161+
document.createElement = function() {
162+
var node = originalCreateElement.apply(this, arguments);
163+
Object.defineProperty(node, 'value', {
164+
get() {},
165+
set() {},
166+
});
167+
return node;
168+
};
169+
var div = document.createElement('div');
170+
// Mount
171+
var node = ReactDOM.render(<input type="text" />, div);
172+
// Update
173+
ReactDOM.render(<input type="text" />, div);
174+
// Change
175+
ReactTestUtils.SimulateNative.change(node);
176+
// Unmount
177+
ReactDOM.unmountComponentAtNode(div);
178+
} finally {
179+
document.createElement = originalCreateElement;
180+
}
181+
});
154182
});

0 commit comments

Comments
 (0)