Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 19 additions & 3 deletions dashboard/tests/subsetMdiFont.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,9 @@ test('scanUsedIcons extracts mdi-* icon names from files', () => {
assert.ok(icons instanceof Set);
assert.ok(icons.has('mdi-home'));
assert.ok(icons.has('mdi-close'));
assert.equal(icons.size, 2); // mdi-home deduplicated
assert.ok(icons.has('mdi-radiobox-blank'));
assert.ok(icons.has('mdi-radiobox-marked'));
assert.equal(icons.size, 4); // source icons + required radio icons

rmSync(tmp, { recursive: true });
});
Expand All @@ -101,12 +103,26 @@ test('scanUsedIcons excludes utility classes', () => {
rmSync(tmp, { recursive: true });
});

test('scanUsedIcons returns empty set when no icons found', () => {
test('scanUsedIcons includes required radio icons even when no mdi-* icons are found in source', () => {
const tmp = makeTmpDir();
writeFileSync(join(tmp, 'A.vue'), '<div>Hello</div>');

const icons = scanUsedIcons(collectFiles(tmp, ['.vue']));
assert.equal(icons.size, 0);
assert.ok(icons.has('mdi-radiobox-blank'));
assert.ok(icons.has('mdi-radiobox-marked'));
assert.equal(icons.size, 2);

rmSync(tmp, { recursive: true });
});

test('scanUsedIcons deduplicates required radio icons when source already references them', () => {
const tmp = makeTmpDir();
writeFileSync(join(tmp, 'A.vue'), '<v-icon>mdi-radiobox-marked</v-icon><v-icon>mdi-home</v-icon>');

const icons = [...scanUsedIcons(collectFiles(tmp, ['.vue']))];
assert.equal(icons.filter(icon => icon === 'mdi-radiobox-marked').length, 1);
assert.ok(icons.includes('mdi-radiobox-blank'));
assert.ok(icons.includes('mdi-home'));
Comment on lines +122 to +125
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

这个测试用例的断言是正确的,但可以通过直接操作 scanUsedIcons 返回的 Set 对象来简化和增强。

Set 转换为数组并使用 filterincludes 来检查成员资格和唯一性,在语法上有些繁琐,而且效率低于直接使用 Sethas 方法和 size 属性。

建议直接在 Set 对象上进行断言,这样代码更简洁,也更能体现测试的意图——验证集合的内容和大小。

Suggested change
const icons = [...scanUsedIcons(collectFiles(tmp, ['.vue']))];
assert.equal(icons.filter(icon => icon === 'mdi-radiobox-marked').length, 1);
assert.ok(icons.includes('mdi-radiobox-blank'));
assert.ok(icons.includes('mdi-home'));
const icons = scanUsedIcons(collectFiles(tmp, ['.vue']));
assert.ok(icons.has('mdi-radiobox-marked'));
assert.ok(icons.has('mdi-radiobox-blank'));
assert.ok(icons.has('mdi-home'));
assert.equal(icons.size, 3);


rmSync(tmp, { recursive: true });
});
Expand Down
Loading