From d04d03e4701192abf95c58ff50683b37db6c6eae Mon Sep 17 00:00:00 2001 From: Rauno Freiberg Date: Tue, 14 Aug 2018 17:16:48 +0300 Subject: [PATCH] Fix passing symbols and functions to textarea (#13362) * refactor: move getSafeValue to separate file * fix(?): ReactDOMFiberTextarea sanitization for symbols and functions * tests: add TODOs for warnings * fix: restore accidentally removed test * fix: remove redundant logic for initialValue * refactor: integrate SafeValue typings into textarea * fix: restore stringified newValue for equality check * fix: remove getSafeValue from hostProps * refactor: SafeValue -> ToStringValue * refactor: update TODO comment in test file * refactor: no need to convert children to ToStringValue --- .../src/__tests__/ReactDOMTextarea-test.js | 124 ++++++++++++++++++ .../src/client/ReactDOMFiberTextarea.js | 17 +-- 2 files changed, 133 insertions(+), 8 deletions(-) diff --git a/packages/react-dom/src/__tests__/ReactDOMTextarea-test.js b/packages/react-dom/src/__tests__/ReactDOMTextarea-test.js index b2872d92b5..47c8bf51a0 100644 --- a/packages/react-dom/src/__tests__/ReactDOMTextarea-test.js +++ b/packages/react-dom/src/__tests__/ReactDOMTextarea-test.js @@ -20,6 +20,8 @@ describe('ReactDOMTextarea', () => { let renderTextarea; beforeEach(() => { + jest.resetModules(); + React = require('react'); ReactDOM = require('react-dom'); ReactDOMServer = require('react-dom/server'); @@ -423,4 +425,126 @@ describe('ReactDOMTextarea', () => { ReactDOM.unmountComponentAtNode(container); ReactDOM.render(, + container, + ), + ).toWarnDev('Use the `defaultValue` or `value` props'); + const node = container.firstChild; + + expect(node.value).toBe(''); + }); + + it('treats updated Symbol value as an empty string', () => { + const container = document.createElement('div'); + ReactDOM.render(, + container, + ), + ).toWarnDev('Use the `defaultValue` or `value` props'); + const node = container.firstChild; + + expect(node.value).toBe(''); + }); + + it('treats updated function value as an empty string', () => { + const container = document.createElement('div'); + ReactDOM.render(