Skip to content

Commit 9c6819a

Browse files
author
Sebastian Silbermann
committed
Duplicate tests that use legacy features
1 parent cc5b054 commit 9c6819a

File tree

1 file changed

+101
-0
lines changed

1 file changed

+101
-0
lines changed
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
/**
2+
* Copyright (c) Meta Platforms, Inc. and affiliates.
3+
*
4+
* This source code is licensed under the MIT license found in the
5+
* LICENSE file in the root directory of this source tree.
6+
*
7+
* @emails react-core
8+
*/
9+
10+
'use strict';
11+
12+
let React = require('react');
13+
let ReactDOM = require('react-dom');
14+
15+
describe('root level refs with legacy APIs', () => {
16+
beforeEach(() => {
17+
jest.resetModules();
18+
React = require('react');
19+
ReactDOM = require('react-dom');
20+
});
21+
22+
it('attaches and detaches root refs', () => {
23+
let inst = null;
24+
25+
// host node
26+
let ref = jest.fn(value => (inst = value));
27+
const container = document.createElement('div');
28+
let result = ReactDOM.render(<div ref={ref} />, container);
29+
expect(ref).toHaveBeenCalledTimes(1);
30+
expect(ref.mock.calls[0][0]).toBeInstanceOf(HTMLDivElement);
31+
expect(result).toBe(ref.mock.calls[0][0]);
32+
ReactDOM.unmountComponentAtNode(container);
33+
expect(ref).toHaveBeenCalledTimes(2);
34+
expect(ref.mock.calls[1][0]).toBe(null);
35+
36+
// composite
37+
class Comp extends React.Component {
38+
method() {
39+
return true;
40+
}
41+
render() {
42+
return <div>Comp</div>;
43+
}
44+
}
45+
46+
inst = null;
47+
ref = jest.fn(value => (inst = value));
48+
result = ReactDOM.render(<Comp ref={ref} />, container);
49+
50+
expect(ref).toHaveBeenCalledTimes(1);
51+
expect(inst).toBeInstanceOf(Comp);
52+
expect(result).toBe(inst);
53+
54+
// ensure we have the correct instance
55+
expect(result.method()).toBe(true);
56+
expect(inst.method()).toBe(true);
57+
58+
ReactDOM.unmountComponentAtNode(container);
59+
expect(ref).toHaveBeenCalledTimes(2);
60+
expect(ref.mock.calls[1][0]).toBe(null);
61+
62+
// fragment
63+
inst = null;
64+
ref = jest.fn(value => (inst = value));
65+
let divInst = null;
66+
const ref2 = jest.fn(value => (divInst = value));
67+
result = ReactDOM.render(
68+
[
69+
<Comp ref={ref} key="a" />,
70+
5,
71+
<div ref={ref2} key="b">
72+
Hello
73+
</div>,
74+
],
75+
container,
76+
);
77+
78+
// first call should be `Comp`
79+
expect(ref).toHaveBeenCalledTimes(1);
80+
expect(ref.mock.calls[0][0]).toBeInstanceOf(Comp);
81+
expect(result).toBe(ref.mock.calls[0][0]);
82+
83+
expect(ref2).toHaveBeenCalledTimes(1);
84+
expect(divInst).toBeInstanceOf(HTMLDivElement);
85+
expect(result).not.toBe(divInst);
86+
87+
ReactDOM.unmountComponentAtNode(container);
88+
expect(ref).toHaveBeenCalledTimes(2);
89+
expect(ref.mock.calls[1][0]).toBe(null);
90+
expect(ref2).toHaveBeenCalledTimes(2);
91+
expect(ref2.mock.calls[1][0]).toBe(null);
92+
93+
// null
94+
result = ReactDOM.render(null, container);
95+
expect(result).toBe(null);
96+
97+
// primitives
98+
result = ReactDOM.render(5, container);
99+
expect(result).toBeInstanceOf(Text);
100+
});
101+
});

0 commit comments

Comments
 (0)