-
-
Notifications
You must be signed in to change notification settings - Fork 99
Expand file tree
/
Copy pathindex.test.jsx
More file actions
122 lines (111 loc) · 3.28 KB
/
index.test.jsx
File metadata and controls
122 lines (111 loc) · 3.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import render from '../../src/index.js';
import { createElement as h, Component, createPortal } from 'preact/compat';
import { expect, describe, it } from 'vitest';
describe('compat', () => {
describe('createPortal', () => {
it('should render portal children inline', () => {
const container = { nodeType: 1 };
const rendered = render(
<div>
<span>before</span>
{createPortal(<div class="portal-content">portaled</div>, container)}
<span>after</span>
</div>
);
expect(rendered).to.equal(
'<div><span>before</span><span>after</span></div>'
);
});
it('should render nested portals', () => {
const container1 = { nodeType: 1 };
const container2 = { nodeType: 1 };
const rendered = render(
<div>
{createPortal(
<div class="outer">
{createPortal(<div class="inner">nested</div>, container2)}
</div>,
container1
)}
</div>
);
expect(rendered).to.equal(
'<div></div>'
);
});
it('should render portal with multiple children', () => {
const container = { nodeType: 1 };
const rendered = render(
<div>
{createPortal(
[<span key="a">first</span>, <span key="b">second</span>],
container
)}
</div>
);
expect(rendered).to.equal('<div></div>');
});
it('should render portal with text content', () => {
const container = { nodeType: 1 };
const rendered = render(
<div>{createPortal('just text', container)}</div>
);
expect(rendered).to.equal('<div></div>');
});
it('should render portal with component children', () => {
const container = { nodeType: 1 };
function Inner() {
return <em>component inside portal</em>;
}
const rendered = render(<div>{createPortal(<Inner />, container)}</div>);
expect(rendered).to.equal('<div></div>');
});
});
it('should not duplicate class attribute when className is empty', async () => {
let rendered = render(h('div', { className: '' }));
let expected = `<div></div>`;
expect(rendered).to.equal(expected);
});
it('should apply defaultProps to class components', () => {
class Test extends Component {
render(props) {
return <div {...props} />;
}
}
Test.defaultProps = {
foo: 'default foo',
bar: 'default bar'
};
expect(render(<Test />), 'defaults').to.equal(
'<div foo="default foo" bar="default bar"></div>'
);
expect(render(<Test bar="b" />), 'partial').to.equal(
'<div bar="b" foo="default foo"></div>'
);
expect(render(<Test foo="a" bar="b" />), 'overridden').to.equal(
'<div foo="a" bar="b"></div>'
);
expect(render(<Test foo={undefined} bar="b" />), 'overridden').to.equal(
'<div foo="default foo" bar="b"></div>'
);
});
it('should apply defaultProps to functional components', () => {
const Test = (props) => <div {...props} />;
Test.defaultProps = {
foo: 'default foo',
bar: 'default bar'
};
expect(render(<Test />), 'defaults').to.equal(
'<div foo="default foo" bar="default bar"></div>'
);
expect(render(<Test bar="b" />), 'partial').to.equal(
'<div bar="b" foo="default foo"></div>'
);
expect(render(<Test foo="a" bar="b" />), 'overridden').to.equal(
'<div foo="a" bar="b"></div>'
);
expect(render(<Test foo={undefined} bar="b" />), 'overridden').to.equal(
'<div foo="default foo" bar="b"></div>'
);
});
});