-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathformatMessage.test.ts
More file actions
132 lines (119 loc) · 2.79 KB
/
formatMessage.test.ts
File metadata and controls
132 lines (119 loc) · 2.79 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
123
124
125
126
127
128
129
130
131
132
import { assertEquals } from "@std/assert";
import { tgEntity, tgFmt } from "./formatMessage.ts";
Deno.test("can take a single argument", () => {
assertEquals(
tgFmt("test"),
{
text: "test",
},
);
});
Deno.test("can take multiple arguments", () => {
assertEquals(
tgFmt("test", " ", "test"),
{
text: "test test",
},
);
});
Deno.test("can take single array argument", () => {
assertEquals(
tgFmt(["a", "b", "c"]),
{
text: "abc",
},
);
});
Deno.test("can take array and rest arguments", () => {
assertEquals(
tgFmt(["a", "b", "c"], ":", ":"),
{
text: "a:b:c",
},
);
});
Deno.test("can take a single entity argument", () => {
assertEquals(
tgFmt(tgEntity("text_link", "test", { url: "https://example.com" })),
{
text: "test",
entities: [{ type: "text_link", offset: 0, length: 4, url: "https://example.com" }],
},
);
});
Deno.test("can be called as a tagged template literal", () => {
assertEquals(
tgFmt`test`,
{
text: "test",
},
);
});
Deno.test("formats entity in the middle of template literal", () => {
assertEquals(
tgFmt`test ${tgEntity("bold", "test")} test`,
{
text: "test test test",
entities: [{ type: "bold", offset: 5, length: 4 }],
},
);
});
Deno.test("formats entity at the start of template literal", () => {
assertEquals(
tgFmt`${tgEntity("italic", "test")} test`,
{
text: "test test",
entities: [{ type: "italic", offset: 0, length: 4 }],
},
);
});
Deno.test("formats entity at the end of template literal", () => {
assertEquals(
tgFmt`test ${tgEntity("underline", "test")}`,
{
text: "test test",
entities: [{ type: "underline", offset: 5, length: 4 }],
},
);
});
Deno.test("formats multiple entities in template literal", () => {
assertEquals(
tgFmt`<${tgEntity("spoiler", "a")},${tgEntity("strikethrough", "b")}>`,
{
text: "<a,b>",
entities: [
{ type: "spoiler", offset: 1, length: 1 },
{ type: "strikethrough", offset: 3, length: 1 },
],
},
);
});
Deno.test("flattens arrays", () => {
assertEquals(
tgFmt`<${[tgEntity("spoiler", "a"), ",", tgEntity("strikethrough", "b")]}>`,
{
text: "<a,b>",
entities: [
{ type: "spoiler", offset: 1, length: 1 },
{ type: "strikethrough", offset: 3, length: 1 },
],
},
);
});
Deno.test("treats null and undefined as empty string", () => {
assertEquals(
tgFmt`<${null},${undefined}>`,
{
text: "<,>",
},
);
});
Deno.test("returns correct indices with emojis", () => {
assertEquals(
tgFmt`🏳️🌈 ${tgEntity("code", "👍")}`,
{
text: "🏳️🌈 👍",
entities: [{ type: "code", offset: 7, length: 2 }],
},
);
});