Skip to content

Commit f274073

Browse files
committed
fix: update version comparison logic and add EOF marker to emoji test output
- Changed the version comparison in the emoji test loom from less than or equal to greater than or equal. - Added a #EOF marker to indicate the end of the generated emoji test output. - Introduced a new test file to validate the emoji test loom functionality with various scenarios.
1 parent 761aaa3 commit f274073

File tree

2 files changed

+222
-1
lines changed

2 files changed

+222
-1
lines changed

src/generators/emoji-test.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export const emojiTest = createLoom({
3030
inputSchema: emojiTestInputSchema,
3131
optionsSchema: emojiTestOptionsSchema,
3232
predicate: (ctx) => {
33-
return ctx.isVersionLessThanOrEqual("3.x");
33+
return ctx.isVersionGreaterThanOrEqual("3.x");
3434
},
3535
template: (ctx, item) => {
3636
let template = `group: ${item.group}\n`;
@@ -43,6 +43,9 @@ export const emojiTest = createLoom({
4343
}
4444
}
4545

46+
// these emoji-test files are using the #EOF marker to indicate the end of the file
47+
template += "\n#EOF\n";
48+
4649
return template;
4750
},
4851
});

test/emoji-test.test.ts

Lines changed: 218 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,218 @@
1+
import { expect, it } from "vitest";
2+
import { emojiTest } from "../src/generators/emoji-test";
3+
4+
it("should generate correct emoji test output for valid input", () => {
5+
const result = emojiTest({
6+
version: "14.0",
7+
separator: ";",
8+
commentPrefix: "#",
9+
input: [
10+
{
11+
group: "Smileys & Emotion",
12+
subgroups: [
13+
{
14+
subgroup: "face-smiling",
15+
entries: [
16+
{
17+
codePoints: ["1F600"],
18+
status: "fully-qualified",
19+
comment: "grinning face",
20+
},
21+
{
22+
codePoints: ["1F603"],
23+
status: "fully-qualified",
24+
comment: "grinning face with big eyes",
25+
},
26+
],
27+
},
28+
],
29+
},
30+
],
31+
});
32+
33+
expect(result).toBe(
34+
"group: Smileys & Emotion\n"
35+
+ "subgroup: face-smiling\n"
36+
+ "1F600 ; fully-qualified # grinning face\n"
37+
+ "1F603 ; fully-qualified # grinning face with big eyes\n"
38+
+ "\n#EOF\n",
39+
);
40+
});
41+
42+
it("should handle multiple groups and subgroups", () => {
43+
const result = emojiTest({
44+
version: "11.0",
45+
separator: ";",
46+
commentPrefix: "#",
47+
input: [
48+
{
49+
group: "Group 1",
50+
subgroups: [
51+
{
52+
subgroup: "Subgroup A",
53+
entries: [
54+
{
55+
codePoints: ["1F600"],
56+
status: "fully-qualified",
57+
comment: "test 1",
58+
},
59+
],
60+
},
61+
],
62+
},
63+
{
64+
group: "Group 2",
65+
subgroups: [
66+
{
67+
subgroup: "Subgroup B",
68+
entries: [
69+
{
70+
codePoints: ["1F603"],
71+
status: "fully-qualified",
72+
comment: "test 2",
73+
},
74+
],
75+
},
76+
],
77+
},
78+
],
79+
});
80+
81+
expect(result).toBe(
82+
"group: Group 1\n"
83+
+ "subgroup: Subgroup A\n"
84+
+ "1F600 ; fully-qualified # test 1\n"
85+
+ "group: Group 2\n"
86+
+ "subgroup: Subgroup B\n"
87+
+ "1F603 ; fully-qualified # test 2\n"
88+
+ "\n#EOF\n",
89+
);
90+
});
91+
92+
it("should handle different status types", () => {
93+
const result = emojiTest({
94+
version: "16.0",
95+
separator: ";",
96+
commentPrefix: "#",
97+
input: [
98+
{
99+
group: "Test Group",
100+
subgroups: [
101+
{
102+
subgroup: "Test Subgroup",
103+
entries: [
104+
{
105+
codePoints: ["1F600"],
106+
status: "component",
107+
comment: "component test",
108+
},
109+
{
110+
codePoints: ["1F603"],
111+
status: "minimally-qualified",
112+
comment: "minimally qualified test",
113+
},
114+
{
115+
codePoints: ["1F604"],
116+
status: "unqualified",
117+
comment: "unqualified test",
118+
},
119+
],
120+
},
121+
],
122+
},
123+
],
124+
});
125+
126+
expect(result).toBe(
127+
"group: Test Group\n"
128+
+ "subgroup: Test Subgroup\n"
129+
+ "1F600 ; component # component test\n"
130+
+ "1F603 ; minimally-qualified # minimally qualified test\n"
131+
+ "1F604 ; unqualified # unqualified test\n"
132+
+ "\n#EOF\n",
133+
);
134+
});
135+
136+
it("should handle multiple code points", () => {
137+
const result = emojiTest({
138+
version: "9.0",
139+
separator: ";",
140+
commentPrefix: "#",
141+
input: [
142+
{
143+
group: "Test Group",
144+
subgroups: [
145+
{
146+
subgroup: "Test Subgroup",
147+
entries: [
148+
{
149+
codePoints: ["1F600", "1F3FF"],
150+
status: "fully-qualified",
151+
comment: "multi code point test",
152+
},
153+
],
154+
},
155+
],
156+
},
157+
],
158+
});
159+
160+
expect(result).toBe(
161+
"group: Test Group\n"
162+
+ "subgroup: Test Subgroup\n"
163+
+ "1F600 1F3FF ; fully-qualified # multi code point test\n"
164+
+ "\n#EOF\n",
165+
);
166+
});
167+
168+
it("should filter out entries based on version predicate", () => {
169+
const result = emojiTest({
170+
version: "2.0", // version less than 3.x
171+
separator: ";",
172+
commentPrefix: "#",
173+
input: [
174+
{
175+
group: "Test Group",
176+
subgroups: [
177+
{
178+
subgroup: "Test Subgroup",
179+
entries: [
180+
{
181+
codePoints: ["1F600"],
182+
status: "fully-qualified",
183+
comment: "should be filtered out",
184+
},
185+
],
186+
},
187+
],
188+
},
189+
],
190+
});
191+
192+
expect(result).toBe("");
193+
});
194+
195+
it("should handle empty subgroups", () => {
196+
const result = emojiTest({
197+
version: "5.0",
198+
separator: ";",
199+
commentPrefix: "#",
200+
input: [
201+
{
202+
group: "Test Group",
203+
subgroups: [
204+
{
205+
subgroup: "Empty Subgroup",
206+
entries: [],
207+
},
208+
],
209+
},
210+
],
211+
});
212+
213+
expect(result).toBe(
214+
"group: Test Group\n"
215+
+ "subgroup: Empty Subgroup\n"
216+
+ "\n#EOF\n",
217+
);
218+
});

0 commit comments

Comments
 (0)