Files
react/packages/react-dom/src/__tests__/ReactDOMComponentTree-test.js
T
Dan Abramov 21d0c11523 Convert the Source to ES Modules (#11389)
* Update transforms to handle ES modules

* Update Jest to handle ES modules

* Convert react package to ES modules

* Convert react-art package to ES Modules

* Convert react-call-return package to ES Modules

* Convert react-test-renderer package to ES Modules

* Convert react-cs-renderer package to ES Modules

* Convert react-rt-renderer package to ES Modules

* Convert react-noop-renderer package to ES Modules

* Convert react-dom/server to ES modules

* Convert react-dom/{client,events,test-utils} to ES modules

* Convert react-dom/shared to ES modules

* Convert react-native-renderer to ES modules

* Convert react-reconciler to ES modules

* Convert events to ES modules

* Convert shared to ES modules

* Remove CommonJS support from transforms

* Move ReactDOMFB entry point code into react-dom/src

This is clearer because we can use ES imports in it.

* Fix Rollup shim configuration to work with ESM

* Fix incorrect comment

* Exclude external imports without side effects

* Fix ReactDOM FB build

* Remove TODOs I don’t intend to fix yet
2017-11-02 19:50:03 +00:00

120 lines
3.5 KiB
JavaScript

/**
* Copyright (c) 2015-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';
describe('ReactDOMComponentTree', () => {
var React;
var ReactDOM;
var ReactDOMComponentTree;
var ReactDOMServer;
function renderMarkupIntoDocument(elt) {
var container = document.createElement('div');
// Force server-rendering path:
container.innerHTML = ReactDOMServer.renderToString(elt);
return ReactDOM.hydrate(elt, container);
}
function getTypeOf(instance) {
return instance.type;
}
function getTextOf(instance) {
return instance.memoizedProps;
}
beforeEach(() => {
React = require('react');
ReactDOM = require('react-dom');
// TODO: can we express this test with only public API?
ReactDOMComponentTree = require('../client/ReactDOMComponentTree').default;
ReactDOMServer = require('react-dom/server');
});
it('finds nodes for instances', () => {
// This is a little hard to test directly. But refs rely on it -- so we
// check that we can find a ref at arbitrary points in the tree, even if
// other nodes don't have a ref.
class Component extends React.Component {
render() {
var toRef = this.props.toRef;
return (
<div ref={toRef === 'div' ? 'target' : null}>
<h1 ref={toRef === 'h1' ? 'target' : null}>hello</h1>
<p ref={toRef === 'p' ? 'target' : null}>
<input ref={toRef === 'input' ? 'target' : null} />
</p>
goodbye.
</div>
);
}
}
function renderAndGetRef(toRef) {
var inst = renderMarkupIntoDocument(<Component toRef={toRef} />);
return inst.refs.target.nodeName;
}
expect(renderAndGetRef('div')).toBe('DIV');
expect(renderAndGetRef('h1')).toBe('H1');
expect(renderAndGetRef('p')).toBe('P');
expect(renderAndGetRef('input')).toBe('INPUT');
});
it('finds instances for nodes', () => {
class Component extends React.Component {
render() {
return (
<div>
<h1>hello</h1>
<p>
<input />
</p>
goodbye.
<main dangerouslySetInnerHTML={{__html: '<b><img></b>'}} />
</div>
);
}
}
function renderAndQuery(sel) {
var root = renderMarkupIntoDocument(<section><Component /></section>);
return sel ? root.querySelector(sel) : root;
}
function renderAndGetInstance(sel) {
return ReactDOMComponentTree.getInstanceFromNode(renderAndQuery(sel));
}
function renderAndGetClosest(sel) {
return ReactDOMComponentTree.getClosestInstanceFromNode(
renderAndQuery(sel),
);
}
expect(getTypeOf(renderAndGetInstance(null))).toBe('section');
expect(getTypeOf(renderAndGetInstance('div'))).toBe('div');
expect(getTypeOf(renderAndGetInstance('h1'))).toBe('h1');
expect(getTypeOf(renderAndGetInstance('p'))).toBe('p');
expect(getTypeOf(renderAndGetInstance('input'))).toBe('input');
expect(getTypeOf(renderAndGetInstance('main'))).toBe('main');
// This one's a text component!
var root = renderAndQuery(null);
var inst = ReactDOMComponentTree.getInstanceFromNode(
root.children[0].childNodes[2],
);
expect(getTextOf(inst)).toBe('goodbye.');
expect(getTypeOf(renderAndGetClosest('b'))).toBe('main');
expect(getTypeOf(renderAndGetClosest('img'))).toBe('main');
});
});