♻️ refactor(vscode): 卡片里的子块只留挂在子行上、点了才展开的一种,测试假数据换掉旧 React 卡片的名字

This commit is contained in:
cruldra committed 2026-10-08 07:17:25 +08:00
1 parent f6bc217e91
commit 5e994cd90e
16 files changed
+121 -130

No files matched your search

+15 -12
View File
@@ -194,30 +194,33 @@ describe('库规则:认领', () => {
expect(reports).toEqual(['库规则 omit 给第 3 行的 class 块的替身不合约定,这块照常显示:要略去的块还有子块'])
})
it('放进卡片属性表里的子块:照常转成块,记下画在哪一行(哪个子行);不是留下的子块、没有那一行 / 子行、放了两处的不合约定', async () => {
const rows = [{ label: '字段', value: [], items: [{ cells: [[{ text: 'name', role: 'variable' as const }]] }], columns: ['名称'] }, { label: '方法', value: [] }]
it('挂在卡片子行上的子块:照常转成块,记下挂在哪一行的哪个子行;不是留下的子块、没有那一行 / 子行、放了两处的不合约定', async () => {
const rows = [
{ label: '字段', value: [], items: [{ cells: [[{ text: 'name', role: 'variable' as const }]] }], columns: ['名称'] },
{ label: '方法', value: [], items: [{ cells: [[{ text: 'greet', role: 'function' as const }]] }], columns: ['名称'] },
]
const slotting = (slots: (block: CodeBlock) => RuleSlot[], id = 'slot'): LibraryRule => ({
...cardRule(id),
claim: block => block.kind === 'class'
? { kind: `${id}.card`, badge: { label: '卡片', color: { dark: '#fff', light: '#000' }, icon: 'box' }, rows, absorbs: block.children.slice(0, 1), slots: slots(block) }
: undefined,
})
const [, card] = await views(MODEL, [slotting(block => [{ block: block.children[2], row: 0, item: 0 }, { block: block.children[3], row: 1 }])])
expect(card.children.map(child => [child.kind, child.slot])).toEqual([['comment', undefined], ['variable', { row: 0, item: 0 }], ['function', { row: 1 }]])
const [, card] = await views(MODEL, [slotting(block => [{ block: block.children[2], row: 0, item: 0 }, { block: block.children[3], row: 1, item: 0 }])])
expect(card.children.map(child => [child.kind, child.slot])).toEqual([['comment', undefined], ['variable', { row: 0, item: 0 }], ['function', { row: 1, item: 0 }]])
const reports: string[] = []
const bad = await views(MODEL, [
slotting(block => [{ block: block.children[0], row: 1 }], 'absorbed'),
slotting(block => [{ block: block.children[3], row: 5 }], 'row'),
slotting(block => [{ block: block.children[3], row: 1, item: 0 }], 'item'),
slotting(block => [{ block: block.children[3], row: 1 }, { block: block.children[3], row: 0 }], 'twice'),
slotting(block => [{ block: block.children[0], row: 1, item: 0 }], 'absorbed'),
slotting(block => [{ block: block.children[3], row: 5, item: 0 }], 'row'),
slotting(block => [{ block: block.children[3], row: 1, item: 1 }], 'item'),
slotting(block => [{ block: block.children[3], row: 1, item: 0 }, { block: block.children[3], row: 0, item: 0 }], 'twice'),
], reports)
expect(bad[1].kind).toBe('class')
expect(reports.map(report => report.replace(/^.*照常显示:/, ''))).toEqual([
'放进卡片里的块不是留下的子块',
'放进卡片第 5 行下面的块,卡片没有这一行',
'放进卡片第 1 行第 0 个子行的块,这一行没有这个子行',
'同一块放进了卡片里的几处',
'挂在子行上的块不是留下的子块',
'挂在卡片第 5 行的块,卡片没有这一行',
'挂在卡片第 1 行第 1 个子行的块,这一行没有这个子行',
'同一块挂在了卡片里的几处',
])
})