-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathcomments.spec.ts
109 lines (106 loc) · 3.04 KB
/
comments.spec.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
99
100
101
102
103
104
105
106
107
108
109
import test, { Macro } from "ava";
import { Comment } from "..";
import { HTMLRewriter, mutationsMacro, wait } from ".";
const commentsMutationsInput = "<p><!--test--></p>";
const commentsMutationsExpected = {
beforeAfter: [
"<p>",
"<span>before</span>",
"<span>before html</span>",
"<!--test-->",
"<span>after html</span>",
"<span>after</span>",
"</p>",
].join(""),
replace: "<p><span>replace</span></p>",
replaceHtml: "<p><span>replace</span></p>",
remove: "<p></p>",
};
const commentPropertiesMacro: Macro<
[(rw: HTMLRewriter, comments: (comment: Comment) => void) => HTMLRewriter]
> = async (t, func) => {
t.plan(3);
const res = await func(new HTMLRewriter(), (comment) => {
t.false(comment.removed);
t.is(comment.text, "test");
comment.text = "new";
}).transform("<p><!--test--></p>");
t.is(res, "<p><!--new--></p>");
};
test("handles comment properties", commentPropertiesMacro, (rw, comments) =>
rw.on("p", { comments })
);
test(
"handles comment mutations",
mutationsMacro,
(rw, comments) => rw.on("p", { comments }),
commentsMutationsInput,
commentsMutationsExpected
);
test("comment allows chaining", async (t) => {
t.plan(4);
await new HTMLRewriter()
.on("p", {
comments(comment) {
t.is(comment.before(""), comment);
t.is(comment.after(""), comment);
t.is(comment.replace(""), comment);
t.is(comment.remove(), comment);
},
})
.transform("<p><!--test--></p>");
});
const commentAsyncHandlerMacro: Macro<
[(rw: HTMLRewriter, comments: (c: Comment) => Promise<void>) => HTMLRewriter]
> = async (t, func) => {
const res = await func(new HTMLRewriter(), async (comment) => {
await wait(50);
comment.text = "new";
}).transform("<p><!--test--></p>");
t.is(res, "<p><!--new--></p>");
};
test(
"handles comment async handler",
commentAsyncHandlerMacro,
(rw, comments) => rw.on("p", { comments })
);
const commentClassHandlerMacro: Macro<
[(rw: HTMLRewriter, h: { comments: (c: Comment) => void }) => HTMLRewriter]
> = async (t, func) => {
class Handler {
constructor(private content: string) {}
// noinspection JSUnusedGlobalSymbols
comments(comment: Comment) {
comment.text = this.content;
}
}
const res = await func(new HTMLRewriter(), new Handler("new")).transform(
"<p><!--test--></p>"
);
t.is(res, "<p><!--new--></p>");
};
test("handles comment class handler", commentClassHandlerMacro, (rw, handler) =>
rw.on("p", handler)
);
test(
"handles document comment properties",
commentPropertiesMacro,
(rw, comments) => rw.onDocument({ comments })
);
test(
"handles document comment mutations",
mutationsMacro,
(rw, comments) => rw.onDocument({ comments }),
commentsMutationsInput,
commentsMutationsExpected
);
test(
"handles document comment async handler",
commentAsyncHandlerMacro,
(rw, comments) => rw.onDocument({ comments })
);
test(
"handles document comment class handler",
commentClassHandlerMacro,
(rw, handler) => rw.onDocument(handler)
);