import { describe, expect, test } from 'vitest'; import { resolveWorkbenchToolbarLayout, type WorkbenchToolbarLayout, } from '../src/view/project-development/workbenchToolbarModel'; /** * 工作台顶栏降级阶梯的判据:顺序、余量与「都放不下」的兜底。 * * 每一档的真实宽度由 DOM 量(`useWorkbenchToolbarLayout` 把候选档位写上去再读 `scrollWidth`), * 所以这里只喂一个假的量宽函数;真机几何由浏览器实测确认,这一条钉的是**顺序**。 */ function ladder( availableWidth: number, widths: Record, ) { const measured: WorkbenchToolbarLayout[] = []; const layout = resolveWorkbenchToolbarLayout(availableWidth, (candidate) => { measured.push(candidate); return widths[candidate]; }); return { layout, measured }; } describe('工作台顶栏降级阶梯', () => { test('放得下就停在 full,不去量后面的档位', () => { const { layout, measured } = ladder(1000, { full: 900, 'compact-version': 800, 'collapsed-actions': 400, }); expect(layout).toBe('full'); expect(measured).toEqual(['full']); }); test('full 放不下先收版本名的括号段,动作一枚都不动', () => { const { layout, measured } = ladder(1000, { full: 1100, 'compact-version': 900, 'collapsed-actions': 500, }); expect(layout).toBe('compact-version'); expect(measured).toEqual(['full', 'compact-version']); }); test('收掉括号段还不够,才把「打开项目目录 / 资源面板 / 整理画布」收进「更多」', () => { const { layout, measured } = ladder(1000, { full: 1400, 'compact-version': 1100, 'collapsed-actions': 700, }); expect(layout).toBe('collapsed-actions'); expect(measured).toEqual(['full', 'compact-version', 'collapsed-actions']); }); test('三档都放不下时停在最后一档,不回到前面已经试过的档位', () => { const { layout, measured } = ladder(500, { full: 1400, 'compact-version': 1100, 'collapsed-actions': 700, }); expect(layout).toBe('collapsed-actions'); expect(measured).toEqual(['full', 'compact-version', 'collapsed-actions']); }); test('临界宽度留 1px 余量:正好贴边算放得下,多出 2px 才降档', () => { expect( ladder(1000, { full: 1001, 'compact-version': 900, 'collapsed-actions': 500, }).layout, ).toBe('full'); expect( ladder(1000, { full: 1002, 'compact-version': 900, 'collapsed-actions': 500, }).layout, ).toBe('compact-version'); }); });