forked from kitajs/html
-
Notifications
You must be signed in to change notification settings - Fork 0
/
compile.test.tsx
121 lines (103 loc) · 3.03 KB
/
compile.test.tsx
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
import assert from 'node:assert'
import test, { describe } from 'node:test'
import Html from '../index'
type Props = Html.PropsWithChildren<{ color: string }>
function Component({ color, children }: Props) {
return (
<div>
<div class="a" style={{ color }}></div>
<div class="b" style={{ color }}></div>
{children}
</div>
)
}
describe('Compiled components', () => {
test('simple', () => {
const Compiled = Html.compile(Component)
assert.equal(
<Compiled color="red">1</Compiled>,
'<div><div class="a" style="color:red;"></div><div class="b" style="color:red;"></div>1</div>'
)
})
test('with children', () => {
const Compiled =
Html.compile<Html.PropsWithChildren<{ color: string }>>(Component)
assert.equal(
<Compiled color="red">
<>1</>
<>2</>
</Compiled>,
'<div><div class="a" style="color:red;"></div><div class="b" style="color:red;"></div>12</div>'
)
})
test('with props', () => {
const Compiled = Html.compile<Props>(Component)
assert.equal(
<Compiled color="red">1</Compiled>,
'<div><div class="a" style="color:red;"></div><div class="b" style="color:red;"></div>1</div>'
)
})
test('handmade component', () => {
const Compiled = Html.compile(({ color, children }: Props) => (
<div>
<div class="a" style={{ color }}></div>
<div class="b" style={{ color }}></div>
{children}
</div>
))
assert.equal(
<Compiled color="red">1</Compiled>,
'<div><div class="a" style="color:red;"></div><div class="b" style="color:red;"></div>1</div>'
)
})
test('strict', () => {
const Compiled = Html.compile(({ color, children }: Props) => (
<div>
<div class="a" style={{ color }}></div>
<div class="b" style={{ color }}></div>
{children}
</div>
))
assert.throws(
//@ts-expect-error - Property color was not provided.
() => Compiled({}),
/Error: Property color was not provided./
)
assert.throws(
//@ts-expect-error - Property color was not provided.
() => Compiled(),
/Error: The arguments object was not provided./
)
})
test('not strict', () => {
const Compiled = Html.compile(
({ color, children }: Props) => (
<div>
<div class="a" style={{ color }}></div>
<div class="b" style={{ color }}></div>
{children}
</div>
),
false
)
assert.doesNotThrow(
//@ts-expect-error - Property color was not provided.
Compiled
)
assert.equal(
//@ts-expect-error - Property color was not provided.
<Compiled></Compiled>,
'<div><div class="a" style="color:;"></div><div class="b" style="color:;"></div></div>'
)
})
test('multiple children', () => {
const Compiled = Html.compile(({ children }) => <div>{children}</div>)
assert.equal(
<Compiled>
<div>1</div>
<div>2</div>
</Compiled>,
'<div><div>1</div><div>2</div></div>'
)
})
})