/** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @emails react-core */ 'use strict'; var emptyFunction = require('fbjs/lib/emptyFunction'); describe('ReactDOMTextarea', () => { var React; var ReactDOM; var ReactDOMServer; var ReactTestUtils; var renderTextarea; beforeEach(() => { React = require('react'); ReactDOM = require('react-dom'); ReactDOMServer = require('react-dom/server'); ReactTestUtils = require('react-dom/test-utils'); renderTextarea = function(component, container) { if (!container) { container = document.createElement('div'); } var node = ReactDOM.render(component, container); // Fixing jsdom's quirky behavior -- in reality, the parser should strip // off the leading newline but we need to do it by hand here. node.defaultValue = node.innerHTML.replace(/^\n/, ''); return node; }; }); it('should allow setting `defaultValue`', () => { var container = document.createElement('div'); var node = renderTextarea(, container); expect(node.value).toBe('0'); }); it('should not incur unnecessary DOM mutations', () => { var container = document.createElement('div'); ReactDOM.render(; var node = renderTextarea(stub, container); expectDev(console.error.calls.count()).toBe(1); expect(node.value).toBe('giraffe'); // Changing children should do nothing, it functions like `defaultValue`. stub = ReactDOM.render(, container); expect(node.value).toEqual('giraffe'); }); it('should keep value when switching to uncontrolled element if not changed', () => { var container = document.createElement('div'); var node = renderTextarea( ); expectDev(console.error.calls.count()).toBe(1); expect(node.value).toBe('17'); }); it('should allow booleans as children', () => { spyOn(console, 'error'); var node = renderTextarea(); expectDev(console.error.calls.count()).toBe(1); expect(node.value).toBe('false'); }); it('should allow objects as children', () => { spyOn(console, 'error'); var obj = { toString: function() { return 'sharkswithlasers'; }, }; var node = renderTextarea(); expectDev(console.error.calls.count()).toBe(1); expect(node.value).toBe('sharkswithlasers'); }); it('should throw with multiple or invalid children', () => { spyOn(console, 'error'); expect(function() { ReactTestUtils.renderIntoDocument( , ); }).toThrow(); expectDev(console.error.calls.count()).toBe(1); var node; expect(function() { node = renderTextarea(); }).not.toThrow(); expect(node.value).toBe('[object Object]'); expectDev(console.error.calls.count()).toBe(2); }); it('should unmount', () => { var container = document.createElement('div'); renderTextarea(