-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhtml_fragment_test.ts
98 lines (81 loc) · 2.67 KB
/
html_fragment_test.ts
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
import { assertStrictEq, assertThrowsAsync, test } from "../test.mod.ts";
import { htmlFragment } from "./mod.ts";
const helloWorld = `<h1>Hello, World!</h1>`;
const peopleList = ["John Doe", "Michael CEO", "Vict Fisherman", "Cash Black"];
const html = htmlFragment;
async function failsWhenErrorHappens() {
await assertThrowsAsync(
async () => {
const errorContent = async () => {
throw new Error("error");
};
await html`${errorContent}`;
},
Error,
"error"
);
}
async function willRender() {
const d = await html`${helloWorld}`;
assertStrictEq(d, `<h1>Hello, World!</h1>`);
}
async function willRenderWithSyncTasks() {
const syncTask = () => helloWorld;
const syncLiteral = "John Doe";
const d = await html`<section>${syncTask}<h2>${syncLiteral}</h2></section>`;
assertStrictEq(
d,
// tslint:disable-next-line: max-line-length
`<section><h1>Hello, World!</h1><h2>John Doe</h2></section>`
);
}
async function willRenderWithAsyncTasks() {
const asyncTask = async () => helloWorld;
const asyncLiteral = Promise.resolve("John Doe");
const d = await html`<section>${asyncTask}<h2>${asyncLiteral}</h2></section>`;
assertStrictEq(
d,
// tslint:disable-next-line: max-line-length
`<section><h1>Hello, World!</h1><h2>John Doe</h2></section>`
);
}
async function willRenderWithSyncAndAsyncTasks() {
const asyncTask = async () => helloWorld;
const syncLiteral = await "John Doe";
const d = await html`<section>${asyncTask}<h2>${syncLiteral}</h2></section>`;
assertStrictEq(
d,
// tslint:disable-next-line: max-line-length
`<section><h1>Hello, World!</h1><h2>John Doe</h2></section>`
);
}
async function willRenderAListOfSyncTasks() {
const d = await html`${helloWorld}<ul>${peopleList.map(
n => `<li>${n}</li>`
)}</ul>`;
assertStrictEq(
d,
// tslint:disable-next-line: max-line-length
`<h1>Hello, World!</h1><ul><li>John Doe</li><li>Michael CEO</li><li>Vict Fisherman</li><li>Cash Black</li></ul>`
);
}
async function willRenderExternalStyle() {
// tslint:disable-next-line: max-line-length
const asyncExternalStyleTask = async () =>
html/* css */ `body { margin: 0; padding: 0; box-sizing: border-box; }`;
const d = await html`<style>${asyncExternalStyleTask}</style>${helloWorld}`;
assertStrictEq(
d,
// tslint:disable-next-line: max-line-length
`<style>body { margin: 0; padding: 0; box-sizing: border-box; }</style><h1>Hello, World!</h1>`
);
}
[
failsWhenErrorHappens,
willRender,
willRenderAListOfSyncTasks,
willRenderExternalStyle,
willRenderWithAsyncTasks,
willRenderWithSyncAndAsyncTasks,
willRenderWithSyncTasks
].map(n => test(n));