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
|
import { Component, createElement, createRef } from 'preact';
import { jsx, jsxs, jsxDEV, Fragment } from 'preact/jsx-runtime';
import { setupScratch, teardown } from '../../../test/_util/helpers';
describe('Babel jsx/jsxDEV', () => {
let scratch;
beforeEach(() => {
scratch = setupScratch();
});
afterEach(() => {
teardown(scratch);
});
it('should have needed exports', () => {
expect(typeof jsx).to.equal('function');
expect(typeof jsxs).to.equal('function');
expect(typeof jsxDEV).to.equal('function');
expect(typeof Fragment).to.equal('function');
});
it('should keep ref in props', () => {
const ref = () => null;
const vnode = jsx('div', { ref });
expect(vnode.ref).to.equal(ref);
});
it('should add keys', () => {
const vnode = jsx('div', null, 'foo');
expect(vnode.key).to.equal('foo');
});
it('should apply defaultProps', () => {
class Foo extends Component {
render() {
return <div />;
}
}
Foo.defaultProps = {
foo: 'bar'
};
const vnode = jsx(Foo, {}, null);
expect(vnode.props).to.deep.equal({
foo: 'bar'
});
});
it('should keep props over defaultProps', () => {
class Foo extends Component {
render() {
return <div />;
}
}
Foo.defaultProps = {
foo: 'bar'
};
const vnode = jsx(Foo, { foo: 'baz' }, null);
expect(vnode.props).to.deep.equal({
foo: 'baz'
});
});
it('should set __source and __self', () => {
const vnode = jsx('div', { class: 'foo' }, 'key', 'source', 'self');
expect(vnode.__source).to.equal('source');
expect(vnode.__self).to.equal('self');
});
it('should return a vnode like createElement', () => {
const elementVNode = createElement('div', {
class: 'foo',
key: 'key'
});
const jsxVNode = jsx('div', { class: 'foo' }, 'key');
delete jsxVNode.__self;
delete jsxVNode.__source;
delete jsxVNode._original;
delete elementVNode._original;
expect(jsxVNode).to.deep.equal(elementVNode);
});
// #2839
it('should remove ref from props', () => {
const ref = createRef();
const vnode = jsx('div', { ref }, null);
expect(vnode.props).to.deep.equal({});
expect(vnode.ref).to.equal(ref);
});
});
|