/** * 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'; const ReactDOMServerIntegrationUtils = require('./utils/ReactDOMServerIntegrationTestUtils'); let React; let ReactDOM; let ReactDOMServer; function initModules() { // Reset warning cache. jest.resetModuleRegistry(); React = require('react'); ReactDOM = require('react-dom'); ReactDOMServer = require('react-dom/server'); // Make them available to the helpers. return { ReactDOM, ReactDOMServer, }; } const { resetModules, itRenders, itClientRenders, itThrowsWhenRendering, renderIntoDom, serverRender, } = ReactDOMServerIntegrationUtils(initModules); describe('ReactDOMServerIntegration', () => { beforeEach(() => { resetModules(); }); describe('form controls', function() { describe('inputs', function() { itRenders('an input with a value and an onChange', async render => { const e = await render( {}} />); expect(e.value).toBe('foo'); }); itRenders('an input with a value and readOnly', async render => { const e = await render(); expect(e.value).toBe('foo'); }); itRenders( 'an input with a value and no onChange/readOnly', async render => { // this configuration should raise a dev warning that value without // onChange or readOnly is a mistake. const e = await render(, 1); expect(e.value).toBe('foo'); expect(e.getAttribute('value')).toBe('foo'); }, ); itRenders('an input with a defaultValue', async render => { const e = await render(); expect(e.value).toBe('foo'); expect(e.getAttribute('value')).toBe('foo'); expect(e.getAttribute('defaultValue')).toBe(null); }); itRenders('an input value overriding defaultValue', async render => { const e = await render( , 1, ); expect(e.value).toBe('foo'); expect(e.getAttribute('value')).toBe('foo'); expect(e.getAttribute('defaultValue')).toBe(null); }); itRenders( 'an input value overriding defaultValue no matter the prop order', async render => { const e = await render( , 1, ); expect(e.value).toBe('foo'); expect(e.getAttribute('value')).toBe('foo'); expect(e.getAttribute('defaultValue')).toBe(null); }, ); }); describe('checkboxes', function() { itRenders('a checkbox that is checked with an onChange', async render => { const e = await render( {}} />, ); expect(e.checked).toBe(true); }); itRenders('a checkbox that is checked with readOnly', async render => { const e = await render( , ); expect(e.checked).toBe(true); }); itRenders( 'a checkbox that is checked and no onChange/readOnly', async render => { // this configuration should raise a dev warning that checked without // onChange or readOnly is a mistake. const e = await render(, 1); expect(e.checked).toBe(true); }, ); itRenders('a checkbox with defaultChecked', async render => { const e = await render(); expect(e.checked).toBe(true); expect(e.getAttribute('defaultChecked')).toBe(null); }); itRenders( 'a checkbox checked overriding defaultChecked', async render => { const e = await render( , 1, ); expect(e.checked).toBe(true); expect(e.getAttribute('defaultChecked')).toBe(null); }, ); itRenders( 'a checkbox checked overriding defaultChecked no matter the prop order', async render => { const e = await render( , 1, ); expect(e.checked).toBe(true); expect(e.getAttribute('defaultChecked')).toBe(null); }, ); }); describe('textareas', function() { // textareas // --------- itRenders('a textarea with a value and an onChange', async render => { const e = await render(